@@ -816,7 +816,7 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl
816
816
817
817
/// A list containing all of the top-level functions contained in this
818
818
/// compilation unit.
819
- List <FunctionElementImpl > _functions = const [];
819
+ List <TopLevelFunctionFragmentImpl > _functions = const [];
820
820
821
821
List <MixinElementImpl > _mixins = const [];
822
822
@@ -973,13 +973,13 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl
973
973
extensionTypes.cast <ExtensionTypeFragment >();
974
974
975
975
@override
976
- List <FunctionElementImpl > get functions {
976
+ List <TopLevelFunctionFragmentImpl > get functions {
977
977
return _functions;
978
978
}
979
979
980
980
/// Set the top-level functions contained in this compilation unit to the
981
981
/// given[functions] .
982
- set functions (List <FunctionElementImpl > functions) {
982
+ set functions (List <TopLevelFunctionFragmentImpl > functions) {
983
983
for (var function in functions) {
984
984
function.enclosingElement3 = this ;
985
985
}
@@ -5272,26 +5272,17 @@ mixin FragmentedTypeParameterizedElementMixin<
5272
5272
}
5273
5273
5274
5274
/// A concrete implementation of a [FunctionElement] .
5275
- class FunctionElementImpl extends ExecutableElementImpl
5276
- with AugmentableElement <FunctionElementImpl >
5275
+ sealed class FunctionElementImpl extends ExecutableElementImpl
5277
5276
implements
5278
5277
FunctionElement ,
5279
5278
FunctionTypedElementImpl ,
5280
- LocalFunctionFragment ,
5281
- TopLevelFunctionFragment ,
5282
5279
ExecutableElementOrMember {
5283
5280
@override
5284
5281
String ? name2;
5285
5282
5286
5283
@override
5287
5284
int ? nameOffset2;
5288
5285
5289
- /// The element corresponding to this fragment.
5290
- // TODO(brianwilkerson): Use either `LocalFunctionElement` or
5291
- // `TopLevelFunctionElement` when this class is split.
5292
- @override
5293
- late ExecutableElementImpl2 element;
5294
-
5295
5286
/// Initialize a newly created function element to have the given [name] and
5296
5287
/// [offset] .
5297
5288
FunctionElementImpl (super .name, super .offset);
@@ -5300,14 +5291,6 @@ class FunctionElementImpl extends ExecutableElementImpl
5300
5291
/// [nameOffset] . This is used for function expressions, that have no name.
5301
5292
FunctionElementImpl .forOffset (int nameOffset) : super ("" , nameOffset);
5302
5293
5303
- @override
5304
- List <Element2 > get children2 {
5305
- if (enclosingElement3 is LibraryFragment ) {
5306
- return element.children2;
5307
- }
5308
- throw StateError ('Not an Element2' );
5309
- }
5310
-
5311
5294
@override
5312
5295
ExecutableElementImpl get declaration => this ;
5313
5296
@@ -5332,37 +5315,9 @@ class FunctionElementImpl extends ExecutableElementImpl
5332
5315
throw UnsupportedError ('This is not a fragment' );
5333
5316
}
5334
5317
5335
- @override
5336
- bool get isDartCoreIdentical {
5337
- return isStatic && name == 'identical' && library.isDartCore;
5338
- }
5339
-
5340
- @override
5341
- bool get isEntryPoint {
5342
- return isStatic && displayName == FunctionElement .MAIN_FUNCTION_NAME ;
5343
- }
5344
-
5345
- /// Whether this function element represents a top-level function, and is
5346
- /// therefore safe to treat as a fragment.
5347
- bool get isTopLevelFunction =>
5348
- enclosingElement3 is CompilationUnitElementImpl ;
5349
-
5350
5318
@override
5351
5319
ElementKind get kind => ElementKind .FUNCTION ;
5352
5320
5353
- @override
5354
- FunctionElementImpl ? get nextFragment => augmentation;
5355
-
5356
- @override
5357
- FunctionElementImpl ? get previousFragment => augmentationTarget;
5358
-
5359
- @override
5360
- bool get _includeNameOffsetInIdentifier {
5361
- return super ._includeNameOffsetInIdentifier ||
5362
- enclosingElement3 is ExecutableElement ||
5363
- enclosingElement3 is VariableElement ;
5364
- }
5365
-
5366
5321
@Deprecated ('Use Element2 and accept2() instead' )
5367
5322
@override
5368
5323
T ? accept <T >(ElementVisitor <T > visitor) => visitor.visitFunctionElement (this );
@@ -7444,7 +7399,7 @@ class LibraryElementImpl extends ElementImpl
7444
7399
}
7445
7400
7446
7401
@override
7447
- FunctionElementImpl get loadLibraryFunction {
7402
+ TopLevelFunctionFragmentImpl get loadLibraryFunction {
7448
7403
return loadLibraryFunction2.firstFragment;
7449
7404
}
7450
7405
@@ -7837,7 +7792,7 @@ final class LoadLibraryFunctionProvider {
7837
7792
TopLevelFunctionElementImpl _create (LibraryElementImpl library) {
7838
7793
var name = FunctionElement .LOAD_LIBRARY_NAME ;
7839
7794
7840
- var fragment = FunctionElementImpl (name, - 1 );
7795
+ var fragment = TopLevelFunctionFragmentImpl (name, - 1 );
7841
7796
fragment.name2 = name;
7842
7797
fragment.isSynthetic = true ;
7843
7798
fragment.isStatic = true ;
@@ -7855,7 +7810,7 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
7855
7810
with WrappedElementMixin
7856
7811
implements LocalFunctionElement {
7857
7812
@override
7858
- final FunctionElementImpl _wrappedElement;
7813
+ final LocalFunctionFragmentImpl _wrappedElement;
7859
7814
7860
7815
LocalFunctionElementImpl (this ._wrappedElement) {
7861
7816
_wrappedElement.element = this ;
@@ -7869,7 +7824,7 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
7869
7824
Element2 ? get enclosingElement2 => null ;
7870
7825
7871
7826
@override
7872
- FunctionElementImpl get firstFragment => _wrappedElement;
7827
+ LocalFunctionFragmentImpl get firstFragment => _wrappedElement;
7873
7828
7874
7829
@override
7875
7830
List <FormalParameterElementMixin > get formalParameters =>
@@ -7878,9 +7833,9 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
7878
7833
.toList ();
7879
7834
7880
7835
@override
7881
- List <FunctionElementImpl > get fragments {
7836
+ List <LocalFunctionFragmentImpl > get fragments {
7882
7837
return [
7883
- for (FunctionElementImpl ? fragment = firstFragment;
7838
+ for (LocalFunctionFragmentImpl ? fragment = firstFragment;
7884
7839
fragment != null ;
7885
7840
fragment = fragment.nextFragment)
7886
7841
fragment,
@@ -7930,6 +7885,43 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
7930
7885
}
7931
7886
}
7932
7887
7888
+ /// A concrete implementation of a [LocalFunctionFragment] .
7889
+ class LocalFunctionFragmentImpl extends FunctionElementImpl
7890
+ with AugmentableElement <LocalFunctionFragmentImpl >
7891
+ implements LocalFunctionFragment {
7892
+ /// The element corresponding to this fragment.
7893
+ @override
7894
+ late LocalFunctionElementImpl element;
7895
+
7896
+ LocalFunctionFragmentImpl (super .name, super .offset);
7897
+
7898
+ LocalFunctionFragmentImpl .forOffset (super .nameOffset) : super .forOffset ();
7899
+
7900
+ @override
7901
+ Never get children2 {
7902
+ throw StateError ('Not an Element2' );
7903
+ }
7904
+
7905
+ @override
7906
+ bool get isDartCoreIdentical => false ;
7907
+
7908
+ @override
7909
+ bool get isEntryPoint => false ;
7910
+
7911
+ @override
7912
+ LocalFunctionFragmentImpl ? get nextFragment => augmentation;
7913
+
7914
+ @override
7915
+ LocalFunctionFragmentImpl ? get previousFragment => augmentationTarget;
7916
+
7917
+ @override
7918
+ bool get _includeNameOffsetInIdentifier {
7919
+ return super ._includeNameOffsetInIdentifier ||
7920
+ enclosingElement3 is ExecutableElement ||
7921
+ enclosingElement3 is VariableElement ;
7922
+ }
7923
+ }
7924
+
7933
7925
/// A concrete implementation of a [LocalVariableElement] .
7934
7926
class LocalVariableElementImpl extends NonParameterVariableElementImpl
7935
7927
implements
@@ -10932,7 +10924,7 @@ class TopLevelFunctionElementImpl extends ExecutableElementImpl2
10932
10924
final Reference reference;
10933
10925
10934
10926
@override
10935
- final FunctionElementImpl firstFragment;
10927
+ final TopLevelFunctionFragmentImpl firstFragment;
10936
10928
10937
10929
TopLevelFunctionElementImpl (this .reference, this .firstFragment) {
10938
10930
reference.element2 = this ;
@@ -10946,9 +10938,9 @@ class TopLevelFunctionElementImpl extends ExecutableElementImpl2
10946
10938
Element2 ? get enclosingElement2 => firstFragment._enclosingElement3? .library2;
10947
10939
10948
10940
@override
10949
- List <FunctionElementImpl > get fragments {
10941
+ List <TopLevelFunctionFragmentImpl > get fragments {
10950
10942
return [
10951
- for (FunctionElementImpl ? fragment = firstFragment;
10943
+ for (TopLevelFunctionFragmentImpl ? fragment = firstFragment;
10952
10944
fragment != null ;
10953
10945
fragment = fragment.nextFragment)
10954
10946
fragment,
@@ -10965,8 +10957,8 @@ class TopLevelFunctionElementImpl extends ExecutableElementImpl2
10965
10957
ElementKind get kind => ElementKind .FUNCTION ;
10966
10958
10967
10959
@override
10968
- FunctionElementImpl get lastFragment {
10969
- return super .lastFragment as FunctionElementImpl ;
10960
+ TopLevelFunctionFragmentImpl get lastFragment {
10961
+ return super .lastFragment as TopLevelFunctionFragmentImpl ;
10970
10962
}
10971
10963
10972
10964
@override
@@ -10983,6 +10975,43 @@ class TopLevelFunctionElementImpl extends ExecutableElementImpl2
10983
10975
}
10984
10976
}
10985
10977
10978
+ /// A concrete implementation of a [TopLevelFunctionFragment] .
10979
+ class TopLevelFunctionFragmentImpl extends FunctionElementImpl
10980
+ with AugmentableElement <TopLevelFunctionFragmentImpl >
10981
+ implements TopLevelFunctionFragment {
10982
+ /// The element corresponding to this fragment.
10983
+ @override
10984
+ late TopLevelFunctionElementImpl element;
10985
+
10986
+ TopLevelFunctionFragmentImpl (super .name, super .offset);
10987
+
10988
+ @override
10989
+ List <Element2 > get children2 => element.children2;
10990
+
10991
+ @override
10992
+ CompilationUnitElementImpl get enclosingElement3 =>
10993
+ super .enclosingElement3 as CompilationUnitElementImpl ;
10994
+
10995
+ @override
10996
+ set enclosingElement3 (covariant CompilationUnitElementImpl element);
10997
+
10998
+ @override
10999
+ bool get isDartCoreIdentical {
11000
+ return name == 'identical' && library.isDartCore;
11001
+ }
11002
+
11003
+ @override
11004
+ bool get isEntryPoint {
11005
+ return displayName == FunctionElement .MAIN_FUNCTION_NAME ;
11006
+ }
11007
+
11008
+ @override
11009
+ TopLevelFunctionFragmentImpl ? get nextFragment => augmentation;
11010
+
11011
+ @override
11012
+ TopLevelFunctionFragmentImpl ? get previousFragment => augmentationTarget;
11013
+ }
11014
+
10986
11015
/// A concrete implementation of a [TopLevelVariableElement] .
10987
11016
class TopLevelVariableElementImpl extends PropertyInducingElementImpl
10988
11017
with AugmentableElement <TopLevelVariableElementImpl >
0 commit comments