blob: 501cd410d5c8092bd98546932be9fcfc655df117 [file] [log] [blame]
// 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:analyzer/dart/element/element.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../dart/resolution/node_text_expectations.dart';
import '../element_text.dart';
import '../elements_base.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ExtensionTypeElementTest_keepLinking);
defineReflectiveTests(ExtensionTypeElementTest_fromBytes);
defineReflectiveTests(ExtensionTypeElementTest_augmentation_keepLinking);
defineReflectiveTests(ExtensionTypeElementTest_augmentation_fromBytes);
defineReflectiveTests(UpdateNodeTextExpectations);
});
}
mixin ExtensionTypeElementMixin on ElementsBaseTest {
test_constructor_const() async {
var library = await buildLibrary(r'''
extension type const A(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @21
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @27
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
const @21
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @27
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @21
reference: <testLibraryFragment>::@extensionType::A
fields
it @27
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
const new @21
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
const new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_constructor_named() async {
var library = await buildLibrary(r'''
extension type A.named(int it) {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
codeOffset: 0
codeLength: 33
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::named
typeErasure: int
fields
final it @27
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
codeOffset: 23
codeLength: 6
type: int
constructors
named @17
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingElement: <testLibraryFragment>::@extensionType::A
codeOffset: 16
codeLength: 14
periodOffset: 16
nameEnd: 22
parameters
requiredPositional final this.it @27
type: int
codeOffset: 23
codeLength: 6
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @27
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
named @17
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingFragment: <testLibraryFragment>::@extensionType::A
codeOffset: 16
codeLength: 14
periodOffset: 16
nameEnd: 22
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
codeOffset: 0
codeLength: 33
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
named
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::named
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_constructor_secondary_fieldFormalParameter() async {
var library = await buildLibrary(r'''
extension type A(num it) {
A.named(this.it);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: num
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
constructors
@15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @21
type: num
field: <testLibraryFragment>::@extensionType::A::@field::it
named @31
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingElement: <testLibraryFragment>::@extensionType::A
periodOffset: 30
nameEnd: 36
parameters
requiredPositional final this.it @42
type: num
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: num
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
named @31
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingFragment: <testLibraryFragment>::@extensionType::A
periodOffset: 30
nameEnd: 36
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: num
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
named
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::named
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_constructor_secondary_fieldFormalParameter_typed() async {
var library = await buildLibrary(r'''
extension type A(num it) {
A.named(int this.it);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: num
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
constructors
@15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @21
type: num
field: <testLibraryFragment>::@extensionType::A::@field::it
named @31
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingElement: <testLibraryFragment>::@extensionType::A
periodOffset: 30
nameEnd: 36
parameters
requiredPositional final this.it @46
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: num
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
named @31
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingFragment: <testLibraryFragment>::@extensionType::A
periodOffset: 30
nameEnd: 36
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: num
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
named
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::named
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_constructor_secondary_fieldInitializer() async {
var library = await buildLibrary(r'''
extension type A(num it) {
const A.named(int a) : it = a;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: num
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
constructors
@15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @21
type: num
field: <testLibraryFragment>::@extensionType::A::@field::it
const named @37
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingElement: <testLibraryFragment>::@extensionType::A
periodOffset: 36
nameEnd: 42
parameters
requiredPositional a @47
type: int
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: it @52
staticElement: <testLibraryFragment>::@extensionType::A::@field::it
staticType: null
equals: = @55
expression: SimpleIdentifier
token: a @57
staticElement: <testLibraryFragment>::@extensionType::A::@constructor::named::@parameter::a
staticType: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: num
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
const named @37
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingFragment: <testLibraryFragment>::@extensionType::A
periodOffset: 36
nameEnd: 42
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: it @52
staticElement: <testLibraryFragment>::@extensionType::A::@field::it
staticType: null
equals: = @55
expression: SimpleIdentifier
token: a @57
staticElement: <testLibraryFragment>::@extensionType::A::@constructor::named::@parameter::a
staticType: int
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: num
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
const named
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::named
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_constructor_unnamed() async {
var library = await buildLibrary(r'''
extension type A(int it) {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
codeOffset: 0
codeLength: 27
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
codeOffset: 17
codeLength: 6
type: int
constructors
@15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
codeOffset: 16
codeLength: 8
parameters
requiredPositional final this.it @21
type: int
codeOffset: 17
codeLength: 6
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
codeOffset: 16
codeLength: 8
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
codeOffset: 0
codeLength: 27
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_documentation() async {
var library = await buildLibrary(r'''
/// Docs
extension type A(int it) {
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @24
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
documentationComment: /// Docs
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @30
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@24
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @30
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @24
reference: <testLibraryFragment>::@extensionType::A
fields
it @30
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @24
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
documentationComment: /// Docs
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_field_const_typed() async {
var library = await buildLibrary(r'''
extension type A(int it) {
static const int foo = 0;
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
static const foo @46
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @52
staticType: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @46
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static const foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
''');
}
test_field_const_untyped() async {
var library = await buildLibrary(r'''
extension type A(int it) {
static const foo = 0;
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
static const foo @42
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: false
constantInitializer
IntegerLiteral
literal: 0 @48
staticType: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @42
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static const foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
''');
}
test_field_instance_untyped() async {
var library = await buildLibrary(r'''
extension type A(int it) {
final foo = 0;
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
final foo @35
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: false
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
synthetic get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @35
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
final foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
''');
}
test_field_metadata() async {
newFile('$testPackageLibPath/a.dart', r'''
const foo = 0;
''');
var library = await buildLibrary(r'''
import 'a.dart';
extension type A(@foo int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
libraryImports
package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
libraryImports
package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
A @32
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @43
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
metadata
Annotation
atSign: @ @34
name: SimpleIdentifier
token: foo @35
staticElement: package:test/a.dart::<fragment>::@getter::foo
staticType: null
element: package:test/a.dart::<fragment>::@getter::foo
type: int
constructors
@32
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @43
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
libraryImports
package:test/a.dart
extensionTypes
extension type A @32
reference: <testLibraryFragment>::@extensionType::A
fields
it @43
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @32
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_getter() async {
var library = await buildLibrary(r'''
extension type A(int it) {
int get foo => 0;
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
synthetic foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
get foo @37
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @37
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
''');
}
test_interfaces_class() async {
var library = await buildLibrary(r'''
class A {}
class B {}
class C implements A, B {}
extension type X(C it) implements A, B {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement: <testLibraryFragment>
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement: <testLibraryFragment>
class C @28
reference: <testLibraryFragment>::@class::C
enclosingElement: <testLibraryFragment>
interfaces
A
B
extensionTypes
X @64
reference: <testLibraryFragment>::@extensionType::X
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::X::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
typeErasure: C
interfaces
A
B
fields
final it @68
reference: <testLibraryFragment>::@extensionType::X::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::X
type: C
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::X::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::X
returnType: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
classes
class A @6
reference: <testLibraryFragment>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
class C @28
reference: <testLibraryFragment>::@class::C
extensionTypes
extension type X @64
reference: <testLibraryFragment>::@extensionType::X
fields
it @68
reference: <testLibraryFragment>::@extensionType::X::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::X
getter2: <testLibraryFragment>::@extensionType::X::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::X::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::X
classes
class A
reference: <testLibraryFragment>::@class::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@class::A
class B
reference: <testLibraryFragment>::@class::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@class::B
class C
reference: <testLibraryFragment>::@class::C
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@class::C
extensionTypes
extension type X
reference: <testLibraryFragment>::@extensionType::X
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::X
typeErasure: C
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::X
type: C
firstFragment: <testLibraryFragment>::@extensionType::X::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::X
firstFragment: <testLibraryFragment>::@extensionType::X::@getter::it
''');
}
test_interfaces_cycle2() async {
var library = await buildLibrary(r'''
extension type A(int it) implements B {}
extension type B(int it) implements A {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
hasImplementsSelfReference A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
Object
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
hasImplementsSelfReference B @56
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: int
interfaces
Object
fields
final it @62
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @56
reference: <testLibraryFragment>::@extensionType::B
fields
it @62
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: int
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_interfaces_cycle_self() async {
var library = await buildLibrary(r'''
extension type A(int it) implements A {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
hasImplementsSelfReference A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
Object
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_interfaces_extensionType() async {
var library = await buildLibrary(r'''
extension type A(num it) {}
extension type B(int it) implements A {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: num
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: num
B @43
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: int
interfaces
A
fields
final it @49
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @43
reference: <testLibraryFragment>::@extensionType::B
fields
it @49
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: num
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: num
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: int
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_interfaces_futureOr() async {
var library = await buildLibrary(r'''
extension type A(int it) implements num, FutureOr<int> {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
num
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_interfaces_implicitObjectQuestion() async {
var library = await buildLibrary(r'''
extension type X(int? it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
X @15
reference: <testLibraryFragment>::@extensionType::X
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::X::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
typeErasure: int?
fields
final it @22
reference: <testLibraryFragment>::@extensionType::X::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::X
type: int?
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::X::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::X
returnType: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type X @15
reference: <testLibraryFragment>::@extensionType::X
fields
it @22
reference: <testLibraryFragment>::@extensionType::X::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::X
getter2: <testLibraryFragment>::@extensionType::X::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::X::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::X
extensionTypes
extension type X
reference: <testLibraryFragment>::@extensionType::X
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::X
typeErasure: int?
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::X
type: int?
firstFragment: <testLibraryFragment>::@extensionType::X::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::X
firstFragment: <testLibraryFragment>::@extensionType::X::@getter::it
''');
}
test_interfaces_implicitObjectQuestion_fromTypeParameter() async {
var library = await buildLibrary(r'''
extension type A<T>(T it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @17
defaultType: dynamic
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: T
fields
final it @22
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: T
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @22
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: T
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_interfaces_void() async {
var library = await buildLibrary(r'''
typedef A = void;
extension type X(int it) implements A, num {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
X @33
reference: <testLibraryFragment>::@extensionType::X
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::X::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
typeErasure: int
interfaces
num
fields
final it @39
reference: <testLibraryFragment>::@extensionType::X::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::X
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::X::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::X
returnType: int
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
aliasedType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type X @33
reference: <testLibraryFragment>::@extensionType::X
fields
it @39
reference: <testLibraryFragment>::@extensionType::X::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::X
getter2: <testLibraryFragment>::@extensionType::X::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::X::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::X
extensionTypes
extension type X
reference: <testLibraryFragment>::@extensionType::X
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::X
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::X
type: int
firstFragment: <testLibraryFragment>::@extensionType::X::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::X
firstFragment: <testLibraryFragment>::@extensionType::X::@getter::it
''');
}
test_isPromotable_representationField_private() async {
var library = await buildLibrary(r'''
extension type A(int? _it) {}
class B {
int _it = 0;
}
class C {
int get _it => 0;
}
''');
configuration
..forPromotableFields(extensionTypeNames: {'A'})
..withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::_it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int?
fields
final promotable _it @22
reference: <testLibraryFragment>::@extensionType::A::@field::_it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int?
fieldNameNonPromotabilityInfo
_it
conflictingFields
<testLibraryFragment>::@class::B::@field::_it
conflictingGetters
<testLibraryFragment>::@class::C::@getter::_it
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
promotable _it @22
reference: <testLibraryFragment>::@extensionType::A::@field::_it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::_it
classes
class B
reference: <testLibraryFragment>::@class::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@class::B
fields
_it
reference: <none>
enclosingElement: <testLibraryFragment>::@class::B
type: int
firstFragment: <testLibraryFragment>::@class::B::@field::_it
getter: <none>
setter: <none>
getters
synthetic get _it
reference: <none>
enclosingElement: <testLibraryFragment>::@class::B
firstFragment: <testLibraryFragment>::@class::B::@getter::_it
setters
synthetic set _it=
reference: <none>
enclosingElement: <testLibraryFragment>::@class::B
firstFragment: <testLibraryFragment>::@class::B::@setter::_it
class C
reference: <testLibraryFragment>::@class::C
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic _it
reference: <none>
enclosingElement: <testLibraryFragment>::@class::C
type: int
firstFragment: <testLibraryFragment>::@class::C::@field::_it
getter: <none>
getters
get _it
reference: <none>
enclosingElement: <testLibraryFragment>::@class::C
firstFragment: <testLibraryFragment>::@class::C::@getter::_it
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int?
fields
final _it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int?
firstFragment: <testLibraryFragment>::@extensionType::A::@field::_it
getter: <none>
getters
synthetic get _it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::_it
fieldNameNonPromotabilityInfo
_it
conflictingFields
<testLibraryFragment>::@class::B::@field::_it
conflictingGetters
<testLibraryFragment>::@class::C::@getter::_it
''');
}
test_metadata() async {
newFile('$testPackageLibPath/a.dart', r'''
const foo = 0;
''');
var library = await buildLibrary(r'''
import 'a.dart';
@foo
extension type A(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
libraryImports
package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
libraryImports
package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
A @37
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
metadata
Annotation
atSign: @ @17
name: SimpleIdentifier
token: foo @18
staticElement: package:test/a.dart::<fragment>::@getter::foo
staticType: null
element: package:test/a.dart::<fragment>::@getter::foo
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @43
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@37
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @43
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
libraryImports
package:test/a.dart
extensionTypes
extension type A @37
reference: <testLibraryFragment>::@extensionType::A
fields
it @43
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @37
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_method() async {
var library = await buildLibrary(r'''
extension type A(int it) {
void foo(int a) {}
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @34
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional a @42
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @34
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
''');
}
test_method_defaultFormalParameter_defaultValue() async {
var library = await buildLibrary(r'''
extension type A(int it) {
void foo({int a = 0}) {}
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @34
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
optionalNamed default a @43
reference: <testLibraryFragment>::@extensionType::A::@method::foo::@parameter::a
type: int
constantInitializer
IntegerLiteral
literal: 0 @47
staticType: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @34
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
''');
}
test_noField() async {
var library = await buildLibrary(r'''
extension type A() {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
codeOffset: 0
codeLength: 21
representation: <testLibraryFragment>::@extensionType::A::@field::<empty>
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: InvalidType
fields
final <empty> @17
reference: <testLibraryFragment>::@extensionType::A::@field::<empty>
enclosingElement: <testLibraryFragment>::@extensionType::A
codeOffset: 17
codeLength: 0
type: InvalidType
constructors
@15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
codeOffset: 16
codeLength: 2
parameters
requiredPositional final this.<empty> @17
type: InvalidType
codeOffset: 17
codeLength: 0
field: <testLibraryFragment>::@extensionType::A::@field::<empty>
accessors
synthetic get <empty> @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::<empty>
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: InvalidType
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
<empty> @17
reference: <testLibraryFragment>::@extensionType::A::@field::<empty>
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::<empty>
constructors
new @15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
codeOffset: 16
codeLength: 2
getters
get <empty> @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::<empty>
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
codeOffset: 0
codeLength: 21
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: InvalidType
fields
final <empty>
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: InvalidType
firstFragment: <testLibraryFragment>::@extensionType::A::@field::<empty>
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get <empty>
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::<empty>
''');
}
test_notSimplyBounded_self() async {
var library = await buildLibrary(r'''
extension type A<T extends A>(int it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
notSimplyBounded A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @17
bound: A<dynamic>
defaultType: dynamic
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @34
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @34
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_setter() async {
var library = await buildLibrary(r'''
extension type A(int it) {
set foo(double _) {}
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
synthetic foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: double
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
set foo= @33
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _ @44
type: double
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo= @33
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: double
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
setter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
setters
set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_typeErasure_hasExtension_cycle2_direct() async {
var library = await buildLibrary(r'''
extension type A(B it) {}
extension type B(A it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
hasRepresentationSelfReference A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: InvalidType
fields
final it @19
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: InvalidType
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: InvalidType
hasRepresentationSelfReference B @42
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: InvalidType
fields
final it @46
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: InvalidType
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: InvalidType
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @19
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @42
reference: <testLibraryFragment>::@extensionType::B
fields
it @46
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: InvalidType
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: InvalidType
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: InvalidType
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: InvalidType
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_typeErasure_hasExtension_cycle2_typeArgument() async {
var library = await buildLibrary(r'''
extension type A(B it) {}
extension type B(List<B> it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: InvalidType
fields
final it @19
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: B
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: B
hasRepresentationSelfReference B @42
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: InvalidType
fields
final it @52
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: InvalidType
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: InvalidType
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @19
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @42
reference: <testLibraryFragment>::@extensionType::B
fields
it @52
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: InvalidType
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: B
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: InvalidType
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: InvalidType
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_typeErasure_hasExtension_cycle_self() async {
var library = await buildLibrary(r'''
extension type A(A it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
hasRepresentationSelfReference A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: InvalidType
fields
final it @19
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: InvalidType
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: InvalidType
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @19
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: InvalidType
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: InvalidType
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_typeErasure_hasExtension_functionType() async {
var library = await buildLibrary(r'''
extension type A(int it) {}
extension type B(A Function(A a) it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
B @44
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: int Function(int)
fields
final it @62
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: A Function(A)
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: A Function(A)
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @44
reference: <testLibraryFragment>::@extensionType::B
fields
it @62
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: int Function(int)
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: A Function(A)
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_typeErasure_hasExtension_interfaceType() async {
var library = await buildLibrary(r'''
extension type A<T>(T it) {}
extension type B(A<double> it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @17
defaultType: dynamic
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: T
fields
final it @22
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: T
B @45
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: double
fields
final it @57
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: A<double>
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: A<double>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @22
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @45
reference: <testLibraryFragment>::@extensionType::B
fields
it @57
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: T
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: double
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: A<double>
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_typeErasure_hasExtension_interfaceType_typeArgument() async {
var library = await buildLibrary(r'''
extension type A(int it) {}
extension type B(List<A> it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
B @44
reference: <testLibraryFragment>::@extensionType::B
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: List<int>
fields
final it @54
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::B
type: List<A>
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::B
returnType: List<A>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type B @44
reference: <testLibraryFragment>::@extensionType::B
fields
it @54
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::B
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type B
reference: <testLibraryFragment>::@extensionType::B
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::B
typeErasure: List<int>
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
type: List<A>
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_typeErasure_notExtension() async {
var library = await buildLibrary(r'''
extension type A(int it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_typeParameters() async {
var library = await buildLibrary(r'''
extension type A<T extends num, U>(Map<T, U> it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement: <testLibrary>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @17
bound: num
defaultType: num
covariant U @32
defaultType: dynamic
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: Map<T, U>
fields
final it @45
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: Map<T, U>
constructors
@15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @45
type: Map<T, U>
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: Map<T, U>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
fields
it @45
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @15
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: Map<T, U>
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: Map<T, U>
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
}
abstract class ExtensionTypeElementTest_augmentation extends ElementsBaseTest {
test_augmentationTarget() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment extension type A(int it) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment extension type A(int it) {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
augment A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
augment A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
exportedReferences
declared <testLibraryFragment>::@extensionType::A
exportNamespace
A: <testLibraryFragment>::@extensionType::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
exportedReferences
declared <testLibraryFragment>::@extensionType::A
exportNamespace
A: <testLibraryFragment>::@extensionType::A
''');
}
test_augmentationTarget_no2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment extension type A(int it) {
void foo1() {}
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment extension type A(int it) {
void foo2() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
augment A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
representation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
typeErasure: int
fields
final it @65
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
constructors
augment @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
parameters
requiredPositional final this.it @65
type: int
field: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
accessors
synthetic get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
methods
foo1 @78
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: void
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
constructors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
methods
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
augment A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
methods
foo2 @60
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
fields
it @65
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
constructors
augment new @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getters
get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
methods
foo1 @78
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
methods
foo2 @60
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
methods
foo1
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
foo2
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
''');
}
test_augmented_constructors_add_named() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
A.named();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
constructors
named @60
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
periodOffset: 59
nameEnd: 65
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
constructors
named @60
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
periodOffset: 59
nameEnd: 65
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
named
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_augmented_constructors_add_named_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T2>(int it) {
A.named(T2 a);
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A<T1>(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T1 @32
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @40
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @40
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
ConstructorMember
base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
augmentationSubstitution: {T2: T1}
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @46
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
constructors
named @64
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
periodOffset: 63
nameEnd: 69
parameters
requiredPositional a @73
type: T2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @40
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
constructors
named @64
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
periodOffset: 63
nameEnd: 69
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
named
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_augmented_constructors_add_unnamed_hasNamed() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
A();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A.named(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::named
typeErasure: int
fields
final it @42
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
named @32
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingElement: <testLibraryFragment>::@extensionType::A
periodOffset: 31
nameEnd: 37
parameters
requiredPositional final this.it @42
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
<testLibraryFragment>::@extensionType::A::@constructor::named
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
constructors
@58
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @42
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
named @32
reference: <testLibraryFragment>::@extensionType::A::@constructor::named
enclosingFragment: <testLibraryFragment>::@extensionType::A
periodOffset: 31
nameEnd: 37
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
constructors
new @58
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
named
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::named
new
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_augmented_field_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo
<testLibraryFragment>::@extensionType::A::@setter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
augment static foo @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@field::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_field_augment_field2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int foo = 1;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int foo = 2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @45
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
constructors
@45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @51
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo
<testLibraryFragment>::@extensionType::A::@setter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
fields
augment static foo @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
augment static foo @77
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_3
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @45
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
fields
foo @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@field::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
foo @77
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_field_augment_field_afterGetter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int get foo => 1;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int foo = 2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @45
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
constructors
@45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @51
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@extensionType::A::@setter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
accessors
augment static get foo @81
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_2
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
augment static foo @77
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @45
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
getters
augment get foo @81
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
foo @77
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@field::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_field_augment_field_afterSetter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static set foo(int _) {}
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int foo = 2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @45
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
constructors
@45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @51
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
augmented
fields
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
accessors
augment static set foo= @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
parameters
requiredPositional _ @85
type: int
returnType: void
id: setter_1
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
augment static foo @77
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @45
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
setters
augment set foo= @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
foo @77
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@field::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_field_augment_field_differentTypes() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static double foo = 1.2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo
<testLibraryFragment>::@extensionType::A::@setter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
augment static foo @80
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: double
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo @80
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@field::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
/// 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 extension type A(int it) {
augment static int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
static int get foo => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic static foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_1
getter: getter_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
static get foo @59
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
augment static foo @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @59
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@field::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
''');
}
test_augmented_fields_add() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
static int foo2 = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
static int foo1 = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo1 @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
synthetic static set foo1= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo1 @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo1
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo1
<testLibraryFragment>::@extensionType::A::@setter::foo1
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
static foo2 @69
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
getter: getter_2
setter: setter_1
accessors
synthetic static get foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_2
variable: field_2
synthetic static set foo2= @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
parameters
requiredPositional _foo2 @-1
type: int
returnType: void
id: setter_1
variable: field_2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo1 @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo1
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo1
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo1= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo2 @69
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
setter2: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
getters
get foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
setters
set foo2= @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo1
getter: <none>
setter: <none>
static foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo1
synthetic static get foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
setters
synthetic static set foo1=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo1
synthetic static set foo2=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
''');
}
test_augmented_getters_add() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
int get foo2 => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
int get foo1 => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_1
getter: getter_1
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
get foo1 @52
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo1
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo1
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
synthetic foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
id: field_2
getter: getter_2
accessors
get foo2 @66
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_2
variable: field_2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo1
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo1 @52
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
getters
get foo2 @66
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo1
getter: <none>
synthetic foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
get foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo1
get foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
''');
}
test_augmented_getters_add_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T2>(int it) {
T2 get foo2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A<T1>(int it) {
T1 get foo1;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T1 @32
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @40
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T1
id: field_1
getter: getter_1
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @40
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
abstract get foo1 @55
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: T1
id: getter_1
variable: field_1
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo1
FieldMember
base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
augmentationSubstitution: {T2: T1}
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo1
PropertyAccessorMember
base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
augmentationSubstitution: {T2: T1}
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @46
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
synthetic foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: T2
id: field_2
getter: getter_2
accessors
abstract get foo2 @69
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: T2
id: getter_2
variable: field_2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @40
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo1
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo1 @55
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
getters
get foo2 @69
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T1
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo1
getter: <none>
synthetic foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: T2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
abstract get foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo1
abstract get foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
''');
}
test_augmented_getters_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@extensionType::A::@setter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
accessors
augment static get foo @81
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_2
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
getters
augment get foo @81
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_getters_augment_field2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int get foo => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @45
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
constructors
@45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @51
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@extensionType::A::@setter::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
accessors
augment static get foo @81
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_2
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
accessors
augment static get foo @81
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_3
variable: field_1
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @45
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @70
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
getters
augment get foo @81
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getters
augment get foo @81
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_getters_augment_getter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment int get foo1 => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
int get foo1 => 0;
int get foo2 => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_1
getter: getter_1
synthetic foo2 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo2
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_2
getter: getter_2
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
get foo1 @52
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
get foo2 @73
reference: <testLibraryFragment>::@extensionType::A::@getter::foo2
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_2
variable: field_2
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo1
<testLibraryFragment>::@extensionType::A::@field::foo2
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
<testLibraryFragment>::@extensionType::A::@getter::foo2
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
accessors
augment get foo1 @74
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_3
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo1
foo2 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo2
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo2
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo1 @52
reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
get foo2 @73
reference: <testLibraryFragment>::@extensionType::A::@getter::foo2
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
getters
augment get foo1 @74
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@getter::foo1
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo1
getter: <none>
synthetic foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo2
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
get foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo2
get foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo1
''');
}
test_augmented_getters_augment_getter2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment int get foo => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
extension type A(int it) {
int get foo => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @45
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_1
getter: getter_1
constructors
@45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @51
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
get foo @67
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
accessors
augment get foo @74
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_2
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
accessors
augment get foo @74
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
returnType: int
id: getter_3
variable: field_1
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @45
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @51
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
constructors
new @45
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @67
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
getters
augment get foo @74
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
getters
augment get foo @74
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
''');
}
test_augmented_interfaces() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) implements I2 {}
extension type I2(int it) {}
''');
configuration.withConstructors = false;
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) implements I1 {}
extension type I1(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
I1
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
interfaces
I1
I2
fields
<testLibraryFragment>::@extensionType::A::@field::it
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
I1 @72
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::I1::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
typeErasure: int
fields
final it @79
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
returnType: int
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
interfaces
I2
I2 @86
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
typeErasure: int
fields
final it @93
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
accessors
synthetic get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type I1 @72
reference: <testLibraryFragment>::@extensionType::I1
fields
it @79
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getter2: <testLibraryFragment>::@extensionType::I1::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
extension type I2 @86
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
fields
it @93
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
getters
get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type I1
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::I1
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
firstFragment: <testLibraryFragment>::@extensionType::I1::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
firstFragment: <testLibraryFragment>::@extensionType::I1::@getter::it
extension type I2
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
''');
}
test_augmented_interfaces_chain() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment extension type A(int it) implements I2 {}
extension type I2(int it) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment extension type A(int it) implements I3 {}
extension type I3(int it) {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) implements I1 {}
extension type I1(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
I1
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
interfaces
I1
I2
I3
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
I1 @72
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::I1::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
typeErasure: int
fields
final it @79
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
constructors
@72
reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::I1
parameters
requiredPositional final this.it @79
type: int
field: <testLibraryFragment>::@extensionType::I1::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
returnType: int
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
augment A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
interfaces
I2
I2 @101
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
typeErasure: int
fields
final it @108
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
constructors
@101
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
parameters
requiredPositional final this.it @108
type: int
field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
accessors
synthetic get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
returnType: int
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
augment A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
interfaces
I3
I3 @83
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
representation: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
primaryConstructor: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
typeErasure: int
fields
final it @90
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
type: int
constructors
@83
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
parameters
requiredPositional final this.it @90
type: int
field: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
accessors
synthetic get it @-1
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@getter::it
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type I1 @72
reference: <testLibraryFragment>::@extensionType::I1
fields
it @79
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getter2: <testLibraryFragment>::@extensionType::I1::@getter::it
constructors
new @72
reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
extension type I2 @101
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
fields
it @108
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
constructors
new @101
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getters
get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extension type I3 @83
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
fields
it @90
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
getter2: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@getter::it
constructors
new @83
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
getters
get it @-1
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@getter::it
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type I1
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::I1
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
firstFragment: <testLibraryFragment>::@extensionType::I1::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::I1::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
firstFragment: <testLibraryFragment>::@extensionType::I1::@getter::it
extension type I2
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
extension type I3
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
type: int
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@getter::it
''');
}
test_augmented_interfaces_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T2>(int it) implements I2<T2> {}
extension type I2<E>(int it) {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A<T>(int it) implements I1 {}
extension type I1(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @32
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
I1
fields
final it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @39
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
interfaces
I1
I2<T>
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
I1 @75
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::I1::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
typeErasure: int
fields
final it @82
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
constructors
@75
reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::I1
parameters
requiredPositional final this.it @82
type: int
field: <testLibraryFragment>::@extensionType::I1::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
returnType: int
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @46
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
interfaces
I2<T2>
I2 @94
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant E @97
defaultType: dynamic
representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
typeErasure: int
fields
final it @104
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
constructors
@94
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
parameters
requiredPositional final this.it @104
type: int
field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
accessors
synthetic get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type I1 @75
reference: <testLibraryFragment>::@extensionType::I1
fields
it @82
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getter2: <testLibraryFragment>::@extensionType::I1::@getter::it
constructors
new @75
reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
extension type I2 @94
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
fields
it @104
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
constructors
new @94
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getters
get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type I1
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::I1
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
firstFragment: <testLibraryFragment>::@extensionType::I1::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::I1::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
firstFragment: <testLibraryFragment>::@extensionType::I1::@getter::it
extension type I2
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
''');
}
test_augmented_interfaces_generic_mismatch() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T2, T3>(int it) implements I2<T2> {}
extension type I2<E>(int it) {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A<T>(int it) implements I1 {}
extension type I1(int it) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @32
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
interfaces
I1
fields
final it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @39
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
interfaces
I1
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
I1 @75
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::I1::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
typeErasure: int
fields
final it @82
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
constructors
@75
reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::I1
parameters
requiredPositional final this.it @82
type: int
field: <testLibraryFragment>::@extensionType::I1::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::I1
returnType: int
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @46
defaultType: dynamic
covariant T3 @50
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
interfaces
I2<T2>
I2 @98
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant E @101
defaultType: dynamic
representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
typeErasure: int
fields
final it @108
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
constructors
@98
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
parameters
requiredPositional final this.it @108
type: int
field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
accessors
synthetic get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
extension type I1 @75
reference: <testLibraryFragment>::@extensionType::I1
fields
it @82
reference: <testLibraryFragment>::@extensionType::I1::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getter2: <testLibraryFragment>::@extensionType::I1::@getter::it
constructors
new @75
reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::I1
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::I1::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::I1
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
extension type I2 @98
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
fields
it @108
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getter2: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
constructors
new @98
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
getters
get it @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
extension type I1
reference: <testLibraryFragment>::@extensionType::I1
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::I1
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
type: int
firstFragment: <testLibraryFragment>::@extensionType::I1::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::I1::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::I1
firstFragment: <testLibraryFragment>::@extensionType::I1::@getter::it
extension type I2
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
''');
}
test_augmented_methods() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
void bar() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: void
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
methods
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
<testLibraryFragment>::@extensionType::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
methods
bar @63
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
methods
bar @63
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
bar
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
''');
}
test_augmented_methods_augment() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment void foo1() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
void foo1() {}
void foo2() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo1 @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
foo2 @66
reference: <testLibraryFragment>::@extensionType::A::@method::foo2
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: void
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
methods
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
<testLibraryFragment>::@extensionType::A::@method::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
methods
augment foo1 @71
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo1 @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo1
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
foo2 @66
reference: <testLibraryFragment>::@extensionType::A::@method::foo2
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
methods
augment foo1 @71
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
previousFragment: <testLibraryFragment>::@extensionType::A::@method::foo1
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo2
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo2
foo1
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo1
''');
}
test_augmented_methods_augment2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment extension type A(int it) {
augment void foo() {}
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment extension type A(int it) {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
methods
<testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
augment A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
methods
augment foo @86
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
augment A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
methods
augment foo @68
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
returnType: void
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
extension type A @59
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
methods
augment foo @86
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
previousFragment: <testLibraryFragment>::@extensionType::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @41
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
methods
augment foo @68
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
''');
}
test_augmented_methods_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T2>(int it) {
T2 bar() => throw 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A<T>(int it) {
T foo() => throw 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @32
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @39
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: T
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
methods
MethodMember
base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
augmentationSubstitution: {T2: T}
<testLibraryFragment>::@extensionType::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @46
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
methods
bar @65
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: T2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
methods
bar @65
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
bar
reference: <none>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
''');
}
test_augmented_methods_generic_augment() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T2>(int it) {
augment T2 foo() => throw 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A<T>(int it) {
T foo() => throw 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
typeParameters
covariant T @32
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @39
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: T
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
methods
MethodMember
base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
augmentationSubstitution: {T2: T}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @46
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
methods
augment foo @73
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: T2
augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @39
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
methods
augment foo @73
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
previousFragment: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
''');
}
test_augmented_methods_typeParameterCountMismatch() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A<T>(int it) {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
void foo() {}
void bar() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
bar @65
reference: <testLibraryFragment>::@extensionType::A::@method::bar
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: void
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
methods
<testLibraryFragment>::@extensionType::A::@method::bar
MethodMember
base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
augmentationSubstitution: {T: InvalidType}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T @46
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@extensionType::A
methods
augment foo @74
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
methods
foo @49
reference: <testLibraryFragment>::@extensionType::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
bar @65
reference: <testLibraryFragment>::@extensionType::A::@method::bar
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
methods
augment foo @74
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
previousFragment: <testLibraryFragment>::@extensionType::A::@method::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
methods
bar
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::bar
foo
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@method::foo
''');
}
test_augmented_setters_add() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
set foo2(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
set foo1(int _) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_1
setter: setter_0
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
set foo1= @48
reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _ @57
type: int
returnType: void
id: setter_0
variable: field_1
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo1
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@setter::foo1
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
fields
synthetic foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
type: int
id: field_2
setter: setter_1
accessors
set foo2= @62
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
parameters
requiredPositional _ @71
type: int
returnType: void
id: setter_1
variable: field_2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo1
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo1= @48
reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
fields
foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
setter2: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
setters
set foo2= @62
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo1
setter: <none>
synthetic foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
setters
set foo1=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo1
set foo2=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
''');
}
test_augmented_setters_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment static set foo(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
static int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
static foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_0
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
synthetic static get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_1
variable: field_1
synthetic static set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibraryFragment>::@extensionType::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
accessors
augment static set foo= @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
parameters
requiredPositional _ @85
type: int
returnType: void
id: setter_1
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo @55
reference: <testLibraryFragment>::@extensionType::A::@field::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::foo
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
get foo @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo= @-1
reference: <testLibraryFragment>::@extensionType::A::@setter::foo
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
setters
augment set foo= @77
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
static foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo
getter: <none>
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
synthetic static get foo
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::foo
setters
synthetic static set foo=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo
''');
}
test_augmented_setters_augment_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment extension type A(int it) {
augment set foo1(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
extension type A(int it) {
set foo1(int _) {}
set foo2(int _) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
A @30
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_0
getter: getter_0
synthetic foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_1
setter: setter_0
synthetic foo2 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo2
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
id: field_2
setter: setter_1
constructors
@30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional final this.it @36
type: int
field: <testLibraryFragment>::@extensionType::A::@field::it
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
id: getter_0
variable: field_0
set foo1= @48
reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _ @57
type: int
returnType: void
id: setter_0
variable: field_1
augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
set foo2= @69
reference: <testLibraryFragment>::@extensionType::A::@setter::foo2
enclosingElement: <testLibraryFragment>::@extensionType::A
parameters
requiredPositional _ @78
type: int
returnType: void
id: setter_1
variable: field_2
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::foo1
<testLibraryFragment>::@extensionType::A::@field::foo2
<testLibraryFragment>::@extensionType::A::@field::it
constructors
<testLibraryFragment>::@extensionType::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
<testLibraryFragment>::@extensionType::A::@setter::foo2
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
accessors
augment set foo1= @70
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
parameters
requiredPositional _ @79
type: int
returnType: void
id: setter_2
variable: field_1
augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @30
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
fields
it @36
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
foo1 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo1
foo2 @-1
reference: <testLibraryFragment>::@extensionType::A::@field::foo2
enclosingFragment: <testLibraryFragment>::@extensionType::A
setter2: <testLibraryFragment>::@extensionType::A::@setter::foo2
constructors
new @30
reference: <testLibraryFragment>::@extensionType::A::@constructor::new
enclosingFragment: <testLibraryFragment>::@extensionType::A
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
setters
set foo1= @48
reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
enclosingFragment: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
set foo2= @69
reference: <testLibraryFragment>::@extensionType::A::@setter::foo2
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
extensionTypes
extension type A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
setters
augment set foo1= @70
reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A::@setter::foo1
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
synthetic foo1
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo1
setter: <none>
synthetic foo2
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::foo2
setter: <none>
constructors
new
reference: <none>
firstFragment: <testLibraryFragment>::@extensionType::A::@constructor::new
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
setters
set foo2=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo2
set foo1=
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@setter::foo1
''');
}
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';
extension type A(int it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @46
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @52
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
classes
augment class A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTargetAny: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
classes
augment class A @36
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTargetAny: <testLibraryFragment>::@extensionType::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @46
reference: <testLibraryFragment>::@extensionType::A
fields
it @52
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
classes
class A
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
class A
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_augmentedBy_class_extensionType() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment extension type A(int it) {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
extension type A(int it) {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
parts
part_0
part_1
units
<testLibraryFragment>
enclosingElement: <testLibrary>
parts
part_0
uri: package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
extensionTypes
A @46
reference: <testLibraryFragment>::@extensionType::A
enclosingElement: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
representation: <testLibraryFragment>::@extensionType::A::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
typeErasure: int
fields
final it @52
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement: <testLibraryFragment>::@extensionType::A
returnType: int
augmented
fields
<testLibraryFragment>::@extensionType::A::@field::it
accessors
<testLibraryFragment>::@extensionType::A::@getter::it
<testLibrary>::@fragment::package:test/a.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
classes
augment class A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/a.dart
augmentationTargetAny: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/b.dart
enclosingElement: <testLibrary>
enclosingElement3: <testLibraryFragment>
extensionTypes
augment A @45
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
enclosingElement: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibraryFragment>::@extensionType::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @46
reference: <testLibraryFragment>::@extensionType::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
fields
it @52
reference: <testLibraryFragment>::@extensionType::A::@field::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingFragment: <testLibraryFragment>::@extensionType::A
<testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
extensionTypes
extension type A @45
reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
previousFragment: <testLibraryFragment>::@extensionType::A
classes
class A
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement2: <testLibrary>
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
extensionTypes
extension type A
reference: <testLibraryFragment>::@extensionType::A
enclosingElement2: <testLibrary>
firstFragment: <testLibraryFragment>::@extensionType::A
typeErasure: int
fields
final it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
type: int
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
getter: <none>
getters
synthetic get it
reference: <none>
enclosingElement: <testLibraryFragment>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
}
@reflectiveTest
class ExtensionTypeElementTest_augmentation_fromBytes
extends ExtensionTypeElementTest_augmentation {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class ExtensionTypeElementTest_augmentation_keepLinking
extends ExtensionTypeElementTest_augmentation {
@override
bool get keepLinkingLibraries => true;
}
@reflectiveTest
class ExtensionTypeElementTest_fromBytes extends ElementsBaseTest
with ExtensionTypeElementMixin {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class ExtensionTypeElementTest_keepLinking extends ElementsBaseTest
with ExtensionTypeElementMixin {
@override
bool get keepLinkingLibraries => true;
}
// TODO(scheglov): This is duplicate.
extension on ElementTextConfiguration {
void forPromotableFields({
Set<String> classNames = const {},
Set<String> enumNames = const {},
Set<String> extensionTypeNames = const {},
Set<String> mixinNames = const {},
Set<String> fieldNames = const {},
}) {
filter = (e) {
if (e is ClassElement) {
return classNames.contains(e.name);
} else if (e is ConstructorElement) {
return false;
} else if (e is EnumElement) {
return enumNames.contains(e.name);
} else if (e is ExtensionTypeElement) {
return extensionTypeNames.contains(e.name);
} else if (e is FieldElement) {
return fieldNames.isEmpty || fieldNames.contains(e.name);
} else if (e is MixinElement) {
return mixinNames.contains(e.name);
} else if (e is PartElement) {
return false;
} else if (e is PropertyAccessorElement) {
return false;
}
return true;
};
}
}