Skip to content

Commit cf0a2b0

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Remove FragmentImpl.library
This caused several related changes. * Inlines `ClassFragmentImpl.isDartCoreEnum`, `ClassFragmentImpl.isDartCoreObject`, and `ClassFragmentImpl.ClassFragmentImpl` at their call sites in `ClassElementImpl`. * Inlines `ConstructorFragmentImpl.computeConstantDependencies` at its call site in `ConstructorElementImpl`. * Changes the various implementations of the getter `ElementImpl.library` so that they don't use `FragmentImpl.library`. * Removes the getters `FragmentImpl.context`. * Inlines the getter `FragmentImpl.isNonFunctionTypeAliasesEnabled` at its call site in `TypeAliasElementImpl`. * Inlines `InterfaceFragmentImpl.isDartCoreEnumImpl` at its call site in `InterfaceElementImpl`. * Removes `InterfaceFragmentImpl.isDartCoreFunctionImpl`. * Changes the extension `TypeParameterElementImplExtension` to apply to `TypeParameterElementImpl` rather than `TypeParameterFragmentImpl`. Change-Id: I43c538df047514412735586d5d85f1bc30eae33e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441360 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 0b18056 commit cf0a2b0

File tree

8 files changed

+79
-173
lines changed

8 files changed

+79
-173
lines changed

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

Lines changed: 52 additions & 134 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ extension RecordTypeExtension on RecordType {
232232
}
233233
}
234234

