Skip to content

Commit 39e5e0f

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Add DynamicElementImpl2, make DynamicElementImpl its fragment.
Change-Id: I1d88f84f59d2ebdf7e0a5bc3b54d2145b0cb42b9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394241 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 73117f0 commit 39e5e0f

14 files changed

+96
-43
lines changed

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

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,28 +1913,89 @@ class DirectiveUriWithUnitImpl extends DirectiveUriWithRelativeUriImpl
19131913
}
19141914

19151915
/// The synthetic element representing the declaration of the type `dynamic`.
1916-
class DynamicElementImpl extends ElementImpl implements TypeDefiningElement {
1917-
/// Return the unique instance of this class.
1918-
static DynamicElementImpl get instance => DynamicTypeImpl.instance.element;
1916+
class DynamicElementImpl extends ElementImpl
1917+
implements TypeDefiningElement, TypeDefiningFragment {
1918+
/// The unique instance of this class.
1919+
static final DynamicElementImpl instance = DynamicElementImpl._();
19191920

19201921
/// Initialize a newly created instance of this class. Instances of this class
19211922
/// should <b>not</b> be created except as part of creating the type
19221923
/// associated with this element. The single instance of this class should be
19231924
/// accessed through the method [instance].
1924-
DynamicElementImpl() : super(Keyword.DYNAMIC.lexeme, -1) {
1925+
DynamicElementImpl._() : super(Keyword.DYNAMIC.lexeme, -1) {
19251926
setModifier(Modifier.SYNTHETIC, true);
19261927
}
19271928

19281929
@override
19291930
List<Element2> get children2 => const [];
19301931

1932+
@override
1933+
List<Fragment> get children3 => const [];
1934+
1935+
@override
1936+
DynamicElementImpl2 get element => DynamicElementImpl2.instance;
1937+
1938+
@override
1939+
Null get enclosingFragment => null;
1940+
19311941
@override
19321942
ElementKind get kind => ElementKind.DYNAMIC;
19331943

1944+
@override
1945+
Null get libraryFragment => null;
1946+
1947+
@override
1948+
String get name2 => 'dynamic';
1949+
1950+
@override
1951+
Null get nameOffset2 => null;
1952+
1953+
@override
1954+
Null get nextFragment => null;
1955+
1956+
@override
1957+
Null get previousFragment => null;
1958+
19341959
@override
19351960
T? accept<T>(ElementVisitor<T> visitor) => null;
19361961
}
19371962

1963+
/// The synthetic element representing the declaration of the type `dynamic`.
1964+
class DynamicElementImpl2 extends TypeDefiningElementImpl2 {
1965+
/// The unique instance of this class.
1966+
static final DynamicElementImpl2 instance = DynamicElementImpl2._();
1967+
1968+
DynamicElementImpl2._();
1969+
1970+
@override
1971+
Null get documentationComment => null;
1972+
1973+
@override
1974+
DynamicElementImpl get firstFragment => DynamicElementImpl.instance;
1975+
1976+
@override
1977+
bool get isSynthetic => true;
1978+
1979+
@override
1980+
ElementKind get kind => ElementKind.DYNAMIC;
1981+
1982+
@override
1983+
Null get library2 => null;
1984+
1985+
@override
1986+
Metadata get metadata2 {
1987+
return MetadataImpl(0, const [], () => null);
1988+
}
1989+
1990+
@override
1991+
String get name3 => 'dynamic';
1992+
1993+
@override
1994+
T? accept2<T>(ElementVisitor2<T> visitor) {
1995+
return null;
1996+
}
1997+
}
1998+
19381999
/// A concrete implementation of an [ElementAnnotation].
19392000
class ElementAnnotationImpl implements ElementAnnotation {
19402001
/// The name of the top-level variable used to mark that a function always
@@ -8452,9 +8513,6 @@ class NeverElementImpl2 extends TypeDefiningElementImpl2 {
84528513

84538514
NeverElementImpl2._();
84548515

8455-
@override
8456-
List<Element2> get children2 => const [];
8457-
84588516
@override
84598517
Null get documentationComment => null;
84608518

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,14 @@ class DynamicTypeImpl extends TypeImpl
3636
/// The unique instance of this class.
3737
static final DynamicTypeImpl instance = DynamicTypeImpl._();
3838

39-
@override
40-
final DynamicElementImpl element = DynamicElementImpl();
41-
4239
/// Prevent the creation of instances of this class.
4340
DynamicTypeImpl._();
4441

4542
@override
46-
Element2? get element3 => switch (element) {
47-
Fragment(:var element) => element,
48-
_ => null,
49-
};
43+
DynamicElementImpl get element => DynamicElementImpl.instance;
44+
45+
@override
46+
DynamicElementImpl2 get element3 => DynamicElementImpl2.instance;
5047

5148
@override
5249
int get hashCode => 1;

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ extension Element2OrNullExtension on Element2? {
3232
Element? get asElement {
3333
var self = this;
3434
switch (self) {
35-
case DynamicElementImpl():
36-
return self;
35+
case DynamicElementImpl2():
36+
return DynamicElementImpl.instance;
3737
case GetterElement():
3838
return self.firstFragment as Element;
3939
case MultiplyDefinedElementImpl2 element2:
4040
return element2.asElement;
41-
case NeverElementImpl():
42-
return self;
41+
case NeverElementImpl2():
42+
return NeverElementImpl.instance;
4343
case PrefixElementImpl():
4444
return self;
4545
case TopLevelFunctionElementImpl():
@@ -135,7 +135,7 @@ extension ElementOrNullExtension on Element? {
135135
if (self == null) {
136136
return null;
137137
} else if (self is DynamicElementImpl) {
138-
return self;
138+
return DynamicElementImpl2.instance;
139139
} else if (self is FunctionElementImpl) {
140140
return self.element;
141141
} else if (self is InterfaceElementImpl) {

pkg/analyzer/test/src/dart/resolution/extension_method_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ extension E on dynamic {}
454454
NamedType
455455
name: dynamic
456456
element: dynamic@-1
457-
element2: dynamic@-1
457+
element2: dynamic
458458
type: dynamic
459459
''');
460460
}
@@ -573,7 +573,7 @@ extension on dynamic {}
573573
NamedType
574574
name: dynamic
575575
element: dynamic@-1
576-
element2: dynamic@-1
576+
element2: dynamic
577577
type: dynamic
578578
''');
579579
}

pkg/analyzer/test/src/dart/resolution/for_statement_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ ForStatement
199199
type: NamedType
200200
name: dynamic
201201
element: dynamic@-1
202-
element2: dynamic@-1
202+
element2: dynamic
203203
type: dynamic
204204
name: v
205205
declaredElement: v@42

pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ FunctionExpressionInvocation
195195
type: NamedType
196196
name: dynamic
197197
element: dynamic@-1
198-
element2: dynamic@-1
198+
element2: dynamic
199199
type: dynamic
200200
staticType: dynamic
201201
rightParenthesis: )
@@ -237,7 +237,7 @@ FunctionExpressionInvocation
237237
type: NamedType
238238
name: dynamic
239239
element: dynamic@-1
240-
element2: dynamic@-1
240+
element2: dynamic
241241
type: dynamic
242242
staticType: dynamic
243243
rightParenthesis: )

pkg/analyzer/test/src/dart/resolution/function_reference_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4220,7 +4220,7 @@ FunctionReference
42204220
type: NamedType
42214221
name: dynamic
42224222
element: dynamic@-1
4223-
element2: dynamic@-1
4223+
element2: dynamic
42244224
type: dynamic
42254225
staticType: dynamic
42264226
rightParenthesis: )

pkg/analyzer/test/src/dart/resolution/named_type_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ dynamic a;
109109
NamedType
110110
name: dynamic
111111
element: dynamic@-1
112-
element2: dynamic@-1
112+
element2: dynamic
113113
type: dynamic
114114
''');
115115
}
@@ -131,7 +131,7 @@ NamedType
131131
element2: <testLibraryFragment>::@prefix2::myCore
132132
name: dynamic
133133
element: dynamic@-1
134-
element2: dynamic@-1
134+
element2: dynamic
135135
type: dynamic
136136
''');
137137
}
@@ -165,7 +165,7 @@ dynamic a;
165165
NamedType
166166
name: dynamic
167167
element: dynamic@-1
168-
element2: dynamic@-1
168+
element2: dynamic
169169
type: dynamic
170170
''');
171171
}

pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,10 @@ PrefixedIdentifier
254254
identifier: SimpleIdentifier
255255
token: dynamic
256256
staticElement: dynamic@-1
257-
element: dynamic@-1
257+
element: dynamic
258258
staticType: Type
259259
staticElement: dynamic@-1
260-
element: dynamic@-1
260+
element: dynamic
261261
staticType: Type
262262
''');
263263
}

pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ main() {
179179
SimpleIdentifier
180180
token: dynamic
181181
staticElement: dynamic@-1
182-
element: dynamic@-1
182+
element: dynamic
183183
staticType: Type
184184
''');
185185
}
@@ -217,7 +217,7 @@ main() {
217217
SimpleIdentifier
218218
token: dynamic
219219
staticElement: dynamic@-1
220-
element: dynamic@-1
220+
element: dynamic
221221
staticType: Type
222222
''');
223223
}

0 commit comments

Comments
 (0)