diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index ce115e3ed2b..e10c8783700 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -4710,9 +4710,9 @@ abstract class InstanceFragmentImpl extends FragmentImpl fragment.enclosingFragment = this; } - void addTypeParameter(TypeParameterFragmentImpl typeParameter) { - _typeParameters.add(typeParameter); - typeParameter.enclosingFragment = this; + void addTypeParameter(TypeParameterFragmentImpl fragment) { + _typeParameters.add(fragment); + fragment.enclosingFragment = this; } } diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart index e743c2a122c..c26b9afaee0 100644 --- a/pkg/analyzer/lib/src/summary2/element_builder.dart +++ b/pkg/analyzer/lib/src/summary2/element_builder.dart @@ -201,7 +201,7 @@ class ElementBuilder { fragment.typeParameters.length = lastTypeParameterFragments.length; } - // Synthesize missing type parameters. + // Add missing type parameters. if (lastTypeParameterFragments.length > fragment.typeParameters.length) { for ( var i = fragment.typeParameters.length; diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart index 2fc6bbae0f4..39f6053e261 100644 --- a/pkg/analyzer/test/src/summary/elements/class_test.dart +++ b/pkg/analyzer/test/src/summary/elements/class_test.dart @@ -23580,223 +23580,126 @@ library '''); } - @SkippedTest(reason: 'Causes exception') test_augmented_fields_add_generic() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class A { - T1 foo2; -} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; -class A { - T1 foo1; +class A { + T foo1; +} + +augment class A { + T foo2; } '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T1 @23 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A - fields - foo1 @34 - reference: ::@class::A::@field::foo1 - enclosingElement3: ::@class::A - type: T1 - id: field_0 - getter: getter_0 - setter: setter_0 - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - accessors - synthetic get foo1 @-1 - reference: ::@class::A::@getter::foo1 - enclosingElement3: ::@class::A - returnType: T1 - id: getter_0 - variable: field_0 - synthetic set foo1= @-1 - reference: ::@class::A::@setter::foo1 - enclosingElement3: ::@class::A - parameters - requiredPositional _foo1 @-1 - type: T1 - returnType: void - id: setter_0 - variable: field_0 - augmented - fields - ::@class::A::@field::foo1 - FieldMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - augmentationSubstitution: {T1: T1} - constructors - ::@class::A::@constructor::new - accessors - ::@class::A::@getter::foo1 - ::@class::A::@setter::foo1 - GetterMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - augmentationSubstitution: {T1: T1} - SetterMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2 - augmentationSubstitution: {T1: T1} - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T1 @37 - defaultType: dynamic - augmentationTarget: ::@class::A - fields - foo2 @48 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - type: T1 - id: field_1 - getter: getter_1 - setter: setter_1 - accessors - synthetic get foo2 @-1 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - returnType: T1 - id: getter_1 - variable: field_1 - synthetic set foo2= @-1 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2 - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - parameters - requiredPositional _foo2 @-1 - type: T1 - returnType: void - id: setter_1 - variable: field_1 ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A + nextFragment: #F2 typeParameters - T1 @23 - element: + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T + nextFragment: #F4 fields - foo1 @34 - reference: ::@class::A::@field::foo1 - element: ::@class::A::@field::foo1#element - getter2: ::@class::A::@getter::foo1 - setter2: ::@class::A::@setter::foo1 + #F5 foo1 (nameOffset:17) (firstTokenOffset:17) (offset:17) + element: ::@class::A::@field::foo1 constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F6 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A getters - synthetic get foo1 - reference: ::@class::A::@getter::foo1 - element: ::@class::A::@getter::foo1#element + #F7 synthetic foo1 (nameOffset:) (firstTokenOffset:) (offset:17) + element: ::@class::A::@getter::foo1 setters - synthetic set foo1 - reference: ::@class::A::@setter::foo1 - element: ::@class::A::@setter::foo1#element + #F8 synthetic foo1 (nameOffset:) (firstTokenOffset:) (offset:17) + element: ::@class::A::@setter::foo1 formalParameters - _foo1 - element: ::@class::A::@setter::foo1::@parameter::_foo1#element - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A + #F9 value (nameOffset:) (firstTokenOffset:) (offset:17) + element: ::@class::A::@setter::foo1::@formalParameter::value + #F2 class A (nameOffset:40) (firstTokenOffset:26) (offset:40) element: ::@class::A - previousFragment: ::@class::A + previousFragment: #F1 typeParameters - T1 @37 - element: + #F4 T (nameOffset:42) (firstTokenOffset:42) (offset:42) + element: #E0 T + previousFragment: #F3 fields - foo2 @48 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element - getter2: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - setter2: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2 + #F10 foo2 (nameOffset:51) (firstTokenOffset:51) (offset:51) + element: ::@class::A::@field::foo2 getters - synthetic get foo2 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element + #F11 synthetic foo2 (nameOffset:) (firstTokenOffset:) (offset:51) + element: ::@class::A::@getter::foo2 setters - synthetic set foo2 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2 - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element + #F12 synthetic foo2 (nameOffset:) (firstTokenOffset:) (offset:51) + element: ::@class::A::@setter::foo2 formalParameters - _foo2 - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2::@parameter::_foo2#element + #F13 value (nameOffset:) (firstTokenOffset:) (offset:51) + element: ::@class::A::@setter::foo2::@formalParameter::value classes - class A + hasNonFinalField class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T1 + #E0 T + firstFragment: #F3 fields foo1 - firstFragment: ::@class::A::@field::foo1 - type: T1 - getter: ::@class::A::@getter::foo1#element - setter: ::@class::A::@setter::foo1#element + reference: ::@class::A::@field::foo1 + firstFragment: #F5 + hasEnclosingTypeParameterReference: true + type: T + getter: ::@class::A::@getter::foo1 + setter: ::@class::A::@setter::foo1 foo2 - firstFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - type: T1 - getter: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element - setter: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element + reference: ::@class::A::@field::foo2 + firstFragment: #F10 + hasEnclosingTypeParameterReference: true + type: T + getter: ::@class::A::@getter::foo2 + setter: ::@class::A::@setter::foo2 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F6 getters - synthetic get foo1 - firstFragment: ::@class::A::@getter::foo1 - synthetic get foo2 - firstFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 + synthetic foo1 + reference: ::@class::A::@getter::foo1 + firstFragment: #F7 + hasEnclosingTypeParameterReference: true + returnType: T + variable: ::@class::A::@field::foo1 + synthetic foo2 + reference: ::@class::A::@getter::foo2 + firstFragment: #F11 + hasEnclosingTypeParameterReference: true + returnType: T + variable: ::@class::A::@field::foo2 setters - synthetic set foo1 - firstFragment: ::@class::A::@setter::foo1 + synthetic foo1 + reference: ::@class::A::@setter::foo1 + firstFragment: #F8 + hasEnclosingTypeParameterReference: true formalParameters - requiredPositional _foo1 - type: T1 - synthetic set foo2 - firstFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2 + #E1 requiredPositional value + firstFragment: #F9 + type: T + returnType: void + variable: ::@class::A::@field::foo1 + synthetic foo2 + reference: ::@class::A::@setter::foo2 + firstFragment: #F12 + hasEnclosingTypeParameterReference: true formalParameters - requiredPositional _foo2 - type: T1 + #E2 requiredPositional value + firstFragment: #F13 + type: T + returnType: void + variable: ::@class::A::@field::foo2 '''); } @@ -24204,170 +24107,91 @@ library '''); } - @SkippedTest(reason: 'Causes exception') test_augmented_getters_add_generic() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class A { - T1 get foo2; -} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; -class A { - T1 get foo1; +class A { + T get foo1; +} + +augment class A { + T get foo2; } '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T1 @23 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A - fields - synthetic foo1 @-1 - reference: ::@class::A::@field::foo1 - enclosingElement3: ::@class::A - type: T1 - id: field_0 - getter: getter_0 - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - accessors - abstract get foo1 @38 - reference: ::@class::A::@getter::foo1 - enclosingElement3: ::@class::A - returnType: T1 - id: getter_0 - variable: field_0 - augmented - fields - ::@class::A::@field::foo1 - FieldMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - augmentationSubstitution: {T1: T1} - constructors - ::@class::A::@constructor::new - accessors - ::@class::A::@getter::foo1 - GetterMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - augmentationSubstitution: {T1: T1} - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T1 @37 - defaultType: dynamic - augmentationTarget: ::@class::A - fields - synthetic foo2 @-1 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - type: T1 - id: field_1 - getter: getter_1 - accessors - abstract get foo2 @52 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - returnType: T1 - id: getter_1 - variable: field_1 ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A + nextFragment: #F2 typeParameters - T1 @23 - element: + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T + nextFragment: #F4 fields - synthetic foo1 - reference: ::@class::A::@field::foo1 - element: ::@class::A::@field::foo1#element - getter2: ::@class::A::@getter::foo1 + #F5 synthetic foo1 (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@field::foo1 constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F6 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A getters - get foo1 @38 - reference: ::@class::A::@getter::foo1 - element: ::@class::A::@getter::foo1#element - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A + #F7 foo1 (nameOffset:21) (firstTokenOffset:15) (offset:21) + element: ::@class::A::@getter::foo1 + #F2 class A (nameOffset:44) (firstTokenOffset:30) (offset:44) element: ::@class::A - previousFragment: ::@class::A + previousFragment: #F1 typeParameters - T1 @37 - element: + #F4 T (nameOffset:46) (firstTokenOffset:46) (offset:46) + element: #E0 T + previousFragment: #F3 fields - synthetic foo2 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element - getter2: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 + #F8 synthetic foo2 (nameOffset:) (firstTokenOffset:) (offset:44) + element: ::@class::A::@field::foo2 getters - get foo2 @52 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element + #F9 foo2 (nameOffset:59) (firstTokenOffset:53) (offset:59) + element: ::@class::A::@getter::foo2 classes class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T1 + #E0 T + firstFragment: #F3 fields synthetic foo1 - firstFragment: ::@class::A::@field::foo1 - type: T1 - getter: ::@class::A::@getter::foo1#element + reference: ::@class::A::@field::foo1 + firstFragment: #F5 + hasEnclosingTypeParameterReference: true + type: T + getter: ::@class::A::@getter::foo1 synthetic foo2 - firstFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2 - type: T1 - getter: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element + reference: ::@class::A::@field::foo2 + firstFragment: #F8 + hasEnclosingTypeParameterReference: true + type: T + getter: ::@class::A::@getter::foo2 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F6 getters - abstract get foo1 - firstFragment: ::@class::A::@getter::foo1 - abstract get foo2 - firstFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2 + abstract foo1 + reference: ::@class::A::@getter::foo1 + firstFragment: #F7 + hasEnclosingTypeParameterReference: true + returnType: T + variable: ::@class::A::@field::foo1 + abstract foo2 + reference: ::@class::A::@getter::foo2 + firstFragment: #F9 + hasEnclosingTypeParameterReference: true + returnType: T + variable: ::@class::A::@field::foo2 '''); } @@ -24887,315 +24711,169 @@ library '''); } - @SkippedTest(reason: 'Causes exception') test_augmented_interfaces_generic() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class A implements I2 {} -class I2 {} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; class A implements I1 {} class I1 {} + +augment class A implements I2 {} +class I2 {} '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T @23 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A - interfaces - I1 - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - augmented - interfaces - I1 - I2 - constructors - ::@class::A::@constructor::new - class I1 @49 - reference: ::@class::I1 - enclosingElement3: - constructors - synthetic @-1 - reference: ::@class::I1::@constructor::new - enclosingElement3: ::@class::I1 - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T2 @37 - defaultType: dynamic - augmentationTarget: ::@class::A - interfaces - I2 - class I2 @68 - reference: ::@fragment::package:test/a.dart::@class::I2 - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant E @71 - defaultType: dynamic - constructors - synthetic @-1 - reference: ::@fragment::package:test/a.dart::@class::I2::@constructor::new - enclosingElement3: ::@fragment::package:test/a.dart::@class::I2 ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A + nextFragment: #F2 typeParameters - T @23 - element: + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T + nextFragment: #F4 constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F5 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A - class I1 @49 - reference: ::@class::I1 + #F6 class I1 (nameOffset:34) (firstTokenOffset:28) (offset:34) element: ::@class::I1 constructors - synthetic new - reference: ::@class::I1::@constructor::new - element: ::@class::I1::@constructor::new#element + #F7 synthetic new (nameOffset:) (firstTokenOffset:) (offset:34) + element: ::@class::I1::@constructor::new typeName: I1 - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A + #F2 class A (nameOffset:55) (firstTokenOffset:41) (offset:55) element: ::@class::A - previousFragment: ::@class::A + previousFragment: #F1 typeParameters - T2 @37 - element: - class I2 @68 - reference: ::@fragment::package:test/a.dart::@class::I2 + #F4 T (nameOffset:57) (firstTokenOffset:57) (offset:57) + element: #E0 T + previousFragment: #F3 + #F8 class I2 (nameOffset:86) (firstTokenOffset:80) (offset:86) element: ::@class::I2 typeParameters - E @71 - element: + #F9 E (nameOffset:89) (firstTokenOffset:89) (offset:89) + element: #E1 E constructors - synthetic new - reference: ::@fragment::package:test/a.dart::@class::I2::@constructor::new - element: ::@fragment::package:test/a.dart::@class::I2::@constructor::new#element + #F10 synthetic new (nameOffset:) (firstTokenOffset:) (offset:86) + element: ::@class::I2::@constructor::new typeName: I2 classes class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T + #E0 T + firstFragment: #F3 interfaces I1 I2 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F5 class I1 reference: ::@class::I1 - firstFragment: ::@class::I1 + firstFragment: #F6 constructors synthetic new - firstFragment: ::@class::I1::@constructor::new + reference: ::@class::I1::@constructor::new + firstFragment: #F7 class I2 reference: ::@class::I2 - firstFragment: ::@fragment::package:test/a.dart::@class::I2 + firstFragment: #F8 typeParameters - E + #E1 E + firstFragment: #F9 constructors synthetic new - firstFragment: ::@fragment::package:test/a.dart::@class::I2::@constructor::new + reference: ::@class::I2::@constructor::new + firstFragment: #F10 '''); } - @SkippedTest(reason: 'Causes exception') test_augmented_interfaces_generic_mismatch() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class A implements I2 {} -class I2 {} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; class A implements I1 {} class I1 {} + +augment class A implements I2 {} +class I2 {} '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T @23 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A - interfaces - I1 - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - augmented - interfaces - I1 - constructors - ::@class::A::@constructor::new - class I1 @49 - reference: ::@class::I1 - enclosingElement3: - constructors - synthetic @-1 - reference: ::@class::I1::@constructor::new - enclosingElement3: ::@class::I1 - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T2 @37 - defaultType: dynamic - covariant T3 @41 - defaultType: dynamic - augmentationTarget: ::@class::A - interfaces - I2 - class I2 @72 - reference: ::@fragment::package:test/a.dart::@class::I2 - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant E @75 - defaultType: dynamic - constructors - synthetic @-1 - reference: ::@fragment::package:test/a.dart::@class::I2::@constructor::new - enclosingElement3: ::@fragment::package:test/a.dart::@class::I2 ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A + nextFragment: #F2 typeParameters - T @23 - element: + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T + nextFragment: #F4 constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F5 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A - class I1 @49 - reference: ::@class::I1 + #F6 class I1 (nameOffset:34) (firstTokenOffset:28) (offset:34) element: ::@class::I1 constructors - synthetic new - reference: ::@class::I1::@constructor::new - element: ::@class::I1::@constructor::new#element + #F7 synthetic new (nameOffset:) (firstTokenOffset:) (offset:34) + element: ::@class::I1::@constructor::new typeName: I1 - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A + #F2 class A (nameOffset:55) (firstTokenOffset:41) (offset:55) element: ::@class::A - previousFragment: ::@class::A + previousFragment: #F1 typeParameters - T2 @37 - element: - T3 @41 - element: - class I2 @72 - reference: ::@fragment::package:test/a.dart::@class::I2 + #F4 T (nameOffset:57) (firstTokenOffset:57) (offset:57) + element: #E0 T + previousFragment: #F3 + #F8 class I2 (nameOffset:91) (firstTokenOffset:85) (offset:91) element: ::@class::I2 typeParameters - E @75 - element: + #F9 E (nameOffset:94) (firstTokenOffset:94) (offset:94) + element: #E1 E constructors - synthetic new - reference: ::@fragment::package:test/a.dart::@class::I2::@constructor::new - element: ::@fragment::package:test/a.dart::@class::I2::@constructor::new#element + #F10 synthetic new (nameOffset:) (firstTokenOffset:) (offset:91) + element: ::@class::I2::@constructor::new typeName: I2 classes class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T + #E0 T + firstFragment: #F3 interfaces I1 + I2 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F5 class I1 reference: ::@class::I1 - firstFragment: ::@class::I1 + firstFragment: #F6 constructors synthetic new - firstFragment: ::@class::I1::@constructor::new + reference: ::@class::I1::@constructor::new + firstFragment: #F7 class I2 reference: ::@class::I2 - firstFragment: ::@fragment::package:test/a.dart::@class::I2 + firstFragment: #F8 typeParameters - E + #E1 E + firstFragment: #F9 constructors synthetic new - firstFragment: ::@fragment::package:test/a.dart::@class::I2::@constructor::new + reference: ::@class::I2::@constructor::new + firstFragment: #F10 '''); } @@ -25761,257 +25439,134 @@ library '''); } - @SkippedTest(reason: 'Causes exception') test_augmented_methods_generic() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class A { - T2 bar() => throw 0; -} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; class A { T foo() => throw 0; } + +augment class A { + T bar() => throw 0; +} '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T @23 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - methods - foo @32 - reference: ::@class::A::@method::foo - enclosingElement3: ::@class::A - returnType: T - augmented - constructors - ::@class::A::@constructor::new - methods - MethodMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar - augmentationSubstitution: {T2: T} - ::@class::A::@method::foo - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T2 @37 - defaultType: dynamic - augmentationTarget: ::@class::A - methods - bar @48 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - returnType: T2 ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A + nextFragment: #F2 typeParameters - T @23 - element: + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T + nextFragment: #F4 constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F5 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A methods - foo @32 - reference: ::@class::A::@method::foo - element: ::@class::A::@method::foo#element - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A + #F6 foo (nameOffset:17) (firstTokenOffset:15) (offset:17) + element: ::@class::A::@method::foo + #F2 class A (nameOffset:52) (firstTokenOffset:38) (offset:52) element: ::@class::A - previousFragment: ::@class::A + previousFragment: #F1 typeParameters - T2 @37 - element: + #F4 T (nameOffset:54) (firstTokenOffset:54) (offset:54) + element: #E0 T + previousFragment: #F3 methods - bar @48 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar - element: ::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar#element + #F7 bar (nameOffset:63) (firstTokenOffset:61) (offset:63) + element: ::@class::A::@method::bar classes class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T + #E0 T + firstFragment: #F3 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F5 methods foo reference: ::@class::A::@method::foo - firstFragment: ::@class::A::@method::foo + firstFragment: #F6 + hasEnclosingTypeParameterReference: true + returnType: T bar reference: ::@class::A::@method::bar - firstFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar + firstFragment: #F7 + hasEnclosingTypeParameterReference: true + returnType: T '''); } - @SkippedTest(reason: 'Causes exception') test_augmented_methods_generic_augment() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class A { - augment T2 foo() => throw 0; -} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; class A { T foo() => throw 0; } + +augment class A { + augment T foo() => throw 0; +} '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T @23 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - methods - foo @32 - reference: ::@class::A::@method::foo - enclosingElement3: ::@class::A - returnType: T - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo - augmented - constructors - ::@class::A::@constructor::new - methods - MethodMember - base: ::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo - augmentationSubstitution: {T2: T} - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T2 @37 - defaultType: dynamic - augmentationTarget: ::@class::A - methods - augment foo @56 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo - enclosingElement3: ::@fragment::package:test/a.dart::@classAugmentation::A - returnType: T2 - augmentationTarget: ::@class::A::@method::foo ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A + nextFragment: #F2 typeParameters - T @23 - element: + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T + nextFragment: #F4 constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F5 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A methods - foo @32 - reference: ::@class::A::@method::foo - element: ::@class::A::@method::foo#element - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class A @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A + #F6 foo (nameOffset:17) (firstTokenOffset:15) (offset:17) + element: ::@class::A::@method::foo + nextFragment: #F7 + #F2 class A (nameOffset:52) (firstTokenOffset:38) (offset:52) element: ::@class::A - previousFragment: ::@class::A + previousFragment: #F1 typeParameters - T2 @37 - element: + #F4 T (nameOffset:54) (firstTokenOffset:54) (offset:54) + element: #E0 T + previousFragment: #F3 methods - augment foo @56 - reference: ::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo - element: ::@class::A::@method::foo#element - previousFragment: ::@class::A::@method::foo + #F7 augment foo (nameOffset:71) (firstTokenOffset:61) (offset:71) + element: ::@class::A::@method::foo + previousFragment: #F6 classes class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T + #E0 T + firstFragment: #F3 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F5 methods foo reference: ::@class::A::@method::foo - firstFragment: ::@class::A::@method::foo + firstFragment: #F6 + hasEnclosingTypeParameterReference: true + returnType: T '''); } @@ -27689,135 +27244,73 @@ library '''); } - @SkippedTest(reason: 'Causes exception') test_supertype_fromAugmentation() async { - newFile('$testPackageLibPath/a.dart', r''' -part of 'test.dart'; -augment class B extends A {} -'''); - var library = await buildLibrary(r''' -part 'a.dart'; class A {} -class B {} +class B {} + +augment class B extends A {} '''); checkElementText(library, r''' -library - reference: - definingUnit: - units - - enclosingElement3: - parts - part_0 - uri: package:test/a.dart - enclosingElement3: - unit: ::@fragment::package:test/a.dart - classes - class A @21 - reference: ::@class::A - enclosingElement3: - typeParameters - covariant T @23 - defaultType: dynamic - constructors - synthetic @-1 - reference: ::@class::A::@constructor::new - enclosingElement3: ::@class::A - class B @35 - reference: ::@class::B - enclosingElement3: - typeParameters - covariant T1 @37 - defaultType: dynamic - augmentation: ::@fragment::package:test/a.dart::@classAugmentation::B - supertype: A - constructors - synthetic @-1 - reference: ::@class::B::@constructor::new - enclosingElement3: ::@class::B - superConstructor: ConstructorMember - base: ::@class::A::@constructor::new - substitution: {T: T1} - augmented - constructors - ::@class::B::@constructor::new - ::@fragment::package:test/a.dart - enclosingElement3: - classes - augment class B @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::B - enclosingElement3: ::@fragment::package:test/a.dart - typeParameters - covariant T2 @37 - defaultType: dynamic - augmentationTarget: ::@class::B ----------------------------------------- library reference: fragments - + #F0 element: - nextFragment: ::@fragment::package:test/a.dart classes - class A @21 - reference: ::@class::A + #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6) element: ::@class::A typeParameters - T @23 - element: + #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T constructors - synthetic new - reference: ::@class::A::@constructor::new - element: ::@class::A::@constructor::new#element + #F3 synthetic new (nameOffset:) (firstTokenOffset:) (offset:6) + element: ::@class::A::@constructor::new typeName: A - class B @35 - reference: ::@class::B + #F4 class B (nameOffset:20) (firstTokenOffset:14) (offset:20) element: ::@class::B - nextFragment: ::@fragment::package:test/a.dart::@classAugmentation::B + nextFragment: #F5 typeParameters - T1 @37 - element: + #F6 T (nameOffset:22) (firstTokenOffset:22) (offset:22) + element: #E1 T + nextFragment: #F7 constructors - synthetic new - reference: ::@class::B::@constructor::new - element: ::@class::B::@constructor::new#element + #F8 synthetic new (nameOffset:) (firstTokenOffset:) (offset:20) + element: ::@class::B::@constructor::new typeName: B - superConstructor: ConstructorMember - base: ::@class::A::@constructor::new - substitution: {T: T1} - ::@fragment::package:test/a.dart - element: - enclosingFragment: - previousFragment: - classes - class B @35 - reference: ::@fragment::package:test/a.dart::@classAugmentation::B + #F5 class B (nameOffset:43) (firstTokenOffset:29) (offset:43) element: ::@class::B - previousFragment: ::@class::B + previousFragment: #F4 typeParameters - T2 @37 - element: + #F7 T (nameOffset:45) (firstTokenOffset:45) (offset:45) + element: #E1 T + previousFragment: #F6 classes class A reference: ::@class::A - firstFragment: ::@class::A + firstFragment: #F1 typeParameters - T + #E0 T + firstFragment: #F2 constructors synthetic new - firstFragment: ::@class::A::@constructor::new + reference: ::@class::A::@constructor::new + firstFragment: #F3 class B reference: ::@class::B - firstFragment: ::@class::B + firstFragment: #F4 typeParameters - T1 - supertype: A + #E1 T + firstFragment: #F6 + supertype: A constructors synthetic new - firstFragment: ::@class::B::@constructor::new - superConstructor: ::@class::A::@constructor::new#element + reference: ::@class::B::@constructor::new + firstFragment: #F8 + superConstructor: ConstructorMember + baseElement: ::@class::A::@constructor::new + substitution: {T: T} '''); } @@ -28050,8 +27543,8 @@ library test_typeParameters_bounds_01() async { var library = await buildLibrary(r''' -class A {} -augment class A {} +class A {} +augment class A {} '''); configuration.withConstructors = false; @@ -28066,22 +27559,22 @@ library element: ::@class::A nextFragment: #F2 typeParameters - #F3 T2 (nameOffset:8) (firstTokenOffset:8) (offset:8) - element: #E0 T2 + #F3 T (nameOffset:8) (firstTokenOffset:8) (offset:8) + element: #E0 T nextFragment: #F4 - #F2 class A (nameOffset:29) (firstTokenOffset:15) (offset:29) + #F2 class A (nameOffset:28) (firstTokenOffset:14) (offset:28) element: ::@class::A previousFragment: #F1 typeParameters - #F4 T2 (nameOffset:31) (firstTokenOffset:31) (offset:31) - element: #E0 T2 + #F4 T (nameOffset:30) (firstTokenOffset:30) (offset:30) + element: #E0 T previousFragment: #F3 classes class A reference: ::@class::A firstFragment: #F1 typeParameters - #E0 T2 + #E0 T firstFragment: #F3 '''); }