| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:test/test.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import '../../dart/resolution/node_text_expectations.dart'; |
| import '../elements_base.dart'; |
| |
| main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(MixinElementTest_keepLinking); |
| defineReflectiveTests(MixinElementTest_fromBytes); |
| // TODO(scheglov): implement augmentation |
| // defineReflectiveTests(MixinElementTest_augmentation_fromBytes); |
| // defineReflectiveTests(MixinElementTest_augmentation_keepLinking); |
| defineReflectiveTests(UpdateNodeTextExpectations); |
| }); |
| } |
| |
| abstract class MixinElementTest extends ElementsBaseTest { |
| test_mixin() async { |
| var library = await buildLibrary(r''' |
| class A {} |
| class B {} |
| class C {} |
| class D {} |
| |
| mixin M<T extends num, U> on A, B implements C, D { |
| T f; |
| U get g => 0; |
| set s(int v) {} |
| int m(double v) => 0; |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| class B @17 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::B |
| class C @28 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::C |
| class D @39 |
| reference: <testLibraryFragment>::@class::D |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::D::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::D |
| mixins |
| mixin M @51 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @53 |
| bound: num |
| defaultType: num |
| covariant U @68 |
| defaultType: dynamic |
| superclassConstraints |
| A |
| B |
| interfaces |
| C |
| D |
| fields |
| f @101 |
| reference: <testLibraryFragment>::@mixin::M::@field::f |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: T |
| synthetic g @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::g |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: U |
| synthetic s @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::s |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| accessors |
| synthetic get f @-1 |
| reference: <testLibraryFragment>::@mixin::M::@getter::f |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: T |
| synthetic set f= @-1 |
| reference: <testLibraryFragment>::@mixin::M::@setter::f |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| parameters |
| requiredPositional _f @-1 |
| type: T |
| returnType: void |
| get g @112 |
| reference: <testLibraryFragment>::@mixin::M::@getter::g |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: U |
| set s= @126 |
| reference: <testLibraryFragment>::@mixin::M::@setter::s |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| parameters |
| requiredPositional v @132 |
| type: int |
| returnType: void |
| methods |
| m @144 |
| reference: <testLibraryFragment>::@mixin::M::@method::m |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| parameters |
| requiredPositional v @153 |
| type: double |
| returnType: int |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| class B @17 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| element: <testLibraryFragment>::@class::B::@constructor::new#element |
| typeName: B |
| class C @28 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| element: <testLibraryFragment>::@class::C::@constructor::new#element |
| typeName: C |
| class D @39 |
| reference: <testLibraryFragment>::@class::D |
| element: <testLibrary>::@class::D |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::D::@constructor::new |
| element: <testLibraryFragment>::@class::D::@constructor::new#element |
| typeName: D |
| mixins |
| mixin M @51 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @53 |
| element: <not-implemented> |
| U @68 |
| element: <not-implemented> |
| fields |
| f @101 |
| reference: <testLibraryFragment>::@mixin::M::@field::f |
| element: <testLibraryFragment>::@mixin::M::@field::f#element |
| getter2: <testLibraryFragment>::@mixin::M::@getter::f |
| setter2: <testLibraryFragment>::@mixin::M::@setter::f |
| synthetic g |
| reference: <testLibraryFragment>::@mixin::M::@field::g |
| element: <testLibraryFragment>::@mixin::M::@field::g#element |
| getter2: <testLibraryFragment>::@mixin::M::@getter::g |
| synthetic s |
| reference: <testLibraryFragment>::@mixin::M::@field::s |
| element: <testLibraryFragment>::@mixin::M::@field::s#element |
| setter2: <testLibraryFragment>::@mixin::M::@setter::s |
| getters |
| synthetic get f |
| reference: <testLibraryFragment>::@mixin::M::@getter::f |
| element: <testLibraryFragment>::@mixin::M::@getter::f#element |
| get g @112 |
| reference: <testLibraryFragment>::@mixin::M::@getter::g |
| element: <testLibraryFragment>::@mixin::M::@getter::g#element |
| setters |
| synthetic set f |
| reference: <testLibraryFragment>::@mixin::M::@setter::f |
| element: <testLibraryFragment>::@mixin::M::@setter::f#element |
| formalParameters |
| _f |
| element: <testLibraryFragment>::@mixin::M::@setter::f::@parameter::_f#element |
| set s @126 |
| reference: <testLibraryFragment>::@mixin::M::@setter::s |
| element: <testLibraryFragment>::@mixin::M::@setter::s#element |
| formalParameters |
| v @132 |
| element: <testLibraryFragment>::@mixin::M::@setter::s::@parameter::v#element |
| methods |
| m @144 |
| reference: <testLibraryFragment>::@mixin::M::@method::m |
| element: <testLibraryFragment>::@mixin::M::@method::m#element |
| formalParameters |
| v @153 |
| element: <testLibraryFragment>::@mixin::M::@method::m::@parameter::v#element |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::B::@constructor::new |
| class C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::C::@constructor::new |
| class D |
| reference: <testLibrary>::@class::D |
| firstFragment: <testLibraryFragment>::@class::D |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::D::@constructor::new |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| bound: num |
| U |
| superclassConstraints |
| A |
| B |
| interfaces |
| C |
| D |
| fields |
| f |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::f |
| type: T |
| getter: <testLibraryFragment>::@mixin::M::@getter::f#element |
| setter: <testLibraryFragment>::@mixin::M::@setter::f#element |
| synthetic g |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::g |
| type: U |
| getter: <testLibraryFragment>::@mixin::M::@getter::g#element |
| synthetic s |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::s |
| type: int |
| setter: <testLibraryFragment>::@mixin::M::@setter::s#element |
| getters |
| synthetic get f |
| firstFragment: <testLibraryFragment>::@mixin::M::@getter::f |
| get g |
| firstFragment: <testLibraryFragment>::@mixin::M::@getter::g |
| setters |
| synthetic set f |
| firstFragment: <testLibraryFragment>::@mixin::M::@setter::f |
| formalParameters |
| requiredPositional _f |
| type: T |
| set s |
| firstFragment: <testLibraryFragment>::@mixin::M::@setter::s |
| formalParameters |
| requiredPositional v |
| type: int |
| methods |
| m |
| reference: <testLibrary>::@mixin::M::@method::m |
| firstFragment: <testLibraryFragment>::@mixin::M::@method::m |
| formalParameters |
| requiredPositional v |
| type: double |
| '''); |
| } |
| |
| test_mixin_base() async { |
| var library = await buildLibrary(r''' |
| base mixin M on A {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| base mixin M @11 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @11 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| mixins |
| base mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_mixin_field_inferredType_final() async { |
| var library = await buildLibrary(''' |
| mixin M { |
| final x = 0; |
| }'''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| fields |
| final x @18 |
| reference: <testLibraryFragment>::@mixin::M::@field::x |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| shouldUseTypeForInitializerInference: false |
| accessors |
| synthetic get x @-1 |
| reference: <testLibraryFragment>::@mixin::M::@getter::x |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: int |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| fields |
| hasInitializer x @18 |
| reference: <testLibraryFragment>::@mixin::M::@field::x |
| element: <testLibraryFragment>::@mixin::M::@field::x#element |
| getter2: <testLibraryFragment>::@mixin::M::@getter::x |
| getters |
| synthetic get x |
| reference: <testLibraryFragment>::@mixin::M::@getter::x |
| element: <testLibraryFragment>::@mixin::M::@getter::x#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| fields |
| final hasInitializer x |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::x |
| type: int |
| getter: <testLibraryFragment>::@mixin::M::@getter::x#element |
| getters |
| synthetic get x |
| firstFragment: <testLibraryFragment>::@mixin::M::@getter::x |
| '''); |
| } |
| |
| test_mixin_first() async { |
| var library = await buildLibrary(r''' |
| mixin M {} |
| '''); |
| |
| // We intentionally ask `mixins` directly, to check that we can ask them |
| // separately, without asking classes. |
| var mixins = library.definingCompilationUnit.mixins; |
| expect(mixins, hasLength(1)); |
| expect(mixins[0].name, 'M'); |
| } |
| |
| test_mixin_getter_invokesSuperSelf_getter() async { |
| var library = await buildLibrary(r''' |
| mixin M on A { |
| int get foo { |
| super.foo; |
| } |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| accessors |
| get foo @25 invokesSuperSelf |
| reference: <testLibraryFragment>::@mixin::M::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: int |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| element: <testLibraryFragment>::@mixin::M::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::M::@getter::foo |
| getters |
| get foo @25 |
| reference: <testLibraryFragment>::@mixin::M::@getter::foo |
| element: <testLibraryFragment>::@mixin::M::@getter::foo#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| fields |
| synthetic foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::M::@getter::foo#element |
| getters |
| get foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@getter::foo |
| '''); |
| } |
| |
| test_mixin_getter_invokesSuperSelf_getter_nestedInAssignment() async { |
| var library = await buildLibrary(r''' |
| mixin M on A { |
| int get foo { |
| (super.foo).foo = 0; |
| } |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| accessors |
| get foo @25 invokesSuperSelf |
| reference: <testLibraryFragment>::@mixin::M::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: int |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| element: <testLibraryFragment>::@mixin::M::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::M::@getter::foo |
| getters |
| get foo @25 |
| reference: <testLibraryFragment>::@mixin::M::@getter::foo |
| element: <testLibraryFragment>::@mixin::M::@getter::foo#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| fields |
| synthetic foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::M::@getter::foo#element |
| getters |
| get foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@getter::foo |
| '''); |
| } |
| |
| test_mixin_getter_invokesSuperSelf_setter() async { |
| var library = await buildLibrary(r''' |
| mixin M on A { |
| int get foo { |
| super.foo = 0; |
| } |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| accessors |
| get foo @25 |
| reference: <testLibraryFragment>::@mixin::M::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: int |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| element: <testLibraryFragment>::@mixin::M::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::M::@getter::foo |
| getters |
| get foo @25 |
| reference: <testLibraryFragment>::@mixin::M::@getter::foo |
| element: <testLibraryFragment>::@mixin::M::@getter::foo#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| fields |
| synthetic foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::M::@getter::foo#element |
| getters |
| get foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@getter::foo |
| '''); |
| } |
| |
| test_mixin_implicitObjectSuperclassConstraint() async { |
| var library = await buildLibrary(r''' |
| mixin M {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_mixin_inference() async { |
| var library = await buildLibrary(r''' |
| class A<T> {} |
| mixin M<U> on A<U> {} |
| class B extends A<int> with M {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @8 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| class B @42 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| supertype: A<int> |
| mixins |
| M<int> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::B |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: int} |
| mixins |
| mixin M @20 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant U @22 |
| defaultType: dynamic |
| superclassConstraints |
| A<U> |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| typeParameters |
| T @8 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| class B @42 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| element: <testLibraryFragment>::@class::B::@constructor::new#element |
| typeName: B |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: int} |
| mixins |
| mixin M @20 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| U @22 |
| element: <not-implemented> |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| typeParameters |
| T |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| supertype: A<int> |
| mixins |
| M<int> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::B::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| U |
| superclassConstraints |
| A<U> |
| '''); |
| } |
| |
| test_mixin_inference_classAlias_oneMixin() async { |
| // In the code below, B's superclass constraints don't include A, because |
| // superclass constraints are determined from the mixin's superclass, and |
| // B's superclass is Object. So no mixin type inference is attempted, and |
| // "with B" is interpreted as "with B<dynamic>". |
| var library = await buildLibrary(r''' |
| class A<T> {} |
| class B<T> = Object with A<T>; |
| class C = A<int> with B; |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @8 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| class alias B @20 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @22 |
| defaultType: dynamic |
| supertype: Object |
| mixins |
| A<T> |
| constructors |
| synthetic const @-1 |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::B |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: dart:core::<fragment>::@class::Object::@constructor::new |
| element: dart:core::<fragment>::@class::Object::@constructor::new#element |
| class alias C @51 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| supertype: A<int> |
| mixins |
| B<dynamic> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::C |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: int} |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| typeParameters |
| T @8 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| class B @20 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| typeParameters |
| T @22 |
| element: <not-implemented> |
| constructors |
| synthetic const new |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| element: <testLibraryFragment>::@class::B::@constructor::new#element |
| typeName: B |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: dart:core::<fragment>::@class::Object::@constructor::new |
| element: dart:core::<fragment>::@class::Object::@constructor::new#element |
| class C @51 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| element: <testLibraryFragment>::@class::C::@constructor::new#element |
| typeName: C |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: int} |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| typeParameters |
| T |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| class alias B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| typeParameters |
| T |
| supertype: Object |
| mixins |
| A<T> |
| constructors |
| synthetic const new |
| firstFragment: <testLibraryFragment>::@class::B::@constructor::new |
| class alias C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| supertype: A<int> |
| mixins |
| B<dynamic> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::C::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element |
| '''); |
| } |
| |
| test_mixin_inference_classAlias_twoMixins() async { |
| // In the code below, `B` has a single superclass constraint, A1, because |
| // superclass constraints are determined from the mixin's superclass, and |
| // B's superclass is "Object with A1<T>". So mixin type inference succeeds |
| // (since C's base class implements A1<int>), and "with B" is interpreted as |
| // "with B<int>". |
| var library = await buildLibrary(r''' |
| class A1<T> {} |
| class A2<T> {} |
| class B<T> = Object with A1<T>, A2<T>; |
| class Base implements A1<int> {} |
| class C = Base with B; |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A1 @6 |
| reference: <testLibraryFragment>::@class::A1 |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @9 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A1::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A1 |
| class A2 @21 |
| reference: <testLibraryFragment>::@class::A2 |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @24 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A2::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A2 |
| class alias B @36 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @38 |
| defaultType: dynamic |
| supertype: Object |
| mixins |
| A1<T> |
| A2<T> |
| constructors |
| synthetic const @-1 |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::B |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: dart:core::<fragment>::@class::Object::@constructor::new |
| element: dart:core::<fragment>::@class::Object::@constructor::new#element |
| class Base @75 |
| reference: <testLibraryFragment>::@class::Base |
| enclosingElement3: <testLibraryFragment> |
| interfaces |
| A1<int> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::Base::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::Base |
| class alias C @108 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| supertype: Base |
| mixins |
| B<int> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::C |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: <testLibraryFragment>::@class::Base::@constructor::new |
| element: <testLibraryFragment>::@class::Base::@constructor::new#element |
| superConstructor: <testLibraryFragment>::@class::Base::@constructor::new |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A1 @6 |
| reference: <testLibraryFragment>::@class::A1 |
| element: <testLibrary>::@class::A1 |
| typeParameters |
| T @9 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A1::@constructor::new |
| element: <testLibraryFragment>::@class::A1::@constructor::new#element |
| typeName: A1 |
| class A2 @21 |
| reference: <testLibraryFragment>::@class::A2 |
| element: <testLibrary>::@class::A2 |
| typeParameters |
| T @24 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A2::@constructor::new |
| element: <testLibraryFragment>::@class::A2::@constructor::new#element |
| typeName: A2 |
| class B @36 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| typeParameters |
| T @38 |
| element: <not-implemented> |
| constructors |
| synthetic const new |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| element: <testLibraryFragment>::@class::B::@constructor::new#element |
| typeName: B |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: dart:core::<fragment>::@class::Object::@constructor::new |
| element: dart:core::<fragment>::@class::Object::@constructor::new#element |
| class Base @75 |
| reference: <testLibraryFragment>::@class::Base |
| element: <testLibrary>::@class::Base |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::Base::@constructor::new |
| element: <testLibraryFragment>::@class::Base::@constructor::new#element |
| typeName: Base |
| class C @108 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| element: <testLibraryFragment>::@class::C::@constructor::new#element |
| typeName: C |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: <testLibraryFragment>::@class::Base::@constructor::new |
| element: <testLibraryFragment>::@class::Base::@constructor::new#element |
| superConstructor: <testLibraryFragment>::@class::Base::@constructor::new |
| classes |
| class A1 |
| reference: <testLibrary>::@class::A1 |
| firstFragment: <testLibraryFragment>::@class::A1 |
| typeParameters |
| T |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A1::@constructor::new |
| class A2 |
| reference: <testLibrary>::@class::A2 |
| firstFragment: <testLibraryFragment>::@class::A2 |
| typeParameters |
| T |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A2::@constructor::new |
| class alias B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| typeParameters |
| T |
| supertype: Object |
| mixins |
| A1<T> |
| A2<T> |
| constructors |
| synthetic const new |
| firstFragment: <testLibraryFragment>::@class::B::@constructor::new |
| class Base |
| reference: <testLibrary>::@class::Base |
| firstFragment: <testLibraryFragment>::@class::Base |
| interfaces |
| A1<int> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::Base::@constructor::new |
| class alias C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| supertype: Base |
| mixins |
| B<int> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::C::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::Base::@constructor::new#element |
| '''); |
| } |
| |
| test_mixin_inference_nested_functionType() async { |
| var library = await buildLibrary(r''' |
| class A<T> {} |
| mixin M<T, U> on A<T Function(U)> {} |
| class C extends A<int Function(String)> with M {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @8 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| class C @57 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| supertype: A<int Function(String)> |
| mixins |
| M<int, String> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::C |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: int Function(String)} |
| mixins |
| mixin M @20 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @22 |
| defaultType: dynamic |
| covariant U @25 |
| defaultType: dynamic |
| superclassConstraints |
| A<T Function(U)> |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| typeParameters |
| T @8 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| class C @57 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| element: <testLibraryFragment>::@class::C::@constructor::new#element |
| typeName: C |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: int Function(String)} |
| mixins |
| mixin M @20 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @22 |
| element: <not-implemented> |
| U @25 |
| element: <not-implemented> |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| typeParameters |
| T |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| class C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| supertype: A<int Function(String)> |
| mixins |
| M<int, String> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::C::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| U |
| superclassConstraints |
| A<T Function(U)> |
| '''); |
| } |
| |
| test_mixin_inference_nested_interfaceType() async { |
| var library = await buildLibrary(r''' |
| abstract class A<T> {} |
| mixin M<T> on A<List<T>> {} |
| class C extends A<List<int>> with M {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| abstract class A @15 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @17 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| class C @57 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| supertype: A<List<int>> |
| mixins |
| M<int> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::C |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: List<int>} |
| mixins |
| mixin M @29 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @31 |
| defaultType: dynamic |
| superclassConstraints |
| A<List<T>> |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @15 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| typeParameters |
| T @17 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| class C @57 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::C::@constructor::new |
| element: <testLibraryFragment>::@class::C::@constructor::new#element |
| typeName: C |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::A::@constructor::new |
| substitution: {T: List<int>} |
| mixins |
| mixin M @29 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @31 |
| element: <not-implemented> |
| classes |
| abstract class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| typeParameters |
| T |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| class C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| supertype: A<List<int>> |
| mixins |
| M<int> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::C::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| superclassConstraints |
| A<List<T>> |
| '''); |
| } |
| |
| test_mixin_inference_twoMixins() async { |
| // Both `M1` and `M2` have their type arguments inferred. |
| var library = await buildLibrary(r''' |
| class I<X> {} |
| mixin M1<T> on I<T> {} |
| mixin M2<T> on I<T> {} |
| class A = I<int> with M1, M2; |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class I @6 |
| reference: <testLibraryFragment>::@class::I |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant X @8 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::I::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::I |
| class alias A @66 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| supertype: I<int> |
| mixins |
| M1<int> |
| M2<int> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: <testLibraryFragment>::@class::I::@constructor::new |
| element: <testLibraryFragment>::@class::I::@constructor::new#element |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::I::@constructor::new |
| substitution: {X: int} |
| mixins |
| mixin M1 @20 |
| reference: <testLibraryFragment>::@mixin::M1 |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @23 |
| defaultType: dynamic |
| superclassConstraints |
| I<T> |
| mixin M2 @43 |
| reference: <testLibraryFragment>::@mixin::M2 |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @46 |
| defaultType: dynamic |
| superclassConstraints |
| I<T> |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class I @6 |
| reference: <testLibraryFragment>::@class::I |
| element: <testLibrary>::@class::I |
| typeParameters |
| X @8 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::I::@constructor::new |
| element: <testLibraryFragment>::@class::I::@constructor::new#element |
| typeName: I |
| class A @66 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| constantInitializers |
| SuperConstructorInvocation |
| superKeyword: super @0 |
| argumentList: ArgumentList |
| leftParenthesis: ( @0 |
| rightParenthesis: ) @0 |
| staticElement: <testLibraryFragment>::@class::I::@constructor::new |
| element: <testLibraryFragment>::@class::I::@constructor::new#element |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::I::@constructor::new |
| substitution: {X: int} |
| mixins |
| mixin M1 @20 |
| reference: <testLibraryFragment>::@mixin::M1 |
| element: <testLibrary>::@mixin::M1 |
| typeParameters |
| T @23 |
| element: <not-implemented> |
| mixin M2 @43 |
| reference: <testLibraryFragment>::@mixin::M2 |
| element: <testLibrary>::@mixin::M2 |
| typeParameters |
| T @46 |
| element: <not-implemented> |
| classes |
| class I |
| reference: <testLibrary>::@class::I |
| firstFragment: <testLibraryFragment>::@class::I |
| typeParameters |
| X |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::I::@constructor::new |
| class alias A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| supertype: I<int> |
| mixins |
| M1<int> |
| M2<int> |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::I::@constructor::new#element |
| mixins |
| mixin M1 |
| reference: <testLibrary>::@mixin::M1 |
| firstFragment: <testLibraryFragment>::@mixin::M1 |
| typeParameters |
| T |
| superclassConstraints |
| I<T> |
| mixin M2 |
| reference: <testLibrary>::@mixin::M2 |
| firstFragment: <testLibraryFragment>::@mixin::M2 |
| typeParameters |
| T |
| superclassConstraints |
| I<T> |
| '''); |
| } |
| |
| test_mixin_inference_viaTypeAlias() async { |
| var library = await buildLibrary(r''' |
| mixin M<T, U> on S<T> {} |
| |
| typedef M2<T2> = M<T2, int>; |
| |
| class S<T3> {} |
| |
| class X extends S<String> with M2 {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class S @62 |
| reference: <testLibraryFragment>::@class::S |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T3 @64 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::S::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::S |
| class X @78 |
| reference: <testLibraryFragment>::@class::X |
| enclosingElement3: <testLibraryFragment> |
| supertype: S<String> |
| mixins |
| M<String, int> |
| alias: <testLibraryFragment>::@typeAlias::M2 |
| typeArguments |
| String |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::X::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::X |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::S::@constructor::new |
| substitution: {T3: String} |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @8 |
| defaultType: dynamic |
| covariant U @11 |
| defaultType: dynamic |
| superclassConstraints |
| S<T> |
| typeAliases |
| M2 @34 |
| reference: <testLibraryFragment>::@typeAlias::M2 |
| typeParameters |
| covariant T2 @37 |
| defaultType: dynamic |
| aliasedType: M<T2, int> |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class S @62 |
| reference: <testLibraryFragment>::@class::S |
| element: <testLibrary>::@class::S |
| typeParameters |
| T3 @64 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::S::@constructor::new |
| element: <testLibraryFragment>::@class::S::@constructor::new#element |
| typeName: S |
| class X @78 |
| reference: <testLibraryFragment>::@class::X |
| element: <testLibrary>::@class::X |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::X::@constructor::new |
| element: <testLibraryFragment>::@class::X::@constructor::new#element |
| typeName: X |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::S::@constructor::new |
| substitution: {T3: String} |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @8 |
| element: <not-implemented> |
| U @11 |
| element: <not-implemented> |
| typeAliases |
| M2 @34 |
| reference: <testLibraryFragment>::@typeAlias::M2 |
| element: <testLibrary>::@typeAlias::M2 |
| typeParameters |
| T2 @37 |
| element: <not-implemented> |
| classes |
| class S |
| reference: <testLibrary>::@class::S |
| firstFragment: <testLibraryFragment>::@class::S |
| typeParameters |
| T3 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::S::@constructor::new |
| class X |
| reference: <testLibrary>::@class::X |
| firstFragment: <testLibraryFragment>::@class::X |
| supertype: S<String> |
| mixins |
| M<String, int> |
| alias: <testLibraryFragment>::@typeAlias::M2 |
| typeArguments |
| String |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::X::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::S::@constructor::new#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| U |
| superclassConstraints |
| S<T> |
| typeAliases |
| M2 |
| firstFragment: <testLibraryFragment>::@typeAlias::M2 |
| typeParameters |
| T2 |
| aliasedType: M<T2, int> |
| '''); |
| } |
| |
| test_mixin_inference_viaTypeAlias2() async { |
| var library = await buildLibrary(r''' |
| mixin M<T, U> on S<T> {} |
| |
| typedef M2<T2> = M<T2, int>; |
| |
| typedef M3<T3> = M2<T3>; |
| |
| class S<T4> {} |
| |
| class X extends S<String> with M3 {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class S @88 |
| reference: <testLibraryFragment>::@class::S |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T4 @90 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::S::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::S |
| class X @104 |
| reference: <testLibraryFragment>::@class::X |
| enclosingElement3: <testLibraryFragment> |
| supertype: S<String> |
| mixins |
| M<String, int> |
| alias: <testLibraryFragment>::@typeAlias::M3 |
| typeArguments |
| String |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::X::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::X |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::S::@constructor::new |
| substitution: {T4: String} |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @8 |
| defaultType: dynamic |
| covariant U @11 |
| defaultType: dynamic |
| superclassConstraints |
| S<T> |
| typeAliases |
| M2 @34 |
| reference: <testLibraryFragment>::@typeAlias::M2 |
| typeParameters |
| covariant T2 @37 |
| defaultType: dynamic |
| aliasedType: M<T2, int> |
| M3 @64 |
| reference: <testLibraryFragment>::@typeAlias::M3 |
| typeParameters |
| covariant T3 @67 |
| defaultType: dynamic |
| aliasedType: M<T3, int> |
| alias: <testLibraryFragment>::@typeAlias::M2 |
| typeArguments |
| T3 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class S @88 |
| reference: <testLibraryFragment>::@class::S |
| element: <testLibrary>::@class::S |
| typeParameters |
| T4 @90 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::S::@constructor::new |
| element: <testLibraryFragment>::@class::S::@constructor::new#element |
| typeName: S |
| class X @104 |
| reference: <testLibraryFragment>::@class::X |
| element: <testLibrary>::@class::X |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::X::@constructor::new |
| element: <testLibraryFragment>::@class::X::@constructor::new#element |
| typeName: X |
| superConstructor: ConstructorMember |
| base: <testLibraryFragment>::@class::S::@constructor::new |
| substitution: {T4: String} |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @8 |
| element: <not-implemented> |
| U @11 |
| element: <not-implemented> |
| typeAliases |
| M2 @34 |
| reference: <testLibraryFragment>::@typeAlias::M2 |
| element: <testLibrary>::@typeAlias::M2 |
| typeParameters |
| T2 @37 |
| element: <not-implemented> |
| M3 @64 |
| reference: <testLibraryFragment>::@typeAlias::M3 |
| element: <testLibrary>::@typeAlias::M3 |
| typeParameters |
| T3 @67 |
| element: <not-implemented> |
| classes |
| class S |
| reference: <testLibrary>::@class::S |
| firstFragment: <testLibraryFragment>::@class::S |
| typeParameters |
| T4 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::S::@constructor::new |
| class X |
| reference: <testLibrary>::@class::X |
| firstFragment: <testLibraryFragment>::@class::X |
| supertype: S<String> |
| mixins |
| M<String, int> |
| alias: <testLibraryFragment>::@typeAlias::M3 |
| typeArguments |
| String |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::X::@constructor::new |
| superConstructor: <testLibraryFragment>::@class::S::@constructor::new#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| U |
| superclassConstraints |
| S<T> |
| typeAliases |
| M2 |
| firstFragment: <testLibraryFragment>::@typeAlias::M2 |
| typeParameters |
| T2 |
| aliasedType: M<T2, int> |
| M3 |
| firstFragment: <testLibraryFragment>::@typeAlias::M3 |
| typeParameters |
| T3 |
| aliasedType: M<T3, int> |
| alias: <testLibraryFragment>::@typeAlias::M2 |
| typeArguments |
| T3 |
| '''); |
| } |
| |
| test_mixin_interfaces_extensionType() async { |
| var library = await buildLibrary(r''' |
| class A {} |
| extension type B(int it) {} |
| class C {} |
| mixin M implements A, B, C {} |
| '''); |
| configuration.withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| class C @45 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| extensionTypes |
| B @26 |
| reference: <testLibraryFragment>::@extensionType::B |
| enclosingElement3: <testLibraryFragment> |
| representation: <testLibraryFragment>::@extensionType::B::@field::it |
| primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new |
| typeErasure: int |
| fields |
| final it @32 |
| reference: <testLibraryFragment>::@extensionType::B::@field::it |
| enclosingElement3: <testLibraryFragment>::@extensionType::B |
| type: int |
| accessors |
| synthetic get it @-1 |
| reference: <testLibraryFragment>::@extensionType::B::@getter::it |
| enclosingElement3: <testLibraryFragment>::@extensionType::B |
| returnType: int |
| mixins |
| mixin M @56 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| interfaces |
| A |
| C |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| class C @45 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| extensionTypes |
| extension type B @26 |
| reference: <testLibraryFragment>::@extensionType::B |
| element: <testLibrary>::@extensionType::B |
| fields |
| it @32 |
| reference: <testLibraryFragment>::@extensionType::B::@field::it |
| element: <testLibraryFragment>::@extensionType::B::@field::it#element |
| getter2: <testLibraryFragment>::@extensionType::B::@getter::it |
| getters |
| synthetic get it |
| reference: <testLibraryFragment>::@extensionType::B::@getter::it |
| element: <testLibraryFragment>::@extensionType::B::@getter::it#element |
| mixins |
| mixin M @56 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| class C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| extensionTypes |
| extension type B |
| reference: <testLibrary>::@extensionType::B |
| firstFragment: <testLibraryFragment>::@extensionType::B |
| representation: <testLibraryFragment>::@extensionType::B::@field::it#element |
| primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new#element |
| typeErasure: int |
| fields |
| final it |
| firstFragment: <testLibraryFragment>::@extensionType::B::@field::it |
| type: int |
| getter: <testLibraryFragment>::@extensionType::B::@getter::it#element |
| getters |
| synthetic get it |
| firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| interfaces |
| A |
| C |
| '''); |
| } |
| |
| test_mixin_method_invokesSuperSelf() async { |
| var library = await buildLibrary(r''' |
| mixin M on A { |
| void foo() { |
| super.foo(); |
| } |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| methods |
| foo @22 invokesSuperSelf |
| reference: <testLibraryFragment>::@mixin::M::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| methods |
| foo @22 invokesSuperSelf |
| reference: <testLibraryFragment>::@mixin::M::@method::foo |
| element: <testLibraryFragment>::@mixin::M::@method::foo#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| methods |
| foo |
| reference: <testLibrary>::@mixin::M::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@method::foo |
| '''); |
| } |
| |
| test_mixin_method_namedAsConstraint() async { |
| var library = await buildLibrary(r''' |
| class A {} |
| mixin B on A { |
| void A() {} |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::A |
| mixins |
| mixin B @17 |
| reference: <testLibraryFragment>::@mixin::B |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| A |
| methods |
| A @33 |
| reference: <testLibraryFragment>::@mixin::B::@method::A |
| enclosingElement3: <testLibraryFragment>::@mixin::B |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::A::@constructor::new |
| element: <testLibraryFragment>::@class::A::@constructor::new#element |
| typeName: A |
| mixins |
| mixin B @17 |
| reference: <testLibraryFragment>::@mixin::B |
| element: <testLibrary>::@mixin::B |
| methods |
| A @33 |
| reference: <testLibraryFragment>::@mixin::B::@method::A |
| element: <testLibraryFragment>::@mixin::B::@method::A#element |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::A::@constructor::new |
| mixins |
| mixin B |
| reference: <testLibrary>::@mixin::B |
| firstFragment: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| A |
| methods |
| A |
| reference: <testLibrary>::@mixin::B::@method::A |
| firstFragment: <testLibraryFragment>::@mixin::B::@method::A |
| '''); |
| } |
| |
| test_mixin_missingName() async { |
| var library = await buildLibrary(r''' |
| mixin {} |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin @6 |
| reference: <testLibraryFragment>::@mixin::0 |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin <null-name> |
| reference: <testLibraryFragment>::@mixin::0 |
| element: <testLibrary>::@mixin::0 |
| mixins |
| mixin |
| reference: <testLibrary>::@mixin::0 |
| firstFragment: <testLibraryFragment>::@mixin::0 |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_mixin_setter_invokesSuperSelf_getter() async { |
| var library = await buildLibrary(r''' |
| mixin M on A { |
| set foo(int _) { |
| super.foo; |
| } |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| accessors |
| set foo= @21 |
| reference: <testLibraryFragment>::@mixin::M::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| parameters |
| requiredPositional _ @29 |
| type: int |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| element: <testLibraryFragment>::@mixin::M::@field::foo#element |
| setter2: <testLibraryFragment>::@mixin::M::@setter::foo |
| setters |
| set foo @21 |
| reference: <testLibraryFragment>::@mixin::M::@setter::foo |
| element: <testLibraryFragment>::@mixin::M::@setter::foo#element |
| formalParameters |
| _ @29 |
| element: <testLibraryFragment>::@mixin::M::@setter::foo::@parameter::_#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| fields |
| synthetic foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::foo |
| type: int |
| setter: <testLibraryFragment>::@mixin::M::@setter::foo#element |
| setters |
| set foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@setter::foo |
| formalParameters |
| requiredPositional _ |
| type: int |
| '''); |
| } |
| |
| test_mixin_setter_invokesSuperSelf_setter() async { |
| var library = await buildLibrary(r''' |
| mixin M on A { |
| set foo(int _) { |
| super.foo = 0; |
| } |
| } |
| '''); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| type: int |
| accessors |
| set foo= @21 invokesSuperSelf |
| reference: <testLibraryFragment>::@mixin::M::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::M |
| parameters |
| requiredPositional _ @29 |
| type: int |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::M::@field::foo |
| element: <testLibraryFragment>::@mixin::M::@field::foo#element |
| setter2: <testLibraryFragment>::@mixin::M::@setter::foo |
| setters |
| set foo @21 |
| reference: <testLibraryFragment>::@mixin::M::@setter::foo |
| element: <testLibraryFragment>::@mixin::M::@setter::foo#element |
| formalParameters |
| _ @29 |
| element: <testLibraryFragment>::@mixin::M::@setter::foo::@parameter::_#element |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| fields |
| synthetic foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@field::foo |
| type: int |
| setter: <testLibraryFragment>::@mixin::M::@setter::foo#element |
| setters |
| set foo |
| firstFragment: <testLibraryFragment>::@mixin::M::@setter::foo |
| formalParameters |
| requiredPositional _ |
| type: int |
| '''); |
| } |
| |
| test_mixin_superclassConstraints_extensionType() async { |
| var library = await buildLibrary(r''' |
| class A {} |
| extension type B(int it) {} |
| class C {} |
| mixin M on A, B, C {} |
| '''); |
| configuration.withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| class C @45 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| extensionTypes |
| B @26 |
| reference: <testLibraryFragment>::@extensionType::B |
| enclosingElement3: <testLibraryFragment> |
| representation: <testLibraryFragment>::@extensionType::B::@field::it |
| primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new |
| typeErasure: int |
| fields |
| final it @32 |
| reference: <testLibraryFragment>::@extensionType::B::@field::it |
| enclosingElement3: <testLibraryFragment>::@extensionType::B |
| type: int |
| accessors |
| synthetic get it @-1 |
| reference: <testLibraryFragment>::@extensionType::B::@getter::it |
| enclosingElement3: <testLibraryFragment>::@extensionType::B |
| returnType: int |
| mixins |
| mixin M @56 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| A |
| C |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| class C @45 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| extensionTypes |
| extension type B @26 |
| reference: <testLibraryFragment>::@extensionType::B |
| element: <testLibrary>::@extensionType::B |
| fields |
| it @32 |
| reference: <testLibraryFragment>::@extensionType::B::@field::it |
| element: <testLibraryFragment>::@extensionType::B::@field::it#element |
| getter2: <testLibraryFragment>::@extensionType::B::@getter::it |
| getters |
| synthetic get it |
| reference: <testLibraryFragment>::@extensionType::B::@getter::it |
| element: <testLibraryFragment>::@extensionType::B::@getter::it#element |
| mixins |
| mixin M @56 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| class C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| extensionTypes |
| extension type B |
| reference: <testLibrary>::@extensionType::B |
| firstFragment: <testLibraryFragment>::@extensionType::B |
| representation: <testLibraryFragment>::@extensionType::B::@field::it#element |
| primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new#element |
| typeErasure: int |
| fields |
| final it |
| firstFragment: <testLibraryFragment>::@extensionType::B::@field::it |
| type: int |
| getter: <testLibraryFragment>::@extensionType::B::@getter::it#element |
| getters |
| synthetic get it |
| firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| A |
| C |
| '''); |
| } |
| |
| test_mixin_typeParameters_variance_contravariant() async { |
| var library = await buildLibrary('mixin M<in T> {}'); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| contravariant T @11 |
| defaultType: dynamic |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @11 |
| element: <not-implemented> |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_mixin_typeParameters_variance_covariant() async { |
| var library = await buildLibrary('mixin M<out T> {}'); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @12 |
| defaultType: dynamic |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @12 |
| element: <not-implemented> |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_mixin_typeParameters_variance_invariant() async { |
| var library = await buildLibrary('mixin M<inout T> {}'); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| invariant T @14 |
| defaultType: dynamic |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @14 |
| element: <not-implemented> |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_mixin_typeParameters_variance_multiple() async { |
| var library = await buildLibrary('mixin M<inout T, in U, out V> {}'); |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| invariant T @14 |
| defaultType: dynamic |
| contravariant U @20 |
| defaultType: dynamic |
| covariant V @27 |
| defaultType: dynamic |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| typeParameters |
| T @14 |
| element: <not-implemented> |
| U @20 |
| element: <not-implemented> |
| V @27 |
| element: <not-implemented> |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| typeParameters |
| T |
| U |
| V |
| superclassConstraints |
| Object |
| '''); |
| } |
| } |
| |
| abstract class MixinElementTest_augmentation extends ElementsBaseTest { |
| test_allSupertypes() async { |
| var library = await buildLibrary(r''' |
| mixin M {} |
| class A with M {} |
| '''); |
| |
| configuration |
| ..withAllSupertypes = true |
| ..withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @17 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| supertype: Object |
| mixins |
| M |
| allSupertypes |
| M |
| Object |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| allSupertypes |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @17 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| mixins |
| mixin M @6 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| supertype: Object |
| mixins |
| M |
| allSupertypes |
| M |
| Object |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| Object |
| allSupertypes |
| Object |
| '''); |
| } |
| |
| test_allSupertypes_generic() async { |
| var library = await buildLibrary(r''' |
| class A<T, U> {} |
| class B<T> extends A<int, T> {} |
| |
| mixin M1 on A<int, double> {} |
| mixin M2 on B<String> {} |
| '''); |
| |
| configuration |
| ..withAllSupertypes = true |
| ..withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @8 |
| defaultType: dynamic |
| covariant U @11 |
| defaultType: dynamic |
| allSupertypes |
| Object |
| class B @23 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @25 |
| defaultType: dynamic |
| supertype: A<int, T> |
| allSupertypes |
| A<int, T> |
| Object |
| mixins |
| mixin M1 @56 |
| reference: <testLibraryFragment>::@mixin::M1 |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| A<int, double> |
| allSupertypes |
| A<int, double> |
| Object |
| mixin M2 @86 |
| reference: <testLibraryFragment>::@mixin::M2 |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| B<String> |
| allSupertypes |
| A<int, String> |
| B<String> |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| typeParameters |
| T @8 |
| element: <not-implemented> |
| U @11 |
| element: <not-implemented> |
| class B @23 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| typeParameters |
| T @25 |
| element: <not-implemented> |
| mixins |
| mixin M1 @56 |
| reference: <testLibraryFragment>::@mixin::M1 |
| element: <testLibrary>::@mixin::M1 |
| mixin M2 @86 |
| reference: <testLibraryFragment>::@mixin::M2 |
| element: <testLibrary>::@mixin::M2 |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| typeParameters |
| T |
| U |
| allSupertypes |
| Object |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| typeParameters |
| T |
| supertype: A<int, T> |
| allSupertypes |
| A<int, T> |
| Object |
| mixins |
| mixin M1 |
| reference: <testLibrary>::@mixin::M1 |
| firstFragment: <testLibraryFragment>::@mixin::M1 |
| superclassConstraints |
| A<int, double> |
| allSupertypes |
| A<int, double> |
| Object |
| mixin M2 |
| reference: <testLibrary>::@mixin::M2 |
| firstFragment: <testLibraryFragment>::@mixin::M2 |
| superclassConstraints |
| B<String> |
| allSupertypes |
| A<int, String> |
| B<String> |
| Object |
| '''); |
| } |
| |
| test_allSupertypes_hasInterfaces() async { |
| var library = await buildLibrary(r''' |
| class A {} |
| class B {} |
| class C {} |
| |
| mixin M on A implements B, C {} |
| '''); |
| |
| configuration |
| ..withAllSupertypes = true |
| ..withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| allSupertypes |
| Object |
| class B @17 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| allSupertypes |
| Object |
| class C @28 |
| reference: <testLibraryFragment>::@class::C |
| enclosingElement3: <testLibraryFragment> |
| allSupertypes |
| Object |
| mixins |
| mixin M @40 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| A |
| interfaces |
| B |
| C |
| allSupertypes |
| A |
| B |
| C |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| class B @17 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| class C @28 |
| reference: <testLibraryFragment>::@class::C |
| element: <testLibrary>::@class::C |
| mixins |
| mixin M @40 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| allSupertypes |
| Object |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| allSupertypes |
| Object |
| class C |
| reference: <testLibrary>::@class::C |
| firstFragment: <testLibraryFragment>::@class::C |
| allSupertypes |
| Object |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| A |
| interfaces |
| B |
| C |
| allSupertypes |
| A |
| B |
| C |
| Object |
| '''); |
| } |
| |
| test_allSupertypes_hasSuperclassConstraints() async { |
| var library = await buildLibrary(r''' |
| class A {} |
| mixin M on A {} |
| class B with M {} |
| '''); |
| |
| configuration |
| ..withAllSupertypes = true |
| ..withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| enclosingElement3: <testLibraryFragment> |
| allSupertypes |
| Object |
| class B @33 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| supertype: Object |
| mixins |
| M |
| allSupertypes |
| A |
| M |
| Object |
| mixins |
| mixin M @17 |
| reference: <testLibraryFragment>::@mixin::M |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| A |
| allSupertypes |
| A |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class A @6 |
| reference: <testLibraryFragment>::@class::A |
| element: <testLibrary>::@class::A |
| class B @33 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| mixins |
| mixin M @17 |
| reference: <testLibraryFragment>::@mixin::M |
| element: <testLibrary>::@mixin::M |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibraryFragment>::@class::A |
| allSupertypes |
| Object |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| supertype: Object |
| mixins |
| M |
| allSupertypes |
| A |
| M |
| Object |
| mixins |
| mixin M |
| reference: <testLibrary>::@mixin::M |
| firstFragment: <testLibraryFragment>::@mixin::M |
| superclassConstraints |
| A |
| allSupertypes |
| A |
| Object |
| '''); |
| } |
| |
| test_augmentationTarget() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| part 'b.dart'; |
| augment mixin A {} |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'a.dart'; |
| augment mixin A {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A {} |
| '''); |
| |
| configuration.withExportScope = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| augmented |
| superclassConstraints |
| Object |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| augment mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| augment mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| exportedReferences |
| declared <testLibraryFragment>::@mixin::A |
| exportNamespace |
| A: <testLibraryFragment>::@mixin::A |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibrary>::@fragment::package:test/a.dart |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| exportedReferences |
| declared <testLibraryFragment>::@mixin::A |
| exportNamespace |
| A: <testLibraryFragment>::@mixin::A |
| '''); |
| } |
| |
| test_augmentationTarget_augmentationThenDeclaration() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| |
| augment class A { |
| void foo1() {} |
| } |
| |
| class A { |
| void foo2() {} |
| } |
| |
| augment class A { |
| void foo3() {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| augment class A @36 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0 |
| methods |
| foo1 @47 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0 |
| returnType: void |
| class A @66 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1 |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| methods |
| foo2 @77 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| returnType: void |
| augmented |
| constructors |
| <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new |
| methods |
| <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2 |
| <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3 |
| augment class A @104 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| methods |
| foo3 @115 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1 |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| classes |
| class A @36 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0 |
| element: <testLibrary>::@class::A::@def::0 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new#element |
| typeName: A |
| methods |
| foo1 @47 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1 |
| element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1#element |
| class A @66 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| element: <testLibrary>::@class::A::@def::1 |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new#element |
| typeName: A |
| methods |
| foo2 @77 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2#element |
| class A @104 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1 |
| element: <testLibrary>::@class::A::@def::1 |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| methods |
| foo3 @115 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3 |
| element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3#element |
| classes |
| class A |
| reference: <testLibrary>::@class::A::@def::0 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new |
| methods |
| foo1 |
| reference: <testLibrary>::@class::A::@def::0::@method::foo1 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1 |
| class A |
| reference: <testLibrary>::@class::A::@def::1 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new |
| methods |
| foo2 |
| reference: <testLibrary>::@class::A::@def::1::@method::foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2 |
| foo3 |
| reference: <testLibrary>::@class::A::@def::1::@method::foo3 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3 |
| '''); |
| } |
| |
| test_augmentationTarget_no2() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| part 'b.dart'; |
| augment mixin A { |
| void foo1() {} |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'a.dart'; |
| augment mixin A { |
| void foo2() {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin B {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin B @21 |
| reference: <testLibraryFragment>::@mixin::B |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| augment mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo1 @61 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: void |
| augmented |
| superclassConstraints |
| Object |
| methods |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1 |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2 |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| augment mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| foo2 @43 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin B @21 |
| reference: <testLibraryFragment>::@mixin::B |
| element: <testLibrary>::@mixin::B |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| methods |
| foo1 @61 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1#element |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibrary>::@fragment::package:test/a.dart |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| foo2 @43 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2 |
| element: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2#element |
| mixins |
| mixin B |
| reference: <testLibrary>::@mixin::B |
| firstFragment: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| Object |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo1 |
| reference: <testLibrary>::@mixin::A::@method::foo1 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1 |
| foo2 |
| reference: <testLibrary>::@mixin::A::@method::foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2 |
| '''); |
| } |
| |
| test_augmented_field_augment_field() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int foo = 1; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| augment foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| fields |
| augment hasInitializer foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_field_augment_field2() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int foo = 1; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int foo = 2; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| fields |
| augment foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| augment foo @53 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_2 |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| fields |
| augment hasInitializer foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| augment hasInitializer foo @53 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_field_augment_field_afterGetter() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo => 1; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int foo = 2; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| accessors |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_1 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| augment foo @53 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| getters |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| augment hasInitializer foo @53 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_field_augment_field_afterSetter() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment set foo(int _) {} |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int foo = 2; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| accessors |
| augment set foo= @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| parameters |
| requiredPositional _ @61 |
| type: int |
| returnType: void |
| id: setter_1 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| augment foo @53 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| setters |
| augment set foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _ @61 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo::@parameter::_#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| augment hasInitializer foo @53 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_field_augment_field_differentTypes() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment double foo = 1.2; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| augment foo @56 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: double |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| fields |
| augment hasInitializer foo @56 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| /// This is not allowed by the specification, but allowed syntactically, |
| /// so we need a way to handle it. |
| test_augmented_field_augment_getter() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int foo = 1; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int get foo => 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_0 |
| getter: getter_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| get foo @35 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| augment foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| getters |
| get foo @35 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| fields |
| augment hasInitializer foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| synthetic hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| getters |
| get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| '''); |
| } |
| |
| test_augmented_fields_add() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| int foo2 = 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int foo1 = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo1 @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| accessors |
| synthetic get foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo1= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo1 @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo1 |
| <testLibraryFragment>::@mixin::A::@setter::foo1 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| foo2 @45 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_1 |
| getter: getter_1 |
| setter: setter_1 |
| accessors |
| synthetic get foo2 @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_1 |
| variable: field_1 |
| synthetic set foo2= @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| parameters |
| requiredPositional _foo2 @-1 |
| type: int |
| returnType: void |
| id: setter_1 |
| variable: field_1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo1 @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| getters |
| synthetic get foo1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| setters |
| synthetic set foo1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| formalParameters |
| _foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1::@parameter::_foo1#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| fields |
| hasInitializer foo2 @45 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2#element |
| getter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| setter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| getters |
| synthetic get foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| setters |
| synthetic set foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2#element |
| formalParameters |
| _foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2::@parameter::_foo2#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| hasInitializer foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| type: int |
| getter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| setter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2#element |
| getters |
| synthetic get foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| synthetic get foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| setters |
| synthetic set foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| formalParameters |
| requiredPositional _foo1 |
| type: int |
| synthetic set foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| formalParameters |
| requiredPositional _foo2 |
| type: int |
| '''); |
| } |
| |
| test_augmented_fields_add_generic() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T1> { |
| T1 foo2; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A<T1> { |
| T1 foo1; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T1 @23 |
| defaultType: dynamic |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo1 @34 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: T1 |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| accessors |
| synthetic get foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: T1 |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo1= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo1 @-1 |
| type: T1 |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| FieldMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| augmentationSubstitution: {T1: T1} |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo1 |
| <testLibraryFragment>::@mixin::A::@setter::foo1 |
| GetterMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| augmentationSubstitution: {T1: T1} |
| SetterMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| augmentationSubstitution: {T1: T1} |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T1 @37 |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| foo2 @48 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: T1 |
| id: field_1 |
| getter: getter_1 |
| setter: setter_1 |
| accessors |
| synthetic get foo2 @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: T1 |
| id: getter_1 |
| variable: field_1 |
| synthetic set foo2= @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| parameters |
| requiredPositional _foo2 @-1 |
| type: T1 |
| returnType: void |
| id: setter_1 |
| variable: field_1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| typeParameters |
| T1 @23 |
| element: <not-implemented> |
| fields |
| foo1 @34 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| getters |
| synthetic get foo1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| setters |
| synthetic set foo1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| formalParameters |
| _foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1::@parameter::_foo1#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T1 @37 |
| element: <not-implemented> |
| fields |
| foo2 @48 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2#element |
| getter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| setter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| getters |
| synthetic get foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| setters |
| synthetic set foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2#element |
| formalParameters |
| _foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2::@parameter::_foo2#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T1 |
| superclassConstraints |
| Object |
| fields |
| foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: T1 |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| type: T1 |
| getter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| setter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2#element |
| getters |
| synthetic get foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| synthetic get foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| setters |
| synthetic set foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| formalParameters |
| requiredPositional _foo1 |
| type: T1 |
| synthetic set foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| formalParameters |
| requiredPositional _foo2 |
| type: T1 |
| '''); |
| } |
| |
| test_augmented_getters_add() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| int get foo2 => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int get foo1 => 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_0 |
| getter: getter_0 |
| accessors |
| get foo1 @35 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo1 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| synthetic foo2 @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: int |
| id: field_1 |
| getter: getter_1 |
| accessors |
| get foo2 @49 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_1 |
| variable: field_1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| synthetic foo1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| getters |
| get foo1 @35 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| fields |
| synthetic foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2#element |
| getter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| getters |
| get foo2 @49 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| synthetic foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| type: int |
| getter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| getters |
| get foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| get foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| '''); |
| } |
| |
| test_augmented_getters_add_generic() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T1> { |
| T1 get foo2; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A<T1> { |
| T1 get foo1; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T1 @23 |
| defaultType: dynamic |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: T1 |
| id: field_0 |
| getter: getter_0 |
| accessors |
| abstract get foo1 @38 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: T1 |
| id: getter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| FieldMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| augmentationSubstitution: {T1: T1} |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo1 |
| GetterMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| augmentationSubstitution: {T1: T1} |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T1 @37 |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| synthetic foo2 @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: T1 |
| id: field_1 |
| getter: getter_1 |
| accessors |
| abstract get foo2 @52 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: T1 |
| id: getter_1 |
| variable: field_1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| typeParameters |
| T1 @23 |
| element: <not-implemented> |
| fields |
| synthetic foo1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| getters |
| get foo1 @38 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T1 @37 |
| element: <not-implemented> |
| fields |
| synthetic foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2#element |
| getter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| getters |
| get foo2 @52 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T1 |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: T1 |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| synthetic foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| type: T1 |
| getter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2#element |
| getters |
| abstract get foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| abstract get foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2 |
| '''); |
| } |
| |
| test_augmented_getters_augment_field() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo |
| accessors |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| accessors |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_1 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| getters |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_getters_augment_field2() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo => 0; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo |
| accessors |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibraryFragment>::@mixin::A::@setter::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| accessors |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_1 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| accessors |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_2 |
| variable: <null> |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @46 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| getters |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| getters |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_getters_augment_getter() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo1 => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int get foo1 => 0; |
| int get foo2 => 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_0 |
| getter: getter_0 |
| synthetic foo2 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo2 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_1 |
| getter: getter_1 |
| accessors |
| get foo1 @35 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1 |
| get foo2 @56 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo2 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_1 |
| variable: field_1 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| <testLibraryFragment>::@mixin::A::@field::foo2 |
| accessors |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1 |
| <testLibraryFragment>::@mixin::A::@getter::foo2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| accessors |
| augment get foo1 @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_2 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| synthetic foo1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| synthetic foo2 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo2 |
| element: <testLibraryFragment>::@mixin::A::@field::foo2#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo2 |
| getters |
| get foo1 @35 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1 |
| get foo2 @56 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo2 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo2#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| getters |
| augment get foo1 @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1 |
| element: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo1#element |
| synthetic foo2 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo2 |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo2#element |
| getters |
| get foo2 |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo2 |
| get foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo1 |
| '''); |
| } |
| |
| test_augmented_getters_augment_getter2() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo => 0; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment int get foo => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| mixin A { |
| int get foo => 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_0 |
| getter: getter_0 |
| accessors |
| get foo @50 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo |
| accessors |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| accessors |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_1 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| accessors |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| returnType: int |
| id: getter_2 |
| variable: <null> |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @36 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| synthetic foo |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| getters |
| get foo @50 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| getters |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| getters |
| augment get foo @57 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| getters |
| get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| '''); |
| } |
| |
| test_augmented_interfaces() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A implements I2 {} |
| class I2 {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A implements I1 {} |
| class I1 {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @46 |
| reference: <testLibraryFragment>::@class::I1 |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| interfaces |
| I1 |
| augmented |
| superclassConstraints |
| Object |
| interfaces |
| I1 |
| I2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| class I2 @60 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| interfaces |
| I2 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @46 |
| reference: <testLibraryFragment>::@class::I1 |
| element: <testLibrary>::@class::I1 |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| element: <testLibraryFragment>::@class::I1::@constructor::new#element |
| typeName: I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| classes |
| class I2 @60 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| element: <testLibrary>::@class::I2 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element |
| typeName: I2 |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| classes |
| class I1 |
| reference: <testLibrary>::@class::I1 |
| firstFragment: <testLibraryFragment>::@class::I1 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::I1::@constructor::new |
| class I2 |
| reference: <testLibrary>::@class::I2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| interfaces |
| I1 |
| I2 |
| '''); |
| } |
| |
| test_augmented_interfaces_chain() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| part 'b.dart'; |
| augment mixin A implements I2 {} |
| class I2 {} |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'a.dart'; |
| augment mixin A implements I3 {} |
| class I3 {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A implements I1 {} |
| class I1 {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @46 |
| reference: <testLibraryFragment>::@class::I1 |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| interfaces |
| I1 |
| augmented |
| superclassConstraints |
| Object |
| interfaces |
| I1 |
| I2 |
| I3 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| classes |
| class I2 @75 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| mixins |
| augment mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| interfaces |
| I2 |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I3 @57 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| mixins |
| augment mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| interfaces |
| I3 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @46 |
| reference: <testLibraryFragment>::@class::I1 |
| element: <testLibrary>::@class::I1 |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| element: <testLibraryFragment>::@class::I1::@constructor::new#element |
| typeName: I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| classes |
| class I2 @75 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| element: <testLibrary>::@class::I2 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element |
| typeName: I2 |
| mixins |
| mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibrary>::@fragment::package:test/a.dart |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I3 @57 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| element: <testLibrary>::@class::I3 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new |
| element: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new#element |
| typeName: I3 |
| mixins |
| mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| classes |
| class I1 |
| reference: <testLibrary>::@class::I1 |
| firstFragment: <testLibraryFragment>::@class::I1 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::I1::@constructor::new |
| class I2 |
| reference: <testLibrary>::@class::I2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| class I3 |
| reference: <testLibrary>::@class::I3 |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| interfaces |
| I1 |
| I2 |
| I3 |
| '''); |
| } |
| |
| test_augmented_methods() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| void bar() {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| void foo() {} |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: void |
| augmented |
| superclassConstraints |
| Object |
| methods |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| <testLibraryFragment>::@mixin::A::@method::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| methods |
| bar @46 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: void |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| methods |
| bar @46 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| methods |
| foo |
| reference: <testLibrary>::@mixin::A::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| bar |
| reference: <testLibrary>::@mixin::A::@method::bar |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| '''); |
| } |
| |
| test_augmented_methods_augment() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment void foo1() {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| void foo1() {} |
| void foo2() {} |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo1 @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: void |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1 |
| foo2 @49 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo2 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: void |
| augmented |
| superclassConstraints |
| Object |
| methods |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1 |
| <testLibraryFragment>::@mixin::A::@method::foo2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| methods |
| augment foo1 @54 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: void |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| foo1 @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo1 |
| element: <testLibraryFragment>::@mixin::A::@method::foo1#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1 |
| foo2 @49 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo2 |
| element: <testLibraryFragment>::@mixin::A::@method::foo2#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| methods |
| augment foo1 @54 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1 |
| element: <testLibraryFragment>::@mixin::A::@method::foo1#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@method::foo1 |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| methods |
| foo1 |
| reference: <testLibrary>::@mixin::A::@method::foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo1 |
| foo2 |
| reference: <testLibrary>::@mixin::A::@method::foo2 |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo2 |
| '''); |
| } |
| |
| test_augmented_methods_augment2() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| part 'b.dart'; |
| augment mixin A { |
| augment void foo() {} |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'a.dart'; |
| augment mixin A { |
| augment void foo() {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| void foo() {} |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: void |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| augmented |
| superclassConstraints |
| Object |
| methods |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| augment mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| methods |
| augment foo @69 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: void |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| augment mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| augment foo @51 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| returnType: void |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| methods |
| augment foo @69 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibrary>::@fragment::package:test/a.dart |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| augment foo @51 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| methods |
| foo |
| reference: <testLibrary>::@mixin::A::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| '''); |
| } |
| |
| test_augmented_methods_generic() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T2> { |
| T2 bar() => throw 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A<T> { |
| T foo() => throw 0; |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @23 |
| defaultType: dynamic |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: T |
| augmented |
| superclassConstraints |
| Object |
| methods |
| MethodMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| augmentationSubstitution: {T2: T} |
| <testLibraryFragment>::@mixin::A::@method::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T2 @37 |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| methods |
| bar @48 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: T2 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| typeParameters |
| T @23 |
| element: <not-implemented> |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T2 @37 |
| element: <not-implemented> |
| methods |
| bar @48 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T |
| superclassConstraints |
| Object |
| methods |
| foo |
| reference: <testLibrary>::@mixin::A::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| bar |
| reference: <testLibrary>::@mixin::A::@method::bar |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar |
| '''); |
| } |
| |
| test_augmented_methods_generic_augment() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T2> { |
| augment T2 foo() => throw 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A<T> { |
| T foo() => throw 0; |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @23 |
| defaultType: dynamic |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: T |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| augmented |
| superclassConstraints |
| Object |
| methods |
| MethodMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| augmentationSubstitution: {T2: T} |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T2 @37 |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| methods |
| augment foo @56 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: T2 |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| typeParameters |
| T @23 |
| element: <not-implemented> |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T2 @37 |
| element: <not-implemented> |
| methods |
| augment foo @56 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T |
| superclassConstraints |
| Object |
| methods |
| foo |
| reference: <testLibrary>::@mixin::A::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| '''); |
| } |
| |
| test_augmented_methods_typeParameterCountMismatch() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T> { |
| augment void foo() {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| void foo() {} |
| void bar() {} |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: void |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| bar @48 |
| reference: <testLibraryFragment>::@mixin::A::@method::bar |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: void |
| augmented |
| superclassConstraints |
| Object |
| methods |
| <testLibraryFragment>::@mixin::A::@method::bar |
| MethodMember |
| base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| augmentationSubstitution: {T: InvalidType} |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T @37 |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| methods |
| augment foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| returnType: void |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| methods |
| foo @32 |
| reference: <testLibraryFragment>::@mixin::A::@method::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| bar @48 |
| reference: <testLibraryFragment>::@mixin::A::@method::bar |
| element: <testLibraryFragment>::@mixin::A::@method::bar#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T @37 |
| element: <not-implemented> |
| methods |
| augment foo @57 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@method::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| methods |
| foo |
| reference: <testLibrary>::@mixin::A::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::foo |
| bar |
| reference: <testLibrary>::@mixin::A::@method::bar |
| firstFragment: <testLibraryFragment>::@mixin::A::@method::bar |
| '''); |
| } |
| |
| test_augmented_setters_add() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| set foo2(int _) {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| set foo1(int _) {} |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_0 |
| setter: setter_0 |
| accessors |
| set foo1= @31 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _ @40 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| accessors |
| <testLibraryFragment>::@mixin::A::@setter::foo1 |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| fields |
| synthetic foo2 @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| type: int |
| id: field_1 |
| setter: setter_1 |
| accessors |
| set foo2= @45 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| parameters |
| requiredPositional _ @54 |
| type: int |
| returnType: void |
| id: setter_1 |
| variable: field_1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| synthetic foo1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| setters |
| set foo1 @31 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| formalParameters |
| _ @40 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1::@parameter::_#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| fields |
| synthetic foo2 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2#element |
| setter2: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| setters |
| set foo2 @45 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2#element |
| formalParameters |
| _ @54 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2::@parameter::_#element |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: int |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| synthetic foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2 |
| type: int |
| setter: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2#element |
| setters |
| set foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| formalParameters |
| requiredPositional _ |
| type: int |
| set foo2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2 |
| formalParameters |
| requiredPositional _ |
| type: int |
| '''); |
| } |
| |
| test_augmented_setters_augment_field() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment set foo(int _) {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| int foo = 0; |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| shouldUseTypeForInitializerInference: true |
| id: field_0 |
| getter: getter_0 |
| setter: setter_0 |
| accessors |
| synthetic get foo @-1 |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| returnType: int |
| id: getter_0 |
| variable: field_0 |
| synthetic set foo= @-1 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _foo @-1 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo |
| accessors |
| <testLibraryFragment>::@mixin::A::@getter::foo |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| accessors |
| augment set foo= @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| parameters |
| requiredPositional _ @61 |
| type: int |
| returnType: void |
| id: setter_1 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| hasInitializer foo @31 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo |
| element: <testLibraryFragment>::@mixin::A::@field::foo#element |
| getter2: <testLibraryFragment>::@mixin::A::@getter::foo |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo |
| getters |
| synthetic get foo |
| reference: <testLibraryFragment>::@mixin::A::@getter::foo |
| element: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setters |
| synthetic set foo |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo::@parameter::_foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| setters |
| augment set foo @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo |
| element: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| formalParameters |
| _ @61 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo::@parameter::_#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| hasInitializer foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo |
| type: int |
| getter: <testLibraryFragment>::@mixin::A::@getter::foo#element |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo#element |
| getters |
| synthetic get foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@getter::foo |
| setters |
| synthetic set foo |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo |
| formalParameters |
| requiredPositional _foo |
| type: int |
| '''); |
| } |
| |
| test_augmented_setters_augment_setter() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A { |
| augment set foo1(int _) {} |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A { |
| set foo1(int _) {} |
| set foo2(int _) {} |
| } |
| '''); |
| |
| configuration.withPropertyLinking = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_0 |
| setter: setter_0 |
| synthetic foo2 @-1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo2 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| type: int |
| id: field_1 |
| setter: setter_1 |
| accessors |
| set foo1= @31 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _ @40 |
| type: int |
| returnType: void |
| id: setter_0 |
| variable: field_0 |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1 |
| set foo2= @52 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo2 |
| enclosingElement3: <testLibraryFragment>::@mixin::A |
| parameters |
| requiredPositional _ @61 |
| type: int |
| returnType: void |
| id: setter_1 |
| variable: field_1 |
| augmented |
| superclassConstraints |
| Object |
| fields |
| <testLibraryFragment>::@mixin::A::@field::foo1 |
| <testLibraryFragment>::@mixin::A::@field::foo2 |
| accessors |
| <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1 |
| <testLibraryFragment>::@mixin::A::@setter::foo2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| accessors |
| augment set foo1= @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| parameters |
| requiredPositional _ @62 |
| type: int |
| returnType: void |
| id: setter_2 |
| variable: <null> |
| augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| fields |
| synthetic foo1 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo1 |
| element: <testLibraryFragment>::@mixin::A::@field::foo1#element |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| synthetic foo2 |
| reference: <testLibraryFragment>::@mixin::A::@field::foo2 |
| element: <testLibraryFragment>::@mixin::A::@field::foo2#element |
| setter2: <testLibraryFragment>::@mixin::A::@setter::foo2 |
| setters |
| set foo1 @31 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| formalParameters |
| _ @40 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1::@parameter::_#element |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1 |
| set foo2 @52 |
| reference: <testLibraryFragment>::@mixin::A::@setter::foo2 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo2#element |
| formalParameters |
| _ @61 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo2::@parameter::_#element |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| setters |
| augment set foo1 @53 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1 |
| element: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| formalParameters |
| _ @62 |
| element: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1::@parameter::_#element |
| previousFragment: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| fields |
| synthetic foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo1 |
| type: int |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo1#element |
| synthetic foo2 |
| firstFragment: <testLibraryFragment>::@mixin::A::@field::foo2 |
| type: int |
| setter: <testLibraryFragment>::@mixin::A::@setter::foo2#element |
| setters |
| set foo2 |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo2 |
| formalParameters |
| requiredPositional _ |
| type: int |
| set foo1 |
| firstFragment: <testLibraryFragment>::@mixin::A::@setter::foo1 |
| formalParameters |
| requiredPositional _ |
| type: int |
| '''); |
| } |
| |
| test_augmented_superclassConstraints() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A on B2 {} |
| class B2 {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A on B1 {} |
| class B1 {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class B1 @38 |
| reference: <testLibraryFragment>::@class::B1 |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::B1::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::B1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| B1 |
| augmented |
| superclassConstraints |
| B1 |
| B2 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| class B2 @52 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::B2 |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| B2 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class B1 @38 |
| reference: <testLibraryFragment>::@class::B1 |
| element: <testLibrary>::@class::B1 |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::B1::@constructor::new |
| element: <testLibraryFragment>::@class::B1::@constructor::new#element |
| typeName: B1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| classes |
| class B2 @52 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2 |
| element: <testLibrary>::@class::B2 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::B2::@constructor::new#element |
| typeName: B2 |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| classes |
| class B1 |
| reference: <testLibrary>::@class::B1 |
| firstFragment: <testLibraryFragment>::@class::B1 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::B1::@constructor::new |
| class B2 |
| reference: <testLibrary>::@class::B2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B2 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B2::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| B1 |
| B2 |
| '''); |
| } |
| |
| test_augmented_superclassConstraints_chain() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| part 'b.dart'; |
| augment mixin A on I2 {} |
| class I2 {} |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'a.dart'; |
| augment mixin A on I3 {} |
| class I3 {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A on I1 {} |
| class I1 {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @38 |
| reference: <testLibraryFragment>::@class::I1 |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| I1 |
| augmented |
| superclassConstraints |
| I1 |
| I2 |
| I3 |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| classes |
| class I2 @67 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| mixins |
| augment mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| superclassConstraints |
| I2 |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I3 @49 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| mixins |
| augment mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| I3 |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @38 |
| reference: <testLibraryFragment>::@class::I1 |
| element: <testLibrary>::@class::I1 |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| element: <testLibraryFragment>::@class::I1::@constructor::new#element |
| typeName: I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| classes |
| class I2 @67 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| element: <testLibrary>::@class::I2 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element |
| typeName: I2 |
| mixins |
| mixin A @50 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibrary>::@fragment::package:test/a.dart |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I3 @49 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| element: <testLibrary>::@class::I3 |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new |
| element: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new#element |
| typeName: I3 |
| mixins |
| mixin A @32 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| classes |
| class I1 |
| reference: <testLibrary>::@class::I1 |
| firstFragment: <testLibraryFragment>::@class::I1 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::I1::@constructor::new |
| class I2 |
| reference: <testLibrary>::@class::I2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| class I3 |
| reference: <testLibrary>::@class::I3 |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@class::I3 |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| I1 |
| I2 |
| I3 |
| '''); |
| } |
| |
| test_augmented_superclassConstraints_fromAugmentation() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A on B {} |
| class B {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| augmented |
| superclassConstraints |
| B |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| class B @51 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::B |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| B |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| classes |
| class B @51 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B |
| element: <testLibrary>::@class::B |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new#element |
| typeName: B |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| classes |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| B |
| '''); |
| } |
| |
| test_augmented_superclassConstraints_generic() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T2> on I2<T2> {} |
| class I2<E> {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A<T> on I1 {} |
| class I1 {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @41 |
| reference: <testLibraryFragment>::@class::I1 |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @23 |
| defaultType: dynamic |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| I1 |
| augmented |
| superclassConstraints |
| I1 |
| I2<T> |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| class I2 @60 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant E @63 |
| defaultType: dynamic |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T2 @37 |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| I2<T2> |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class I1 @41 |
| reference: <testLibraryFragment>::@class::I1 |
| element: <testLibrary>::@class::I1 |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::I1::@constructor::new |
| element: <testLibraryFragment>::@class::I1::@constructor::new#element |
| typeName: I1 |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| typeParameters |
| T @23 |
| element: <not-implemented> |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| classes |
| class I2 @60 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| element: <testLibrary>::@class::I2 |
| typeParameters |
| E @63 |
| element: <not-implemented> |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element |
| typeName: I2 |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T2 @37 |
| element: <not-implemented> |
| classes |
| class I1 |
| reference: <testLibrary>::@class::I1 |
| firstFragment: <testLibraryFragment>::@class::I1 |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::I1::@constructor::new |
| class I2 |
| reference: <testLibrary>::@class::I2 |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2 |
| typeParameters |
| E |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T |
| superclassConstraints |
| I1 |
| I2<T> |
| '''); |
| } |
| |
| test_augmentedBy_class2() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| |
| augment class A {} |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| |
| augment class A {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| |
| mixin A {} |
| '''); |
| |
| configuration.withConstructors = false; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @37 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| augment class A @36 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTargetAny: <testLibraryFragment>::@mixin::A |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A |
| augmented |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| augment class A @36 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @37 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| classes |
| class A @36 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| element: <testLibrary>::@class::A |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| classes |
| class A @36 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A |
| element: <testLibrary>::@class::A |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_augmentedBy_class_mixin() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| |
| augment class A {} |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| |
| augment mixin A {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| part 'b.dart'; |
| |
| mixin A {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| part_1 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin A @37 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| classes |
| augment class A @36 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTargetAny: <testLibraryFragment>::@mixin::A |
| constructors |
| synthetic @-1 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @36 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTargetAny: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| superclassConstraints |
| Object |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @37 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A::@def::0 |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| classes |
| class A @36 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| element: <testLibrary>::@class::A |
| constructors |
| synthetic new |
| reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new |
| element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new#element |
| typeName: A |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @36 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A::@def::1 |
| classes |
| class A |
| reference: <testLibrary>::@class::A |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A |
| constructors |
| synthetic new |
| firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A::@def::0 |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| mixin A |
| reference: <testLibrary>::@mixin::A::@def::1 |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_inferTypes_method_ofAugment() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| class A { |
| int foo(String a) => 0; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin B { |
| foo(a) => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| import 'a.dart'; |
| part 'b.dart'; |
| |
| mixin B on A {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| libraryImports |
| package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_0 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin B @39 |
| reference: <testLibraryFragment>::@mixin::B |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| superclassConstraints |
| A |
| augmented |
| superclassConstraints |
| A |
| methods |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin B @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::B |
| methods |
| foo @41 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| parameters |
| requiredPositional hasImplicitType a @45 |
| type: String |
| returnType: int |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| libraryImports |
| package:test/a.dart |
| mixins |
| mixin B @39 |
| reference: <testLibraryFragment>::@mixin::B |
| element: <testLibrary>::@mixin::B |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin B @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| element: <testLibrary>::@mixin::B |
| previousFragment: <testLibraryFragment>::@mixin::B |
| methods |
| foo @41 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo |
| element: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo#element |
| formalParameters |
| a @45 |
| element: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo::@parameter::a#element |
| mixins |
| mixin B |
| reference: <testLibrary>::@mixin::B |
| firstFragment: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| A |
| methods |
| foo |
| reference: <testLibrary>::@mixin::B::@method::foo |
| firstFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo |
| formalParameters |
| requiredPositional hasImplicitType a |
| type: String |
| '''); |
| } |
| |
| test_inferTypes_method_usingAugmentation_interface() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| class A { |
| int foo(String a) => 0; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| import 'a.dart'; |
| augment mixin B implements A {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'b.dart'; |
| |
| mixin B { |
| foo(a) => 0; |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin B @22 |
| reference: <testLibraryFragment>::@mixin::B |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| superclassConstraints |
| Object |
| methods |
| foo @28 |
| reference: <testLibraryFragment>::@mixin::B::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::B |
| parameters |
| requiredPositional hasImplicitType a @32 |
| type: String |
| returnType: int |
| augmented |
| superclassConstraints |
| Object |
| interfaces |
| A |
| methods |
| <testLibraryFragment>::@mixin::B::@method::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| libraryImports |
| package:test/a.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| augment mixin B @52 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::B |
| interfaces |
| A |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin B @22 |
| reference: <testLibraryFragment>::@mixin::B |
| element: <testLibrary>::@mixin::B |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| methods |
| foo @28 |
| reference: <testLibraryFragment>::@mixin::B::@method::foo |
| element: <testLibraryFragment>::@mixin::B::@method::foo#element |
| formalParameters |
| a @32 |
| element: <testLibraryFragment>::@mixin::B::@method::foo::@parameter::a#element |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| libraryImports |
| package:test/a.dart |
| mixins |
| mixin B @52 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| element: <testLibrary>::@mixin::B |
| previousFragment: <testLibraryFragment>::@mixin::B |
| mixins |
| mixin B |
| reference: <testLibrary>::@mixin::B |
| firstFragment: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| Object |
| interfaces |
| A |
| methods |
| foo |
| reference: <testLibrary>::@mixin::B::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::B::@method::foo |
| formalParameters |
| requiredPositional hasImplicitType a |
| type: String |
| '''); |
| } |
| |
| test_inferTypes_method_usingAugmentation_superclassConstraint() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| class A { |
| int foo(String a) => 0; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| import 'a.dart'; |
| augment mixin B on A {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'b.dart'; |
| |
| mixin B { |
| foo(a) => 0; |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin B @22 |
| reference: <testLibraryFragment>::@mixin::B |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| methods |
| foo @28 |
| reference: <testLibraryFragment>::@mixin::B::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::B |
| parameters |
| requiredPositional hasImplicitType a @32 |
| type: String |
| returnType: int |
| augmented |
| superclassConstraints |
| A |
| methods |
| <testLibraryFragment>::@mixin::B::@method::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| libraryImports |
| package:test/a.dart |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| augment mixin B @52 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| A |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin B @22 |
| reference: <testLibraryFragment>::@mixin::B |
| element: <testLibrary>::@mixin::B |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| methods |
| foo @28 |
| reference: <testLibraryFragment>::@mixin::B::@method::foo |
| element: <testLibraryFragment>::@mixin::B::@method::foo#element |
| formalParameters |
| a @32 |
| element: <testLibraryFragment>::@mixin::B::@method::foo::@parameter::a#element |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| libraryImports |
| package:test/a.dart |
| mixins |
| mixin B @52 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| element: <testLibrary>::@mixin::B |
| previousFragment: <testLibraryFragment>::@mixin::B |
| mixins |
| mixin B |
| reference: <testLibrary>::@mixin::B |
| firstFragment: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| A |
| methods |
| foo |
| reference: <testLibrary>::@mixin::B::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::B::@method::foo |
| formalParameters |
| requiredPositional hasImplicitType a |
| type: String |
| '''); |
| } |
| |
| test_inferTypes_method_withAugment() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| class A { |
| int foo(String a) => 0; |
| } |
| '''); |
| |
| newFile('$testPackageLibPath/b.dart', r''' |
| part of 'test.dart'; |
| augment mixin B { |
| augment foo(a) => 0; |
| } |
| '''); |
| |
| var library = await buildLibrary(r''' |
| import 'a.dart'; |
| part 'b.dart'; |
| |
| mixin B on A { |
| foo(a) => 0; |
| } |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| libraryImports |
| package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| parts |
| part_0 |
| uri: package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/b.dart |
| mixins |
| mixin B @39 |
| reference: <testLibraryFragment>::@mixin::B |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| superclassConstraints |
| A |
| methods |
| foo @50 |
| reference: <testLibraryFragment>::@mixin::B::@method::foo |
| enclosingElement3: <testLibraryFragment>::@mixin::B |
| parameters |
| requiredPositional hasImplicitType a @54 |
| type: String |
| returnType: int |
| augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo |
| augmented |
| superclassConstraints |
| A |
| methods |
| <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo |
| <testLibrary>::@fragment::package:test/b.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin B @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::B |
| methods |
| augment foo @49 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo |
| enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| parameters |
| requiredPositional hasImplicitType a @53 |
| type: String |
| returnType: int |
| augmentationTarget: <testLibraryFragment>::@mixin::B::@method::foo |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart |
| libraryImports |
| package:test/a.dart |
| mixins |
| mixin B @39 |
| reference: <testLibraryFragment>::@mixin::B |
| element: <testLibrary>::@mixin::B |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| methods |
| foo @50 |
| reference: <testLibraryFragment>::@mixin::B::@method::foo |
| element: <testLibraryFragment>::@mixin::B::@method::foo#element |
| nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo |
| formalParameters |
| a @54 |
| element: <testLibraryFragment>::@mixin::B::@method::foo::@parameter::a#element |
| <testLibrary>::@fragment::package:test/b.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin B @35 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B |
| element: <testLibrary>::@mixin::B |
| previousFragment: <testLibraryFragment>::@mixin::B |
| methods |
| augment foo @49 |
| reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo |
| element: <testLibraryFragment>::@mixin::B::@method::foo#element |
| previousFragment: <testLibraryFragment>::@mixin::B::@method::foo |
| formalParameters |
| a @53 |
| element: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo::@parameter::a#element |
| mixins |
| mixin B |
| reference: <testLibrary>::@mixin::B |
| firstFragment: <testLibraryFragment>::@mixin::B |
| superclassConstraints |
| A |
| methods |
| foo |
| reference: <testLibrary>::@mixin::B::@method::foo |
| firstFragment: <testLibraryFragment>::@mixin::B::@method::foo |
| formalParameters |
| requiredPositional hasImplicitType a |
| type: String |
| '''); |
| } |
| |
| test_modifiers_base() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment base mixin A {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| base mixin A {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| base mixin A @26 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| augmented |
| superclassConstraints |
| Object |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment base mixin A @40 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @26 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @40 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| mixins |
| base mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| '''); |
| } |
| |
| test_notAugmented_interfaces() async { |
| var library = await buildLibrary(r''' |
| mixin A implements I {} |
| class I {} |
| '''); |
| |
| configuration.withAugmentedWithoutAugmentation = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class I @30 |
| reference: <testLibraryFragment>::@class::I |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::I::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::I |
| augmented |
| constructors |
| <testLibraryFragment>::@class::I::@constructor::new |
| mixins |
| mixin A @6 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| Object |
| interfaces |
| I |
| augmented |
| superclassConstraints |
| Object |
| interfaces |
| I |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class I @30 |
| reference: <testLibraryFragment>::@class::I |
| element: <testLibrary>::@class::I |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::I::@constructor::new |
| element: <testLibraryFragment>::@class::I::@constructor::new#element |
| typeName: I |
| mixins |
| mixin A @6 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| classes |
| class I |
| reference: <testLibrary>::@class::I |
| firstFragment: <testLibraryFragment>::@class::I |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::I::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| Object |
| interfaces |
| I |
| '''); |
| } |
| |
| test_notAugmented_superclassConstraints() async { |
| var library = await buildLibrary(r''' |
| mixin A on B {} |
| class B {} |
| '''); |
| |
| configuration.withAugmentedWithoutAugmentation = true; |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| classes |
| class B @22 |
| reference: <testLibraryFragment>::@class::B |
| enclosingElement3: <testLibraryFragment> |
| constructors |
| synthetic @-1 |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| enclosingElement3: <testLibraryFragment>::@class::B |
| augmented |
| constructors |
| <testLibraryFragment>::@class::B::@constructor::new |
| mixins |
| mixin A @6 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| superclassConstraints |
| B |
| augmented |
| superclassConstraints |
| B |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| classes |
| class B @22 |
| reference: <testLibraryFragment>::@class::B |
| element: <testLibrary>::@class::B |
| constructors |
| synthetic new |
| reference: <testLibraryFragment>::@class::B::@constructor::new |
| element: <testLibraryFragment>::@class::B::@constructor::new#element |
| typeName: B |
| mixins |
| mixin A @6 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| classes |
| class B |
| reference: <testLibrary>::@class::B |
| firstFragment: <testLibraryFragment>::@class::B |
| constructors |
| synthetic new |
| firstFragment: <testLibraryFragment>::@class::B::@constructor::new |
| mixins |
| mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| superclassConstraints |
| B |
| '''); |
| } |
| |
| test_notSimplyBounded_self() async { |
| newFile('$testPackageLibPath/a.dart', r''' |
| part of 'test.dart'; |
| augment mixin A<T extends A> {} |
| '''); |
| |
| var library = await buildLibrary(r''' |
| part 'a.dart'; |
| mixin A<T extends A> {} |
| '''); |
| |
| checkElementText(library, r''' |
| library |
| reference: <testLibrary> |
| definingUnit: <testLibraryFragment> |
| units |
| <testLibraryFragment> |
| enclosingElement3: <null> |
| parts |
| part_0 |
| uri: package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| unit: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| notSimplyBounded mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| enclosingElement3: <testLibraryFragment> |
| typeParameters |
| covariant T @23 |
| bound: A<dynamic> |
| defaultType: dynamic |
| augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| superclassConstraints |
| Object |
| augmented |
| superclassConstraints |
| Object |
| <testLibrary>::@fragment::package:test/a.dart |
| enclosingElement3: <testLibraryFragment> |
| mixins |
| augment mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| enclosingElement3: <testLibrary>::@fragment::package:test/a.dart |
| typeParameters |
| covariant T @37 |
| bound: A<dynamic> |
| defaultType: dynamic |
| augmentationTarget: <testLibraryFragment>::@mixin::A |
| ---------------------------------------- |
| library |
| reference: <testLibrary> |
| fragments |
| <testLibraryFragment> |
| element: <testLibrary> |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart |
| mixins |
| mixin A @21 |
| reference: <testLibraryFragment>::@mixin::A |
| element: <testLibrary>::@mixin::A |
| nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| typeParameters |
| T @23 |
| element: <not-implemented> |
| <testLibrary>::@fragment::package:test/a.dart |
| element: <testLibrary> |
| enclosingFragment: <testLibraryFragment> |
| previousFragment: <testLibraryFragment> |
| mixins |
| mixin A @35 |
| reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A |
| element: <testLibrary>::@mixin::A |
| previousFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T @37 |
| element: <not-implemented> |
| mixins |
| notSimplyBounded mixin A |
| reference: <testLibrary>::@mixin::A |
| firstFragment: <testLibraryFragment>::@mixin::A |
| typeParameters |
| T |
| bound: A<dynamic> |
| superclassConstraints |
| Object |
| '''); |
| } |
| } |
| |
| @reflectiveTest |
| class MixinElementTest_augmentation_fromBytes |
| extends MixinElementTest_augmentation { |
| @override |
| bool get keepLinkingLibraries => false; |
| } |
| |
| @reflectiveTest |
| class MixinElementTest_augmentation_keepLinking |
| extends MixinElementTest_augmentation { |
| @override |
| bool get keepLinkingLibraries => true; |
| } |
| |
| @reflectiveTest |
| class MixinElementTest_fromBytes extends MixinElementTest { |
| @override |
| bool get keepLinkingLibraries => false; |
| } |
| |
| @reflectiveTest |
| class MixinElementTest_keepLinking extends MixinElementTest { |
| @override |
| bool get keepLinkingLibraries => true; |
| } |