diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt index 30c76ad7f20..acde2de6431 100644 --- a/pkg/analyzer/api.txt +++ b/pkg/analyzer/api.txt @@ -3021,8 +3021,6 @@ package:analyzer/dart/element/element.dart: new (constructor: AugmentedInterfaceElement Function()) constructors (getter: List) firstFragment (getter: InterfaceElement) - interfaces (getter: List) - mixins (getter: List) thisType (getter: InterfaceType) unnamedConstructor (getter: ConstructorElement?) getNamedConstructor (method: ConstructorElement? Function(String)) diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart index 28e22fc57e0..e423821f147 100644 --- a/pkg/analyzer/lib/dart/element/element.dart +++ b/pkg/analyzer/lib/dart/element/element.dart @@ -157,18 +157,6 @@ abstract class AugmentedInterfaceElement implements AugmentedInstanceElement { @override InterfaceElement get firstFragment; - /// The interfaces implemented by this element. - /// - /// This is a union of interfaces declared by the class declaration and - /// all its augmentations. - List get interfaces; - - /// The mixins applied by this class or in its augmentations. - /// - /// This is a union of mixins applied by the class declaration and all its - /// augmentations. - List get mixins; - @override InterfaceType get thisType; diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart index 3a139d9cbcd..fdba7a9c546 100644 --- a/pkg/analyzer/lib/src/dart/analysis/driver.dart +++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart @@ -100,7 +100,7 @@ import 'package:meta/meta.dart'; // TODO(scheglov): Clean up the list of implicitly analyzed files. class AnalysisDriver { /// The version of data format, should be incremented on every format change. - static const int DATA_VERSION = 435; + static const int DATA_VERSION = 437; /// The number of exception contexts allowed to write. Once this field is /// zero, we stop writing any new exception contexts in this process. diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index ef152d51174..e6c94ab6cd5 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -6683,10 +6683,6 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2 /// Should be used only when the element has no type parameters. InterfaceTypeImpl? _nullableInstance; - List _interfaces = []; - - List _mixins = []; - @override List constructors = []; @@ -6746,12 +6742,8 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2 .map2; @override - List get interfaces => _interfaces; - - set interfaces(List values) { - // TODO(paulberry): eliminate this cast by changing the type of the `values` - // parameter - _interfaces = values.cast(); + List get interfaces { + return firstFragment.interfaces; } set isSimplyBounded(bool value) { @@ -6762,22 +6754,7 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2 @override List get mixins { - if (firstFragment.mixinInferenceCallback case var callback?) { - var mixins = callback(firstFragment); - if (mixins != null) { - // TODO(paulberry): eliminate this cast by changing the type of - // `InterfaceElementImpl.mixinInferenceCallback`. - return _mixins = mixins.cast(); - } - } - - return _mixins; - } - - set mixins(List value) { - // TODO(paulberry): eliminate this cast by changing the type of the `value` - // parameter. - _mixins = value.cast(); + return firstFragment.mixins; } @override diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart index d54eb74d50e..0ed14b6e7f8 100644 --- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart +++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart @@ -54,9 +54,7 @@ class ElementFactory { fragment.typeParameters = typeParameters(parameterNames); } - var element = ClassElementImpl2(Reference.root(), fragment); - element.mixins = fragment.mixins; - element.interfaces = fragment.interfaces; + ClassElementImpl2(Reference.root(), fragment); return fragment; } @@ -83,9 +81,7 @@ class ElementFactory { fragment.interfaces = interfaces; fragment.constructors = const []; - var element = ClassElementImpl2(Reference.root(), fragment); - element.mixins = fragment.mixins; - element.interfaces = fragment.interfaces; + ClassElementImpl2(Reference.root(), fragment); return fragment; } diff --git a/pkg/analyzer/lib/src/summary2/augmentation.dart b/pkg/analyzer/lib/src/summary2/augmentation.dart index f4e19b9857e..c729ec129b2 100644 --- a/pkg/analyzer/lib/src/summary2/augmentation.dart +++ b/pkg/analyzer/lib/src/summary2/augmentation.dart @@ -275,8 +275,6 @@ abstract class InstanceElementBuilder { if (element.augmentationTarget == null) { var augmented = element.augmentedInternal; - augmented.mixins = reader._readInterfaceTypeList(); - augmented.interfaces = reader._readInterfaceTypeList(); augmented.fields = reader.readElementList(); augmented.constructors = reader.readElementList(); augmented.accessors = reader.readElementList(); @@ -382,8 +380,6 @@ class EnumElementLinkedData extends ElementLinkedData { element.interfaces = reader._readInterfaceTypeList(); if (element.augmentationTarget == null) { var augmented = element.augmentedInternal; - augmented.mixins = reader._readInterfaceTypeList(); - augmented.interfaces = reader._readInterfaceTypeList(); augmented.fields = reader.readElementList(); augmented.constructors = reader.readElementList(); augmented.accessors = reader.readElementList(); @@ -451,7 +447,6 @@ class ExtensionTypeElementLinkedData element.interfaces = reader._readInterfaceTypeList(); if (element.augmentationTarget == null) { var augmented = element.augmentedInternal; - augmented.interfaces = reader._readInterfaceTypeList(); augmented.fields = reader.readElementList(); augmented.accessors = reader.readElementList(); augmented.constructors = reader.readElementList(); @@ -1972,7 +1967,6 @@ class MixinElementLinkedData extends ElementLinkedData { if (element.augmentationTarget == null) { var augmented = element.augmentedInternal; augmented.superclassConstraints = reader._readInterfaceTypeList(); - augmented.interfaces = reader._readInterfaceTypeList(); augmented.fields = reader.readElementList(); augmented.accessors = reader.readElementList(); } diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart index 10b6b92a7d1..11f6786508b 100644 --- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart +++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart @@ -159,8 +159,6 @@ class BundleWriter { _resolutionSink._writeTypeList(fragment.interfaces); if (fragment.augmentationTarget == null) { var element = fragment.element; - _resolutionSink._writeTypeList(element.mixins); - _resolutionSink._writeTypeList(element.interfaces); _resolutionSink._writeElementList(element.fields); _resolutionSink._writeElementList(element.constructors); _resolutionSink._writeElementList(element.accessors); @@ -252,8 +250,6 @@ class BundleWriter { _resolutionSink._writeTypeList(fragment.interfaces); if (fragment.augmentationTarget == null) { var element = fragment.element; - _resolutionSink._writeTypeList(element.mixins); - _resolutionSink._writeTypeList(element.interfaces); _resolutionSink._writeElementList(element.fields); _resolutionSink._writeElementList(element.constructors); _resolutionSink._writeElementList(element.accessors); @@ -346,7 +342,6 @@ class BundleWriter { _resolutionSink._writeTypeList(fragment.interfaces); if (fragment.augmentationTarget == null) { var element = fragment.element; - _resolutionSink._writeTypeList(element.interfaces); _resolutionSink._writeElementList(element.fields); _resolutionSink._writeElementList(element.accessors); _resolutionSink._writeElementList(element.constructors); @@ -520,7 +515,6 @@ class BundleWriter { if (fragment.augmentationTarget == null) { var element = fragment.element; _resolutionSink._writeTypeList(element.superclassConstraints); - _resolutionSink._writeTypeList(element.interfaces); _resolutionSink._writeElementList(element.fields); _resolutionSink._writeElementList(element.accessors); } diff --git a/pkg/analyzer/lib/src/summary2/extension_type.dart b/pkg/analyzer/lib/src/summary2/extension_type.dart index 0eda9896228..5cd5c460a1e 100644 --- a/pkg/analyzer/lib/src/summary2/extension_type.dart +++ b/pkg/analyzer/lib/src/summary2/extension_type.dart @@ -90,7 +90,7 @@ class _ImplementsNode extends graph.Node<_ImplementsNode> { var superInterface = typeSystem.isNonNullable(representationType) ? typeSystem.objectNone : typeSystem.objectQuestion; - element.interfaces = [superInterface]; + element.firstFragment.interfaces = [superInterface]; } } @@ -153,7 +153,7 @@ class _Node extends graph.Node<_Node> { element.representation.type = type; element.typeErasure = type.extensionTypeErasure; - element.interfaces = element.interfaces + element.firstFragment.interfaces = element.interfaces .whereType() .where(typeSystem.isValidExtensionTypeSuperinterface) .toFixedList(); diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart index 3dffe072271..a309ee02cfe 100644 --- a/pkg/analyzer/lib/src/summary2/types_builder.dart +++ b/pkg/analyzer/lib/src/summary2/types_builder.dart @@ -431,10 +431,6 @@ class TypesBuilder { firstFragment.supertype = superType; } } - - element.interfaces.addAll( - toFirst.mapInterfaceTypes(fragment.interfaces), - ); } if (fragment is MixinElementImpl && element is MixinElementImpl2) { @@ -688,10 +684,6 @@ class _MixinsInference { } } finally { element.mixinInferenceCallback = null; - switch (element.element) { - case InterfaceElementImpl2 augmented: - augmented.mixins.addAll(declarationMixins); - } } } 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 dbdbbfdd958..aa46974f024 100644 --- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart +++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart @@ -944,8 +944,6 @@ class _MockSdkElementsBuilder { void _buildClassElement(ClassElementImpl fragment) { var element = fragment.element; - element.mixins = fragment.mixins; - element.interfaces = fragment.interfaces; element.fields = fragment.fields; element.constructors = fragment.constructors; element.accessors = fragment.accessors; diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart index 95376169afb..170c61dfbfa 100644 --- a/pkg/analyzer/test/generated/elements_types_mixin.dart +++ b/pkg/analyzer/test/generated/elements_types_mixin.dart @@ -138,9 +138,7 @@ mixin ElementsTypesMixin { fragment.mixins = mixins; fragment.methods = methods; - var element = ClassElementImpl2(Reference.root(), fragment); - element.mixins = fragment.mixins; - element.interfaces = fragment.interfaces; + ClassElementImpl2(Reference.root(), fragment); return fragment; } @@ -169,9 +167,6 @@ mixin ElementsTypesMixin { fragment.methods = methods.map((e) => e.firstFragment).toList(); var element = ClassElementImpl2(Reference.root(), fragment); - element.mixins = fragment.mixins; - element.interfaces = fragment.interfaces; - return element; } @@ -258,7 +253,6 @@ mixin ElementsTypesMixin { element ..representation = field ..typeErasure = representationType - ..interfaces = fragment.interfaces ..fields = fragment.fields; return fragment; @@ -284,7 +278,6 @@ mixin ElementsTypesMixin { element ..representation = field ..typeErasure = representationType - ..interfaces = fragment.interfaces ..fields = fragment.fields; return element; @@ -503,7 +496,6 @@ mixin ElementsTypesMixin { var element = MixinElementImpl2(Reference.root(), fragment); element.superclassConstraints = fragment.superclassConstraints; - element.interfaces = fragment.interfaces; return fragment; } @@ -525,7 +517,6 @@ mixin ElementsTypesMixin { var element = MixinElementImpl2(Reference.root(), fragment); element.superclassConstraints = fragment.superclassConstraints; - element.interfaces = fragment.interfaces; return element; } @@ -770,16 +761,6 @@ extension ClassElementImpl2Extension on ClassElementImpl2 { expect(augmentation.typeParameters, isEmpty, reason: 'Not supported in tests'); - - interfaces = [ - ...interfaces, - ...augmentation.interfaces, - ]; - - mixins = [ - ...mixins, - ...augmentation.mixins, - ]; } } } @@ -795,23 +776,8 @@ extension ClassElementImplExtension on ClassElementImpl { expect(augmentation.typeParameters, isEmpty, reason: 'Not supported in tests'); - - augmentedInternal.interfaces = [ - ...augmentedInternal.interfaces, - ...augmentation.interfaces, - ]; - - augmentedInternal.mixins = [ - ...augmentedInternal.mixins, - ...augmentation.mixins, - ]; } } - - void updateElement() { - element.interfaces = interfaces; - element.mixins = mixins; - } } extension MixinElementImpl2Extension on MixinElementImpl2 { @@ -830,11 +796,6 @@ extension MixinElementImpl2Extension on MixinElementImpl2 { ...superclassConstraints, ...augmentation.superclassConstraints, ]; - - interfaces = [ - ...interfaces, - ...augmentation.interfaces, - ]; } } } @@ -855,11 +816,6 @@ extension MixinElementImplExtension on MixinElementImpl { ...augmentedInternal.superclassConstraints, ...augmentation.superclassConstraints, ]; - - augmentedInternal.interfaces = [ - ...augmentedInternal.interfaces, - ...augmentation.interfaces, - ]; } } } diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart index b71344e717a..19363013884 100644 --- a/pkg/analyzer/test/src/dart/element/element_test.dart +++ b/pkg/analyzer/test/src/dart/element/element_test.dart @@ -2084,9 +2084,7 @@ class _AbstractTypeSystemTest extends AbstractTypeSystemTest { fragment.mixins = mixins; fragment.methods = methods; - var element = ClassElementImpl2(Reference.root(), fragment); - element.mixins = fragment.mixins; - element.interfaces = fragment.interfaces; + ClassElementImpl2(Reference.root(), fragment); return fragment; } @@ -2118,7 +2116,6 @@ class _AbstractTypeSystemTest extends AbstractTypeSystemTest { var element = MixinElementImpl2(Reference.root(), fragment); element.superclassConstraints = fragment.superclassConstraints; - element.interfaces = fragment.interfaces; return fragment; } diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart index b651cf64807..9f484fbd9b1 100644 --- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart +++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart @@ -2971,6 +2971,7 @@ conflicts '''); } + @SkippedTest() // TODO(scheglov): implement augmentation test_interface_candidatesConflict_interfaceInAugmentation() async { var a = newFile('$testPackageLibPath/a.dart', r''' part 'b.dart'; diff --git a/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart b/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart index 374febca9a3..69c860d2dd0 100644 --- a/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart +++ b/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart @@ -127,10 +127,16 @@ class PathToObjectTest extends AbstractTypeSystemTest { var classC = class_2(name: "C"); var classD = class_2(name: "D"); var classE = class_2(name: "E"); - classB.interfaces = [interfaceTypeNone(classA)]; - classC.interfaces = [interfaceTypeNone(classA)]; - classD.interfaces = [interfaceTypeNone(classC)]; - classE.interfaces = [ + classB.firstFragment.interfaces = [ + interfaceTypeNone(classA) + ]; + classC.firstFragment.interfaces = [ + interfaceTypeNone(classA) + ]; + classD.firstFragment.interfaces = [ + interfaceTypeNone(classC) + ]; + classE.firstFragment.interfaces = [ interfaceTypeNone(classB), interfaceTypeNone(classD) ]; @@ -160,7 +166,9 @@ class PathToObjectTest extends AbstractTypeSystemTest { var classC = class_2(name: "C", superType: interfaceTypeNone(classA)); var classD = class_2(name: "D", superType: interfaceTypeNone(classC)); var classE = class_2(name: "E", superType: interfaceTypeNone(classB)); - classE.interfaces = [interfaceTypeNone(classD)]; + classE.firstFragment.interfaces = [ + interfaceTypeNone(classD) + ]; // assertion: even though the longest path to Object for typeB is 2, and // typeE extends typeB, the longest path for typeE is 4 since it also // implements typeD @@ -199,8 +207,8 @@ class PathToObjectTest extends AbstractTypeSystemTest { var classA = class_2(name: "A"); var classB = class_2(name: "B"); var classC = class_2(name: "C"); - classB.interfaces = [interfaceTypeNone(classA)]; - classC.interfaces = [interfaceTypeNone(classB)]; + classB.firstFragment.interfaces = [interfaceTypeNone(classA)]; + classC.firstFragment.interfaces = [interfaceTypeNone(classB)]; expect(_toElement(classA), 2); expect(_toElement(classB), 3); expect(_toElement(classC), 4); diff --git a/pkg/analyzer/test/src/dart/element/subtype_test.dart b/pkg/analyzer/test/src/dart/element/subtype_test.dart index b9647594007..dd0e0477775 100644 --- a/pkg/analyzer/test/src/dart/element/subtype_test.dart +++ b/pkg/analyzer/test/src/dart/element/subtype_test.dart @@ -2692,6 +2692,7 @@ class SubtypeTest extends _SubtypingTestBase with StringTypes { ); } + @SkippedTest() // TODO(scheglov): implement augmentation test_interfaceType_class_augmented_interfaces() { var A = class_2(name: 'A'); var I = class_2(name: 'I'); @@ -2712,6 +2713,7 @@ class SubtypeTest extends _SubtypingTestBase with StringTypes { isNotSubtype(I_none, A_none, strT0: 'I', strT1: 'A'); } + @SkippedTest() // TODO(scheglov): implement augmentation test_interfaceType_class_augmented_mixins() { var A = class_2(name: 'A'); var M = mixin_2(name: 'M'); @@ -2789,6 +2791,7 @@ class SubtypeTest extends _SubtypingTestBase with StringTypes { isNotSubtype(A_num, A_int, strT0: "A", strT1: "A"); } + @SkippedTest() // TODO(scheglov): implement augmentation test_interfaceType_mixin_augmented_interfaces() { var M = mixin_2(name: 'M'); var I = class_2(name: 'I'); diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart index 53cc2cd4a2f..d708d69df37 100644 --- a/pkg/analyzer/test/src/summary/elements/class_test.dart +++ b/pkg/analyzer/test/src/summary/elements/class_test.dart @@ -20539,7 +20539,6 @@ library supertype: Object mixins M - M constructors synthetic new firstFragment: ::@class::S::@constructor::new @@ -27703,7 +27702,6 @@ library supertype: A mixins M1 - M1 constructors synthetic new firstFragment: ::@class::C1::@constructor::new diff --git a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart index 66a6d2a2f98..6d2c92c45e8 100644 --- a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart +++ b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart @@ -1527,7 +1527,7 @@ library primaryConstructor: ::@extensionType::A::@constructor::new typeErasure: int interfaces - B + Object fields final it @21 reference: ::@extensionType::A::@field::it @@ -1545,7 +1545,7 @@ library primaryConstructor: ::@extensionType::B::@constructor::new typeErasure: int interfaces - A + Object fields final it @62 reference: ::@extensionType::B::@field::it @@ -1644,7 +1644,7 @@ library primaryConstructor: ::@extensionType::A::@constructor::new typeErasure: int interfaces - A + Object fields final it @21 reference: ::@extensionType::A::@field::it diff --git a/pkg/linter/test/rules/annotate_overrides_test.dart b/pkg/linter/test/rules/annotate_overrides_test.dart index f5282e62e9d..bfcd284c780 100644 --- a/pkg/linter/test/rules/annotate_overrides_test.dart +++ b/pkg/linter/test/rules/annotate_overrides_test.dart @@ -17,6 +17,7 @@ class AnnotateOverridesTest extends LintRuleTest { @override String get lintRule => LintNames.annotate_overrides; + @SkippedTest() // TODO(scheglov): implement augmentation test_augmentationClass_implementsInterface() async { var a = newFile('$testPackageLibPath/a.dart', r''' part 'b.dart';