235-
extension TypeParameterElementImplExtension on TypeParameterFragmentImpl {
235+
extension TypeParameterElementImplExtension on TypeParameterElementImpl {
236236
bool get isWildcardVariable {
237237
return name == '_' && library.hasWildcardVariablesFeatureEnabled;
238238
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ class GenericInferrer {
148148
parameterType: SharedTypeView(parameterType),
149149
parameterName: parameterName,
150150
genericClassName: genericClass?.name,
151-
isGenericClassInDartCore: genericClass?.library.isDartCore ?? false,
151+
isGenericClassInDartCore:
152+
genericClass?.element.library.isDartCore ?? false,
152153
);
153154
inferenceLogWriter?.enterConstraintGeneration(
154155
ConstraintGenerationSource.argument,

pkg/analyzer/lib/src/error/inheritance_override.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ class _ClassVerifier {
644644
if (implementsDartCoreEnum) {
645645
var classElement = this.classElement;
646646
if (classElement is ClassFragmentImpl &&
647-
!classElement.isDartCoreEnumImpl ||
647+
!classElement.element.isDartCoreEnumImpl ||
648648
classElement is EnumFragmentImpl ||
649649
classElement is MixinFragmentImpl) {
650650
if (const {'index', 'hashCode', '=='}.contains(name.lexeme)) {

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
499499
_enclosingClass = declarationElement.asElement2;
500500

501501
List<ClassMember> members = node.members;
502-
if (!declarationElement.isDartCoreFunctionImpl) {
502+
if (!declarationElement.element.isDartCoreFunctionImpl) {
503503
_checkForBuiltInIdentifierAsName(
504504
node.name,
505505
CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME,
@@ -2472,7 +2472,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
24722472
ExtensionTypeFragmentImpl fragment,
24732473
) {
24742474
for (var typeParameter in fragment.typeParameters) {
2475-
if (typeParameter.isWildcardVariable) continue;
2475+
if (typeParameter.element.isWildcardVariable) continue;
24762476

24772477
var name = typeParameter.name ?? '';
24782478
// name is same as the name of the enclosing class

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

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,16 @@ class ElementBuilder {
384384
);
385385
instanceElement.addGetter(getterElement);
386386

387+
// `class Enum {}` in `dart:core` declares `int get index` as abstract.
388+
// But the specification says that practically a different class
389+
// implementing `Enum` is used as a superclass, so `index` should be
390+
// considered to have non-abstract implementation.
391+
if (instanceElement is ClassElementImpl &&
392+
instanceElement.isDartCoreEnum &&
393+
getterFragment.name == 'index') {
394+
getterFragment.isAbstract = false;
395+
}
396+
387397
// If `getter` is already set, this is a compile-time error.
388398
// Reset to `null`, so create a new variable.
389399
if (lastFieldElement != null) {
@@ -1540,7 +1550,6 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
15401550
@override
15411551
void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
15421552
var nameToken = node.name;
1543-
var name = nameToken.lexeme;
15441553

15451554
Reference reference;
15461555
ExecutableFragmentImpl executableFragment;
@@ -1553,14 +1562,6 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
15531562
fragment.isAugmentation = node.augmentKeyword != null;
15541563
fragment.isStatic = node.isStatic;
15551564

1556-
// `class Enum {}` in `dart:core` declares `int get index` as abstract.
1557-
// But the specification says that practically a different class
1558-
// implementing `Enum` is used as a superclass, so `index` should be
1559-
// considered to have non-abstract implementation.
1560-
if (_enclosingContext.isDartCoreEnum && name == 'index') {
1561-
fragment.isAbstract = false;
1562-
}
1563-
15641565
reference = Reference.root(); // TODO(scheglov): remove this
15651566
var parentFragment = _enclosingContext.fragment;
15661567
fragment.enclosingFragment = parentFragment;
@@ -1583,16 +1584,6 @@ class FragmentBuilder extends ThrowingAstVisitor<void> {
15831584

15841585
executableFragment = fragment;
15851586
} else {
1586-
var isUnaryMinus = false;
1587-
if (nameToken.lexeme == '-') {
1588-
var parameters = node.parameters;
1589-
isUnaryMinus = parameters != null && parameters.parameters.isEmpty;
1590-
}
1591-
1592-
if (isUnaryMinus) {
1593-
name = 'unary-';
1594-
}
1595-
15961587
var fragment = MethodFragmentImpl(
15971588
name: _getFragmentName(nameToken),
15981589
firstTokenOffset: null,
@@ -1995,11 +1986,6 @@ class _EnclosingContext {
19951986
this.hasDefaultFormalParameters = false,
19961987
});
19971988

1998-
bool get isDartCoreEnum {
1999-
var fragment = this.fragment;
2000-
return fragment is ClassFragmentImpl && fragment.isDartCoreEnum;
2001-
}
2002-
20031989
void addFunction(String name, TopLevelFunctionFragmentImpl fragment) {}
20041990

20051991
void addParameter(String? name, FormalParameterFragmentImpl fragment) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ class LibraryBuilder {
388388
for (var interfaceFragment in element.topLevelElements) {
389389
switch (interfaceFragment) {
390390
case ClassFragmentImpl():
391-
if (interfaceFragment.isDartCoreObject) continue;
391+
if (interfaceFragment.element.isDartCoreObject) continue;
392392
if (interfaceFragment.supertype == null) {
393393
shouldResetClassHierarchies = true;
394394
interfaceFragment.supertype = objectType;

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class TypesBuilder {
124124
if (type is InterfaceTypeImpl && _isInterfaceTypeClass(type)) {
125125
element.supertype = type;
126126
}
127-
} else if (element.isDartCoreObject) {
127+
} else if (element.element.isDartCoreObject) {
128128
element.setModifier(Modifier.DART_CORE_OBJECT, true);
129129
}
130130

@@ -300,8 +300,9 @@ class TypesBuilder {
300300

301301
void _extensionTypeDeclaration(ExtensionTypeDeclarationImpl node) {
302302
var fragment = node.declaredFragment!;
303+
var element = fragment.element;
303304

304-
var typeSystem = fragment.library.typeSystem;
305+
var typeSystem = element.library.typeSystem;
305306
var interfaces =
306307
node.implementsClause?.interfaces
307308
.map((e) => e.type)
@@ -471,7 +472,7 @@ class _MixinInference {
471472
this.element,
472473
this.featureSet, {
473474
required this.typeSystemOperations,
474-
}) : typeSystem = element.library.typeSystem,
475+
}) : typeSystem = element.element.library.typeSystem,
475476
classType = element.element.thisType {
476477
interfacesMerger = InterfacesMerger(typeSystem);
477478
interfacesMerger.addWithSupertypes(element.supertype);
@@ -663,20 +664,20 @@ class _MixinsInference {
663664
var element = declaration.element;
664665
element.mixinInferenceCallback = _callbackWhenLoop;
665666

666-
var featureSet = element.library.featureSet;
667+
var library = element.element.library;
667668
var declarationMixins = <InterfaceTypeImpl>[];
668669

669670
try {
670671
// Casts aren't relevant for mixin inference.
671672
var typeSystemOperations = TypeSystemOperations(
672-
element.library.typeSystem,
673+
library.typeSystem,
673674
strictCasts: false,
674675
);
675676

676677
if (declaration.withClause case var withClause?) {
677678
var inference = _MixinInference(
678679
element,
679-
featureSet,
680+
library.featureSet,
680681
typeSystemOperations: typeSystemOperations,
681682
);
682683
var inferred = inference.perform(withClause);
@@ -687,7 +688,7 @@ class _MixinsInference {
687688
for (var augmentation in declaration.augmentations) {
688689
var inference = _MixinInference(
689690
element,
690-
featureSet,
691+
library.featureSet,
691692
typeSystemOperations: typeSystemOperations,
692693
);
693694
inference.addTypes(
@@ -710,8 +711,8 @@ class _MixinsInference {
710711
/// hierarchies for all classes being linked, indiscriminately.
711712
void _resetHierarchies() {
712713
for (var declaration in _declarations.values) {
713-
var element = declaration.element;
714-
element.library.session.classHierarchy.remove(element.asElement2);
714+
var element = declaration.element.element;
715+
element.library.session.classHierarchy.remove(element);
715716
}
716717
}
717718
}

0 commit comments

Comments
 (0)