Skip to content

Commit 5474ca8

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate detachElementsFromNodes.
Change-Id: Icb199b4d2c860569cfce739b4f7b26e0931e38bf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/412186 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 34b74d8 commit 5474ca8

File tree

2 files changed

+71
-44
lines changed

2 files changed

+71
-44
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10552,8 +10552,8 @@ abstract class PropertyInducingElementImpl
1055210552
thisOrAncestorOfType<CompilationUnitElementImpl>()!;
1055310553

1055410554
@override
10555-
PropertyInducingFragment? get nextFragment =>
10556-
augmentation as PropertyInducingFragment?;
10555+
PropertyInducingElementImpl? get nextFragment =>
10556+
augmentation as PropertyInducingElementImpl?;
1055710557

1055810558
@override
1055910559
Element get nonSynthetic {
@@ -10661,6 +10661,19 @@ abstract class PropertyInducingElementImpl
1066110661

1066210662
abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
1066310663
implements PropertyInducingElement2OrMember {
10664+
@override
10665+
PropertyInducingElementImpl get firstFragment;
10666+
10667+
@override
10668+
List<PropertyInducingElementImpl> get fragments {
10669+
return [
10670+
for (PropertyInducingElementImpl? fragment = firstFragment;
10671+
fragment != null;
10672+
fragment = fragment.nextFragment)
10673+
fragment,
10674+
];
10675+
}
10676+
1066410677
@override
1066510678
bool get hasInitializer {
1066610679
return _fragments.any((f) => f.hasInitializer);
@@ -10682,8 +10695,7 @@ abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
1068210695
}
1068310696

1068410697
bool get shouldUseTypeForInitializerInference {
10685-
return (firstFragment as PropertyInducingElementImpl)
10686-
.shouldUseTypeForInitializerInference;
10698+
return firstFragment.shouldUseTypeForInitializerInference;
1068710699
}
1068810700

1068910701
List<PropertyInducingElementImpl> get _fragments;
@@ -11984,6 +11996,10 @@ abstract class VariableElementImpl2 extends ElementImpl2
1198411996
return null;
1198511997
}
1198611998

11999+
void resetConstantInitializer() {
12000+
_constantInitializer = null;
12001+
}
12002+
1198712003
@override
1198812004
void visitChildren2<T>(ElementVisitor2<T> visitor) {
1198912005
for (var child in children2) {

pkg/analyzer/lib/src/summary2/detach_nodes.dart

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
7-
import 'package:analyzer/dart/element/element.dart';
8-
import 'package:analyzer/dart/element/visitor.dart';
5+
import 'package:analyzer/dart/element/element2.dart';
6+
import 'package:analyzer/dart/element/visitor2.dart';
97
import 'package:analyzer/src/dart/ast/ast.dart';
108
import 'package:analyzer/src/dart/element/element.dart';
119
import 'package:analyzer/src/summary2/not_serializable_nodes.dart';
@@ -16,23 +14,23 @@ import 'package:analyzer/src/utilities/extensions/collection.dart';
1614
/// the whole token stream for the file. We don't want all this data after
1715
/// linking. So, we need to detach these nodes.
1816
void detachElementsFromNodes(LibraryElementImpl element) {
19-
element.accept(_Visitor());
17+
element.accept2(_Visitor());
2018
}
2119

22-
class _Visitor extends GeneralizingElementVisitor<void> {
20+
class _Visitor extends GeneralizingElementVisitor2<void> {
2321
@override
24-
void visitClassElement(ClassElement element) {
25-
if (element is ClassElementImpl) {
26-
element.mixinInferenceCallback = null;
22+
void visitClassElement(covariant ClassElementImpl2 element) {
23+
for (var fragment in element.fragments) {
24+
fragment.mixinInferenceCallback = null;
2725
}
2826
super.visitClassElement(element);
2927
}
3028

3129
@override
32-
void visitConstructorElement(ConstructorElement element) {
33-
if (element is ConstructorElementImpl) {
30+
void visitConstructorElement(covariant ConstructorElementImpl2 element) {
31+
for (var fragment in element.fragments) {
3432
// Make a copy, so that it is not a NodeList.
35-
var initializers = element.constantInitializers.toFixedList();
33+
var initializers = fragment.constantInitializers.toFixedList();
3634
initializers.forEach(_detachNode);
3735

3836
for (var initializer in initializers) {
@@ -56,63 +54,76 @@ class _Visitor extends GeneralizingElementVisitor<void> {
5654
}
5755
}
5856

59-
element.constantInitializers = initializers;
57+
fragment.constantInitializers = initializers;
6058
}
6159
super.visitConstructorElement(element);
6260
}
6361

6462
@override
65-
void visitElement(Element element) {
66-
for (var annotation in element.metadata) {
67-
var ast = (annotation as ElementAnnotationImpl).annotationAst;
68-
_detachNode(ast);
69-
_sanitizeArguments(ast.arguments?.arguments);
63+
void visitElement(Element2 element) {
64+
if (element case Annotatable annotatable) {
65+
for (var annotation in annotatable.metadata2.annotations) {
66+
var ast = (annotation as ElementAnnotationImpl).annotationAst;
67+
_detachNode(ast);
68+
_sanitizeArguments(ast.arguments?.arguments);
69+
}
7070
}
7171
super.visitElement(element);
7272
}
7373

7474
@override
75-
void visitEnumElement(EnumElement element) {
76-
if (element is EnumElementImpl) {
77-
element.mixinInferenceCallback = null;
75+
void visitEnumElement(covariant EnumElementImpl2 element) {
76+
for (var fragment in element.fragments) {
77+
fragment.mixinInferenceCallback = null;
7878
}
7979
super.visitEnumElement(element);
8080
}
8181

8282
@override
83-
void visitMixinElement(MixinElement element) {
84-
if (element is MixinElementImpl) {
85-
element.mixinInferenceCallback = null;
86-
}
87-
super.visitMixinElement(element);
83+
void visitFormalParameterElement(
84+
FormalParameterElement element,
85+
) {
86+
_detachConstVariable(element);
87+
super.visitFormalParameterElement(element);
8888
}
8989

9090
@override
91-
void visitParameterElement(ParameterElement element) {
92-
_detachConstVariable(element);
93-
super.visitParameterElement(element);
91+
void visitMixinElement(covariant MixinElementImpl2 element) {
92+
for (var fragment in element.fragments) {
93+
fragment.mixinInferenceCallback = null;
94+
}
95+
super.visitMixinElement(element);
9496
}
9597

9698
@override
97-
void visitPropertyInducingElement(PropertyInducingElement element) {
98-
if (element is PropertyInducingElementImpl) {
99-
element.typeInference = null;
99+
void visitPropertyInducingElement(PropertyInducingElement2 element) {
100+
for (var fragment in element.fragments) {
101+
if (fragment is PropertyInducingElementImpl) {
102+
fragment.typeInference = null;
103+
}
100104
}
105+
element.constantInitializer2;
101106
_detachConstVariable(element);
102107
super.visitPropertyInducingElement(element);
103108
}
104109

105-
void _detachConstVariable(Element element) {
106-
if (element is ConstVariableElement) {
107-
var initializer = element.constantInitializer;
108-
if (initializer is ExpressionImpl) {
109-
_detachNode(initializer);
110+
void _detachConstVariable(Object element) {
111+
if (element is VariableElementImpl2) {
112+
for (var fragment in element.fragments) {
113+
if (fragment case ConstVariableElement fragment) {
114+
fragment as VariableElementImpl;
115+
var initializer = fragment.constantInitializer;
116+
if (initializer is ExpressionImpl) {
117+
_detachNode(initializer);
110118

111-
initializer = replaceNotSerializableNode(initializer);
112-
element.constantInitializer = initializer;
119+
initializer = replaceNotSerializableNode(initializer);
120+
fragment.constantInitializer = initializer;
113121

114-
ConstantContextForExpressionImpl(element, initializer);
122+
ConstantContextForExpressionImpl(fragment, initializer);
123+
}
124+
}
115125
}
126+
element.resetConstantInitializer();
116127
}
117128
}
118129

0 commit comments

Comments
 (0)