From 9f35115b9009eaef0b5d14493a44ca5ac4aa230a Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Wed, 26 Oct 2022 03:49:43 +0000 Subject: [PATCH] Use FooImpl in BarImpl getters/setters, property related. I think we might get away with this now, because we don't let users create elements manually. Presubmit in google3 looks green. https://fusion2.corp.google.com/presubmit/tap/483535261/OCL:483535261:BASE:483575659:1666678949553:5d26313d/targets Change-Id: Id9618e2d8a15ab98c5919750461c508e87f76c7b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/265405 Reviewed-by: Samuel Rawlins Commit-Queue: Konstantin Shcheglov --- .../src/lsp/handlers/handler_definition.dart | 5 +- .../lib/src/dart/element/element.dart | 49 ++++++++++--------- .../dart/element/inheritance_manager3.dart | 2 +- .../lib/src/summary2/bundle_reader.dart | 8 +-- .../lib/src/summary2/bundle_writer.dart | 3 +- .../lib/src/summary2/element_builder.dart | 6 +-- .../lib/src/summary2/library_builder.dart | 1 + pkg/analyzer/lib/src/task/strong_mode.dart | 2 +- .../src/test_utilities/mock_sdk_elements.dart | 17 ++++--- .../test/src/dart/element/element_test.dart | 14 +++--- .../test/src/summary/elements_test.dart | 6 +-- 11 files changed, 57 insertions(+), 56 deletions(-) diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart index 0e4fe4dd20d..38f8d927fec 100644 --- a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart +++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart @@ -177,10 +177,7 @@ class DefinitionHandler extends MessageHandler _accessors = _Sentinel.propertyAccessorElement; /// A list containing all of the fields contained in this class. - List _fields = _Sentinel.fieldElement; + List _fields = _Sentinel.fieldElement; /// A list containing all of the methods contained in this class. List _methods = _Sentinel.methodElement; @@ -122,10 +122,13 @@ abstract class AbstractClassElementImpl extends _ExistingElementImpl @override CompilationUnitElementImpl get enclosingElement3 => enclosingElement; + @override + List get fields; + /// Set the fields contained in this class to the given [fields]. - set fields(List fields) { - for (FieldElement field in fields) { - (field as FieldElementImpl).enclosingElement = this; + set fields(List fields) { + for (var field in fields) { + field.enclosingElement = this; } _fields = fields; } @@ -609,7 +612,7 @@ class ClassElementImpl extends ClassOrMixinElementImpl implements ClassElement { } @override - set fields(List fields) { + set fields(List fields) { assert(!isMixinApplication); super.fields = fields; } @@ -968,7 +971,7 @@ abstract class ClassOrMixinElementImpl extends AbstractClassElementImpl { } @override - List get fields { + List get fields { if (!identical(_fields, _Sentinel.fieldElement)) { return _fields; } @@ -1099,7 +1102,7 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl List _typeAliases = const []; /// A list containing all of the variables contained in this compilation unit. - List _variables = const []; + List _variables = const []; ElementLinkedData? linkedData; @@ -1255,15 +1258,15 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl AnalysisSession get session => enclosingElement.session; @override - List get topLevelVariables { + List get topLevelVariables { return _variables; } /// Set the top-level variables contained in this compilation unit to the /// given[variables]. - set topLevelVariables(List variables) { - for (TopLevelVariableElement field in variables) { - (field as TopLevelVariableElementImpl).enclosingElement = this; + set topLevelVariables(List variables) { + for (var variable in variables) { + variable.enclosingElement = this; } _variables = variables; } @@ -2947,7 +2950,7 @@ class EnumElementImpl extends AbstractClassElementImpl implements EnumElement { } @override - List get fields { + List get fields { return _fields; } @@ -3242,7 +3245,7 @@ class ExtensionElementImpl extends _ExistingElementImpl List _accessors = const []; /// A list containing all of the fields contained in this extension. - List _fields = const []; + List _fields = const []; /// A list containing all of the methods contained in this extension. List _methods = const []; @@ -3303,13 +3306,13 @@ class ExtensionElementImpl extends _ExistingElementImpl } @override - List get fields { + List get fields { return _fields; } - set fields(List fields) { - for (FieldElement field in fields) { - (field as FieldElementImpl).enclosingElement = this; + set fields(List fields) { + for (var field in fields) { + field.enclosingElement = this; } _fields = fields; } @@ -5506,7 +5509,7 @@ class PropertyAccessorElementImpl extends ExecutableElementImpl implements PropertyAccessorElement { /// The variable associated with this accessor. @override - late PropertyInducingElement variable; + late PropertyInducingElementImpl variable; /// If this method is a synthetic element which is based on another method /// with some modifications (such as making some parameters covariant), @@ -5632,7 +5635,7 @@ class PropertyAccessorElementImpl_ImplicitGetter } @override - Element get enclosingElement => variable.enclosingElement!; + Element get enclosingElement => variable.enclosingElement; @Deprecated('Use enclosingElement instead') @override @@ -5697,7 +5700,7 @@ class PropertyAccessorElementImpl_ImplicitSetter } @override - Element get enclosingElement => variable.enclosingElement!; + Element get enclosingElement => variable.enclosingElement; @Deprecated('Use enclosingElement instead') @override @@ -5760,13 +5763,13 @@ abstract class PropertyInducingElementImpl extends NonParameterVariableElementImpl implements PropertyInducingElement { /// The getter associated with this element. @override - PropertyAccessorElement? getter; + PropertyAccessorElementImpl? getter; /// The setter associated with this element, or `null` if the element is /// effectively `final` and therefore does not have a setter associated with /// it. @override - PropertyAccessorElement? setter; + PropertyAccessorElementImpl? setter; /// This field is set during linking, and performs type inference for /// this property. After linking this field is always `null`. @@ -6554,7 +6557,7 @@ class _Sentinel { List.unmodifiable([]); static final List constructorElement = List.unmodifiable([]); - static final List fieldElement = List.unmodifiable([]); + static final List fieldElement = List.unmodifiable([]); static final List libraryExportElement = List.unmodifiable([]); static final List libraryImportElement = diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart index ef364504fa6..81c87a62261 100644 --- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart +++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart @@ -779,7 +779,7 @@ class InheritanceManager3 { return result; } - if (executable is PropertyAccessorElement) { + if (executable is PropertyAccessorElementImpl) { assert(executable.isSetter); var result = PropertyAccessorElementImpl(executable.name, -1); result.enclosingElement = class_; diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart index 354bcf79fca..5b6ad7d7fdc 100644 --- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart +++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart @@ -630,7 +630,7 @@ class LibraryReader { Reference reference, ) { var accessors = []; - var fields = []; + var fields = []; _readFields(unitElement, element, reference, accessors, fields); _readPropertyAccessors( unitElement, element, reference, accessors, fields, '@field'); @@ -783,7 +783,7 @@ class LibraryReader { element.typeParameters = _readTypeParameters(); var accessors = []; - var fields = []; + var fields = []; _readFields(unitElement, element, reference, accessors, fields); _readPropertyAccessors( @@ -869,7 +869,7 @@ class LibraryReader { element.typeParameters = _readTypeParameters(); var accessors = []; - var fields = []; + var fields = []; _readPropertyAccessors( unitElement, element, reference, accessors, fields, '@field'); _readFields(unitElement, element, reference, accessors, fields); @@ -1127,7 +1127,7 @@ class LibraryReader { element.typeParameters = _readTypeParameters(); - var fields = []; + var fields = []; var accessors = []; _readFields(unitElement, element, reference, accessors, fields); _readPropertyAccessors( diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart index 89ee233ea04..405d7f02a62 100644 --- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart +++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart @@ -242,8 +242,7 @@ class BundleWriter { _writeList( element.fields.where((e) { - return !e.isSynthetic || - e is FieldElementImpl && e.isSyntheticEnumField; + return !e.isSynthetic || e.isSyntheticEnumField; }).toList(), _writeFieldElement, ); diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart index 258a042a117..975b0aeb718 100644 --- a/pkg/analyzer/lib/src/summary2/element_builder.dart +++ b/pkg/analyzer/lib/src/summary2/element_builder.dart @@ -434,7 +434,7 @@ class ElementBuilder extends ThrowingAstVisitor { _visitPropertyFirst(node.members); }); element.accessors = holder.propertyAccessors; - element.fields = holder.properties.whereType().toList(); + element.fields = holder.properties.whereType().toList(); element.methods = holder.methods; } @@ -1140,7 +1140,7 @@ class ElementBuilder extends ThrowingAstVisitor { element.accessors = holder.propertyAccessors; element.constructors = holder.constructors; - element.fields = holder.properties.whereType().toList(); + element.fields = holder.properties.whereType().toList(); element.methods = holder.methods; _resolveConstructorFieldFormals(element); @@ -1179,7 +1179,7 @@ class ElementBuilder extends ThrowingAstVisitor { element.accessors = holder.propertyAccessors; element.constructors = holder.constructors; - element.fields = holder.properties.whereType().toList(); + element.fields = holder.properties.whereType().toList(); element.methods = holder.methods; _resolveConstructorFieldFormals(element); diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart index 1122c13d830..64b3dc67f5a 100644 --- a/pkg/analyzer/lib/src/summary2/library_builder.dart +++ b/pkg/analyzer/lib/src/summary2/library_builder.dart @@ -273,6 +273,7 @@ class LibraryBuilder { // Transplant built elements as if the augmentation was applied. final augmentedUnitElement = element.definingCompilationUnit; for (final augmentation in unitElement.classes) { + augmentation as ClassElementImpl; // TODO(scheglov) if augmentation final augmented = element.getClass(augmentation.name); if (augmented is ClassElementImpl) { diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart index 4219e379a76..244c5de376e 100644 --- a/pkg/analyzer/lib/src/task/strong_mode.dart +++ b/pkg/analyzer/lib/src/task/strong_mode.dart @@ -327,7 +327,7 @@ class InstanceMemberInferrer { currentInterfaceElement = classElement; for (var field in classElement.fields) { _inferAccessorOrField( - field: field as FieldElementImpl, + field: field, ); } for (var accessor in classElement.accessors) { diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart index 0d1c6fd23eb..f1600244bcc 100644 --- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart +++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart @@ -138,7 +138,7 @@ class _MockSdkElementsBuilder { _deprecatedElement = deprecatedElement = _class(name: 'Deprecated'); deprecatedElement.supertype = objectType; - deprecatedElement.fields = [ + deprecatedElement.fields = [ _field('message', stringType, isFinal: true), ]; @@ -167,11 +167,11 @@ class _MockSdkElementsBuilder { ); doubleElement.supertype = numType; - FieldElement staticConstDoubleField(String name) { + FieldElementImpl staticConstDoubleField(String name) { return _field(name, doubleType, isStatic: true, isConst: true); } - doubleElement.fields = [ + doubleElement.fields = [ staticConstDoubleField('nan'), staticConstDoubleField('infinity'), staticConstDoubleField('negativeInfinity'), @@ -969,7 +969,7 @@ class _MockSdkElementsBuilder { overrideVariable.getter!, proxyVariable.getter!, ]; - coreUnit.topLevelVariables = [ + coreUnit.topLevelVariables = [ deprecatedVariable, overrideVariable, proxyVariable, @@ -1014,7 +1014,7 @@ class _MockSdkElementsBuilder { return element; } - FieldElement _field( + FieldElementImpl _field( String name, DartType type, { bool isConst = false, @@ -1133,11 +1133,14 @@ class _MockSdkElementsBuilder { classElement.accessors = accessors; classElement.fields = accessors .map((accessor) => accessor.variable) - .cast() + .cast() .toList(); } - TopLevelVariableElement _topLevelVariableConst(String name, DartType type) { + TopLevelVariableElementImpl _topLevelVariableConst( + String name, + DartType type, + ) { final variable = ConstTopLevelVariableElementImpl(name, -1) ..isConst = true ..type = type; diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart index cfc74bca4f7..cf23c47e895 100644 --- a/pkg/analyzer/test/src/dart/element/element_test.dart +++ b/pkg/analyzer/test/src/dart/element/element_test.dart @@ -40,7 +40,7 @@ class ClassElementImplTest extends AbstractTypeSystemTest { String fieldName = "f"; FieldElementImpl field = ElementFactory.fieldElement(fieldName, false, false, false, intNone); - classA.fields = [field]; + classA.fields = [field]; expect(classA.getField(fieldName), same(field)); expect(field.isEnumConstant, false); // no such field @@ -65,7 +65,7 @@ class ClassElementImplTest extends AbstractTypeSystemTest { void test_hasNonFinalField_false_const() { var classA = class_(name: 'A'); - classA.fields = [ + classA.fields = [ ElementFactory.fieldElement( "f", false, false, true, interfaceTypeStar(classA)) ]; @@ -74,7 +74,7 @@ class ClassElementImplTest extends AbstractTypeSystemTest { void test_hasNonFinalField_false_final() { var classA = class_(name: 'A'); - classA.fields = [ + classA.fields = [ ElementFactory.fieldElement( "f", false, true, false, interfaceTypeStar(classA)) ]; @@ -93,7 +93,7 @@ class ClassElementImplTest extends AbstractTypeSystemTest { void test_hasNonFinalField_true_immediate() { var classA = class_(name: 'A'); - classA.fields = [ + classA.fields = [ ElementFactory.fieldElement( "f", false, false, false, interfaceTypeStar(classA)) ]; @@ -105,7 +105,7 @@ class ClassElementImplTest extends AbstractTypeSystemTest { var classA = class_(name: 'A'); ClassElementImpl classB = ElementFactory.classElement("B", interfaceTypeStar(classA)); - classA.fields = [ + classA.fields = [ ElementFactory.fieldElement( "f", false, false, false, interfaceTypeStar(classA)) ]; @@ -421,7 +421,7 @@ class ElementImplTest extends AbstractTypeSystemTest { LibraryElementImpl library = ElementFactory.library(analysisContext, "lib"); ClassElementImpl classElement = ElementFactory.classElement2("C"); (library.definingCompilationUnit).classes = [classElement]; - FieldElement field = ElementFactory.fieldElement( + var field = ElementFactory.fieldElement( "next", false, false, @@ -431,7 +431,7 @@ class ElementImplTest extends AbstractTypeSystemTest { nullabilitySuffix: NullabilitySuffix.star, ), ); - classElement.fields = [field]; + classElement.fields = [field]; expect(field == field, isTrue); // ignore: unrelated_type_equality_checks expect(field == field.getter, isFalse); diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart index 9a4847acffe..1ac0a8277da 100644 --- a/pkg/analyzer/test/src/summary/elements_test.dart +++ b/pkg/analyzer/test/src/summary/elements_test.dart @@ -11236,16 +11236,14 @@ library synthetic static get y @-1 returnType: Object '''); - var x = library.definingCompilationUnit.topLevelVariables[0] - as TopLevelVariableElementImpl; + var x = library.definingCompilationUnit.topLevelVariables[0]; var xExpr = x.constantInitializer as InstanceCreationExpression; var xType = xExpr.constructorName.staticElement!.returnType; _assertTypeStr( xType, 'C', ); - var y = library.definingCompilationUnit.topLevelVariables[0] - as TopLevelVariableElementImpl; + var y = library.definingCompilationUnit.topLevelVariables[0]; var yExpr = y.constantInitializer as InstanceCreationExpression; var yType = yExpr.constructorName.staticElement!.returnType; _assertTypeStr(yType, 'C');