blob: d3e25476a545fa70d946b3ec72440e7becf797b0 [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/test.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(ClassElementTest_keepLinking);
defineReflectiveTests(ClassElementTest_fromBytes);
defineReflectiveTests(ClassElementTest_augmentation_keepLinking);
defineReflectiveTests(ClassElementTest_augmentation_fromBytes);
defineReflectiveTests(UpdateNodeTextExpectations);
});
}
abstract class ClassElementTest extends ElementsBaseTest {
test_class_abstract() async {
var library = await buildLibrary('abstract class C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_base() async {
var library = await buildLibrary('base class C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
base class C @11
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @11
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
base class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_const() async {
var library = await buildLibrary('class C { const C(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const @16
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 16
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_const_external() async {
var library = await buildLibrary('class C { external const C(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
external const @25
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
external const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 25
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
external const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_documented() async {
var library = await buildLibrary('''
class C {
/**
* Docs
*/
C();
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@34
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
documentationComment: /**\n * Docs\n */
typeName: C
typeNameOffset: 34
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
documentationComment: /**\n * Docs\n */
''');
}
test_class_constructor_explicit_named() async {
var library = await buildLibrary('class C { C.foo(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
foo @12
reference: <testLibraryFragment>::@class::C::@constructor::foo
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 11
nameEnd: 15
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
foo @12
reference: <testLibraryFragment>::@class::C::@constructor::foo
element: <testLibraryFragment>::@class::C::@constructor::foo#element
typeName: C
typeNameOffset: 10
periodOffset: 11
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
foo
firstFragment: <testLibraryFragment>::@class::C::@constructor::foo
''');
}
test_class_constructor_explicit_type_params() async {
var library = await buildLibrary('class C<T, U> { C(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant U @11
defaultType: dynamic
constructors
@16
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @11
element: <not-implemented>
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 16
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_explicit_unnamed() async {
var library = await buildLibrary('class C { C(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@10
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 10
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_external() async {
var library = await buildLibrary('class C { external C(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
external @19
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
external new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 19
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
external new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_factory() async {
var library = await buildLibrary('class C { factory C() => throw 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @18
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 18
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_field_formal_dynamic_dynamic() async {
var library =
await buildLibrary('class C { dynamic x; C(dynamic this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@21
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @36
type: dynamic
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 21
formalParameters
this.x @36
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_dynamic_typed() async {
var library = await buildLibrary('class C { dynamic x; C(int this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@21
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @32
type: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 21
formalParameters
this.x @32
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_dynamic_untyped() async {
var library = await buildLibrary('class C { dynamic x; C(this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@21
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @28
type: dynamic
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 21
formalParameters
this.x @28
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_functionTyped_noReturnType() async {
var library = await buildLibrary(r'''
class C {
var x;
C(this.x(double b));
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @16
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@21
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @28
type: dynamic Function(double)
parameters
requiredPositional b @37
type: double
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @16
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 21
formalParameters
this.x @28
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic Function(double)
formalParameters
requiredPositional b
type: double
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_functionTyped_withReturnType() async {
var library = await buildLibrary(r'''
class C {
var x;
C(int this.x(double b));
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @16
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@21
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @32
type: int Function(double)
parameters
requiredPositional b @41
type: double
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @16
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 21
formalParameters
this.x @32
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: int Function(double)
formalParameters
requiredPositional b
type: double
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_functionTyped_withReturnType_generic() async {
var library = await buildLibrary(r'''
class C {
Function() f;
C(List<U> this.f<T, U>(T t));
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
f @23
reference: <testLibraryFragment>::@class::C::@field::f
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic Function()
constructors
@28
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.f @43
type: List<U> Function<T, U>(T)
typeParameters
covariant T @45
covariant U @48
parameters
requiredPositional t @53
type: T
field: <testLibraryFragment>::@class::C::@field::f
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::C::@getter::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic Function()
synthetic set f= @-1
reference: <testLibraryFragment>::@class::C::@setter::f
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _f @-1
type: dynamic Function()
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
f @23
reference: <testLibraryFragment>::@class::C::@field::f
element: <testLibraryFragment>::@class::C::@field::f#element
getter2: <testLibraryFragment>::@class::C::@getter::f
setter2: <testLibraryFragment>::@class::C::@setter::f
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 28
formalParameters
this.f @43
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::f#element
getters
synthetic get f
reference: <testLibraryFragment>::@class::C::@getter::f
element: <testLibraryFragment>::@class::C::@getter::f#element
setters
synthetic set f
reference: <testLibraryFragment>::@class::C::@setter::f
element: <testLibraryFragment>::@class::C::@setter::f#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::f::@parameter::_f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
f
firstFragment: <testLibraryFragment>::@class::C::@field::f
type: dynamic Function()
getter: <testLibraryFragment>::@class::C::@getter::f#element
setter: <testLibraryFragment>::@class::C::@setter::f#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final f
type: List<U> Function<T, U>(T)
formalParameters
requiredPositional t
type: T
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::C::@getter::f
setters
synthetic set f
firstFragment: <testLibraryFragment>::@class::C::@setter::f
formalParameters
requiredPositional _f
type: dynamic Function()
''');
}
test_class_constructor_field_formal_multiple_matching_fields() async {
// This is a compile-time error but it should still analyze consistently.
var library = await buildLibrary('class C { C(this.x); int x; String x; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @25
reference: <testLibraryFragment>::@class::C::@field::x::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
type: int
x @35
reference: <testLibraryFragment>::@class::C::@field::x::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
type: String
constructors
@10
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @17
type: int
field: <testLibraryFragment>::@class::C::@field::x::@def::0
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
returnType: String
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: String
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @25
reference: <testLibraryFragment>::@class::C::@field::x::@def::0
element: <testLibraryFragment>::@class::C::@field::x::@def::0#element
getter2: <testLibraryFragment>::@class::C::@getter::x::@def::0
setter2: <testLibraryFragment>::@class::C::@setter::x::@def::0
x @35
reference: <testLibraryFragment>::@class::C::@field::x::@def::1
element: <testLibraryFragment>::@class::C::@field::x::@def::1#element
getter2: <testLibraryFragment>::@class::C::@getter::x::@def::1
setter2: <testLibraryFragment>::@class::C::@setter::x::@def::1
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 10
formalParameters
this.x @17
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x::@def::0
element: <testLibraryFragment>::@class::C::@getter::x::@def::0#element
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x::@def::1
element: <testLibraryFragment>::@class::C::@getter::x::@def::1#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x::@def::0
element: <testLibraryFragment>::@class::C::@setter::x::@def::0#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@def::0::@parameter::_x#element
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x::@def::1
element: <testLibraryFragment>::@class::C::@setter::x::@def::1#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@def::1::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x::@def::0
type: int
getter: <testLibraryFragment>::@class::C::@getter::x::@def::0#element
setter: <testLibraryFragment>::@class::C::@setter::x::@def::0#element
x
firstFragment: <testLibraryFragment>::@class::C::@field::x::@def::1
type: String
getter: <testLibraryFragment>::@class::C::@getter::x::@def::1#element
setter: <testLibraryFragment>::@class::C::@setter::x::@def::1#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x::@def::0
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x::@def::1
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x::@def::0
formalParameters
requiredPositional _x
type: int
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x::@def::1
formalParameters
requiredPositional _x
type: String
''');
}
test_class_constructor_field_formal_no_matching_field() async {
// This is a compile-time error but it should still analyze consistently.
var library = await buildLibrary('class C { C(this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@10
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @17
type: dynamic
field: <null>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 10
formalParameters
this.x @17
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic
''');
}
test_class_constructor_field_formal_typed_dynamic() async {
var library = await buildLibrary('class C { num x; C(dynamic this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: num
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @32
type: dynamic
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: num
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: num
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
this.x @32
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: num
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: num
''');
}
test_class_constructor_field_formal_typed_typed() async {
var library = await buildLibrary('class C { num x; C(int this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: num
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @28
type: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: num
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: num
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
this.x @28
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: num
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: num
''');
}
test_class_constructor_field_formal_typed_untyped() async {
var library = await buildLibrary('class C { num x; C(this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: num
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @24
type: num
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: num
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: num
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
this.x @24
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: num
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: num
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: num
''');
}
test_class_constructor_field_formal_untyped_dynamic() async {
var library = await buildLibrary('class C { var x; C(dynamic this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @32
type: dynamic
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
this.x @32
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_untyped_typed() async {
var library = await buildLibrary('class C { var x; C(int this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @28
type: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
this.x @28
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_field_formal_untyped_untyped() async {
var library = await buildLibrary('class C { var x; C(this.x); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @24
type: dynamic
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
this.x @24
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final x
type: dynamic
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_constructor_fieldFormal_named_noDefault() async {
var library = await buildLibrary('class C { int x; C({this.x}); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
optionalNamed default final this.x @25
reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
type: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
default this.x @25
reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
optionalNamed final x
firstFragment: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: int
''');
}
test_class_constructor_fieldFormal_named_withDefault() async {
var library = await buildLibrary('class C { int x; C({this.x: 42}); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
optionalNamed default final this.x @25
reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
type: int
constantInitializer
IntegerLiteral
literal: 42 @28
staticType: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
default this.x @25
reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
optionalNamed final x
firstFragment: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: int
''');
}
test_class_constructor_fieldFormal_optional_noDefault() async {
var library = await buildLibrary('class C { int x; C([this.x]); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
optionalPositional default final this.x @25
type: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
default this.x @25
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
optionalPositional final x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: int
''');
}
test_class_constructor_fieldFormal_optional_withDefault() async {
var library = await buildLibrary('class C { int x; C([this.x = 42]); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
@17
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
optionalPositional default final this.x @25
type: int
constantInitializer
IntegerLiteral
literal: 42 @29
staticType: int
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 17
formalParameters
default this.x @25
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
optionalPositional final x
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: int
''');
}
test_class_constructor_implicit_type_params() async {
var library = await buildLibrary('class C<T, U> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant U @11
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @11
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_initializers_assertInvocation() async {
var library = await buildLibrary('''
class C {
const C(int x) : assert(x >= 42);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional x @24
type: int
constantInitializers
AssertInitializer
assertKeyword: assert @29
leftParenthesis: ( @35
condition: BinaryExpression
leftOperand: SimpleIdentifier
token: x @36
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
staticType: int
operator: >= @38
rightOperand: IntegerLiteral
literal: 42 @41
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::>=
element: dart:core::<fragment>::@class::num::@method::>=#element
staticInvokeType: bool Function(num)
staticType: bool
rightParenthesis: ) @43
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 18
formalParameters
x @24
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
constantInitializers
AssertInitializer
assertKeyword: assert @29
leftParenthesis: ( @35
condition: BinaryExpression
leftOperand: SimpleIdentifier
token: x @36
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
staticType: int
operator: >= @38
rightOperand: IntegerLiteral
literal: 42 @41
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::>=
element: dart:core::<fragment>::@class::num::@method::>=#element
staticInvokeType: bool Function(num)
staticType: bool
rightParenthesis: ) @43
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional x
type: int
''');
}
test_class_constructor_initializers_assertInvocation_message() async {
var library = await buildLibrary('''
class C {
const C(int x) : assert(x >= 42, 'foo');
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional x @24
type: int
constantInitializers
AssertInitializer
assertKeyword: assert @29
leftParenthesis: ( @35
condition: BinaryExpression
leftOperand: SimpleIdentifier
token: x @36
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
staticType: int
operator: >= @38
rightOperand: IntegerLiteral
literal: 42 @41
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::>=
element: dart:core::<fragment>::@class::num::@method::>=#element
staticInvokeType: bool Function(num)
staticType: bool
comma: , @43
message: SimpleStringLiteral
literal: 'foo' @45
rightParenthesis: ) @50
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 18
formalParameters
x @24
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
constantInitializers
AssertInitializer
assertKeyword: assert @29
leftParenthesis: ( @35
condition: BinaryExpression
leftOperand: SimpleIdentifier
token: x @36
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
staticType: int
operator: >= @38
rightOperand: IntegerLiteral
literal: 42 @41
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::>=
element: dart:core::<fragment>::@class::num::@method::>=#element
staticInvokeType: bool Function(num)
staticType: bool
comma: , @43
message: SimpleStringLiteral
literal: 'foo' @45
rightParenthesis: ) @50
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional x
type: int
''');
}
test_class_constructor_initializers_field() async {
var library = await buildLibrary('''
class C {
final x;
const C() : x = 42;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
const @29
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @35
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @37
expression: IntegerLiteral
literal: 42 @39
staticType: int
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 29
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @35
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @37
expression: IntegerLiteral
literal: 42 @39
staticType: int
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_constructor_initializers_field_notConst() async {
var library = await buildLibrary('''
class C {
final x;
const C() : x = foo();
}
int foo() => 42;
''');
// It is OK to keep non-constant initializers.
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
const @29
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @35
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @37
expression: MethodInvocation
methodName: SimpleIdentifier
token: foo @39
staticElement: <testLibraryFragment>::@function::foo
element: <testLibrary>::@function::foo
staticType: int Function()
argumentList: ArgumentList
leftParenthesis: ( @42
rightParenthesis: ) @43
staticInvokeType: int Function()
staticType: int
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
functions
foo @52
reference: <testLibraryFragment>::@function::foo
enclosingElement3: <testLibraryFragment>
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 29
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @35
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @37
expression: MethodInvocation
methodName: SimpleIdentifier
token: foo @39
staticElement: <testLibraryFragment>::@function::foo
element: <testLibrary>::@function::foo
staticType: int Function()
argumentList: ArgumentList
leftParenthesis: ( @42
rightParenthesis: ) @43
staticInvokeType: int Function()
staticType: int
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
functions
foo @52
reference: <testLibraryFragment>::@function::foo
element: <testLibrary>::@function::foo
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
functions
foo
reference: <testLibrary>::@function::foo
firstFragment: <testLibraryFragment>::@function::foo
returnType: int
''');
}
test_class_constructor_initializers_field_optionalPositionalParameter() async {
var library = await buildLibrary('''
class A {
final int _f;
const A([int f = 0]) : _f = f;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _f @22
reference: <testLibraryFragment>::@class::A::@field::_f
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
const @34
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
optionalPositional default f @41
type: int
constantInitializer
IntegerLiteral
literal: 0 @45
staticType: int
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: _f @51
staticElement: <testLibraryFragment>::@class::A::@field::_f
element: <testLibraryFragment>::@class::A::@field::_f#element
staticType: null
equals: = @54
expression: SimpleIdentifier
token: f @56
staticElement: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f#element
staticType: int
accessors
synthetic get _f @-1
reference: <testLibraryFragment>::@class::A::@getter::_f
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_f @22
reference: <testLibraryFragment>::@class::A::@field::_f
element: <testLibraryFragment>::@class::A::@field::_f#element
getter2: <testLibraryFragment>::@class::A::@getter::_f
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 34
formalParameters
default f @41
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f#element
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: _f @51
staticElement: <testLibraryFragment>::@class::A::@field::_f
element: <testLibraryFragment>::@class::A::@field::_f#element
staticType: null
equals: = @54
expression: SimpleIdentifier
token: f @56
staticElement: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f#element
staticType: int
getters
synthetic get _f
reference: <testLibraryFragment>::@class::A::@getter::_f
element: <testLibraryFragment>::@class::A::@getter::_f#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _f
firstFragment: <testLibraryFragment>::@class::A::@field::_f
type: int
getter: <testLibraryFragment>::@class::A::@getter::_f#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
optionalPositional f
type: int
getters
synthetic get _f
firstFragment: <testLibraryFragment>::@class::A::@getter::_f
''');
}
test_class_constructor_initializers_field_recordLiteral() async {
var library = await buildLibrary('''
class C {
final Object x;
const C(int a) : x = (0, a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @25
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: Object
constructors
const @36
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional a @42
type: int
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @47
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @49
expression: RecordLiteral
leftParenthesis: ( @51
fields
IntegerLiteral
literal: 0 @52
staticType: int
SimpleIdentifier
token: a @55
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a#element
staticType: int
rightParenthesis: ) @56
staticType: (int, int)
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @25
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 36
formalParameters
a @42
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a#element
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @47
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @49
expression: RecordLiteral
leftParenthesis: ( @51
fields
IntegerLiteral
literal: 0 @52
staticType: int
SimpleIdentifier
token: a @55
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a#element
staticType: int
rightParenthesis: ) @56
staticType: (int, int)
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: Object
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional a
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_constructor_initializers_field_withParameter() async {
var library = await buildLibrary('''
class C {
final x;
const C(int p) : x = 1 + p;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
const @29
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional p @35
type: int
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @40
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @42
expression: BinaryExpression
leftOperand: IntegerLiteral
literal: 1 @44
staticType: int
operator: + @46
rightOperand: SimpleIdentifier
token: p @48
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p#element
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::+
element: dart:core::<fragment>::@class::num::@method::+#element
staticInvokeType: num Function(num)
staticType: int
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 29
formalParameters
p @35
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p#element
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @40
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @42
expression: BinaryExpression
leftOperand: IntegerLiteral
literal: 1 @44
staticType: int
operator: + @46
rightOperand: SimpleIdentifier
token: p @48
staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p#element
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::+
element: dart:core::<fragment>::@class::num::@method::+#element
staticInvokeType: num Function(num)
staticType: int
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional p
type: int
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_constructor_initializers_genericFunctionType() async {
var library = await buildLibrary('''
class A<T> {
const A();
}
class B {
const B(dynamic x);
const B.f()
: this(A<Function()>());
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
const @21
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @34
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
const @46
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional x @56
type: dynamic
const f @70
reference: <testLibraryFragment>::@class::B::@constructor::f
enclosingElement3: <testLibraryFragment>::@class::B
periodOffset: 69
nameEnd: 71
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @79
argumentList: ArgumentList
leftParenthesis: ( @83
arguments
InstanceCreationExpression
constructorName: ConstructorName
type: NamedType
name: A @84
typeArguments: TypeArgumentList
leftBracket: < @85
arguments
GenericFunctionType
functionKeyword: Function @86
parameters: FormalParameterList
leftParenthesis: ( @94
rightParenthesis: ) @95
declaredElement: GenericFunctionTypeElement
parameters
returnType: dynamic
type: dynamic Function()
type: dynamic Function()
rightBracket: > @96
element: <testLibraryFragment>::@class::A
element2: <testLibrary>::@class::A
type: A<dynamic Function()>
staticElement: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: dynamic Function()}
element: <testLibraryFragment>::@class::A::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @97
rightParenthesis: ) @98
staticType: A<dynamic Function()>
rightParenthesis: ) @99
staticElement: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::B::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 21
class B @34
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
const new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 46
formalParameters
x @56
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x#element
const f @70
reference: <testLibraryFragment>::@class::B::@constructor::f
element: <testLibraryFragment>::@class::B::@constructor::f#element
typeName: B
typeNameOffset: 68
periodOffset: 69
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @79
argumentList: ArgumentList
leftParenthesis: ( @83
arguments
InstanceCreationExpression
constructorName: ConstructorName
type: NamedType
name: A @84
typeArguments: TypeArgumentList
leftBracket: < @85
arguments
GenericFunctionType
functionKeyword: Function @86
parameters: FormalParameterList
leftParenthesis: ( @94
rightParenthesis: ) @95
declaredElement: GenericFunctionTypeElement
parameters
returnType: dynamic
type: dynamic Function()
type: dynamic Function()
rightBracket: > @96
element: <testLibraryFragment>::@class::A
element2: <testLibrary>::@class::A
type: A<dynamic Function()>
staticElement: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: dynamic Function()}
element: <testLibraryFragment>::@class::A::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @97
rightParenthesis: ) @98
staticType: A<dynamic Function()>
rightParenthesis: ) @99
staticElement: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::B::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
const new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional x
type: dynamic
const f
firstFragment: <testLibraryFragment>::@class::B::@constructor::f
redirectedConstructor: <testLibraryFragment>::@class::B::@constructor::new#element
''');
}
test_class_constructor_initializers_superInvocation_argumentContextType() async {
var library = await buildLibrary('''
class A {
const A(List<String> values);
}
class B extends A {
const B() : super(const []);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional values @33
type: List<String>
class B @50
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
const @72
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
constantInitializers
SuperConstructorInvocation
superKeyword: super @78
argumentList: ArgumentList
leftParenthesis: ( @83
arguments
ListLiteral
constKeyword: const @84
leftBracket: [ @90
rightBracket: ] @91
staticType: List<String>
rightParenthesis: ) @92
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 18
formalParameters
values @33
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::values#element
class B @50
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
const new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 72
constantInitializers
SuperConstructorInvocation
superKeyword: super @78
argumentList: ArgumentList
leftParenthesis: ( @83
arguments
ListLiteral
constKeyword: const @84
leftBracket: [ @90
rightBracket: ] @91
staticType: List<String>
rightParenthesis: ) @92
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional values
type: List<String>
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
const new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_initializers_superInvocation_named() async {
var library = await buildLibrary('''
class A {
const A.aaa(int p);
}
class C extends A {
const C() : super.aaa(42);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
const aaa @20
reference: <testLibraryFragment>::@class::A::@constructor::aaa
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 19
nameEnd: 23
parameters
requiredPositional p @28
type: int
class C @40
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
const @62
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @68
period: . @73
constructorName: SimpleIdentifier
token: aaa @74
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @77
arguments
IntegerLiteral
literal: 42 @78
staticType: int
rightParenthesis: ) @80
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
const aaa @20
reference: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
typeName: A
typeNameOffset: 18
periodOffset: 19
formalParameters
p @28
element: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::p#element
class C @40
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 62
constantInitializers
SuperConstructorInvocation
superKeyword: super @68
period: . @73
constructorName: SimpleIdentifier
token: aaa @74
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @77
arguments
IntegerLiteral
literal: 42 @78
staticType: int
rightParenthesis: ) @80
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
const aaa
firstFragment: <testLibraryFragment>::@class::A::@constructor::aaa
formalParameters
requiredPositional p
type: int
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: A
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa#element
''');
}
test_class_constructor_initializers_superInvocation_named_underscore() async {
var library = await buildLibrary('''
class A {
const A._();
}
class B extends A {
const B() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
const _ @20
reference: <testLibraryFragment>::@class::A::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 19
nameEnd: 21
class B @33
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
const @55
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
constantInitializers
SuperConstructorInvocation
superKeyword: super @61
period: . @66
constructorName: SimpleIdentifier
token: _ @67
staticElement: <testLibraryFragment>::@class::A::@constructor::_
element: <testLibraryFragment>::@class::A::@constructor::_#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @68
rightParenthesis: ) @69
staticElement: <testLibraryFragment>::@class::A::@constructor::_
element: <testLibraryFragment>::@class::A::@constructor::_#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::_
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
const _ @20
reference: <testLibraryFragment>::@class::A::@constructor::_
element: <testLibraryFragment>::@class::A::@constructor::_#element
typeName: A
typeNameOffset: 18
periodOffset: 19
class B @33
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
const new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 55
constantInitializers
SuperConstructorInvocation
superKeyword: super @61
period: . @66
constructorName: SimpleIdentifier
token: _ @67
staticElement: <testLibraryFragment>::@class::A::@constructor::_
element: <testLibraryFragment>::@class::A::@constructor::_#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @68
rightParenthesis: ) @69
staticElement: <testLibraryFragment>::@class::A::@constructor::_
element: <testLibraryFragment>::@class::A::@constructor::_#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::_
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
const _
firstFragment: <testLibraryFragment>::@class::A::@constructor::_
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
const new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::_#element
''');
}
test_class_constructor_initializers_superInvocation_namedExpression() async {
var library = await buildLibrary('''
class A {
const A.aaa(a, {int b});
}
class C extends A {
const C() : super.aaa(1, b: 2);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
const aaa @20
reference: <testLibraryFragment>::@class::A::@constructor::aaa
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 19
nameEnd: 23
parameters
requiredPositional a @24
type: dynamic
optionalNamed default b @32
reference: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
type: int
class C @45
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
const @67
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @73
period: . @78
constructorName: SimpleIdentifier
token: aaa @79
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @82
arguments
IntegerLiteral
literal: 1 @83
staticType: int
NamedExpression
name: Label
label: SimpleIdentifier
token: b @86
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
element: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b#element
staticType: null
colon: : @87
expression: IntegerLiteral
literal: 2 @89
staticType: int
rightParenthesis: ) @90
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
const aaa @20
reference: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
typeName: A
typeNameOffset: 18
periodOffset: 19
formalParameters
a @24
element: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::a#element
default b @32
reference: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
element: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b#element
class C @45
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 67
constantInitializers
SuperConstructorInvocation
superKeyword: super @73
period: . @78
constructorName: SimpleIdentifier
token: aaa @79
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @82
arguments
IntegerLiteral
literal: 1 @83
staticType: int
NamedExpression
name: Label
label: SimpleIdentifier
token: b @86
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
element: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b#element
staticType: null
colon: : @87
expression: IntegerLiteral
literal: 2 @89
staticType: int
rightParenthesis: ) @90
staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
element: <testLibraryFragment>::@class::A::@constructor::aaa#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
const aaa
firstFragment: <testLibraryFragment>::@class::A::@constructor::aaa
formalParameters
requiredPositional a
type: dynamic
optionalNamed b
firstFragment: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
type: int
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: A
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa#element
''');
}
test_class_constructor_initializers_superInvocation_unnamed() async {
var library = await buildLibrary('''
class A {
const A(int p);
}
class C extends A {
const C.ccc() : super(42);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional p @24
type: int
class C @36
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
const ccc @60
reference: <testLibraryFragment>::@class::C::@constructor::ccc
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 59
nameEnd: 63
constantInitializers
SuperConstructorInvocation
superKeyword: super @68
argumentList: ArgumentList
leftParenthesis: ( @73
arguments
IntegerLiteral
literal: 42 @74
staticType: int
rightParenthesis: ) @76
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 18
formalParameters
p @24
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::p#element
class C @36
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const ccc @60
reference: <testLibraryFragment>::@class::C::@constructor::ccc
element: <testLibraryFragment>::@class::C::@constructor::ccc#element
typeName: C
typeNameOffset: 58
periodOffset: 59
constantInitializers
SuperConstructorInvocation
superKeyword: super @68
argumentList: ArgumentList
leftParenthesis: ( @73
arguments
IntegerLiteral
literal: 42 @74
staticType: int
rightParenthesis: ) @76
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional p
type: int
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: A
constructors
const ccc
firstFragment: <testLibraryFragment>::@class::C::@constructor::ccc
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_initializers_thisInvocation_argumentContextType() async {
var library = await buildLibrary('''
class A {
const A(List<String> values);
const A.empty() : this(const []);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional values @33
type: List<String>
const empty @52
reference: <testLibraryFragment>::@class::A::@constructor::empty
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 51
nameEnd: 57
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @62
argumentList: ArgumentList
leftParenthesis: ( @66
arguments
ListLiteral
constKeyword: const @67
leftBracket: [ @73
rightBracket: ] @74
staticType: List<String>
rightParenthesis: ) @75
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 18
formalParameters
values @33
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::values#element
const empty @52
reference: <testLibraryFragment>::@class::A::@constructor::empty
element: <testLibraryFragment>::@class::A::@constructor::empty#element
typeName: A
typeNameOffset: 50
periodOffset: 51
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @62
argumentList: ArgumentList
leftParenthesis: ( @66
arguments
ListLiteral
constKeyword: const @67
leftBracket: [ @73
rightBracket: ] @74
staticType: List<String>
rightParenthesis: ) @75
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional values
type: List<String>
const empty
firstFragment: <testLibraryFragment>::@class::A::@constructor::empty
redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_initializers_thisInvocation_named() async {
var library = await buildLibrary('''
class C {
const C() : this.named(1, 'bbb');
const C.named(int a, String b);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @24
period: . @28
constructorName: SimpleIdentifier
token: named @29
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @34
arguments
IntegerLiteral
literal: 1 @35
staticType: int
SimpleStringLiteral
literal: 'bbb' @38
rightParenthesis: ) @43
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
const named @56
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 55
nameEnd: 61
parameters
requiredPositional a @66
type: int
requiredPositional b @76
type: String
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 18
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @24
period: . @28
constructorName: SimpleIdentifier
token: named @29
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @34
arguments
IntegerLiteral
literal: 1 @35
staticType: int
SimpleStringLiteral
literal: 'bbb' @38
rightParenthesis: ) @43
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
const named @56
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 54
periodOffset: 55
formalParameters
a @66
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::a#element
b @76
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named#element
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
formalParameters
requiredPositional a
type: int
requiredPositional b
type: String
''');
}
test_class_constructor_initializers_thisInvocation_namedExpression() async {
var library = await buildLibrary('''
class C {
const C() : this.named(1, b: 2);
const C.named(a, {int b});
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @24
period: . @28
constructorName: SimpleIdentifier
token: named @29
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @34
arguments
IntegerLiteral
literal: 1 @35
staticType: int
NamedExpression
name: Label
label: SimpleIdentifier
token: b @38
staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b#element
staticType: null
colon: : @39
expression: IntegerLiteral
literal: 2 @41
staticType: int
rightParenthesis: ) @42
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
const named @55
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 54
nameEnd: 60
parameters
requiredPositional a @61
type: dynamic
optionalNamed default b @69
reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
type: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 18
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @24
period: . @28
constructorName: SimpleIdentifier
token: named @29
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @34
arguments
IntegerLiteral
literal: 1 @35
staticType: int
NamedExpression
name: Label
label: SimpleIdentifier
token: b @38
staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b#element
staticType: null
colon: : @39
expression: IntegerLiteral
literal: 2 @41
staticType: int
rightParenthesis: ) @42
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
const named @55
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 53
periodOffset: 54
formalParameters
a @61
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::a#element
default b @69
reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named#element
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
formalParameters
requiredPositional a
type: dynamic
optionalNamed b
firstFragment: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
type: int
''');
}
test_class_constructor_initializers_thisInvocation_unnamed() async {
var library = await buildLibrary('''
class C {
const C.named() : this(1, 'bbb');
const C(int a, String b);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const named @20
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 19
nameEnd: 25
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @30
argumentList: ArgumentList
leftParenthesis: ( @34
arguments
IntegerLiteral
literal: 1 @35
staticType: int
SimpleStringLiteral
literal: 'bbb' @38
rightParenthesis: ) @43
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
const @54
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional a @60
type: int
requiredPositional b @70
type: String
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const named @20
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 18
periodOffset: 19
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @30
argumentList: ArgumentList
leftParenthesis: ( @34
arguments
IntegerLiteral
literal: 1 @35
staticType: int
SimpleStringLiteral
literal: 'bbb' @38
rightParenthesis: ) @43
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 54
formalParameters
a @60
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a#element
b @70
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::b#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional a
type: int
requiredPositional b
type: String
''');
}
test_class_constructor_parameters_super_explicitType_function() async {
var library = await buildLibrary('''
class A {
A(Object? a);
}
class B extends A {
B(int super.a<T extends num>(T d)?);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @22
type: Object?
class B @35
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@51
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @63
type: int Function<T extends num>(T)?
typeParameters
covariant T @65
bound: num
parameters
requiredPositional d @82
type: T
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @22
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @35
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 51
formalParameters
super.a @63
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: Object?
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: int Function<T extends num>(T)?
formalParameters
requiredPositional d
type: T
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_explicitType_interface() async {
var library = await buildLibrary('''
class A {
A(num a);
}
class B extends A {
B(int super.a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @18
type: num
class B @31
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@47
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @59
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @18
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @31
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 47
formalParameters
super.a @59
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: num
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_explicitType_interface_nullable() async {
var library = await buildLibrary('''
class A {
A(num? a);
}
class B extends A {
B(int? super.a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @19
type: num?
class B @32
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@48
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @61
type: int?
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @19
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @32
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 48
formalParameters
super.a @61
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: num?
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: int?
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_invalid_topFunction() async {
var library = await buildLibrary('''
void f(super.a) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
functions
f @5
reference: <testLibraryFragment>::@function::f
enclosingElement3: <testLibraryFragment>
parameters
requiredPositional final super.a @13
type: dynamic
superConstructorParameter: <null>
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
functions
f @5
reference: <testLibraryFragment>::@function::f
element: <testLibrary>::@function::f
formalParameters
super.a @13
element: <testLibraryFragment>::@function::f::@parameter::a#element
functions
f
reference: <testLibrary>::@function::f
firstFragment: <testLibraryFragment>::@function::f
formalParameters
requiredPositional final a
type: dynamic
returnType: void
''');
}
test_class_constructor_parameters_super_optionalNamed() async {
var library = await buildLibrary('''
class A {
A({required int a, required double b});
}
class B extends A {
B({String o1, super.a, String o2, super.b}) : super();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredNamed default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
requiredNamed default b @47
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
type: double
class B @61
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@77
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
optionalNamed default o1 @87
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
type: String
optionalNamed default final super.a @97
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
optionalNamed default o2 @107
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
type: String
optionalNamed default final super.b @117
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
type: double
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
default b @47
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b#element
class B @61
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 77
formalParameters
default o1 @87
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1#element
default super.a @97
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
default o2 @107
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2#element
default super.b @117
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredNamed a
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
requiredNamed b
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
type: double
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
optionalNamed o1
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
type: String
optionalNamed final a
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
optionalNamed o2
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
type: String
optionalNamed final b
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
type: double
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_optionalNamed_defaultValue() async {
var library = await buildLibrary('''
class A {
A({int a = 0});
}
class B extends A {
B({super.a});
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
optionalNamed default a @19
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
constantInitializer
IntegerLiteral
literal: 0 @23
staticType: int
class B @37
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@53
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
optionalNamed default final hasDefaultValue super.a @62
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
default a @19
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @37
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 53
formalParameters
default super.a @62
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
optionalNamed a
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
optionalNamed final a
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_optionalNamed_unresolved() async {
var library = await buildLibrary('''
class A {
A({required int a});
}
class B extends A {
B({super.b});
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredNamed default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
class B @42
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@58
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
optionalNamed default final super.b @67
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
type: dynamic
superConstructorParameter: <null>
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @42
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 58
formalParameters
default super.b @67
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredNamed a
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
optionalNamed final b
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
type: dynamic
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_optionalNamed_unresolved2() async {
var library = await buildLibrary('''
class A {
A(int a);
}
class B extends A {
B({super.a});
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @18
type: int
class B @31
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@47
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
optionalNamed default final super.a @56
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: dynamic
superConstructorParameter: <null>
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @18
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @31
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 47
formalParameters
default super.a @56
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: int
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
optionalNamed final a
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: dynamic
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_optionalPositional() async {
var library = await buildLibrary('''
class A {
A(int a, double b);
}
class B extends A {
B([String o1, super.a, String o2, super.b]) : super();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @18
type: int
requiredPositional b @28
type: double
class B @41
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@57
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
optionalPositional default o1 @67
type: String
optionalPositional default final super.a @77
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
optionalPositional default o2 @87
type: String
optionalPositional default final super.b @97
type: double
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @18
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
b @28
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b#element
class B @41
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 57
formalParameters
default o1 @67
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1#element
default super.a @77
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
default o2 @87
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2#element
default super.b @97
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: int
requiredPositional b
type: double
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
optionalPositional o1
type: String
optionalPositional final a
type: int
optionalPositional o2
type: String
optionalPositional final b
type: double
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredNamed() async {
var library = await buildLibrary('''
class A {
A({required int a, required double b});
}
class B extends A {
B({
required String o1,
required super.a,
required String o2,
required super.b,
}) : super();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredNamed default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
requiredNamed default b @47
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
type: double
class B @61
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@77
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredNamed default o1 @101
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
type: String
requiredNamed default final super.a @124
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
requiredNamed default o2 @147
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
type: String
requiredNamed default final super.b @170
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
type: double
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
default b @47
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b#element
class B @61
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 77
formalParameters
default o1 @101
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1#element
default super.a @124
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
default o2 @147
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2#element
default super.b @170
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredNamed a
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
requiredNamed b
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
type: double
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredNamed o1
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
type: String
requiredNamed final a
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
requiredNamed o2
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
type: String
requiredNamed final b
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
type: double
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredNamed_defaultValue() async {
var library = await buildLibrary('''
class A {
A({int a = 0});
}
class B extends A {
B({required super.a});
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
optionalNamed default a @19
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
constantInitializer
IntegerLiteral
literal: 0 @23
staticType: int
class B @37
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@53
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredNamed default final super.a @71
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
default a @19
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @37
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 53
formalParameters
default super.a @71
reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
optionalNamed a
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredNamed final a
firstFragment: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredPositional() async {
var library = await buildLibrary('''
class A {
A(int a, double b);
}
class B extends A {
B(String o1, super.a, String o2, super.b) : super();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @18
type: int
requiredPositional b @28
type: double
class B @41
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@57
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional o1 @66
type: String
requiredPositional final super.a @76
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
requiredPositional o2 @86
type: String
requiredPositional final super.b @96
type: double
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @18
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
b @28
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b#element
class B @41
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 57
formalParameters
o1 @66
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1#element
super.a @76
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
o2 @86
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2#element
super.b @96
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: int
requiredPositional b
type: double
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional o1
type: String
requiredPositional final a
type: int
requiredPositional o2
type: String
requiredPositional final b
type: double
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredPositional_inferenceOrder() async {
// It is important that `B` is declared after `C`, so that we check that
// inference happens in order - first `B`, then `C`.
var library = await buildLibrary('''
abstract class A {
A(int a);
}
class C extends B {
C(super.a);
}
class B extends A {
B(super.a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class A @15
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@21
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @27
type: int
class C @40
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: B
constructors
@56
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final super.a @64
type: int
superConstructorParameter: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::B::@constructor::new
class B @77
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@93
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @101
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @15
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 21
formalParameters
a @27
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class C @40
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 56
formalParameters
super.a @64
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::B::@constructor::new
class B @77
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 93
formalParameters
super.a @101
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
abstract class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: int
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: B
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final a
type: int
superConstructor: <testLibraryFragment>::@class::B::@constructor::new#element
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredPositional_inferenceOrder_generic() async {
// It is important that `C` is declared before `B`, so that we check that
// inference happens in order - first `B`, then `C`.
var library = await buildLibrary('''
class A {
A(int a);
}
class C extends B<String> {
C(super.a);
}
class B<T> extends A {
B(super.a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional a @18
type: int
class C @31
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: B<String>
constructors
@55
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final super.a @63
type: int
superConstructorParameter: SuperFormalParameterMember
base: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
substitution: {T: String}
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::B::@constructor::new
substitution: {T: String}
class B @76
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @78
defaultType: dynamic
supertype: A
constructors
@95
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @103
type: int
superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
a @18
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class C @31
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 55
formalParameters
super.a @63
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::B::@constructor::new
substitution: {T: String}
class B @76
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
T @78
element: <not-implemented>
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 95
formalParameters
super.a @103
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional a
type: int
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: B<String>
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final a
type: int
superConstructor: <testLibraryFragment>::@class::B::@constructor::new#element
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
T
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredPositional_unresolved() async {
var library = await buildLibrary('''
class A {}
class B extends A {
B(super.a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @18
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@34
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @42
type: dynamic
superConstructorParameter: <null>
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @18
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 34
formalParameters
super.a @42
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: dynamic
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_parameters_super_requiredPositional_unresolved2() async {
var library = await buildLibrary('''
class A {
A({required int a})
}
class B extends A {
B(super.a);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredNamed default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
class B @41
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@57
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional final super.a @65
type: dynamic
superConstructorParameter: <null>
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
default a @28
reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a#element
class B @41
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 57
formalParameters
super.a @65
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredNamed a
firstFragment: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
type: int
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional final a
type: dynamic
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_params() async {
var library = await buildLibrary('class C { C(x, int y); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@10
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional x @12
type: dynamic
requiredPositional y @19
type: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 10
formalParameters
x @12
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x#element
y @19
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::y#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional x
type: dynamic
requiredPositional y
type: int
''');
}
test_class_constructor_redirected_factory_named() async {
var library = await buildLibrary('''
class C {
factory C() = D.named;
C._();
}
class D extends C {
D.named() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @20
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named
_ @39
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 38
nameEnd: 40
class D @52
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
supertype: C
constructors
named @70
reference: <testLibraryFragment>::@class::D::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::D
periodOffset: 69
nameEnd: 75
superConstructor: <testLibraryFragment>::@class::C::@constructor::_
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 20
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named
_ @39
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 37
periodOffset: 38
class D @52
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
named @70
reference: <testLibraryFragment>::@class::D::@constructor::named
element: <testLibraryFragment>::@class::D::@constructor::named#element
typeName: D
typeNameOffset: 68
periodOffset: 69
superConstructor: <testLibraryFragment>::@class::C::@constructor::_
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
supertype: C
constructors
named
firstFragment: <testLibraryFragment>::@class::D::@constructor::named
superConstructor: <testLibraryFragment>::@class::C::@constructor::_#element
''');
}
test_class_constructor_redirected_factory_named_generic() async {
var library = await buildLibrary('''
class C<T, U> {
factory C() = D<U, T>.named;
C._();
}
class D<T, U> extends C<U, T> {
D.named() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant U @11
defaultType: dynamic
constructors
factory @26
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::D::@constructor::named
substitution: {T: U, U: T}
_ @51
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 50
nameEnd: 52
class D @64
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @66
defaultType: dynamic
covariant U @69
defaultType: dynamic
supertype: C<U, T>
constructors
named @94
reference: <testLibraryFragment>::@class::D::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::D
periodOffset: 93
nameEnd: 99
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::_
substitution: {T: U, U: T}
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @11
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 26
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::D::@constructor::named
substitution: {T: U, U: T}
_ @51
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 49
periodOffset: 50
class D @64
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @66
element: <not-implemented>
U @69
element: <not-implemented>
constructors
named @94
reference: <testLibraryFragment>::@class::D::@constructor::named
element: <testLibraryFragment>::@class::D::@constructor::named#element
typeName: D
typeNameOffset: 92
periodOffset: 93
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::_
substitution: {T: U, U: T}
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
U
supertype: C<U, T>
constructors
named
firstFragment: <testLibraryFragment>::@class::D::@constructor::named
superConstructor: <testLibraryFragment>::@class::C::@constructor::_#element
''');
}
test_class_constructor_redirected_factory_named_generic_viaTypeAlias() async {
var library = await buildLibrary('''
typedef A<T, U> = C<T, U>;
class B<T, U> {
factory B() = A<U, T>.named;
B._();
}
class C<T, U> extends A<U, T> {
C.named() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class B @33
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @35
defaultType: dynamic
covariant U @38
defaultType: dynamic
constructors
factory @53
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::named
substitution: {T: U, U: T}
_ @78
reference: <testLibraryFragment>::@class::B::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::B
periodOffset: 77
nameEnd: 79
class C @91
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @93
defaultType: dynamic
covariant U @96
defaultType: dynamic
supertype: C<U, T>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
U
T
constructors
named @121
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 120
nameEnd: 126
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
typeParameters
covariant T @10
defaultType: dynamic
covariant U @13
defaultType: dynamic
aliasedType: C<T, U>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @33
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
T @35
element: <not-implemented>
U @38
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 53
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::named
substitution: {T: U, U: T}
_ @78
reference: <testLibraryFragment>::@class::B::@constructor::_
element: <testLibraryFragment>::@class::B::@constructor::_#element
typeName: B
typeNameOffset: 76
periodOffset: 77
class C @91
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @93
element: <not-implemented>
U @96
element: <not-implemented>
constructors
named @121
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 119
periodOffset: 120
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
element: <testLibrary>::@typeAlias::A
typeParameters
T @10
element: <not-implemented>
U @13
element: <not-implemented>
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::B::@constructor::_
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
supertype: C<U, T>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
U
T
constructors
named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
typeAliases
A
firstFragment: <testLibraryFragment>::@typeAlias::A
typeParameters
T
U
aliasedType: C<T, U>
''');
}
test_class_constructor_redirected_factory_named_imported() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D extends C {
D.named() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart';
class C {
factory C() = D.named;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart
enclosingElement3: <testLibraryFragment>
classes
class C @25
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @39
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
_ @58
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 57
nameEnd: 59
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart
classes
class C @25
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 39
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
_ @58
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 56
periodOffset: 57
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_named_imported_generic() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D<T, U> extends C<U, T> {
D.named() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart';
class C<T, U> {
factory C() = D<U, T>.named;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart
enclosingElement3: <testLibraryFragment>
classes
class C @25
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @27
defaultType: dynamic
covariant U @30
defaultType: dynamic
constructors
factory @45
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
substitution: {T: U, U: T}
_ @70
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 69
nameEnd: 71
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart
classes
class C @25
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @27
element: <not-implemented>
U @30
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 45
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
substitution: {T: U, U: T}
_ @70
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 68
periodOffset: 69
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_named_prefixed() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D extends C {
D.named() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart' as foo;
class C {
factory C() = foo.D.named;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart as foo @21
enclosingElement3: <testLibraryFragment>
libraryImportPrefixes
foo @21
reference: <testLibraryFragment>::@prefix::foo
enclosingElement3: <testLibraryFragment>
classes
class C @32
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @46
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
_ @69
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 68
nameEnd: 70
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart as foo @21
prefixes
<testLibraryFragment>::@prefix2::foo
fragments: @21
classes
class C @32
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 46
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
_ @69
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 67
periodOffset: 68
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_named_prefixed_generic() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D<T, U> extends C<U, T> {
D.named() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart' as foo;
class C<T, U> {
factory C() = foo.D<U, T>.named;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart as foo @21
enclosingElement3: <testLibraryFragment>
libraryImportPrefixes
foo @21
reference: <testLibraryFragment>::@prefix::foo
enclosingElement3: <testLibraryFragment>
classes
class C @32
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @34
defaultType: dynamic
covariant U @37
defaultType: dynamic
constructors
factory @52
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
substitution: {T: U, U: T}
_ @81
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 80
nameEnd: 82
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart as foo @21
prefixes
<testLibraryFragment>::@prefix2::foo
fragments: @21
classes
class C @32
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @34
element: <not-implemented>
U @37
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 52
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
substitution: {T: U, U: T}
_ @81
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 79
periodOffset: 80
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_named_unresolved_class() async {
var library = await buildLibrary('''
class C<E> {
factory C() = D.named<E>;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant E @8
defaultType: dynamic
constructors
factory @23
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
E @8
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 23
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
E
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_redirected_factory_named_unresolved_constructor() async {
var library = await buildLibrary('''
class D {}
class C<E> {
factory C() = D.named<E>;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class D @6
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class C @17
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant E @19
defaultType: dynamic
constructors
factory @34
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class D @6
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class C @17
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
E @19
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 34
classes
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
E
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_redirected_factory_unnamed() async {
var library = await buildLibrary('''
class C {
factory C() = D;
C._();
}
class D extends C {
D() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @20
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::new
_ @33
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 32
nameEnd: 34
class D @46
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
supertype: C
constructors
@62
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
superConstructor: <testLibraryFragment>::@class::C::@constructor::_
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 20
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::new
_ @33
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 31
periodOffset: 32
class D @46
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
typeNameOffset: 62
superConstructor: <testLibraryFragment>::@class::C::@constructor::_
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
supertype: C
constructors
new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
superConstructor: <testLibraryFragment>::@class::C::@constructor::_#element
''');
}
test_class_constructor_redirected_factory_unnamed_generic() async {
var library = await buildLibrary('''
class C<T, U> {
factory C() = D<U, T>;
C._();
}
class D<T, U> extends C<U, T> {
D() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant U @11
defaultType: dynamic
constructors
factory @26
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::D::@constructor::new
substitution: {T: U, U: T}
_ @45
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 44
nameEnd: 46
class D @58
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @60
defaultType: dynamic
covariant U @63
defaultType: dynamic
supertype: C<U, T>
constructors
@86
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::_
substitution: {T: U, U: T}
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @11
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 26
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::D::@constructor::new
substitution: {T: U, U: T}
_ @45
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 43
periodOffset: 44
class D @58
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @60
element: <not-implemented>
U @63
element: <not-implemented>
constructors
new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
typeNameOffset: 86
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::_
substitution: {T: U, U: T}
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
U
supertype: C<U, T>
constructors
new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
superConstructor: <testLibraryFragment>::@class::C::@constructor::_#element
''');
}
test_class_constructor_redirected_factory_unnamed_generic_viaTypeAlias() async {
var library = await buildLibrary('''
typedef A<T, U> = C<T, U>;
class B<T, U> {
factory B() = A<U, T>;
B_();
}
class C<T, U> extends B<U, T> {
C() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class B @33
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @35
defaultType: dynamic
covariant U @38
defaultType: dynamic
constructors
factory @53
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::new
substitution: {T: U, U: T}
methods
abstract B_ @70
reference: <testLibraryFragment>::@class::B::@method::B_
enclosingElement3: <testLibraryFragment>::@class::B
returnType: dynamic
class C @84
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @86
defaultType: dynamic
covariant U @89
defaultType: dynamic
supertype: B<U, T>
constructors
@112
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
typeParameters
covariant T @10
defaultType: dynamic
covariant U @13
defaultType: dynamic
aliasedType: C<T, U>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @33
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
T @35
element: <not-implemented>
U @38
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 53
redirectedConstructor: ConstructorMember
base: <testLibraryFragment>::@class::C::@constructor::new
substitution: {T: U, U: T}
methods
B_ @70
reference: <testLibraryFragment>::@class::B::@method::B_
element: <testLibraryFragment>::@class::B::@method::B_#element
class C @84
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @86
element: <not-implemented>
U @89
element: <not-implemented>
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 112
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
element: <testLibrary>::@typeAlias::A
typeParameters
T @10
element: <not-implemented>
U @13
element: <not-implemented>
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
methods
abstract B_
reference: <testLibrary>::@class::B::@method::B_
firstFragment: <testLibraryFragment>::@class::B::@method::B_
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
supertype: B<U, T>
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
typeAliases
A
firstFragment: <testLibraryFragment>::@typeAlias::A
typeParameters
T
U
aliasedType: C<T, U>
''');
}
test_class_constructor_redirected_factory_unnamed_imported() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D extends C {
D() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart';
class C {
factory C() = D;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart
enclosingElement3: <testLibraryFragment>
classes
class C @25
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @39
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
_ @52
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 51
nameEnd: 53
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart
classes
class C @25
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 39
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
_ @52
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 50
periodOffset: 51
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_unnamed_imported_generic() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D<T, U> extends C<U, T> {
D() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart';
class C<T, U> {
factory C() = D<U, T>;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart
enclosingElement3: <testLibraryFragment>
classes
class C @25
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @27
defaultType: dynamic
covariant U @30
defaultType: dynamic
constructors
factory @45
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
substitution: {T: U, U: T}
_ @64
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 63
nameEnd: 65
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart
classes
class C @25
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @27
element: <not-implemented>
U @30
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 45
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
substitution: {T: U, U: T}
_ @64
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 62
periodOffset: 63
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_unnamed_imported_viaTypeAlias() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
typedef A = B;
class B extends C {
B() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart';
class C {
factory C() = A;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart
enclosingElement3: <testLibraryFragment>
classes
class C @25
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @39
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
_ @52
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 51
nameEnd: 53
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart
classes
class C @25
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 39
redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
_ @52
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 50
periodOffset: 51
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_unnamed_prefixed() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D extends C {
D() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart' as foo;
class C {
factory C() = foo.D;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart as foo @21
enclosingElement3: <testLibraryFragment>
libraryImportPrefixes
foo @21
reference: <testLibraryFragment>::@prefix::foo
enclosingElement3: <testLibraryFragment>
classes
class C @32
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @46
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
_ @63
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 62
nameEnd: 64
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart as foo @21
prefixes
<testLibraryFragment>::@prefix2::foo
fragments: @21
classes
class C @32
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 46
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
_ @63
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 61
periodOffset: 62
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_unnamed_prefixed_generic() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
class D<T, U> extends C<U, T> {
D() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart' as foo;
class C<T, U> {
factory C() = foo.D<U, T>;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart as foo @21
enclosingElement3: <testLibraryFragment>
libraryImportPrefixes
foo @21
reference: <testLibraryFragment>::@prefix::foo
enclosingElement3: <testLibraryFragment>
classes
class C @32
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @34
defaultType: dynamic
covariant U @37
defaultType: dynamic
constructors
factory @52
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
substitution: {T: U, U: T}
_ @75
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 74
nameEnd: 76
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart as foo @21
prefixes
<testLibraryFragment>::@prefix2::foo
fragments: @21
classes
class C @32
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @34
element: <not-implemented>
U @37
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 52
redirectedConstructor: ConstructorMember
base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
substitution: {T: U, U: T}
_ @75
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 73
periodOffset: 74
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_unnamed_prefixed_viaTypeAlias() async {
newFile('$testPackageLibPath/foo.dart', '''
import 'test.dart';
typedef A = B;
class B extends C {
B() : super._();
}
''');
var library = await buildLibrary('''
import 'foo.dart' as foo;
class C {
factory C() = foo.A;
C._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/foo.dart as foo @21
enclosingElement3: <testLibraryFragment>
libraryImportPrefixes
foo @21
reference: <testLibraryFragment>::@prefix::foo
enclosingElement3: <testLibraryFragment>
classes
class C @32
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
factory @46
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
_ @63
reference: <testLibraryFragment>::@class::C::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 62
nameEnd: 64
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/foo.dart as foo @21
prefixes
<testLibraryFragment>::@prefix2::foo
fragments: @21
classes
class C @32
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 46
redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
_ @63
reference: <testLibraryFragment>::@class::C::@constructor::_
element: <testLibraryFragment>::@class::C::@constructor::_#element
typeName: C
typeNameOffset: 61
periodOffset: 62
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::C::@constructor::_
''');
}
test_class_constructor_redirected_factory_unnamed_unresolved() async {
var library = await buildLibrary('''
class C<E> {
factory C() = D<E>;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant E @8
defaultType: dynamic
constructors
factory @23
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
E @8
element: <not-implemented>
constructors
factory new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 23
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
E
constructors
factory new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_redirected_factory_unnamed_viaTypeAlias() async {
var library = await buildLibrary('''
typedef A = C;
class B {
factory B() = A;
B._();
}
class C extends B {
C() : super._();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class B @21
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
factory @35
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
_ @48
reference: <testLibraryFragment>::@class::B::@constructor::_
enclosingElement3: <testLibraryFragment>::@class::B
periodOffset: 47
nameEnd: 49
class C @61
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: B
constructors
@77
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::B::@constructor::_
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
aliasedType: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @21
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
factory new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 35
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
_ @48
reference: <testLibraryFragment>::@class::B::@constructor::_
element: <testLibraryFragment>::@class::B::@constructor::_#element
typeName: B
typeNameOffset: 46
periodOffset: 47
class C @61
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 77
superConstructor: <testLibraryFragment>::@class::B::@constructor::_
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
element: <testLibrary>::@typeAlias::A
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
factory new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
_
firstFragment: <testLibraryFragment>::@class::B::@constructor::_
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: B
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::B::@constructor::_#element
typeAliases
A
firstFragment: <testLibraryFragment>::@typeAlias::A
aliasedType: C
''');
}
test_class_constructor_redirected_thisInvocation_named() async {
var library = await buildLibrary('''
class C {
const C.named();
const C() : this.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const named @20
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 19
nameEnd: 25
const @37
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @43
period: . @47
constructorName: SimpleIdentifier
token: named @48
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @53
rightParenthesis: ) @54
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const named @20
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 18
periodOffset: 19
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 37
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @43
period: . @47
constructorName: SimpleIdentifier
token: named @48
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @53
rightParenthesis: ) @54
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named#element
''');
}
test_class_constructor_redirected_thisInvocation_named_generic() async {
var library = await buildLibrary('''
class C<T> {
const C.named();
const C() : this.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
const named @23
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 22
nameEnd: 28
const @40
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @46
period: . @50
constructorName: SimpleIdentifier
token: named @51
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @56
rightParenthesis: ) @57
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
const named @23
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 21
periodOffset: 22
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 40
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @46
period: . @50
constructorName: SimpleIdentifier
token: named @51
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @56
rightParenthesis: ) @57
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named#element
''');
}
test_class_constructor_redirected_thisInvocation_named_notConst() async {
var library = await buildLibrary('''
class C {
C.named();
C() : this.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
named @14
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 13
nameEnd: 19
@25
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
named @14
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 12
periodOffset: 13
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 25
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named#element
''');
}
test_class_constructor_redirected_thisInvocation_unnamed() async {
var library = await buildLibrary('''
class C {
const C();
const C.named() : this();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
const @18
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
const named @33
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 32
nameEnd: 38
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @43
argumentList: ArgumentList
leftParenthesis: ( @47
rightParenthesis: ) @48
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 18
const named @33
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 31
periodOffset: 32
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @43
argumentList: ArgumentList
leftParenthesis: ( @47
rightParenthesis: ) @48
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
''');
}
test_class_constructor_redirected_thisInvocation_unnamed_generic() async {
var library = await buildLibrary('''
class C<T> {
const C();
const C.named() : this();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
const @21
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
const named @36
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 35
nameEnd: 41
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @46
argumentList: ArgumentList
leftParenthesis: ( @50
rightParenthesis: ) @51
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 21
const named @36
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 34
periodOffset: 35
constantInitializers
RedirectingConstructorInvocation
thisKeyword: this @46
argumentList: ArgumentList
leftParenthesis: ( @50
rightParenthesis: ) @51
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
''');
}
test_class_constructor_redirected_thisInvocation_unnamed_notConst() async {
var library = await buildLibrary('''
class C {
C();
C.named() : this();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
named @21
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 20
nameEnd: 26
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 12
named @21
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 19
periodOffset: 20
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
''');
}
test_class_constructor_superConstructor_generic_named() async {
var library = await buildLibrary('''
class A<T> {
A.named(T a);
}
class B extends A<int> {
B() : super.named(0);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
named @17
reference: <testLibraryFragment>::@class::A::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 16
nameEnd: 22
parameters
requiredPositional a @25
type: T
class B @37
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A<int>
constructors
@58
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::named
substitution: {T: int}
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
named @17
reference: <testLibraryFragment>::@class::A::@constructor::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 15
periodOffset: 16
formalParameters
a @25
element: <testLibraryFragment>::@class::A::@constructor::named::@parameter::a#element
class B @37
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 58
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::named
substitution: {T: int}
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
named
firstFragment: <testLibraryFragment>::@class::A::@constructor::named
formalParameters
requiredPositional a
type: T
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A<int>
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::named#element
''');
}
test_class_constructor_superConstructor_notGeneric_named() async {
var library = await buildLibrary('''
class A {
A.named();
}
class B extends A {
B() : super.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
named @14
reference: <testLibraryFragment>::@class::A::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 13
nameEnd: 19
class B @31
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@47
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
named @14
reference: <testLibraryFragment>::@class::A::@constructor::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 12
periodOffset: 13
class B @31
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 47
superConstructor: <testLibraryFragment>::@class::A::@constructor::named
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
named
firstFragment: <testLibraryFragment>::@class::A::@constructor::named
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::named#element
''');
}
test_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
var library = await buildLibrary('''
class A {}
class B extends A {
B() : super();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@33
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @17
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 33
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_superConstructor_notGeneric_unnamed_implicit() async {
var library = await buildLibrary('''
class A {}
class B extends A {
B();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
@33
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @17
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 33
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_superConstructor_notGeneric_unnamed_implicit2() async {
var library = await buildLibrary('''
class A {}
class B extends A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @17
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_constructor_unnamed_implicit() async {
var library = await buildLibrary('class C {}');
configuration.withDisplayName = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
displayName: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructor_withCycles_const() async {
var library = await buildLibrary('''
class C {
final x;
const C() : x = const D();
}
class D {
final x;
const D() : x = const C();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
const @29
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @35
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @37
expression: InstanceCreationExpression
keyword: const @39
constructorName: ConstructorName
type: NamedType
name: D @45
element: <testLibraryFragment>::@class::D
element2: <testLibrary>::@class::D
type: D
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @46
rightParenthesis: ) @47
staticType: D
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
class D @58
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
fields
final x @70
reference: <testLibraryFragment>::@class::D::@field::x
enclosingElement3: <testLibraryFragment>::@class::D
type: dynamic
constructors
const @81
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @87
staticElement: <testLibraryFragment>::@class::D::@field::x
element: <testLibraryFragment>::@class::D::@field::x#element
staticType: null
equals: = @89
expression: InstanceCreationExpression
keyword: const @91
constructorName: ConstructorName
type: NamedType
name: C @97
element: <testLibraryFragment>::@class::C
element2: <testLibrary>::@class::C
type: C
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @98
rightParenthesis: ) @99
staticType: C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::D::@getter::x
enclosingElement3: <testLibraryFragment>::@class::D
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 29
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @35
staticElement: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
staticType: null
equals: = @37
expression: InstanceCreationExpression
keyword: const @39
constructorName: ConstructorName
type: NamedType
name: D @45
element: <testLibraryFragment>::@class::D
element2: <testLibrary>::@class::D
type: D
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @46
rightParenthesis: ) @47
staticType: D
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
class D @58
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
fields
x @70
reference: <testLibraryFragment>::@class::D::@field::x
element: <testLibraryFragment>::@class::D::@field::x#element
getter2: <testLibraryFragment>::@class::D::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
typeNameOffset: 81
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: x @87
staticElement: <testLibraryFragment>::@class::D::@field::x
element: <testLibraryFragment>::@class::D::@field::x#element
staticType: null
equals: = @89
expression: InstanceCreationExpression
keyword: const @91
constructorName: ConstructorName
type: NamedType
name: C @97
element: <testLibraryFragment>::@class::C
element2: <testLibrary>::@class::C
type: C
staticElement: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @98
rightParenthesis: ) @99
staticType: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::D::@getter::x
element: <testLibraryFragment>::@class::D::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
fields
final x
firstFragment: <testLibraryFragment>::@class::D::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::D::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::D::@getter::x
''');
}
test_class_constructor_withCycles_nonConst() async {
var library = await buildLibrary('''
class C {
final x;
C() : x = new D();
}
class D {
final x;
D() : x = new C();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
@23
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
class D @50
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
fields
final x @62
reference: <testLibraryFragment>::@class::D::@field::x
enclosingElement3: <testLibraryFragment>::@class::D
type: dynamic
constructors
@67
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::D::@getter::x
enclosingElement3: <testLibraryFragment>::@class::D
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 23
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
class D @50
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
fields
x @62
reference: <testLibraryFragment>::@class::D::@field::x
element: <testLibraryFragment>::@class::D::@field::x#element
getter2: <testLibraryFragment>::@class::D::@getter::x
constructors
new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
typeNameOffset: 67
getters
synthetic get x
reference: <testLibraryFragment>::@class::D::@getter::x
element: <testLibraryFragment>::@class::D::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
fields
final x
firstFragment: <testLibraryFragment>::@class::D::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::D::@getter::x#element
constructors
new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::D::@getter::x
''');
}
test_class_constructors_named() async {
var library = await buildLibrary('''
class C {
C.foo();
}
''');
configuration.withDisplayName = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
foo @14
reference: <testLibraryFragment>::@class::C::@constructor::foo
enclosingElement3: <testLibraryFragment>::@class::C
displayName: C.foo
periodOffset: 13
nameEnd: 17
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
foo @14
reference: <testLibraryFragment>::@class::C::@constructor::foo
element: <testLibraryFragment>::@class::C::@constructor::foo#element
typeName: C
typeNameOffset: 12
periodOffset: 13
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
foo
firstFragment: <testLibraryFragment>::@class::C::@constructor::foo
''');
}
test_class_constructors_unnamed() async {
var library = await buildLibrary('''
class C {
C();
}
''');
configuration.withDisplayName = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
displayName: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 12
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_constructors_unnamed_new() async {
var library = await buildLibrary('''
class C {
C.new();
}
''');
configuration.withDisplayName = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
@14
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
displayName: C
periodOffset: 13
nameEnd: 17
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
new @14
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 12
periodOffset: 13
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_documented() async {
var library = await buildLibrary('''
/**
* Docs
*/
class C {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @22
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * Docs\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @22
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_documented_mix() async {
var library = await buildLibrary('''
/**
* aaa
*/
/**
* bbb
*/
class A {}
/**
* aaa
*/
/// bbb
/// ccc
class B {}
/// aaa
/// bbb
/**
* ccc
*/
class C {}
/// aaa
/// bbb
/**
* ccc
*/
/// ddd
class D {}
/**
* aaa
*/
// bbb
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * bbb\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @79
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
documentationComment: /// bbb\n/// ccc
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
class C @122
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * ccc\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @173
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
documentationComment: /// ddd
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @207
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * aaa\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @79
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class C @122
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @173
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @207
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
documentationComment: /**\n * bbb\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
documentationComment: /// bbb\n/// ccc
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * ccc\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
documentationComment: /// ddd
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
documentationComment: /**\n * aaa\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_class_documented_tripleSlash() async {
var library = await buildLibrary('''
/// first
/// second
/// third
class C {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @37
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /// first\n/// second\n/// third
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @37
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// first\n/// second\n/// third
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_documented_with_references() async {
var library = await buildLibrary('''
/**
* Docs referring to [D] and [E]
*/
class C {}
class D {}
class E {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @47
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * Docs referring to [D] and [E]\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @59
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @70
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @47
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @59
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @70
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs referring to [D] and [E]\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_class_documented_with_windows_line_endings() async {
var library = await buildLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @25
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * Docs\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @25
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_documented_withLeadingNotDocumentation() async {
var library = await buildLibrary('''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
class C {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @66
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * Docs\n */
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @66
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_documented_withMetadata() async {
var library = await buildLibrary('''
/// Comment 1
/// Comment 2
@Annotation()
class BeforeMeta {}
/// Comment 1
/// Comment 2
@Annotation.named()
class BeforeMetaNamed {}
@Annotation()
/// Comment 1
/// Comment 2
class AfterMeta {}
/// Comment 1
@Annotation()
/// Comment 2
class AroundMeta {}
/// Doc comment.
@Annotation()
// Not doc comment.
class DocBeforeMetaNotDocAfter {}
class Annotation {
const Annotation();
const Annotation.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class BeforeMeta @48
reference: <testLibraryFragment>::@class::BeforeMeta
enclosingElement3: <testLibraryFragment>
documentationComment: /// Comment 1\n/// Comment 2
metadata
Annotation
atSign: @ @28
name: SimpleIdentifier
token: Annotation @29
staticElement: <testLibraryFragment>::@class::Annotation
element: <testLibrary>::@class::Annotation
staticType: null
arguments: ArgumentList
leftParenthesis: ( @39
rightParenthesis: ) @40
element: <testLibraryFragment>::@class::Annotation::@constructor::new
element2: <testLibraryFragment>::@class::Annotation::@constructor::new#element
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::BeforeMeta::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::BeforeMeta
class BeforeMetaNamed @117
reference: <testLibraryFragment>::@class::BeforeMetaNamed
enclosingElement3: <testLibraryFragment>
documentationComment: /// Comment 1\n/// Comment 2
metadata
Annotation
atSign: @ @91
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: Annotation @92
staticElement: <testLibraryFragment>::@class::Annotation
element: <testLibrary>::@class::Annotation
staticType: null
period: . @102
identifier: SimpleIdentifier
token: named @103
staticElement: <testLibraryFragment>::@class::Annotation::@constructor::named
element: <testLibraryFragment>::@class::Annotation::@constructor::named#element
staticType: null
staticElement: <testLibraryFragment>::@class::Annotation::@constructor::named
element: <testLibraryFragment>::@class::Annotation::@constructor::named#element
staticType: null
arguments: ArgumentList
leftParenthesis: ( @108
rightParenthesis: ) @109
element: <testLibraryFragment>::@class::Annotation::@constructor::named
element2: <testLibraryFragment>::@class::Annotation::@constructor::named#element
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::BeforeMetaNamed::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::BeforeMetaNamed
class AfterMeta @185
reference: <testLibraryFragment>::@class::AfterMeta
enclosingElement3: <testLibraryFragment>
documentationComment: /// Comment 1\n/// Comment 2
metadata
Annotation
atSign: @ @137
name: SimpleIdentifier
token: Annotation @138
staticElement: <testLibraryFragment>::@class::Annotation
element: <testLibrary>::@class::Annotation
staticType: null
arguments: ArgumentList
leftParenthesis: ( @148
rightParenthesis: ) @149
element: <testLibraryFragment>::@class::Annotation::@constructor::new
element2: <testLibraryFragment>::@class::Annotation::@constructor::new#element
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::AfterMeta::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::AfterMeta
class AroundMeta @247
reference: <testLibraryFragment>::@class::AroundMeta
enclosingElement3: <testLibraryFragment>
documentationComment: /// Comment 2
metadata
Annotation
atSign: @ @213
name: SimpleIdentifier
token: Annotation @214
staticElement: <testLibraryFragment>::@class::Annotation
element: <testLibrary>::@class::Annotation
staticType: null
arguments: ArgumentList
leftParenthesis: ( @224
rightParenthesis: ) @225
element: <testLibraryFragment>::@class::Annotation::@constructor::new
element2: <testLibraryFragment>::@class::Annotation::@constructor::new#element
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::AroundMeta::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::AroundMeta
class DocBeforeMetaNotDocAfter @319
reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
enclosingElement3: <testLibraryFragment>
documentationComment: /// Doc comment.
metadata
Annotation
atSign: @ @279
name: SimpleIdentifier
token: Annotation @280
staticElement: <testLibraryFragment>::@class::Annotation
element: <testLibrary>::@class::Annotation
staticType: null
arguments: ArgumentList
leftParenthesis: ( @290
rightParenthesis: ) @291
element: <testLibraryFragment>::@class::Annotation::@constructor::new
element2: <testLibraryFragment>::@class::Annotation::@constructor::new#element
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
class Annotation @354
reference: <testLibraryFragment>::@class::Annotation
enclosingElement3: <testLibraryFragment>
constructors
const @375
reference: <testLibraryFragment>::@class::Annotation::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::Annotation
const named @408
reference: <testLibraryFragment>::@class::Annotation::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::Annotation
periodOffset: 407
nameEnd: 413
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class BeforeMeta @48
reference: <testLibraryFragment>::@class::BeforeMeta
element: <testLibrary>::@class::BeforeMeta
constructors
synthetic new
reference: <testLibraryFragment>::@class::BeforeMeta::@constructor::new
element: <testLibraryFragment>::@class::BeforeMeta::@constructor::new#element
typeName: BeforeMeta
class BeforeMetaNamed @117
reference: <testLibraryFragment>::@class::BeforeMetaNamed
element: <testLibrary>::@class::BeforeMetaNamed
constructors
synthetic new
reference: <testLibraryFragment>::@class::BeforeMetaNamed::@constructor::new
element: <testLibraryFragment>::@class::BeforeMetaNamed::@constructor::new#element
typeName: BeforeMetaNamed
class AfterMeta @185
reference: <testLibraryFragment>::@class::AfterMeta
element: <testLibrary>::@class::AfterMeta
constructors
synthetic new
reference: <testLibraryFragment>::@class::AfterMeta::@constructor::new
element: <testLibraryFragment>::@class::AfterMeta::@constructor::new#element
typeName: AfterMeta
class AroundMeta @247
reference: <testLibraryFragment>::@class::AroundMeta
element: <testLibrary>::@class::AroundMeta
constructors
synthetic new
reference: <testLibraryFragment>::@class::AroundMeta::@constructor::new
element: <testLibraryFragment>::@class::AroundMeta::@constructor::new#element
typeName: AroundMeta
class DocBeforeMetaNotDocAfter @319
reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
element: <testLibrary>::@class::DocBeforeMetaNotDocAfter
constructors
synthetic new
reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter::@constructor::new
element: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter::@constructor::new#element
typeName: DocBeforeMetaNotDocAfter
class Annotation @354
reference: <testLibraryFragment>::@class::Annotation
element: <testLibrary>::@class::Annotation
constructors
const new
reference: <testLibraryFragment>::@class::Annotation::@constructor::new
element: <testLibraryFragment>::@class::Annotation::@constructor::new#element
typeName: Annotation
typeNameOffset: 375
const named @408
reference: <testLibraryFragment>::@class::Annotation::@constructor::named
element: <testLibraryFragment>::@class::Annotation::@constructor::named#element
typeName: Annotation
typeNameOffset: 397
periodOffset: 407
classes
class BeforeMeta
reference: <testLibrary>::@class::BeforeMeta
firstFragment: <testLibraryFragment>::@class::BeforeMeta
documentationComment: /// Comment 1\n/// Comment 2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::BeforeMeta::@constructor::new
class BeforeMetaNamed
reference: <testLibrary>::@class::BeforeMetaNamed
firstFragment: <testLibraryFragment>::@class::BeforeMetaNamed
documentationComment: /// Comment 1\n/// Comment 2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::BeforeMetaNamed::@constructor::new
class AfterMeta
reference: <testLibrary>::@class::AfterMeta
firstFragment: <testLibraryFragment>::@class::AfterMeta
documentationComment: /// Comment 1\n/// Comment 2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::AfterMeta::@constructor::new
class AroundMeta
reference: <testLibrary>::@class::AroundMeta
firstFragment: <testLibraryFragment>::@class::AroundMeta
documentationComment: /// Comment 2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::AroundMeta::@constructor::new
class DocBeforeMetaNotDocAfter
reference: <testLibrary>::@class::DocBeforeMetaNotDocAfter
firstFragment: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
documentationComment: /// Doc comment.
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter::@constructor::new
class Annotation
reference: <testLibrary>::@class::Annotation
firstFragment: <testLibraryFragment>::@class::Annotation
constructors
const new
firstFragment: <testLibraryFragment>::@class::Annotation::@constructor::new
const named
firstFragment: <testLibraryFragment>::@class::Annotation::@constructor::named
''');
}
test_class_field_abstract() async {
var library = await buildLibrary('''
abstract class C {
abstract int i;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
abstract i @34
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic abstract get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic abstract set i= @-1
reference: <testLibraryFragment>::@class::C::@setter::i
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _i @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
i @34
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
setter2: <testLibraryFragment>::@class::C::@setter::i
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
setters
synthetic set i
reference: <testLibraryFragment>::@class::C::@setter::i
element: <testLibraryFragment>::@class::C::@setter::i#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::i::@parameter::_i#element
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
abstract i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
setter: <testLibraryFragment>::@class::C::@setter::i#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic abstract get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
setters
synthetic abstract set i
firstFragment: <testLibraryFragment>::@class::C::@setter::i
formalParameters
requiredPositional _i
type: int
''');
}
test_class_field_const() async {
var library = await buildLibrary('class C { static const int i = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static const i @27
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @31
staticType: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer i @27
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static const hasInitializer i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
''');
}
test_class_field_const_late() async {
var library =
await buildLibrary('class C { static late const int i = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static late const i @32
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @36
staticType: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer i @32
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static late const hasInitializer i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
''');
}
test_class_field_covariant() async {
var library = await buildLibrary('''
class C {
covariant int x;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
covariant x @26
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional covariant _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @26
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
covariant x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional covariant _x
type: int
''');
}
test_class_field_documented() async {
var library = await buildLibrary('''
class C {
/**
* Docs
*/
var x;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @38
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @38
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_field_duplicate_getter() async {
var library = await buildLibrary('''
class C {
int foo = 0;
int get foo => 0;
}
''');
configuration
..withAugmentedWithoutAugmentation = true
..withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
foo @16
reference: <testLibraryFragment>::@class::C::@field::foo::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
synthetic foo @-1
reference: <testLibraryFragment>::@class::C::@field::foo::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
type: int
id: field_1
getter: getter_1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::C::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
get foo @35
reference: <testLibraryFragment>::@class::C::@getter::foo::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
id: getter_1
variable: field_1
augmented
fields
<testLibraryFragment>::@class::C::@field::foo::@def::0
<testLibraryFragment>::@class::C::@field::foo::@def::1
constructors
<testLibraryFragment>::@class::C::@constructor::new
accessors
<testLibraryFragment>::@class::C::@getter::foo::@def::0
<testLibraryFragment>::@class::C::@getter::foo::@def::1
<testLibraryFragment>::@class::C::@setter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer foo @16
reference: <testLibraryFragment>::@class::C::@field::foo::@def::0
element: <testLibraryFragment>::@class::C::@field::foo::@def::0#element
getter2: <testLibraryFragment>::@class::C::@getter::foo::@def::0
setter2: <testLibraryFragment>::@class::C::@setter::foo
synthetic foo
reference: <testLibraryFragment>::@class::C::@field::foo::@def::1
element: <testLibraryFragment>::@class::C::@field::foo::@def::1#element
getter2: <testLibraryFragment>::@class::C::@getter::foo::@def::1
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo::@def::0
element: <testLibraryFragment>::@class::C::@getter::foo::@def::0#element
get foo @35
reference: <testLibraryFragment>::@class::C::@getter::foo::@def::1
element: <testLibraryFragment>::@class::C::@getter::foo::@def::1#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::C::@setter::foo
element: <testLibraryFragment>::@class::C::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::foo::@parameter::_foo#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo::@def::0
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo::@def::0#element
setter: <testLibraryFragment>::@class::C::@setter::foo#element
synthetic foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo::@def::1
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo::@def::1#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo::@def::0
get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo::@def::1
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_class_field_duplicate_setter() async {
var library = await buildLibrary('''
class C {
int foo = 0;
set foo(int _) {}
}
''');
configuration
..withAugmentedWithoutAugmentation = true
..withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
foo @16
reference: <testLibraryFragment>::@class::C::@field::foo::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
synthetic foo @-1
reference: <testLibraryFragment>::@class::C::@field::foo::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
type: int
id: field_1
setter: setter_1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::C::@setter::foo::@def::0
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
set foo= @31
reference: <testLibraryFragment>::@class::C::@setter::foo::@def::1
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _ @39
type: int
returnType: void
id: setter_1
variable: field_1
augmented
fields
<testLibraryFragment>::@class::C::@field::foo::@def::0
<testLibraryFragment>::@class::C::@field::foo::@def::1
constructors
<testLibraryFragment>::@class::C::@constructor::new
accessors
<testLibraryFragment>::@class::C::@getter::foo
<testLibraryFragment>::@class::C::@setter::foo::@def::0
<testLibraryFragment>::@class::C::@setter::foo::@def::1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer foo @16
reference: <testLibraryFragment>::@class::C::@field::foo::@def::0
element: <testLibraryFragment>::@class::C::@field::foo::@def::0#element
getter2: <testLibraryFragment>::@class::C::@getter::foo
setter2: <testLibraryFragment>::@class::C::@setter::foo::@def::0
synthetic foo
reference: <testLibraryFragment>::@class::C::@field::foo::@def::1
element: <testLibraryFragment>::@class::C::@field::foo::@def::1#element
setter2: <testLibraryFragment>::@class::C::@setter::foo::@def::1
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo
element: <testLibraryFragment>::@class::C::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::C::@setter::foo::@def::0
element: <testLibraryFragment>::@class::C::@setter::foo::@def::0#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::foo::@def::0::@parameter::_foo#element
set foo @31
reference: <testLibraryFragment>::@class::C::@setter::foo::@def::1
element: <testLibraryFragment>::@class::C::@setter::foo::@def::1#element
formalParameters
_ @39
element: <testLibraryFragment>::@class::C::@setter::foo::@def::1::@parameter::_#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo::@def::0
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo#element
setter: <testLibraryFragment>::@class::C::@setter::foo::@def::0#element
synthetic foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo::@def::1
type: int
setter: <testLibraryFragment>::@class::C::@setter::foo::@def::1#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo::@def::0
formalParameters
requiredPositional _foo
type: int
set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo::@def::1
formalParameters
requiredPositional _
type: int
''');
}
test_class_field_external() async {
var library = await buildLibrary('''
abstract class C {
external int i;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
external i @34
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set i= @-1
reference: <testLibraryFragment>::@class::C::@setter::i
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _i @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
i @34
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
setter2: <testLibraryFragment>::@class::C::@setter::i
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
setters
synthetic set i
reference: <testLibraryFragment>::@class::C::@setter::i
element: <testLibraryFragment>::@class::C::@setter::i#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::i::@parameter::_i#element
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
external i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
setter: <testLibraryFragment>::@class::C::@setter::i#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
setters
synthetic set i
firstFragment: <testLibraryFragment>::@class::C::@setter::i
formalParameters
requiredPositional _i
type: int
''');
}
test_class_field_final_hasInitializer_hasConstConstructor() async {
var library = await buildLibrary('''
class C {
final x = 42;
const C();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constantInitializer
IntegerLiteral
literal: 42 @22
staticType: int
constructors
const @34
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 34
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_field_final_hasInitializer_hasConstConstructor_genericFunctionType() async {
var library = await buildLibrary('''
class A<T> {
const A();
}
class B {
final f = const A<int Function(double a)>();
const B();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
const @21
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @34
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
fields
final f @46
reference: <testLibraryFragment>::@class::B::@field::f
enclosingElement3: <testLibraryFragment>::@class::B
type: A<int Function(double)>
shouldUseTypeForInitializerInference: false
constantInitializer
InstanceCreationExpression
keyword: const @50
constructorName: ConstructorName
type: NamedType
name: A @56
typeArguments: TypeArgumentList
leftBracket: < @57
arguments
GenericFunctionType
returnType: NamedType
name: int @58
element: dart:core::<fragment>::@class::int
element2: dart:core::@class::int
type: int
functionKeyword: Function @62
parameters: FormalParameterList
leftParenthesis: ( @70
parameter: SimpleFormalParameter
type: NamedType
name: double @71
element: dart:core::<fragment>::@class::double
element2: dart:core::@class::double
type: double
name: a @78
declaredElement: a@78
type: double
rightParenthesis: ) @79
declaredElement: GenericFunctionTypeElement
parameters
a
kind: required positional
type: double
returnType: int
type: int Function(double)
type: int Function(double)
rightBracket: > @80
element: <testLibraryFragment>::@class::A
element2: <testLibrary>::@class::A
type: A<int Function(double)>
staticElement: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: int Function(double)}
element: <testLibraryFragment>::@class::A::@constructor::new#element
argumentList: ArgumentList
leftParenthesis: ( @81
rightParenthesis: ) @82
staticType: A<int Function(double)>
constructors
const @93
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::B::@getter::f
enclosingElement3: <testLibraryFragment>::@class::B
returnType: A<int Function(double)>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 21
class B @34
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer f @46
reference: <testLibraryFragment>::@class::B::@field::f
element: <testLibraryFragment>::@class::B::@field::f#element
getter2: <testLibraryFragment>::@class::B::@getter::f
constructors
const new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 93
getters
synthetic get f
reference: <testLibraryFragment>::@class::B::@getter::f
element: <testLibraryFragment>::@class::B::@getter::f#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
final hasInitializer f
firstFragment: <testLibraryFragment>::@class::B::@field::f
type: A<int Function(double)>
getter: <testLibraryFragment>::@class::B::@getter::f#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::B::@getter::f
''');
}
test_class_field_final_hasInitializer_noConstConstructor() async {
var library = await buildLibrary('''
class C {
final x = 42;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_field_final_withSetter() async {
var library = await buildLibrary(r'''
class A {
final int foo;
A(this.foo);
set foo(int newValue) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final foo @22
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
setter: setter_0
constructors
@29
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional final this.foo @36
type: int
field: <testLibraryFragment>::@class::A::@field::foo
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
set foo= @48
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional newValue @56
type: int
returnType: void
id: setter_0
variable: field_0
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
foo @22
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 29
formalParameters
this.foo @36
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::foo#element
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
set foo @48
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
newValue @56
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::newValue#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final foo
type: int
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional newValue
type: int
''');
}
test_class_field_formal_param_inferred_type_implicit() async {
var library = await buildLibrary('class C extends D { var v; C(this.v); }'
' abstract class D { int get v; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
fields
v @24
reference: <testLibraryFragment>::@class::C::@field::v
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
@27
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.v @34
type: int
field: <testLibraryFragment>::@class::C::@field::v
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
accessors
synthetic get v @-1
reference: <testLibraryFragment>::@class::C::@getter::v
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set v= @-1
reference: <testLibraryFragment>::@class::C::@setter::v
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _v @-1
type: int
returnType: void
abstract class D @55
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
fields
synthetic v @-1
reference: <testLibraryFragment>::@class::D::@field::v
enclosingElement3: <testLibraryFragment>::@class::D
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
accessors
abstract get v @67
reference: <testLibraryFragment>::@class::D::@getter::v
enclosingElement3: <testLibraryFragment>::@class::D
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
v @24
reference: <testLibraryFragment>::@class::C::@field::v
element: <testLibraryFragment>::@class::C::@field::v#element
getter2: <testLibraryFragment>::@class::C::@getter::v
setter2: <testLibraryFragment>::@class::C::@setter::v
constructors
new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 27
formalParameters
this.v @34
element: <testLibraryFragment>::@class::C::@constructor::new::@parameter::v#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
getters
synthetic get v
reference: <testLibraryFragment>::@class::C::@getter::v
element: <testLibraryFragment>::@class::C::@getter::v#element
setters
synthetic set v
reference: <testLibraryFragment>::@class::C::@setter::v
element: <testLibraryFragment>::@class::C::@setter::v#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::v::@parameter::_v#element
class D @55
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
fields
synthetic v
reference: <testLibraryFragment>::@class::D::@field::v
element: <testLibraryFragment>::@class::D::@field::v#element
getter2: <testLibraryFragment>::@class::D::@getter::v
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
getters
get v @67
reference: <testLibraryFragment>::@class::D::@getter::v
element: <testLibraryFragment>::@class::D::@getter::v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
fields
v
firstFragment: <testLibraryFragment>::@class::C::@field::v
type: int
getter: <testLibraryFragment>::@class::C::@getter::v#element
setter: <testLibraryFragment>::@class::C::@setter::v#element
constructors
new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
formalParameters
requiredPositional final v
type: int
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
getters
synthetic get v
firstFragment: <testLibraryFragment>::@class::C::@getter::v
setters
synthetic set v
firstFragment: <testLibraryFragment>::@class::C::@setter::v
formalParameters
requiredPositional _v
type: int
abstract class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
fields
synthetic v
firstFragment: <testLibraryFragment>::@class::D::@field::v
type: int
getter: <testLibraryFragment>::@class::D::@getter::v#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
getters
abstract get v
firstFragment: <testLibraryFragment>::@class::D::@getter::v
''');
}
test_class_field_implicit_type() async {
var library = await buildLibrary('class C { var x; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_field_implicit_type_late() async {
var library = await buildLibrary('class C { late var x; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
late x @19
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @19
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
late x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: dynamic
''');
}
test_class_field_inferred_type_nonStatic_explicit_initialized() async {
var library = await buildLibrary('class C { num v = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
v @14
reference: <testLibraryFragment>::@class::C::@field::v
enclosingElement3: <testLibraryFragment>::@class::C
type: num
shouldUseTypeForInitializerInference: true
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get v @-1
reference: <testLibraryFragment>::@class::C::@getter::v
enclosingElement3: <testLibraryFragment>::@class::C
returnType: num
synthetic set v= @-1
reference: <testLibraryFragment>::@class::C::@setter::v
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _v @-1
type: num
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer v @14
reference: <testLibraryFragment>::@class::C::@field::v
element: <testLibraryFragment>::@class::C::@field::v#element
getter2: <testLibraryFragment>::@class::C::@getter::v
setter2: <testLibraryFragment>::@class::C::@setter::v
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get v
reference: <testLibraryFragment>::@class::C::@getter::v
element: <testLibraryFragment>::@class::C::@getter::v#element
setters
synthetic set v
reference: <testLibraryFragment>::@class::C::@setter::v
element: <testLibraryFragment>::@class::C::@setter::v#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::v::@parameter::_v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer v
firstFragment: <testLibraryFragment>::@class::C::@field::v
type: num
getter: <testLibraryFragment>::@class::C::@getter::v#element
setter: <testLibraryFragment>::@class::C::@setter::v#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get v
firstFragment: <testLibraryFragment>::@class::C::@getter::v
setters
synthetic set v
firstFragment: <testLibraryFragment>::@class::C::@setter::v
formalParameters
requiredPositional _v
type: num
''');
}
test_class_field_inferred_type_nonStatic_implicit_initialized() async {
var library = await buildLibrary('class C { var v = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
v @14
reference: <testLibraryFragment>::@class::C::@field::v
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get v @-1
reference: <testLibraryFragment>::@class::C::@getter::v
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set v= @-1
reference: <testLibraryFragment>::@class::C::@setter::v
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _v @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer v @14
reference: <testLibraryFragment>::@class::C::@field::v
element: <testLibraryFragment>::@class::C::@field::v#element
getter2: <testLibraryFragment>::@class::C::@getter::v
setter2: <testLibraryFragment>::@class::C::@setter::v
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get v
reference: <testLibraryFragment>::@class::C::@getter::v
element: <testLibraryFragment>::@class::C::@getter::v#element
setters
synthetic set v
reference: <testLibraryFragment>::@class::C::@setter::v
element: <testLibraryFragment>::@class::C::@setter::v#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::v::@parameter::_v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer v
firstFragment: <testLibraryFragment>::@class::C::@field::v
type: int
getter: <testLibraryFragment>::@class::C::@getter::v#element
setter: <testLibraryFragment>::@class::C::@setter::v#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get v
firstFragment: <testLibraryFragment>::@class::C::@getter::v
setters
synthetic set v
firstFragment: <testLibraryFragment>::@class::C::@setter::v
formalParameters
requiredPositional _v
type: int
''');
}
test_class_field_inferred_type_nonStatic_implicit_uninitialized() async {
var library = await buildLibrary(
'class C extends D { var v; } abstract class D { int get v; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
fields
v @24
reference: <testLibraryFragment>::@class::C::@field::v
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
accessors
synthetic get v @-1
reference: <testLibraryFragment>::@class::C::@getter::v
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set v= @-1
reference: <testLibraryFragment>::@class::C::@setter::v
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _v @-1
type: int
returnType: void
abstract class D @44
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
fields
synthetic v @-1
reference: <testLibraryFragment>::@class::D::@field::v
enclosingElement3: <testLibraryFragment>::@class::D
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
accessors
abstract get v @56
reference: <testLibraryFragment>::@class::D::@getter::v
enclosingElement3: <testLibraryFragment>::@class::D
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
v @24
reference: <testLibraryFragment>::@class::C::@field::v
element: <testLibraryFragment>::@class::C::@field::v#element
getter2: <testLibraryFragment>::@class::C::@getter::v
setter2: <testLibraryFragment>::@class::C::@setter::v
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
getters
synthetic get v
reference: <testLibraryFragment>::@class::C::@getter::v
element: <testLibraryFragment>::@class::C::@getter::v#element
setters
synthetic set v
reference: <testLibraryFragment>::@class::C::@setter::v
element: <testLibraryFragment>::@class::C::@setter::v#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::v::@parameter::_v#element
class D @44
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
fields
synthetic v
reference: <testLibraryFragment>::@class::D::@field::v
element: <testLibraryFragment>::@class::D::@field::v#element
getter2: <testLibraryFragment>::@class::D::@getter::v
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
getters
get v @56
reference: <testLibraryFragment>::@class::D::@getter::v
element: <testLibraryFragment>::@class::D::@getter::v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
fields
v
firstFragment: <testLibraryFragment>::@class::C::@field::v
type: int
getter: <testLibraryFragment>::@class::C::@getter::v#element
setter: <testLibraryFragment>::@class::C::@setter::v#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
getters
synthetic get v
firstFragment: <testLibraryFragment>::@class::C::@getter::v
setters
synthetic set v
firstFragment: <testLibraryFragment>::@class::C::@setter::v
formalParameters
requiredPositional _v
type: int
abstract class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
fields
synthetic v
firstFragment: <testLibraryFragment>::@class::D::@field::v
type: int
getter: <testLibraryFragment>::@class::D::@getter::v#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
getters
abstract get v
firstFragment: <testLibraryFragment>::@class::D::@getter::v
''');
}
test_class_field_inferred_type_nonStatic_inherited_resolveInitializer() async {
var library = await buildLibrary(r'''
const a = 0;
abstract class A {
const A();
List<int> get f;
}
class B extends A {
const B();
final f = [a];
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class A @28
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic f @-1
reference: <testLibraryFragment>::@class::A::@field::f
enclosingElement3: <testLibraryFragment>::@class::A
type: List<int>
constructors
const @40
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
abstract get f @61
reference: <testLibraryFragment>::@class::A::@getter::f
enclosingElement3: <testLibraryFragment>::@class::A
returnType: List<int>
class B @72
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
fields
final f @107
reference: <testLibraryFragment>::@class::B::@field::f
enclosingElement3: <testLibraryFragment>::@class::B
type: List<int>
shouldUseTypeForInitializerInference: true
constantInitializer
ListLiteral
leftBracket: [ @111
elements
SimpleIdentifier
token: a @112
staticElement: <testLibraryFragment>::@getter::a
element: <testLibraryFragment>::@getter::a#element
staticType: int
rightBracket: ] @113
staticType: List<int>
constructors
const @94
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::B::@getter::f
enclosingElement3: <testLibraryFragment>::@class::B
returnType: List<int>
topLevelVariables
static const a @6
reference: <testLibraryFragment>::@topLevelVariable::a
enclosingElement3: <testLibraryFragment>
type: int
shouldUseTypeForInitializerInference: false
constantInitializer
IntegerLiteral
literal: 0 @10
staticType: int
accessors
synthetic static get a @-1
reference: <testLibraryFragment>::@getter::a
enclosingElement3: <testLibraryFragment>
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @28
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic f
reference: <testLibraryFragment>::@class::A::@field::f
element: <testLibraryFragment>::@class::A::@field::f#element
getter2: <testLibraryFragment>::@class::A::@getter::f
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 40
getters
get f @61
reference: <testLibraryFragment>::@class::A::@getter::f
element: <testLibraryFragment>::@class::A::@getter::f#element
class B @72
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer f @107
reference: <testLibraryFragment>::@class::B::@field::f
element: <testLibraryFragment>::@class::B::@field::f#element
getter2: <testLibraryFragment>::@class::B::@getter::f
constructors
const new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 94
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get f
reference: <testLibraryFragment>::@class::B::@getter::f
element: <testLibraryFragment>::@class::B::@getter::f#element
topLevelVariables
hasInitializer a @6
reference: <testLibraryFragment>::@topLevelVariable::a
element: <testLibrary>::@topLevelVariable::a
getter2: <testLibraryFragment>::@getter::a
getters
synthetic get a
reference: <testLibraryFragment>::@getter::a
element: <testLibraryFragment>::@getter::a#element
classes
abstract class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic f
firstFragment: <testLibraryFragment>::@class::A::@field::f
type: List<int>
getter: <testLibraryFragment>::@class::A::@getter::f#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
abstract get f
firstFragment: <testLibraryFragment>::@class::A::@getter::f
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
fields
final hasInitializer f
firstFragment: <testLibraryFragment>::@class::B::@field::f
type: List<int>
getter: <testLibraryFragment>::@class::B::@getter::f#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::B::@getter::f
topLevelVariables
const hasInitializer a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: <testLibraryFragment>::@topLevelVariable::a
type: int
getter: <testLibraryFragment>::@getter::a#element
getters
synthetic static get a
firstFragment: <testLibraryFragment>::@getter::a
''');
}
test_class_field_inferred_type_static_implicit_initialized() async {
var library = await buildLibrary('class C { static var v = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static v @21
reference: <testLibraryFragment>::@class::C::@field::v
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get v @-1
reference: <testLibraryFragment>::@class::C::@getter::v
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic static set v= @-1
reference: <testLibraryFragment>::@class::C::@setter::v
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _v @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer v @21
reference: <testLibraryFragment>::@class::C::@field::v
element: <testLibraryFragment>::@class::C::@field::v#element
getter2: <testLibraryFragment>::@class::C::@getter::v
setter2: <testLibraryFragment>::@class::C::@setter::v
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get v
reference: <testLibraryFragment>::@class::C::@getter::v
element: <testLibraryFragment>::@class::C::@getter::v#element
setters
synthetic set v
reference: <testLibraryFragment>::@class::C::@setter::v
element: <testLibraryFragment>::@class::C::@setter::v#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::v::@parameter::_v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static hasInitializer v
firstFragment: <testLibraryFragment>::@class::C::@field::v
type: int
getter: <testLibraryFragment>::@class::C::@getter::v#element
setter: <testLibraryFragment>::@class::C::@setter::v#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get v
firstFragment: <testLibraryFragment>::@class::C::@getter::v
setters
synthetic static set v
firstFragment: <testLibraryFragment>::@class::C::@setter::v
formalParameters
requiredPositional _v
type: int
''');
}
test_class_field_inheritedContextType_double() async {
var library = await buildLibrary('''
abstract class A {
const A();
double get foo;
}
class B extends A {
const B();
final foo = 2;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class A @15
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: double
constructors
const @27
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
abstract get foo @45
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: double
class B @58
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
fields
final foo @93
reference: <testLibraryFragment>::@class::B::@field::foo
enclosingElement3: <testLibraryFragment>::@class::B
type: double
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 2 @99
staticType: double
constructors
const @80
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::B::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::B
returnType: double
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @15
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 27
getters
get foo @45
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
class B @58
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer foo @93
reference: <testLibraryFragment>::@class::B::@field::foo
element: <testLibraryFragment>::@class::B::@field::foo#element
getter2: <testLibraryFragment>::@class::B::@getter::foo
constructors
const new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeNameOffset: 80
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
reference: <testLibraryFragment>::@class::B::@getter::foo
element: <testLibraryFragment>::@class::B::@getter::foo#element
classes
abstract class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: double
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
abstract get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
fields
final hasInitializer foo
firstFragment: <testLibraryFragment>::@class::B::@field::foo
type: double
getter: <testLibraryFragment>::@class::B::@getter::foo#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::B::@getter::foo
''');
}
test_class_field_isPromotable_abstractGetter() async {
var library = await buildLibrary(r'''
abstract class A {
int? get _foo;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class A @15
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic promotable _foo @-1
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
abstract get _foo @30
reference: <testLibraryFragment>::@class::A::@getter::_foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @15
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic _foo
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get _foo @30
reference: <testLibraryFragment>::@class::A::@getter::_foo
element: <testLibraryFragment>::@class::A::@getter::_foo#element
classes
abstract class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
abstract get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
''');
}
test_class_field_isPromotable_hasGetter() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
int? get _foo => 0;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingGetters
<testLibraryFragment>::@class::B::@getter::_foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
synthetic _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
fieldNameNonPromotabilityInfo
_foo
conflictingGetters
<testLibraryFragment>::@class::B::@getter::_foo
''');
}
test_class_field_isPromotable_hasGetter_abstract() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
abstract class B {
int? get _foo;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
abstract class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
synthetic promotable _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
abstract get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
''');
}
test_class_field_isPromotable_hasGetter_inPart() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
class B {
int? get _foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
final int? _foo;
A(this._foo);
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @38
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
fieldNameNonPromotabilityInfo
_foo
conflictingGetters
<testLibrary>::@fragment::package:test/a.dart::@class::B::@getter::_foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @38
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B
fields
synthetic _foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B::@field::_foo
type: int?
getter: <testLibrary>::@fragment::package:test/a.dart::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
getters
get _foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::B::@getter::_foo
fieldNameNonPromotabilityInfo
_foo
conflictingGetters
<testLibrary>::@fragment::package:test/a.dart::@class::B::@getter::_foo
''');
}
test_class_field_isPromotable_hasGetter_static() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
static int? get _foo => 0;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
synthetic static _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
static get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
''');
}
test_class_field_isPromotable_hasNotFinalField() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
int? _foo;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingFields
<testLibraryFragment>::@class::B::@field::_foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
_foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
setter: <testLibraryFragment>::@class::B::@setter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
setters
synthetic set _foo
firstFragment: <testLibraryFragment>::@class::B::@setter::_foo
formalParameters
requiredPositional __foo
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingFields
<testLibraryFragment>::@class::B::@field::_foo
''');
}
test_class_field_isPromotable_hasNotFinalField_static() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
static int? _foo;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
static _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
setter: <testLibraryFragment>::@class::B::@setter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic static get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
setters
synthetic static set _foo
firstFragment: <testLibraryFragment>::@class::B::@setter::_foo
formalParameters
requiredPositional __foo
type: int?
''');
}
test_class_field_isPromotable_hasSetter() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
set _field(int? _) {}
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
synthetic _field
firstFragment: <testLibraryFragment>::@class::B::@field::_field
type: int?
setter: <testLibraryFragment>::@class::B::@setter::_field#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
setters
set _field
firstFragment: <testLibraryFragment>::@class::B::@setter::_field
formalParameters
requiredPositional _
type: int?
''');
}
test_class_field_isPromotable_language217() async {
var library = await buildLibrary(r'''
// @dart = 2.19
class A {
final int? _foo;
A(this._foo);
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @22
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @39
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @22
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @39
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_field() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
final int? _foo = 0;
}
/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
class C implements B {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
final hasInitializer _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
noSuchMethod
reference: <testLibrary>::@class::C::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::C::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_field_implementedInMixin() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
mixin M {
final int? _foo = 0;
}
class B {
final int? _foo = 0;
}
/// `_foo` is implemented in [M].
class C with M implements B {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(
classNames: {'A', 'B'},
mixinNames: {'M'},
);
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
class B @90
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @107
reference: <testLibraryFragment>::@class::B::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::B
type: int?
shouldUseTypeForInitializerInference: true
mixins
mixin M @54
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
fields
final promotable _foo @71
reference: <testLibraryFragment>::@mixin::M::@field::_foo
enclosingElement3: <testLibraryFragment>::@mixin::M
type: int?
shouldUseTypeForInitializerInference: true
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
class B @90
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer _foo @107
reference: <testLibraryFragment>::@class::B::@field::_foo
element: <testLibraryFragment>::@class::B::@field::_foo#element
getter2: <testLibraryFragment>::@class::B::@getter::_foo
mixins
mixin M @54
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
fields
hasInitializer _foo @71
reference: <testLibraryFragment>::@mixin::M::@field::_foo
element: <testLibraryFragment>::@mixin::M::@field::_foo#element
getter2: <testLibraryFragment>::@mixin::M::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
final promotable hasInitializer _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// `_foo` is implemented in [M].
supertype: Object
mixins
M
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
noSuchMethod
reference: <testLibrary>::@class::C::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::C::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
fields
final promotable hasInitializer _foo
firstFragment: <testLibraryFragment>::@mixin::M::@field::_foo
type: int?
getter: <testLibraryFragment>::@mixin::M::@getter::_foo#element
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@mixin::M::@getter::_foo
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_field_implementedInSuperclass() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
final int? _foo = 0;
}
class C {
final int? _foo = 0;
}
/// `_foo` is implemented in [B].
class D extends B implements C {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(
classNames: {'A', 'B'},
);
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
class B @54
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @71
reference: <testLibraryFragment>::@class::B::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::B
type: int?
shouldUseTypeForInitializerInference: true
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
class B @54
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer _foo @71
reference: <testLibraryFragment>::@class::B::@field::_foo
element: <testLibraryFragment>::@class::B::@field::_foo#element
getter2: <testLibraryFragment>::@class::B::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
final promotable hasInitializer _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final promotable hasInitializer _foo
firstFragment: <testLibraryFragment>::@class::C::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::C::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::C::@getter::_foo
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
documentationComment: /// `_foo` is implemented in [B].
supertype: B
interfaces
C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
superConstructor: <testLibraryFragment>::@class::B::@constructor::new#element
methods
noSuchMethod
reference: <testLibrary>::@class::D::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::D::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_field_inClassTypeAlias() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
final int? _foo = 0;
}
mixin M {
dynamic noSuchMethod(Invocation invocation) {}
}
/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
class E = Object with M implements B;
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
final hasInitializer _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
class alias E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
documentationComment: /// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
supertype: Object
mixins
M
interfaces
B
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
methods
noSuchMethod
reference: <testLibrary>::@mixin::M::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@mixin::M::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::E
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_field_inEnum() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B {
final int? _foo = 0;
}
/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
enum E implements B {
v;
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(
classNames: {'A', 'B'},
);
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
class B @54
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
fields
final _foo @71
reference: <testLibraryFragment>::@class::B::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::B
type: int?
shouldUseTypeForInitializerInference: true
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@enum::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
class B @54
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer _foo @71
reference: <testLibraryFragment>::@class::B::@field::_foo
element: <testLibraryFragment>::@class::B::@field::_foo#element
getter2: <testLibraryFragment>::@class::B::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
final hasInitializer _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
enums
enum E
reference: <testLibrary>::@enum::E
firstFragment: <testLibraryFragment>::@enum::E
documentationComment: /// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
supertype: Enum
interfaces
B
fields
static const enumConstant hasInitializer v
firstFragment: <testLibraryFragment>::@enum::E::@field::v
type: E
getter: <testLibraryFragment>::@enum::E::@getter::v#element
synthetic static const values
firstFragment: <testLibraryFragment>::@enum::E::@field::values
type: List<E>
getter: <testLibraryFragment>::@enum::E::@getter::values#element
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@enum::E::@constructor::new
getters
synthetic static get v
firstFragment: <testLibraryFragment>::@enum::E::@getter::v
synthetic static get values
firstFragment: <testLibraryFragment>::@enum::E::@getter::values
methods
noSuchMethod
reference: <testLibrary>::@enum::E::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@enum::E::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@enum::E
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_getter() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
abstract class B {
int? get _foo;
}
/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
class C implements B {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
abstract class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
fields
synthetic _foo
firstFragment: <testLibraryFragment>::@class::B::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::B::@getter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
getters
abstract get _foo
firstFragment: <testLibraryFragment>::@class::B::@getter::_foo
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
noSuchMethod
reference: <testLibrary>::@class::C::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::C::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_inDifferentLibrary() async {
newFile('$testPackageLibPath/a.dart', r'''
class B {
int? get _foo => 0;
}
''');
var library = await buildLibrary(r'''
import 'a.dart';
class A {
final int? _foo;
A(this._foo);
}
/// Has a noSuchMethod thrower for B._field, but since private names in
/// different libraries are distinct, this has no effect on promotion of
/// C._field.
class C implements B {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(
classNames: {'A'},
);
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
class A @24
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @41
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
classes
class A @24
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @41
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// Has a noSuchMethod thrower for B._field, but since private names in\n/// different libraries are distinct, this has no effect on promotion of\n/// C._field.
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
noSuchMethod
reference: <testLibrary>::@class::C::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::C::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_inheritedInterface() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
class B extends A {
A(super.value);
}
/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
class C implements B {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
methods
abstract A
reference: <testLibrary>::@class::B::@method::A
firstFragment: <testLibraryFragment>::@class::B::@method::A
formalParameters
requiredPositional final value
type: dynamic
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
noSuchMethod
reference: <testLibrary>::@class::C::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::C::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_mixedInterface() async {
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
mixin M {
final int? _foo = 0;
}
class B with M {}
/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
class C implements B {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(
classNames: {'A'},
mixinNames: {'M'},
);
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
mixins
mixin M @54
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
fields
final _foo @71
reference: <testLibraryFragment>::@mixin::M::@field::_foo
enclosingElement3: <testLibraryFragment>::@mixin::M
type: int?
shouldUseTypeForInitializerInference: true
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
mixins
mixin M @54
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
fields
hasInitializer _foo @71
reference: <testLibraryFragment>::@mixin::M::@field::_foo
element: <testLibraryFragment>::@mixin::M::@field::_foo#element
getter2: <testLibraryFragment>::@mixin::M::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: Object
mixins
M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
noSuchMethod
reference: <testLibrary>::@class::C::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@class::C::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
fields
final hasInitializer _foo
firstFragment: <testLibraryFragment>::@mixin::M::@field::_foo
type: int?
getter: <testLibraryFragment>::@mixin::M::@getter::_foo#element
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@mixin::M::@getter::_foo
fieldNameNonPromotabilityInfo
_foo
conflictingNsmClasses
<testLibraryFragment>::@class::C
''');
}
test_class_field_isPromotable_noSuchMethodForwarder_unusedMixin() async {
// Mixins are implicitly abstract so the presence of a mixin that inherits
// a field into its interface, and doesn't implement it, doesn't mean that
// a noSuchMethod forwarder created for it. So, this does not block that
// field from promoting.
var library = await buildLibrary(r'''
class A {
final int? _foo;
A(this._foo);
}
mixin M implements A {
dynamic noSuchMethod(Invocation invocation) {}
}
''');
configuration.forPromotableFields(
classNames: {'A'},
);
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
interfaces
A
methods
noSuchMethod
reference: <testLibrary>::@mixin::M::@method::noSuchMethod
firstFragment: <testLibraryFragment>::@mixin::M::@method::noSuchMethod
formalParameters
requiredPositional invocation
type: Invocation
''');
}
test_class_field_isPromotable_notFinal() async {
var library = await buildLibrary(r'''
class A {
int? _foo;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
_foo @17
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingFields
<testLibraryFragment>::@class::A::@field::_foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @17
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
setter2: <testLibraryFragment>::@class::A::@setter::_foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
_foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
setter: <testLibraryFragment>::@class::A::@setter::_foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
setters
synthetic set _foo
firstFragment: <testLibraryFragment>::@class::A::@setter::_foo
formalParameters
requiredPositional __foo
type: int?
fieldNameNonPromotabilityInfo
_foo
conflictingFields
<testLibraryFragment>::@class::A::@field::_foo
''');
}
test_class_field_isPromotable_notPrivate() async {
var library = await buildLibrary(r'''
class A {
int? field;
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
field @17
reference: <testLibraryFragment>::@class::A::@field::field
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
field @17
reference: <testLibraryFragment>::@class::A::@field::field
element: <testLibraryFragment>::@class::A::@field::field#element
getter2: <testLibraryFragment>::@class::A::@getter::field
setter2: <testLibraryFragment>::@class::A::@setter::field
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
field
firstFragment: <testLibraryFragment>::@class::A::@field::field
type: int?
getter: <testLibraryFragment>::@class::A::@getter::field#element
setter: <testLibraryFragment>::@class::A::@setter::field#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get field
firstFragment: <testLibraryFragment>::@class::A::@getter::field
setters
synthetic set field
firstFragment: <testLibraryFragment>::@class::A::@setter::field
formalParameters
requiredPositional _field
type: int?
''');
}
test_class_field_isPromotable_typeInference() async {
// We decide that `_foo` is promotable before inferring the type of `bar`.
var library = await buildLibrary(r'''
class A {
final int? _foo;
final bar = _foo != null ? _foo : 0;
A(this._foo);
}
''');
configuration.forPromotableFields(classNames: {'A'});
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
final promotable _foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int?
final bar @37
reference: <testLibraryFragment>::@class::A::@field::bar
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: false
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
_foo @23
reference: <testLibraryFragment>::@class::A::@field::_foo
element: <testLibraryFragment>::@class::A::@field::_foo#element
getter2: <testLibraryFragment>::@class::A::@getter::_foo
hasInitializer bar @37
reference: <testLibraryFragment>::@class::A::@field::bar
element: <testLibraryFragment>::@class::A::@field::bar#element
getter2: <testLibraryFragment>::@class::A::@getter::bar
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final promotable _foo
firstFragment: <testLibraryFragment>::@class::A::@field::_foo
type: int?
getter: <testLibraryFragment>::@class::A::@getter::_foo#element
final hasInitializer bar
firstFragment: <testLibraryFragment>::@class::A::@field::bar
type: int
getter: <testLibraryFragment>::@class::A::@getter::bar#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final _foo
type: int?
getters
synthetic get _foo
firstFragment: <testLibraryFragment>::@class::A::@getter::_foo
synthetic get bar
firstFragment: <testLibraryFragment>::@class::A::@getter::bar
''');
}
test_class_field_missingName() async {
var library = await buildLibrary('''
abstract class C {
Object a,;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
a @28
reference: <testLibraryFragment>::@class::C::@field::a
enclosingElement3: <testLibraryFragment>::@class::C
type: Object
@30
reference: <testLibraryFragment>::@class::C::@field::0
enclosingElement3: <testLibraryFragment>::@class::C
type: Object
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get a @-1
reference: <testLibraryFragment>::@class::C::@getter::a
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Object
synthetic set a= @-1
reference: <testLibraryFragment>::@class::C::@setter::a
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _a @-1
type: Object
returnType: void
synthetic get @-1
reference: <testLibraryFragment>::@class::C::@getter::0
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Object
synthetic set = @-1
reference: <testLibraryFragment>::@class::C::@setter::0
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _ @-1
type: Object
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
a @28
reference: <testLibraryFragment>::@class::C::@field::a
element: <testLibraryFragment>::@class::C::@field::a#element
getter2: <testLibraryFragment>::@class::C::@getter::a
setter2: <testLibraryFragment>::@class::C::@setter::a
<null-name>
reference: <testLibraryFragment>::@class::C::@field::0
element: <testLibraryFragment>::@class::C::@field::0#element
getter2: <testLibraryFragment>::@class::C::@getter::0
setter2: <testLibraryFragment>::@class::C::@setter::0
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get a
reference: <testLibraryFragment>::@class::C::@getter::a
element: <testLibraryFragment>::@class::C::@getter::a#element
synthetic get <null-name>
reference: <testLibraryFragment>::@class::C::@getter::0
element: <testLibraryFragment>::@class::C::@getter::0#element
setters
synthetic set a
reference: <testLibraryFragment>::@class::C::@setter::a
element: <testLibraryFragment>::@class::C::@setter::a#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::a::@parameter::_a#element
synthetic set <null-name>
reference: <testLibraryFragment>::@class::C::@setter::0
element: <testLibraryFragment>::@class::C::@setter::0#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::0::@parameter::_#element
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
a
firstFragment: <testLibraryFragment>::@class::C::@field::a
type: Object
getter: <testLibraryFragment>::@class::C::@getter::a#element
setter: <testLibraryFragment>::@class::C::@setter::a#element
<null-name>
firstFragment: <testLibraryFragment>::@class::C::@field::0
type: Object
getter: <testLibraryFragment>::@class::C::@getter::0#element
setter: <testLibraryFragment>::@class::C::@setter::0#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get a
firstFragment: <testLibraryFragment>::@class::C::@getter::a
synthetic get <null-name>
firstFragment: <testLibraryFragment>::@class::C::@getter::0
setters
synthetic set a
firstFragment: <testLibraryFragment>::@class::C::@setter::a
formalParameters
requiredPositional _a
type: Object
synthetic set <null-name>
firstFragment: <testLibraryFragment>::@class::C::@setter::0
formalParameters
requiredPositional _
type: Object
''');
}
test_class_field_propagatedType_const_noDep() async {
var library = await buildLibrary('''
class C {
static const x = 0;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static const x @25
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constantInitializer
IntegerLiteral
literal: 0 @29
staticType: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @25
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static const hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_field_propagatedType_final_dep_inLib() async {
newFile('$testPackageLibPath/a.dart', 'final a = 1;');
var library = await buildLibrary('''
import "a.dart";
class C {
final b = a / 2;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
class C @23
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final b @35
reference: <testLibraryFragment>::@class::C::@field::b
enclosingElement3: <testLibraryFragment>::@class::C
type: double
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get b @-1
reference: <testLibraryFragment>::@class::C::@getter::b
enclosingElement3: <testLibraryFragment>::@class::C
returnType: double
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
classes
class C @23
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer b @35
reference: <testLibraryFragment>::@class::C::@field::b
element: <testLibraryFragment>::@class::C::@field::b#element
getter2: <testLibraryFragment>::@class::C::@getter::b
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get b
reference: <testLibraryFragment>::@class::C::@getter::b
element: <testLibraryFragment>::@class::C::@getter::b#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final hasInitializer b
firstFragment: <testLibraryFragment>::@class::C::@field::b
type: double
getter: <testLibraryFragment>::@class::C::@getter::b#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get b
firstFragment: <testLibraryFragment>::@class::C::@getter::b
''');
}
test_class_field_propagatedType_final_dep_inPart() async {
newFile('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
var library = await buildLibrary('''
library lib;
part "a.dart";
class C {
final b = a / 2;
}''');
checkElementText(library, r'''
library
name: lib
nameOffset: 8
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class C @34
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final b @46
reference: <testLibraryFragment>::@class::C::@field::b
enclosingElement3: <testLibraryFragment>::@class::C
type: double
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get b @-1
reference: <testLibraryFragment>::@class::C::@getter::b
enclosingElement3: <testLibraryFragment>::@class::C
returnType: double
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
topLevelVariables
static final a @19
reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
type: int
shouldUseTypeForInitializerInference: false
accessors
synthetic static get a @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
returnType: int
----------------------------------------
library
reference: <testLibrary>
name: lib
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class C @34
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer b @46
reference: <testLibraryFragment>::@class::C::@field::b
element: <testLibraryFragment>::@class::C::@field::b#element
getter2: <testLibraryFragment>::@class::C::@getter::b
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get b
reference: <testLibraryFragment>::@class::C::@getter::b
element: <testLibraryFragment>::@class::C::@getter::b#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
topLevelVariables
hasInitializer a @19
reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
element: <testLibrary>::@topLevelVariable::a
getter2: <testLibrary>::@fragment::package:test/a.dart::@getter::a
getters
synthetic get a
reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
element: <testLibrary>::@fragment::package:test/a.dart::@getter::a#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final hasInitializer b
firstFragment: <testLibraryFragment>::@class::C::@field::b
type: double
getter: <testLibraryFragment>::@class::C::@getter::b#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get b
firstFragment: <testLibraryFragment>::@class::C::@getter::b
topLevelVariables
final hasInitializer a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@getter::a#element
getters
synthetic static get a
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@getter::a
''');
}
test_class_field_propagatedType_final_noDep_instance() async {
var library = await buildLibrary('''
class C {
final x = 0;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @18
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @18
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_field_propagatedType_final_noDep_static() async {
var library = await buildLibrary('''
class C {
static final x = 0;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static final x @25
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @25
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static final hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_field_static() async {
var library = await buildLibrary('class C { static int i; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static i @21
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic static set i= @-1
reference: <testLibraryFragment>::@class::C::@setter::i
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _i @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
i @21
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
setter2: <testLibraryFragment>::@class::C::@setter::i
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
setters
synthetic set i
reference: <testLibraryFragment>::@class::C::@setter::i
element: <testLibraryFragment>::@class::C::@setter::i#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::i::@parameter::_i#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
setter: <testLibraryFragment>::@class::C::@setter::i#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
setters
synthetic static set i
firstFragment: <testLibraryFragment>::@class::C::@setter::i
formalParameters
requiredPositional _i
type: int
''');
}
test_class_field_static_final_hasConstConstructor() async {
var library = await buildLibrary('''
class C {
static final f = 0;
const C();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static final f @25
reference: <testLibraryFragment>::@class::C::@field::f
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
const @40
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get f @-1
reference: <testLibraryFragment>::@class::C::@getter::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer f @25
reference: <testLibraryFragment>::@class::C::@field::f
element: <testLibraryFragment>::@class::C::@field::f#element
getter2: <testLibraryFragment>::@class::C::@getter::f
constructors
const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeNameOffset: 40
getters
synthetic get f
reference: <testLibraryFragment>::@class::C::@getter::f
element: <testLibraryFragment>::@class::C::@getter::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static final hasInitializer f
firstFragment: <testLibraryFragment>::@class::C::@field::f
type: int
getter: <testLibraryFragment>::@class::C::@getter::f#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get f
firstFragment: <testLibraryFragment>::@class::C::@getter::f
''');
}
test_class_field_static_final_untyped() async {
var library = await buildLibrary('class C { static final x = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static final x @23
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @23
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static final hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_field_static_late() async {
var library = await buildLibrary('class C { static late int i; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
static late i @26
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic static get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic static set i= @-1
reference: <testLibraryFragment>::@class::C::@setter::i
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _i @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
i @26
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
setter2: <testLibraryFragment>::@class::C::@setter::i
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
setters
synthetic set i
reference: <testLibraryFragment>::@class::C::@setter::i
element: <testLibraryFragment>::@class::C::@setter::i#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::i::@parameter::_i#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
static late i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
setter: <testLibraryFragment>::@class::C::@setter::i#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic static get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
setters
synthetic static set i
firstFragment: <testLibraryFragment>::@class::C::@setter::i
formalParameters
requiredPositional _i
type: int
''');
}
test_class_field_type_explicit() async {
var library = await buildLibrary(r'''
class C {
int a = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
a @16
reference: <testLibraryFragment>::@class::C::@field::a
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get a @-1
reference: <testLibraryFragment>::@class::C::@getter::a
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set a= @-1
reference: <testLibraryFragment>::@class::C::@setter::a
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _a @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer a @16
reference: <testLibraryFragment>::@class::C::@field::a
element: <testLibraryFragment>::@class::C::@field::a#element
getter2: <testLibraryFragment>::@class::C::@getter::a
setter2: <testLibraryFragment>::@class::C::@setter::a
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get a
reference: <testLibraryFragment>::@class::C::@getter::a
element: <testLibraryFragment>::@class::C::@getter::a#element
setters
synthetic set a
reference: <testLibraryFragment>::@class::C::@setter::a
element: <testLibraryFragment>::@class::C::@setter::a#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::a::@parameter::_a#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer a
firstFragment: <testLibraryFragment>::@class::C::@field::a
type: int
getter: <testLibraryFragment>::@class::C::@getter::a#element
setter: <testLibraryFragment>::@class::C::@setter::a#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get a
firstFragment: <testLibraryFragment>::@class::C::@getter::a
setters
synthetic set a
firstFragment: <testLibraryFragment>::@class::C::@setter::a
formalParameters
requiredPositional _a
type: int
''');
}
test_class_field_type_inferred_fromInitializer() async {
var library = await buildLibrary(r'''
class C {
var foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
foo @16
reference: <testLibraryFragment>::@class::C::@field::foo
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::C::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _foo @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer foo @16
reference: <testLibraryFragment>::@class::C::@field::foo
element: <testLibraryFragment>::@class::C::@field::foo#element
getter2: <testLibraryFragment>::@class::C::@getter::foo
setter2: <testLibraryFragment>::@class::C::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo
element: <testLibraryFragment>::@class::C::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::C::@setter::foo
element: <testLibraryFragment>::@class::C::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::foo::@parameter::_foo#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo#element
setter: <testLibraryFragment>::@class::C::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_class_field_type_inferred_fromSuper() async {
var library = await buildLibrary(r'''
abstract class A {
int get foo;
}
class B extends A {
final foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class A @15
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
abstract get foo @29
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
class B @43
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
fields
final foo @65
reference: <testLibraryFragment>::@class::B::@field::foo
enclosingElement3: <testLibraryFragment>::@class::B
type: int
shouldUseTypeForInitializerInference: true
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::B::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::B
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @15
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @29
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
class B @43
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer foo @65
reference: <testLibraryFragment>::@class::B::@field::foo
element: <testLibraryFragment>::@class::B::@field::foo#element
getter2: <testLibraryFragment>::@class::B::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
reference: <testLibraryFragment>::@class::B::@getter::foo
element: <testLibraryFragment>::@class::B::@getter::foo#element
classes
abstract class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
abstract get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
fields
final hasInitializer foo
firstFragment: <testLibraryFragment>::@class::B::@field::foo
type: int
getter: <testLibraryFragment>::@class::B::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::B::@getter::foo
''');
}
test_class_field_type_inferred_Never() async {
var library = await buildLibrary(r'''
class C {
var a = throw 42;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
a @16
reference: <testLibraryFragment>::@class::C::@field::a
enclosingElement3: <testLibraryFragment>::@class::C
type: Never
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get a @-1
reference: <testLibraryFragment>::@class::C::@getter::a
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Never
synthetic set a= @-1
reference: <testLibraryFragment>::@class::C::@setter::a
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _a @-1
type: Never
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer a @16
reference: <testLibraryFragment>::@class::C::@field::a
element: <testLibraryFragment>::@class::C::@field::a#element
getter2: <testLibraryFragment>::@class::C::@getter::a
setter2: <testLibraryFragment>::@class::C::@setter::a
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get a
reference: <testLibraryFragment>::@class::C::@getter::a
element: <testLibraryFragment>::@class::C::@getter::a#element
setters
synthetic set a
reference: <testLibraryFragment>::@class::C::@setter::a
element: <testLibraryFragment>::@class::C::@setter::a#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::a::@parameter::_a#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer a
firstFragment: <testLibraryFragment>::@class::C::@field::a
type: Never
getter: <testLibraryFragment>::@class::C::@getter::a#element
setter: <testLibraryFragment>::@class::C::@setter::a#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get a
firstFragment: <testLibraryFragment>::@class::C::@getter::a
setters
synthetic set a
firstFragment: <testLibraryFragment>::@class::C::@setter::a
formalParameters
requiredPositional _a
type: Never
''');
}
test_class_field_typed() async {
var library = await buildLibrary('class C { int x = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: int
''');
}
test_class_field_untyped() async {
var library = await buildLibrary('class C { var x = 0; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
x @14
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _x @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer x @14
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::_x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
hasInitializer x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional _x
type: int
''');
}
test_class_fields() async {
var library = await buildLibrary('class C { int i; int j; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
i @14
reference: <testLibraryFragment>::@class::C::@field::i
enclosingElement3: <testLibraryFragment>::@class::C
type: int
j @21
reference: <testLibraryFragment>::@class::C::@field::j
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get i @-1
reference: <testLibraryFragment>::@class::C::@getter::i
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set i= @-1
reference: <testLibraryFragment>::@class::C::@setter::i
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _i @-1
type: int
returnType: void
synthetic get j @-1
reference: <testLibraryFragment>::@class::C::@getter::j
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set j= @-1
reference: <testLibraryFragment>::@class::C::@setter::j
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _j @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
i @14
reference: <testLibraryFragment>::@class::C::@field::i
element: <testLibraryFragment>::@class::C::@field::i#element
getter2: <testLibraryFragment>::@class::C::@getter::i
setter2: <testLibraryFragment>::@class::C::@setter::i
j @21
reference: <testLibraryFragment>::@class::C::@field::j
element: <testLibraryFragment>::@class::C::@field::j#element
getter2: <testLibraryFragment>::@class::C::@getter::j
setter2: <testLibraryFragment>::@class::C::@setter::j
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get i
reference: <testLibraryFragment>::@class::C::@getter::i
element: <testLibraryFragment>::@class::C::@getter::i#element
synthetic get j
reference: <testLibraryFragment>::@class::C::@getter::j
element: <testLibraryFragment>::@class::C::@getter::j#element
setters
synthetic set i
reference: <testLibraryFragment>::@class::C::@setter::i
element: <testLibraryFragment>::@class::C::@setter::i#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::i::@parameter::_i#element
synthetic set j
reference: <testLibraryFragment>::@class::C::@setter::j
element: <testLibraryFragment>::@class::C::@setter::j#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::j::@parameter::_j#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
i
firstFragment: <testLibraryFragment>::@class::C::@field::i
type: int
getter: <testLibraryFragment>::@class::C::@getter::i#element
setter: <testLibraryFragment>::@class::C::@setter::i#element
j
firstFragment: <testLibraryFragment>::@class::C::@field::j
type: int
getter: <testLibraryFragment>::@class::C::@getter::j#element
setter: <testLibraryFragment>::@class::C::@setter::j#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get i
firstFragment: <testLibraryFragment>::@class::C::@getter::i
synthetic get j
firstFragment: <testLibraryFragment>::@class::C::@getter::j
setters
synthetic set i
firstFragment: <testLibraryFragment>::@class::C::@setter::i
formalParameters
requiredPositional _i
type: int
synthetic set j
firstFragment: <testLibraryFragment>::@class::C::@setter::j
formalParameters
requiredPositional _j
type: int
''');
}
test_class_fields_late() async {
var library = await buildLibrary('''
class C {
late int foo;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
late foo @21
reference: <testLibraryFragment>::@class::C::@field::foo
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::C::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _foo @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
foo @21
reference: <testLibraryFragment>::@class::C::@field::foo
element: <testLibraryFragment>::@class::C::@field::foo#element
getter2: <testLibraryFragment>::@class::C::@getter::foo
setter2: <testLibraryFragment>::@class::C::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo
element: <testLibraryFragment>::@class::C::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::C::@setter::foo
element: <testLibraryFragment>::@class::C::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::foo::@parameter::_foo#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
late foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo#element
setter: <testLibraryFragment>::@class::C::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_class_fields_late_final() async {
var library = await buildLibrary('''
class C {
late final int foo;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
late final foo @27
reference: <testLibraryFragment>::@class::C::@field::foo
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::C::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _foo @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
foo @27
reference: <testLibraryFragment>::@class::C::@field::foo
element: <testLibraryFragment>::@class::C::@field::foo#element
getter2: <testLibraryFragment>::@class::C::@getter::foo
setter2: <testLibraryFragment>::@class::C::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo
element: <testLibraryFragment>::@class::C::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::C::@setter::foo
element: <testLibraryFragment>::@class::C::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::foo::@parameter::_foo#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
late final foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo#element
setter: <testLibraryFragment>::@class::C::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_class_fields_late_final_initialized() async {
var library = await buildLibrary('''
class C {
late final int foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
late final foo @27
reference: <testLibraryFragment>::@class::C::@field::foo
enclosingElement3: <testLibraryFragment>::@class::C
type: int
shouldUseTypeForInitializerInference: true
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
hasInitializer foo @27
reference: <testLibraryFragment>::@class::C::@field::foo
element: <testLibraryFragment>::@class::C::@field::foo#element
getter2: <testLibraryFragment>::@class::C::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo
element: <testLibraryFragment>::@class::C::@getter::foo#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
late final hasInitializer foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo
''');
}
test_class_fields_late_inference_usingSuper_methodInvocation() async {
var library = await buildLibrary('''
class A {
int foo() => 0;
}
class B extends A {
late var f = super.foo();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @16
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
class B @37
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
fields
late f @62
reference: <testLibraryFragment>::@class::B::@field::f
enclosingElement3: <testLibraryFragment>::@class::B
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::B::@getter::f
enclosingElement3: <testLibraryFragment>::@class::B
returnType: int
synthetic set f= @-1
reference: <testLibraryFragment>::@class::B::@setter::f
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional _f @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @16
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
class B @37
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer f @62
reference: <testLibraryFragment>::@class::B::@field::f
element: <testLibraryFragment>::@class::B::@field::f#element
getter2: <testLibraryFragment>::@class::B::@getter::f
setter2: <testLibraryFragment>::@class::B::@setter::f
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get f
reference: <testLibraryFragment>::@class::B::@getter::f
element: <testLibraryFragment>::@class::B::@getter::f#element
setters
synthetic set f
reference: <testLibraryFragment>::@class::B::@setter::f
element: <testLibraryFragment>::@class::B::@setter::f#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::B::@setter::f::@parameter::_f#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
fields
late hasInitializer f
firstFragment: <testLibraryFragment>::@class::B::@field::f
type: int
getter: <testLibraryFragment>::@class::B::@getter::f#element
setter: <testLibraryFragment>::@class::B::@setter::f#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::B::@getter::f
setters
synthetic set f
firstFragment: <testLibraryFragment>::@class::B::@setter::f
formalParameters
requiredPositional _f
type: int
''');
}
test_class_fields_late_inference_usingSuper_propertyAccess() async {
var library = await buildLibrary('''
class A {
int get foo => 0;
}
class B extends A {
late var f = super.foo;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @20
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
class B @39
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
fields
late f @64
reference: <testLibraryFragment>::@class::B::@field::f
enclosingElement3: <testLibraryFragment>::@class::B
type: int
shouldUseTypeForInitializerInference: false
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::B::@getter::f
enclosingElement3: <testLibraryFragment>::@class::B
returnType: int
synthetic set f= @-1
reference: <testLibraryFragment>::@class::B::@setter::f
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional _f @-1
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @20
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
class B @39
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
hasInitializer f @64
reference: <testLibraryFragment>::@class::B::@field::f
element: <testLibraryFragment>::@class::B::@field::f#element
getter2: <testLibraryFragment>::@class::B::@getter::f
setter2: <testLibraryFragment>::@class::B::@setter::f
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get f
reference: <testLibraryFragment>::@class::B::@getter::f
element: <testLibraryFragment>::@class::B::@getter::f#element
setters
synthetic set f
reference: <testLibraryFragment>::@class::B::@setter::f
element: <testLibraryFragment>::@class::B::@setter::f#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::B::@setter::f::@parameter::_f#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
fields
late hasInitializer f
firstFragment: <testLibraryFragment>::@class::B::@field::f
type: int
getter: <testLibraryFragment>::@class::B::@getter::f#element
setter: <testLibraryFragment>::@class::B::@setter::f#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::B::@getter::f
setters
synthetic set f
firstFragment: <testLibraryFragment>::@class::B::@setter::f
formalParameters
requiredPositional _f
type: int
''');
}
test_class_final() async {
var library = await buildLibrary('final class C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
final class C @12
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @12
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
final class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_getter_abstract() async {
var library = await buildLibrary('abstract class C { int get x; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
abstract get x @27
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @27
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
abstract get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_getter_external() async {
var library = await buildLibrary('class C { external int get x; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
external get x @27
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @27
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
external get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_getter_implicit_return_type() async {
var library = await buildLibrary('class C { get x => null; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
get x @14
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @14
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_getter_invokesSuperSelf_getter() async {
var library = await buildLibrary(r'''
class A {
int get foo {
super.foo;
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @20 invokesSuperSelf
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @20
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_class_getter_invokesSuperSelf_getter_nestedInAssignment() async {
var library = await buildLibrary(r'''
class A {
int get foo {
(super.foo).foo = 0;
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @20 invokesSuperSelf
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @20
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_class_getter_invokesSuperSelf_setter() async {
var library = await buildLibrary(r'''
class A {
int get foo {
super.foo = 0;
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @20
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @20
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_class_getter_missingName() async {
var library = await buildLibrary('''
class A {
get () => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
get @12
reference: <testLibraryFragment>::@class::A::@method::get
enclosingElement3: <testLibraryFragment>::@class::A
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
get @12
reference: <testLibraryFragment>::@class::A::@method::get
element: <testLibraryFragment>::@class::A::@method::get#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
get
reference: <testLibrary>::@class::A::@method::get
firstFragment: <testLibraryFragment>::@class::A::@method::get
''');
}
test_class_getter_native() async {
var library = await buildLibrary('''
class C {
int get x() native;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
external get x @20
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @20
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
external get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_getter_static() async {
var library = await buildLibrary('class C { static int get x => null; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic static x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
static get x @25
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @25
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic static x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
static get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
''');
}
test_class_getters() async {
var library =
await buildLibrary('class C { int get x => null; get y => null; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
synthetic y @-1
reference: <testLibraryFragment>::@class::C::@field::y
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
get x @18
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
get y @33
reference: <testLibraryFragment>::@class::C::@getter::y
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
synthetic y
reference: <testLibraryFragment>::@class::C::@field::y
element: <testLibraryFragment>::@class::C::@field::y#element
getter2: <testLibraryFragment>::@class::C::@getter::y
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @18
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
get y @33
reference: <testLibraryFragment>::@class::C::@getter::y
element: <testLibraryFragment>::@class::C::@getter::y#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
synthetic y
firstFragment: <testLibraryFragment>::@class::C::@field::y
type: dynamic
getter: <testLibraryFragment>::@class::C::@getter::y#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
get y
firstFragment: <testLibraryFragment>::@class::C::@getter::y
''');
}
test_class_implicitField_getterFirst() async {
var library = await buildLibrary('''
class C {
int get x => 0;
void set x(int value) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
get x @20
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
set x= @39
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @45
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @20
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
set x @39
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @45
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_implicitField_setterFirst() async {
var library = await buildLibrary('''
class C {
void set x(int value) {}
int get x => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @21
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @27
type: int
returnType: void
get x @47
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
get x @47
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
setters
set x @21
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @27
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
getter: <testLibraryFragment>::@class::C::@getter::x#element
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_interface() async {
var library = await buildLibrary('interface class C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
interface class C @16
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @16
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
interface class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_interfaces() async {
var library = await buildLibrary('''
class C implements D, E {}
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
interfaces
D
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @33
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @44
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @33
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @44
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
interfaces
D
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_class_interfaces_extensionType() async {
var library = await buildLibrary('''
class A {}
extension type B(int it) {}
class C {}
class D implements A, B, C {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
class C @45
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
class D @56
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
interfaces
A
C
extensionTypes
B @26
reference: <testLibraryFragment>::@extensionType::B
enclosingElement3: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: int
fields
final it @32
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement3: <testLibraryFragment>::@extensionType::B
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement3: <testLibraryFragment>::@extensionType::B
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
class C @45
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
class D @56
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
extensionTypes
extension type B @26
reference: <testLibraryFragment>::@extensionType::B
element: <testLibrary>::@extensionType::B
fields
it @32
reference: <testLibraryFragment>::@extensionType::B::@field::it
element: <testLibraryFragment>::@extensionType::B::@field::it#element
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
synthetic get it
reference: <testLibraryFragment>::@extensionType::B::@getter::it
element: <testLibraryFragment>::@extensionType::B::@getter::it#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
interfaces
A
C
extensionTypes
extension type B
reference: <testLibrary>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B
representation: <testLibraryFragment>::@extensionType::B::@field::it#element
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new#element
typeErasure: int
fields
final it
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
type: int
getter: <testLibraryFragment>::@extensionType::B::@getter::it#element
getters
synthetic get it
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
''');
}
test_class_interfaces_Function() async {
var library = await buildLibrary('''
class A {}
class B {}
class C implements A, Function, B {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
class C @28
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
interfaces
A
B
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @17
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class C @28
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
interfaces
A
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_interfaces_unresolved() async {
var library = await buildLibrary(
'class C implements X, Y, Z {} class X {} class Z {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
interfaces
X
Z
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class X @36
reference: <testLibraryFragment>::@class::X
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::X::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::X
class Z @47
reference: <testLibraryFragment>::@class::Z
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::Z::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::Z
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class X @36
reference: <testLibraryFragment>::@class::X
element: <testLibrary>::@class::X
constructors
synthetic new
reference: <testLibraryFragment>::@class::X::@constructor::new
element: <testLibraryFragment>::@class::X::@constructor::new#element
typeName: X
class Z @47
reference: <testLibraryFragment>::@class::Z
element: <testLibrary>::@class::Z
constructors
synthetic new
reference: <testLibraryFragment>::@class::Z::@constructor::new
element: <testLibraryFragment>::@class::Z::@constructor::new#element
typeName: Z
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
interfaces
X
Z
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class X
reference: <testLibrary>::@class::X
firstFragment: <testLibraryFragment>::@class::X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::X::@constructor::new
class Z
reference: <testLibrary>::@class::Z
firstFragment: <testLibraryFragment>::@class::Z
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::Z::@constructor::new
''');
}
test_class_method_abstract() async {
var library = await buildLibrary('abstract class C { f(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
abstract f @19
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @19
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
abstract f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
''');
}
test_class_method_async() async {
var library = await buildLibrary(r'''
import 'dart:async';
class C {
Future f() async {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
dart:async
enclosingElement3: <testLibraryFragment>
classes
class C @27
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @40 async
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Future<dynamic>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
dart:async
classes
class C @27
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @40 async
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
''');
}
test_class_method_asyncStar() async {
var library = await buildLibrary(r'''
import 'dart:async';
class C {
Stream f() async* {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
dart:async
enclosingElement3: <testLibraryFragment>
classes
class C @27
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @40 async*
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Stream<dynamic>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
dart:async
classes
class C @27
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @40 async*
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
''');
}
test_class_method_documented() async {
var library = await buildLibrary('''
class C {
/**
* Docs
*/
f() {}
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @34
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @34
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
documentationComment: /**\n * Docs\n */
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
documentationComment: /**\n * Docs\n */
''');
}
test_class_method_external() async {
var library = await buildLibrary('class C { external f(); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
external f @19
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @19
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
external f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
''');
}
test_class_method_hasImplicitReturnType_false() async {
var library = await buildLibrary('''
class C {
int m() => 0;
}
''');
var c = library.definingCompilationUnit.classes.single;
var m = c.methods.single;
expect(m.hasImplicitReturnType, isFalse);
}
test_class_method_hasImplicitReturnType_true() async {
var library = await buildLibrary('''
class C {
m() => 0;
}
''');
var c = library.definingCompilationUnit.classes.single;
var m = c.methods.single;
expect(m.hasImplicitReturnType, isTrue);
}
test_class_method_inferred_type_nonStatic_implicit_param() async {
var library = await buildLibrary('class C extends D { void f(value) {} }'
' abstract class D { void f(int value); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
methods
f @25
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @27
type: int
returnType: void
abstract class D @54
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
methods
abstract f @63
reference: <testLibraryFragment>::@class::D::@method::f
enclosingElement3: <testLibraryFragment>::@class::D
parameters
requiredPositional value @69
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
methods
f @25
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
formalParameters
value @27
element: <testLibraryFragment>::@class::C::@method::f::@parameter::value#element
class D @54
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
methods
f @63
reference: <testLibraryFragment>::@class::D::@method::f
element: <testLibraryFragment>::@class::D::@method::f#element
formalParameters
value @69
element: <testLibraryFragment>::@class::D::@method::f::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
formalParameters
requiredPositional value
type: int
abstract class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
methods
abstract f
reference: <testLibrary>::@class::D::@method::f
firstFragment: <testLibraryFragment>::@class::D::@method::f
formalParameters
requiredPositional value
type: int
''');
}
test_class_method_inferred_type_nonStatic_implicit_return() async {
var library = await buildLibrary('''
class C extends D {
f() => null;
}
abstract class D {
int f();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
methods
f @22
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
abstract class D @52
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
methods
abstract f @62
reference: <testLibraryFragment>::@class::D::@method::f
enclosingElement3: <testLibraryFragment>::@class::D
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
methods
f @22
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
class D @52
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
methods
f @62
reference: <testLibraryFragment>::@class::D::@method::f
element: <testLibraryFragment>::@class::D::@method::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
abstract class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
methods
abstract f
reference: <testLibrary>::@class::D::@method::f
firstFragment: <testLibraryFragment>::@class::D::@method::f
''');
}
test_class_method_invokesSuperSelf() async {
var library = await buildLibrary(r'''
class A {
void foo() {
super.foo();
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @17 invokesSuperSelf
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @17 invokesSuperSelf
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_class_method_missingName() async {
var library = await buildLibrary('''
class A {
() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
@12
reference: <testLibraryFragment>::@class::A::@method::0
enclosingElement3: <testLibraryFragment>::@class::A
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
<null-name>
reference: <testLibraryFragment>::@class::A::@method::0
element: <testLibraryFragment>::@class::A::@method::0#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
<null-name>
reference: <testLibrary>::@class::A::@method::0
firstFragment: <testLibraryFragment>::@class::A::@method::0
''');
}
test_class_method_namedAsSupertype() async {
var library = await buildLibrary(r'''
class A {}
class B extends A {
void A() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
methods
A @38
reference: <testLibraryFragment>::@class::B::@method::A
enclosingElement3: <testLibraryFragment>::@class::B
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @17
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
methods
A @38
reference: <testLibraryFragment>::@class::B::@method::A
element: <testLibraryFragment>::@class::B::@method::A#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
methods
A
reference: <testLibrary>::@class::B::@method::A
firstFragment: <testLibraryFragment>::@class::B::@method::A
''');
}
test_class_method_native() async {
var library = await buildLibrary('''
class C {
int m() native;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
external m @16
reference: <testLibraryFragment>::@class::C::@method::m
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
m @16
reference: <testLibraryFragment>::@class::C::@method::m
element: <testLibraryFragment>::@class::C::@method::m#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
external m
reference: <testLibrary>::@class::C::@method::m
firstFragment: <testLibraryFragment>::@class::C::@method::m
''');
}
test_class_method_params() async {
var library = await buildLibrary('class C { f(x, y) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @10
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional x @12
type: dynamic
requiredPositional y @15
type: dynamic
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @10
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
formalParameters
x @12
element: <testLibraryFragment>::@class::C::@method::f::@parameter::x#element
y @15
element: <testLibraryFragment>::@class::C::@method::f::@parameter::y#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
formalParameters
requiredPositional x
type: dynamic
requiredPositional y
type: dynamic
''');
}
test_class_method_static() async {
var library = await buildLibrary('class C { static f() {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
static f @17
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @17
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
static f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
''');
}
test_class_method_syncStar() async {
var library = await buildLibrary(r'''
class C {
Iterable<int> f() sync* {
yield 42;
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @26 sync*
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Iterable<int>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @26 sync*
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
''');
}
test_class_method_type_parameter() async {
var library = await buildLibrary('class C { T f<T, U>(U u) => null; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @12
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
typeParameters
covariant T @14
defaultType: dynamic
covariant U @17
defaultType: dynamic
parameters
requiredPositional u @22
type: U
returnType: T
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @12
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
typeParameters
T @14
element: <not-implemented>
U @17
element: <not-implemented>
formalParameters
u @22
element: <testLibraryFragment>::@class::C::@method::f::@parameter::u#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
typeParameters
T
U
formalParameters
requiredPositional u
type: U
''');
}
test_class_method_type_parameter_in_generic_class() async {
var library = await buildLibrary('''
class C<T, U> {
V f<V, W>(T t, U u, W w) => null;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant U @11
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @20
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
typeParameters
covariant V @22
defaultType: dynamic
covariant W @25
defaultType: dynamic
parameters
requiredPositional t @30
type: T
requiredPositional u @35
type: U
requiredPositional w @40
type: W
returnType: V
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @11
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @20
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
typeParameters
V @22
element: <not-implemented>
W @25
element: <not-implemented>
formalParameters
t @30
element: <testLibraryFragment>::@class::C::@method::f::@parameter::t#element
u @35
element: <testLibraryFragment>::@class::C::@method::f::@parameter::u#element
w @40
element: <testLibraryFragment>::@class::C::@method::f::@parameter::w#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
typeParameters
V
W
formalParameters
requiredPositional t
type: T
requiredPositional u
type: U
requiredPositional w
type: W
''');
}
test_class_method_type_parameter_with_function_typed_parameter() async {
var library = await buildLibrary('class C { void f<T, U>(T x(U u)) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @15
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
typeParameters
covariant T @17
defaultType: dynamic
covariant U @20
defaultType: dynamic
parameters
requiredPositional x @25
type: T Function(U)
parameters
requiredPositional u @29
type: U
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @15
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
typeParameters
T @17
element: <not-implemented>
U @20
element: <not-implemented>
formalParameters
x @25
element: <testLibraryFragment>::@class::C::@method::f::@parameter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
typeParameters
T
U
formalParameters
requiredPositional x
type: T Function(U)
formalParameters
requiredPositional u
type: U
''');
}
test_class_methods() async {
var library = await buildLibrary('class C { f() {} g() {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @10
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
g @17
reference: <testLibraryFragment>::@class::C::@method::g
enclosingElement3: <testLibraryFragment>::@class::C
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @10
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
g @17
reference: <testLibraryFragment>::@class::C::@method::g
element: <testLibraryFragment>::@class::C::@method::g#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
g
reference: <testLibrary>::@class::C::@method::g
firstFragment: <testLibraryFragment>::@class::C::@method::g
''');
}
test_class_missingName() async {
var library = await buildLibrary(r'''
class {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class @6
reference: <testLibraryFragment>::@class::0
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::0::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::0
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class <null-name>
reference: <testLibraryFragment>::@class::0
element: <testLibrary>::@class::0
constructors
synthetic new
reference: <testLibraryFragment>::@class::0::@constructor::new
element: <testLibraryFragment>::@class::0::@constructor::new#element
typeName: null
classes
class
reference: <testLibrary>::@class::0
firstFragment: <testLibraryFragment>::@class::0
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::0::@constructor::new
''');
}
test_class_mixin_class() async {
var library = await buildLibrary('mixin class C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
mixin class C @12
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @12
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
mixin class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_mixins() async {
var library = await buildLibrary('''
class C extends D with E, F, G {}
class D {}
class E {}
class F {}
class G {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
mixins
E
F
G
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @40
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @51
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
class F @62
reference: <testLibraryFragment>::@class::F
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::F::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::F
class G @73
reference: <testLibraryFragment>::@class::G
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::G::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::G
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @40
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @51
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
class F @62
reference: <testLibraryFragment>::@class::F
element: <testLibrary>::@class::F
constructors
synthetic new
reference: <testLibraryFragment>::@class::F::@constructor::new
element: <testLibraryFragment>::@class::F::@constructor::new#element
typeName: F
class G @73
reference: <testLibraryFragment>::@class::G
element: <testLibrary>::@class::G
constructors
synthetic new
reference: <testLibraryFragment>::@class::G::@constructor::new
element: <testLibraryFragment>::@class::G::@constructor::new#element
typeName: G
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
mixins
E
F
G
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
class F
reference: <testLibrary>::@class::F
firstFragment: <testLibraryFragment>::@class::F
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::F::@constructor::new
class G
reference: <testLibrary>::@class::G
firstFragment: <testLibraryFragment>::@class::G
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::G::@constructor::new
''');
}
test_class_mixins_extensionType() async {
var library = await buildLibrary('''
mixin A {}
extension type B(int it) {}
mixin C {}
class D extends Object with A, B, C {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class D @56
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
A
C
extensionTypes
B @26
reference: <testLibraryFragment>::@extensionType::B
enclosingElement3: <testLibraryFragment>
representation: <testLibraryFragment>::@extensionType::B::@field::it
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
typeErasure: int
fields
final it @32
reference: <testLibraryFragment>::@extensionType::B::@field::it
enclosingElement3: <testLibraryFragment>::@extensionType::B
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::B::@getter::it
enclosingElement3: <testLibraryFragment>::@extensionType::B
returnType: int
mixins
mixin A @6
reference: <testLibraryFragment>::@mixin::A
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
mixin C @45
reference: <testLibraryFragment>::@mixin::C
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class D @56
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
extensionTypes
extension type B @26
reference: <testLibraryFragment>::@extensionType::B
element: <testLibrary>::@extensionType::B
fields
it @32
reference: <testLibraryFragment>::@extensionType::B::@field::it
element: <testLibraryFragment>::@extensionType::B::@field::it#element
getter2: <testLibraryFragment>::@extensionType::B::@getter::it
getters
synthetic get it
reference: <testLibraryFragment>::@extensionType::B::@getter::it
element: <testLibraryFragment>::@extensionType::B::@getter::it#element
mixins
mixin A @6
reference: <testLibraryFragment>::@mixin::A
element: <testLibrary>::@mixin::A
mixin C @45
reference: <testLibraryFragment>::@mixin::C
element: <testLibrary>::@mixin::C
classes
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
supertype: Object
mixins
A
C
extensionTypes
extension type B
reference: <testLibrary>::@extensionType::B
firstFragment: <testLibraryFragment>::@extensionType::B
representation: <testLibraryFragment>::@extensionType::B::@field::it#element
primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new#element
typeErasure: int
fields
final it
firstFragment: <testLibraryFragment>::@extensionType::B::@field::it
type: int
getter: <testLibraryFragment>::@extensionType::B::@getter::it#element
getters
synthetic get it
firstFragment: <testLibraryFragment>::@extensionType::B::@getter::it
mixins
mixin A
reference: <testLibrary>::@mixin::A
firstFragment: <testLibraryFragment>::@mixin::A
superclassConstraints
Object
mixin C
reference: <testLibrary>::@mixin::C
firstFragment: <testLibraryFragment>::@mixin::C
superclassConstraints
Object
''');
}
test_class_mixins_generic() async {
var library = await buildLibrary('''
class Z extends A with B<int>, C<double> {}
class A {}
class B<B1> {}
class C<C1> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class Z @6
reference: <testLibraryFragment>::@class::Z
enclosingElement3: <testLibraryFragment>
supertype: A
mixins
B<int>
C<double>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::Z::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::Z
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
class A @50
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @61
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant B1 @63
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
class C @76
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant C1 @78
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class Z @6
reference: <testLibraryFragment>::@class::Z
element: <testLibrary>::@class::Z
constructors
synthetic new
reference: <testLibraryFragment>::@class::Z::@constructor::new
element: <testLibraryFragment>::@class::Z::@constructor::new#element
typeName: Z
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
class A @50
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @61
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
B1 @63
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class C @76
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
C1 @78
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class Z
reference: <testLibrary>::@class::Z
firstFragment: <testLibraryFragment>::@class::Z
supertype: A
mixins
B<int>
C<double>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::Z::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
B1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
C1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_mixins_generic_superAfter() async {
var library = await buildLibrary('''
mixin M<T extends num> {}
mixin M2<T extends num> on M<T> {}
class Z extends S with M2 {}
class S with M<int> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class Z @67
reference: <testLibraryFragment>::@class::Z
enclosingElement3: <testLibraryFragment>
supertype: S
mixins
M2<int>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::Z::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::Z
superConstructor: <testLibraryFragment>::@class::S::@constructor::new
class S @96
reference: <testLibraryFragment>::@class::S
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M<int>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::S::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::S
mixins
mixin M @6
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: num
defaultType: num
superclassConstraints
Object
mixin M2 @32
reference: <testLibraryFragment>::@mixin::M2
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @35
bound: num
defaultType: num
superclassConstraints
M<T>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class Z @67
reference: <testLibraryFragment>::@class::Z
element: <testLibrary>::@class::Z
constructors
synthetic new
reference: <testLibraryFragment>::@class::Z::@constructor::new
element: <testLibraryFragment>::@class::Z::@constructor::new#element
typeName: Z
superConstructor: <testLibraryFragment>::@class::S::@constructor::new
class S @96
reference: <testLibraryFragment>::@class::S
element: <testLibrary>::@class::S
constructors
synthetic new
reference: <testLibraryFragment>::@class::S::@constructor::new
element: <testLibraryFragment>::@class::S::@constructor::new#element
typeName: S
mixins
mixin M @6
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
typeParameters
T @8
element: <not-implemented>
mixin M2 @32
reference: <testLibraryFragment>::@mixin::M2
element: <testLibrary>::@mixin::M2
typeParameters
T @35
element: <not-implemented>
classes
class Z
reference: <testLibrary>::@class::Z
firstFragment: <testLibraryFragment>::@class::Z
supertype: S
mixins
M2<int>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::Z::@constructor::new
superConstructor: <testLibraryFragment>::@class::S::@constructor::new#element
class S
reference: <testLibrary>::@class::S
firstFragment: <testLibraryFragment>::@class::S
supertype: Object
mixins
M<int>
M<int>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::S::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
typeParameters
T
bound: num
superclassConstraints
Object
mixin M2
reference: <testLibrary>::@mixin::M2
firstFragment: <testLibraryFragment>::@mixin::M2
typeParameters
T
bound: num
superclassConstraints
M<T>
''');
}
test_class_mixins_genericMixin_tooManyArguments() async {
var library = await buildLibrary('''
mixin M<T> {}
class A extends Object with M<int, String> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @20
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
mixins
mixin M @6
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @20
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
mixins
mixin M @6
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
typeParameters
T @8
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
supertype: Object
mixins
M<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
typeParameters
T
superclassConstraints
Object
''');
}
test_class_mixins_typeParameter() async {
var library = await buildLibrary('''
mixin M1 {}
mixin M2 {}
class A<T> extends Object with M1, T<int>, M2 {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @30
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @32
defaultType: dynamic
supertype: Object
mixins
M1
M2
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
mixins
mixin M1 @6
reference: <testLibraryFragment>::@mixin::M1
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
mixin M2 @18
reference: <testLibraryFragment>::@mixin::M2
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @30
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @32
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
mixins
mixin M1 @6
reference: <testLibraryFragment>::@mixin::M1
element: <testLibrary>::@mixin::M1
mixin M2 @18
reference: <testLibraryFragment>::@mixin::M2
element: <testLibrary>::@mixin::M2
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
supertype: Object
mixins
M1
M2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M1
reference: <testLibrary>::@mixin::M1
firstFragment: <testLibraryFragment>::@mixin::M1
superclassConstraints
Object
mixin M2
reference: <testLibrary>::@mixin::M2
firstFragment: <testLibraryFragment>::@mixin::M2
superclassConstraints
Object
''');
}
test_class_mixins_unresolved() async {
var library = await buildLibrary(
'class C extends Object with X, Y, Z {} class X {} class Z {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
X
Z
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class X @45
reference: <testLibraryFragment>::@class::X
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::X::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::X
class Z @56
reference: <testLibraryFragment>::@class::Z
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::Z::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::Z
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class X @45
reference: <testLibraryFragment>::@class::X
element: <testLibrary>::@class::X
constructors
synthetic new
reference: <testLibraryFragment>::@class::X::@constructor::new
element: <testLibraryFragment>::@class::X::@constructor::new#element
typeName: X
class Z @56
reference: <testLibraryFragment>::@class::Z
element: <testLibrary>::@class::Z
constructors
synthetic new
reference: <testLibraryFragment>::@class::Z::@constructor::new
element: <testLibraryFragment>::@class::Z::@constructor::new#element
typeName: Z
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: Object
mixins
X
Z
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class X
reference: <testLibrary>::@class::X
firstFragment: <testLibraryFragment>::@class::X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::X::@constructor::new
class Z
reference: <testLibrary>::@class::Z
firstFragment: <testLibraryFragment>::@class::Z
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::Z::@constructor::new
''');
}
test_class_notSimplyBounded_circularity_via_typeAlias_recordType() async {
var library = await buildLibrary('''
class C<T extends A> {}
typedef A = (C, int);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: dynamic
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
typeAliases
notSimplyBounded A @32
reference: <testLibraryFragment>::@typeAlias::A
aliasedType: (C<dynamic>, int)
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeAliases
A @32
reference: <testLibraryFragment>::@typeAlias::A
element: <testLibrary>::@typeAlias::A
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: dynamic
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
typeAliases
notSimplyBounded A
firstFragment: <testLibraryFragment>::@typeAlias::A
aliasedType: (C<dynamic>, int)
''');
}
test_class_notSimplyBounded_circularity_via_typedef() async {
// C's type parameter T is not simply bounded because its bound, F, expands
// to `dynamic F(C)`, which refers to C.
var library = await buildLibrary('''
class C<T extends F> {}
typedef F(C value);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: dynamic
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
typeAliases
functionTypeAliasBased notSimplyBounded F @32
reference: <testLibraryFragment>::@typeAlias::F
aliasedType: dynamic Function(C<dynamic>)
aliasedElement: GenericFunctionTypeElement
parameters
requiredPositional value @36
type: C<dynamic>
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeAliases
F @32
reference: <testLibraryFragment>::@typeAlias::F
element: <testLibrary>::@typeAlias::F
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: dynamic
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
typeAliases
notSimplyBounded F
firstFragment: <testLibraryFragment>::@typeAlias::F
aliasedType: dynamic Function(C<dynamic>)
''');
}
test_class_notSimplyBounded_circularity_with_type_params() async {
// C's type parameter T is simply bounded because even though it refers to
// C, it specifies a bound.
var library = await buildLibrary('''
class C<T extends C<dynamic>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: C<dynamic>
defaultType: C<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: C<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_notSimplyBounded_complex_by_cycle_class() async {
var library = await buildLibrary('''
class C<T extends D> {}
class D<T extends C> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: D<dynamic>
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
notSimplyBounded class D @30
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @32
bound: C<dynamic>
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @30
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @32
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: D<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
bound: C<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_notSimplyBounded_complex_by_cycle_typedef_functionType() async {
var library = await buildLibrary('''
typedef C<T extends D> = void Function();
typedef D<T extends C> = void Function();
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
typeAliases
notSimplyBounded C @8
reference: <testLibraryFragment>::@typeAlias::C
typeParameters
unrelated T @10
bound: dynamic
defaultType: dynamic
aliasedType: void Function()
aliasedElement: GenericFunctionTypeElement
returnType: void
notSimplyBounded D @50
reference: <testLibraryFragment>::@typeAlias::D
typeParameters
unrelated T @52
bound: dynamic
defaultType: dynamic
aliasedType: void Function()
aliasedElement: GenericFunctionTypeElement
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
typeAliases
C @8
reference: <testLibraryFragment>::@typeAlias::C
element: <testLibrary>::@typeAlias::C
typeParameters
T @10
element: <not-implemented>
D @50
reference: <testLibraryFragment>::@typeAlias::D
element: <testLibrary>::@typeAlias::D
typeParameters
T @52
element: <not-implemented>
typeAliases
notSimplyBounded C
firstFragment: <testLibraryFragment>::@typeAlias::C
typeParameters
T
bound: dynamic
aliasedType: void Function()
notSimplyBounded D
firstFragment: <testLibraryFragment>::@typeAlias::D
typeParameters
T
bound: dynamic
aliasedType: void Function()
''');
}
test_class_notSimplyBounded_complex_by_cycle_typedef_interfaceType() async {
var library = await buildLibrary('''
typedef C<T extends D> = List<T>;
typedef D<T extends C> = List<T>;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
typeAliases
notSimplyBounded C @8
reference: <testLibraryFragment>::@typeAlias::C
typeParameters
covariant T @10
bound: dynamic
defaultType: dynamic
aliasedType: List<T>
notSimplyBounded D @42
reference: <testLibraryFragment>::@typeAlias::D
typeParameters
covariant T @44
bound: dynamic
defaultType: dynamic
aliasedType: List<T>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
typeAliases
C @8
reference: <testLibraryFragment>::@typeAlias::C
element: <testLibrary>::@typeAlias::C
typeParameters
T @10
element: <not-implemented>
D @42
reference: <testLibraryFragment>::@typeAlias::D
element: <testLibrary>::@typeAlias::D
typeParameters
T @44
element: <not-implemented>
typeAliases
notSimplyBounded C
firstFragment: <testLibraryFragment>::@typeAlias::C
typeParameters
T
bound: dynamic
aliasedType: List<T>
notSimplyBounded D
firstFragment: <testLibraryFragment>::@typeAlias::D
typeParameters
T
bound: dynamic
aliasedType: List<T>
''');
}
test_class_notSimplyBounded_complex_by_reference_to_cycle() async {
var library = await buildLibrary('''
class C<T extends D> {}
class D<T extends D> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: D<dynamic>
defaultType: D<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
notSimplyBounded class D @30
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @32
bound: D<dynamic>
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @30
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @32
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: D<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
bound: D<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_notSimplyBounded_complex_by_use_of_parameter() async {
var library = await buildLibrary('''
class C<T extends D<T>> {}
class D<T> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: D<T>
defaultType: D<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @33
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @35
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @33
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @35
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: D<T>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_notSimplyBounded_dependency_with_type_params() async {
// C's type parameter T is simply bounded because even though it refers to
// non-simply-bounded type D, it specifies a bound.
var library = await buildLibrary('''
class C<T extends D<dynamic>> {}
class D<T extends D<T>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: D<dynamic>
defaultType: D<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
notSimplyBounded class D @39
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @41
bound: D<T>
defaultType: D<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @39
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @41
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: D<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
bound: D<T>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type() async {
var library = await buildLibrary('''
class C<T extends void Function(T)> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: void Function(T)
defaultType: void Function(Never)
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: void Function(T)
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_notSimplyBounded_function_typed_bound_complex_via_return_type() async {
var library = await buildLibrary('''
class C<T extends T Function()> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: T Function()
defaultType: dynamic Function()
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: T Function()
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_notSimplyBounded_function_typed_bound_simple() async {
var library = await buildLibrary('''
class C<T extends void Function()> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: void Function()
defaultType: void Function()
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: void Function()
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_notSimplyBounded_refers_to_circular_typedef() async {
// C's type parameter T has a bound of F, which is a circular typedef. This
// is illegal in Dart, but we need to make sure it doesn't lead to a crash
// or infinite loop.
var library = await buildLibrary('''
class C<T extends F> {}
typedef F(G value);
typedef G(F value);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: dynamic
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
typeAliases
functionTypeAliasBased notSimplyBounded F @32
reference: <testLibraryFragment>::@typeAlias::F
aliasedType: dynamic Function(dynamic)
aliasedElement: GenericFunctionTypeElement
parameters
requiredPositional value @36
type: dynamic
returnType: dynamic
functionTypeAliasBased notSimplyBounded G @52
reference: <testLibraryFragment>::@typeAlias::G
aliasedType: dynamic Function(dynamic)
aliasedElement: GenericFunctionTypeElement
parameters
requiredPositional value @56
type: dynamic
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
typeAliases
F @32
reference: <testLibraryFragment>::@typeAlias::F
element: <testLibrary>::@typeAlias::F
G @52
reference: <testLibraryFragment>::@typeAlias::G
element: <testLibrary>::@typeAlias::G
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: dynamic
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
typeAliases
notSimplyBounded F
firstFragment: <testLibraryFragment>::@typeAlias::F
aliasedType: dynamic Function(dynamic)
notSimplyBounded G
firstFragment: <testLibraryFragment>::@typeAlias::G
aliasedType: dynamic Function(dynamic)
''');
}
test_class_notSimplyBounded_self() async {
var library = await buildLibrary('''
class C<T extends C> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: C<dynamic>
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: C<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_notSimplyBounded_simple_because_non_generic() async {
// If no type parameters are specified, then the class is simply bounded, so
// there is no reason to assign it a slot.
var library = await buildLibrary('''
class C {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_notSimplyBounded_simple_by_lack_of_cycles() async {
var library = await buildLibrary('''
class C<T extends D> {}
class D<T> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: D<dynamic>
defaultType: D<dynamic>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @30
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @32
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @30
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T @32
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: D<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_notSimplyBounded_simple_by_syntax() async {
// If no bounds are specified, then the class is simply bounded by syntax
// alone, so there is no reason to assign it a slot.
var library = await buildLibrary('''
class C<T> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_operator() async {
var library =
await buildLibrary('class C { C operator+(C other) => null; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
+ @20
reference: <testLibraryFragment>::@class::C::@method::+
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional other @24
type: C
returnType: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
+ @20
reference: <testLibraryFragment>::@class::C::@method::+
element: <testLibraryFragment>::@class::C::@method::+#element
formalParameters
other @24
element: <testLibraryFragment>::@class::C::@method::+::@parameter::other#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
+
reference: <testLibrary>::@class::C::@method::+
firstFragment: <testLibraryFragment>::@class::C::@method::+
formalParameters
requiredPositional other
type: C
''');
}
test_class_operator_equal() async {
var library = await buildLibrary('''
class C {
bool operator==(Object other) => false;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
== @25
reference: <testLibraryFragment>::@class::C::@method::==
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional other @35
type: Object
returnType: bool
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
== @25
reference: <testLibraryFragment>::@class::C::@method::==
element: <testLibraryFragment>::@class::C::@method::==#element
formalParameters
other @35
element: <testLibraryFragment>::@class::C::@method::==::@parameter::other#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
==
reference: <testLibrary>::@class::C::@method::==
firstFragment: <testLibraryFragment>::@class::C::@method::==
formalParameters
requiredPositional other
type: Object
''');
}
test_class_operator_external() async {
var library =
await buildLibrary('class C { external C operator+(C other); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
external + @29
reference: <testLibraryFragment>::@class::C::@method::+
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional other @33
type: C
returnType: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
+ @29
reference: <testLibraryFragment>::@class::C::@method::+
element: <testLibraryFragment>::@class::C::@method::+#element
formalParameters
other @33
element: <testLibraryFragment>::@class::C::@method::+::@parameter::other#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
external +
reference: <testLibrary>::@class::C::@method::+
firstFragment: <testLibraryFragment>::@class::C::@method::+
formalParameters
requiredPositional other
type: C
''');
}
test_class_operator_greater_equal() async {
var library = await buildLibrary('''
class C {
bool operator>=(C other) => false;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
>= @25
reference: <testLibraryFragment>::@class::C::@method::>=
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional other @30
type: C
returnType: bool
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
>= @25
reference: <testLibraryFragment>::@class::C::@method::>=
element: <testLibraryFragment>::@class::C::@method::>=#element
formalParameters
other @30
element: <testLibraryFragment>::@class::C::@method::>=::@parameter::other#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
>=
reference: <testLibrary>::@class::C::@method::>=
firstFragment: <testLibraryFragment>::@class::C::@method::>=
formalParameters
requiredPositional other
type: C
''');
}
test_class_operator_index() async {
var library =
await buildLibrary('class C { bool operator[](int i) => null; }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
[] @23
reference: <testLibraryFragment>::@class::C::@method::[]
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional i @30
type: int
returnType: bool
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
[] @23
reference: <testLibraryFragment>::@class::C::@method::[]
element: <testLibraryFragment>::@class::C::@method::[]#element
formalParameters
i @30
element: <testLibraryFragment>::@class::C::@method::[]::@parameter::i#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
[]
reference: <testLibrary>::@class::C::@method::[]
firstFragment: <testLibraryFragment>::@class::C::@method::[]
formalParameters
requiredPositional i
type: int
''');
}
test_class_operator_index_set() async {
var library = await buildLibrary('''
class C {
void operator[]=(int i, bool v) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
[]= @25
reference: <testLibraryFragment>::@class::C::@method::[]=
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional i @33
type: int
requiredPositional v @41
type: bool
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
[]= @25
reference: <testLibraryFragment>::@class::C::@method::[]=
element: <testLibraryFragment>::@class::C::@method::[]=#element
formalParameters
i @33
element: <testLibraryFragment>::@class::C::@method::[]=::@parameter::i#element
v @41
element: <testLibraryFragment>::@class::C::@method::[]=::@parameter::v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
[]=
reference: <testLibrary>::@class::C::@method::[]=
firstFragment: <testLibraryFragment>::@class::C::@method::[]=
formalParameters
requiredPositional i
type: int
requiredPositional v
type: bool
''');
}
test_class_operator_less_equal() async {
var library = await buildLibrary('''
class C {
bool operator<=(C other) => false;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
<= @25
reference: <testLibraryFragment>::@class::C::@method::<=
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional other @30
type: C
returnType: bool
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
<= @25
reference: <testLibraryFragment>::@class::C::@method::<=
element: <testLibraryFragment>::@class::C::@method::<=#element
formalParameters
other @30
element: <testLibraryFragment>::@class::C::@method::<=::@parameter::other#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
<=
reference: <testLibrary>::@class::C::@method::<=
firstFragment: <testLibraryFragment>::@class::C::@method::<=
formalParameters
requiredPositional other
type: C
''');
}
test_class_ref_nullability_none() async {
var library = await buildLibrary('''
class C {}
C c;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
topLevelVariables
static c @13
reference: <testLibraryFragment>::@topLevelVariable::c
enclosingElement3: <testLibraryFragment>
type: C
accessors
synthetic static get c @-1
reference: <testLibraryFragment>::@getter::c
enclosingElement3: <testLibraryFragment>
returnType: C
synthetic static set c= @-1
reference: <testLibraryFragment>::@setter::c
enclosingElement3: <testLibraryFragment>
parameters
requiredPositional _c @-1
type: C
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
topLevelVariables
c @13
reference: <testLibraryFragment>::@topLevelVariable::c
element: <testLibrary>::@topLevelVariable::c
getter2: <testLibraryFragment>::@getter::c
setter2: <testLibraryFragment>::@setter::c
getters
synthetic get c
reference: <testLibraryFragment>::@getter::c
element: <testLibraryFragment>::@getter::c#element
setters
synthetic set c
reference: <testLibraryFragment>::@setter::c
element: <testLibraryFragment>::@setter::c#element
formalParameters
<null-name>
element: <testLibraryFragment>::@setter::c::@parameter::_c#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
topLevelVariables
c
reference: <testLibrary>::@topLevelVariable::c
firstFragment: <testLibraryFragment>::@topLevelVariable::c
type: C
getter: <testLibraryFragment>::@getter::c#element
setter: <testLibraryFragment>::@setter::c#element
getters
synthetic static get c
firstFragment: <testLibraryFragment>::@getter::c
setters
synthetic static set c
firstFragment: <testLibraryFragment>::@setter::c
formalParameters
requiredPositional _c
type: C
''');
}
test_class_ref_nullability_question() async {
var library = await buildLibrary('''
class C {}
C? c;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
topLevelVariables
static c @14
reference: <testLibraryFragment>::@topLevelVariable::c
enclosingElement3: <testLibraryFragment>
type: C?
accessors
synthetic static get c @-1
reference: <testLibraryFragment>::@getter::c
enclosingElement3: <testLibraryFragment>
returnType: C?
synthetic static set c= @-1
reference: <testLibraryFragment>::@setter::c
enclosingElement3: <testLibraryFragment>
parameters
requiredPositional _c @-1
type: C?
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
topLevelVariables
c @14
reference: <testLibraryFragment>::@topLevelVariable::c
element: <testLibrary>::@topLevelVariable::c
getter2: <testLibraryFragment>::@getter::c
setter2: <testLibraryFragment>::@setter::c
getters
synthetic get c
reference: <testLibraryFragment>::@getter::c
element: <testLibraryFragment>::@getter::c#element
setters
synthetic set c
reference: <testLibraryFragment>::@setter::c
element: <testLibraryFragment>::@setter::c#element
formalParameters
<null-name>
element: <testLibraryFragment>::@setter::c::@parameter::_c#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
topLevelVariables
c
reference: <testLibrary>::@topLevelVariable::c
firstFragment: <testLibraryFragment>::@topLevelVariable::c
type: C?
getter: <testLibraryFragment>::@getter::c#element
setter: <testLibraryFragment>::@setter::c#element
getters
synthetic static get c
firstFragment: <testLibraryFragment>::@getter::c
setters
synthetic static set c
firstFragment: <testLibraryFragment>::@setter::c
formalParameters
requiredPositional _c
type: C?
''');
}
test_class_sealed() async {
var library = await buildLibrary('sealed class C {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract sealed class C @13
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @13
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
abstract sealed class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_sealed_induced_base_extends_base() async {
var library = await buildLibrary('''
base class A {}
sealed class B extends A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
base class A @11
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
abstract sealed base class B @29
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @11
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @29
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
base class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
abstract sealed base class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_sealed_induced_base_implements_base() async {
var library = await buildLibrary('''
base class A {}
sealed class B implements A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
base class A @11
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
abstract sealed base class B @29
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
interfaces
A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @11
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @29
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
classes
base class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
abstract sealed base class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
interfaces
A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
''');
}
test_class_sealed_induced_base_implements_final() async {
var library = await buildLibrary('''
final class A {}
sealed class B implements A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
final class A @12
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
abstract sealed base class B @30
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
interfaces
A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @12
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @30
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
classes
final class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
abstract sealed base class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
interfaces
A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
''');
}
test_class_sealed_induced_final_extends_final() async {
var library = await buildLibrary('''
final class A {}
sealed class B extends A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
final class A @12
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
abstract sealed final class B @30
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @12
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @30
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
final class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
abstract sealed final class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_sealed_induced_final_with_base_mixin() async {
var library = await buildLibrary('''
base mixin A {}
interface class B {}
sealed class C extends B with A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
interface class B @32
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
abstract sealed final class C @50
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: B
mixins
A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::B::@constructor::new
mixins
base mixin A @11
reference: <testLibraryFragment>::@mixin::A
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @32
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class C @50
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::B::@constructor::new
mixins
mixin A @11
reference: <testLibraryFragment>::@mixin::A
element: <testLibrary>::@mixin::A
classes
interface class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
abstract sealed final class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: B
mixins
A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::B::@constructor::new#element
mixins
base mixin A
reference: <testLibrary>::@mixin::A
firstFragment: <testLibraryFragment>::@mixin::A
superclassConstraints
Object
''');
}
test_class_sealed_induced_interface_extends_interface() async {
var library = await buildLibrary('''
interface class A {}
sealed class B extends A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
interface class A @16
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
abstract sealed interface class B @34
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @16
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @34
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
interface class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
abstract sealed interface class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_sealed_induced_none_implements_interface() async {
var library = await buildLibrary('''
interface class A {}
sealed class B implements A {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
interface class A @16
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
abstract sealed class B @34
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
interfaces
A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @16
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @34
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
classes
interface class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
abstract sealed class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
interfaces
A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
''');
}
test_class_setter_abstract() async {
var library =
await buildLibrary('abstract class C { void set x(int value); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
abstract set x= @28
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @34
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @28
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @34
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
abstract class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
abstract set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_setter_covariant() async {
var library =
await buildLibrary('class C { void set x(covariant int value); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
abstract set x= @19
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional covariant value @35
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @19
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @35
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
abstract set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional covariant value
type: int
''');
}
test_class_setter_external() async {
var library =
await buildLibrary('class C { external void set x(int value); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
external set x= @28
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @34
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @28
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @34
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
external set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_setter_implicit_param_type() async {
var library = await buildLibrary('class C { void set x(value) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @19
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @21
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @19
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @21
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: dynamic
''');
}
test_class_setter_implicit_return_type() async {
var library = await buildLibrary('class C { set x(int value) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @14
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @20
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @14
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @20
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_setter_inferred_type_conflictingInheritance() async {
var library = await buildLibrary('''
class A {
int t;
}
class B extends A {
double t;
}
class C extends A implements B {
}
class D extends C {
void set t(p) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
t @16
reference: <testLibraryFragment>::@class::A::@field::t
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get t @-1
reference: <testLibraryFragment>::@class::A::@getter::t
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
synthetic set t= @-1
reference: <testLibraryFragment>::@class::A::@setter::t
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _t @-1
type: int
returnType: void
class B @27
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
fields
t @50
reference: <testLibraryFragment>::@class::B::@field::t
enclosingElement3: <testLibraryFragment>::@class::B
type: double
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
accessors
synthetic get t @-1
reference: <testLibraryFragment>::@class::B::@getter::t
enclosingElement3: <testLibraryFragment>::@class::B
returnType: double
synthetic set t= @-1
reference: <testLibraryFragment>::@class::B::@setter::t
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional _t @-1
type: double
returnType: void
class C @61
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: A
interfaces
B
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
class D @96
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
supertype: C
fields
synthetic t @-1
reference: <testLibraryFragment>::@class::D::@field::t
enclosingElement3: <testLibraryFragment>::@class::D
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
superConstructor: <testLibraryFragment>::@class::C::@constructor::new
accessors
set t= @121
reference: <testLibraryFragment>::@class::D::@setter::t
enclosingElement3: <testLibraryFragment>::@class::D
parameters
requiredPositional p @123
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
t @16
reference: <testLibraryFragment>::@class::A::@field::t
element: <testLibraryFragment>::@class::A::@field::t#element
getter2: <testLibraryFragment>::@class::A::@getter::t
setter2: <testLibraryFragment>::@class::A::@setter::t
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get t
reference: <testLibraryFragment>::@class::A::@getter::t
element: <testLibraryFragment>::@class::A::@getter::t#element
setters
synthetic set t
reference: <testLibraryFragment>::@class::A::@setter::t
element: <testLibraryFragment>::@class::A::@setter::t#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::t::@parameter::_t#element
class B @27
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
fields
t @50
reference: <testLibraryFragment>::@class::B::@field::t
element: <testLibraryFragment>::@class::B::@field::t#element
getter2: <testLibraryFragment>::@class::B::@getter::t
setter2: <testLibraryFragment>::@class::B::@setter::t
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get t
reference: <testLibraryFragment>::@class::B::@getter::t
element: <testLibraryFragment>::@class::B::@getter::t#element
setters
synthetic set t
reference: <testLibraryFragment>::@class::B::@setter::t
element: <testLibraryFragment>::@class::B::@setter::t#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::B::@setter::t::@parameter::_t#element
class C @61
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
class D @96
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
fields
synthetic t
reference: <testLibraryFragment>::@class::D::@field::t
element: <testLibraryFragment>::@class::D::@field::t#element
setter2: <testLibraryFragment>::@class::D::@setter::t
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
superConstructor: <testLibraryFragment>::@class::C::@constructor::new
setters
set t @121
reference: <testLibraryFragment>::@class::D::@setter::t
element: <testLibraryFragment>::@class::D::@setter::t#element
formalParameters
p @123
element: <testLibraryFragment>::@class::D::@setter::t::@parameter::p#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
t
firstFragment: <testLibraryFragment>::@class::A::@field::t
type: int
getter: <testLibraryFragment>::@class::A::@getter::t#element
setter: <testLibraryFragment>::@class::A::@setter::t#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get t
firstFragment: <testLibraryFragment>::@class::A::@getter::t
setters
synthetic set t
firstFragment: <testLibraryFragment>::@class::A::@setter::t
formalParameters
requiredPositional _t
type: int
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
fields
t
firstFragment: <testLibraryFragment>::@class::B::@field::t
type: double
getter: <testLibraryFragment>::@class::B::@getter::t#element
setter: <testLibraryFragment>::@class::B::@setter::t#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
getters
synthetic get t
firstFragment: <testLibraryFragment>::@class::B::@getter::t
setters
synthetic set t
firstFragment: <testLibraryFragment>::@class::B::@setter::t
formalParameters
requiredPositional _t
type: double
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: A
interfaces
B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
supertype: C
fields
synthetic t
firstFragment: <testLibraryFragment>::@class::D::@field::t
type: dynamic
setter: <testLibraryFragment>::@class::D::@setter::t#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
superConstructor: <testLibraryFragment>::@class::C::@constructor::new#element
setters
set t
firstFragment: <testLibraryFragment>::@class::D::@setter::t
formalParameters
requiredPositional p
type: dynamic
''');
}
test_class_setter_inferred_type_nonStatic_implicit_param() async {
var library =
await buildLibrary('class C extends D { void set f(value) {} }'
' abstract class D { void set f(int value); }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
fields
synthetic f @-1
reference: <testLibraryFragment>::@class::C::@field::f
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
accessors
set f= @29
reference: <testLibraryFragment>::@class::C::@setter::f
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @31
type: int
returnType: void
abstract class D @58
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
fields
synthetic f @-1
reference: <testLibraryFragment>::@class::D::@field::f
enclosingElement3: <testLibraryFragment>::@class::D
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
accessors
abstract set f= @71
reference: <testLibraryFragment>::@class::D::@setter::f
enclosingElement3: <testLibraryFragment>::@class::D
parameters
requiredPositional value @77
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic f
reference: <testLibraryFragment>::@class::C::@field::f
element: <testLibraryFragment>::@class::C::@field::f#element
setter2: <testLibraryFragment>::@class::C::@setter::f
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
setters
set f @29
reference: <testLibraryFragment>::@class::C::@setter::f
element: <testLibraryFragment>::@class::C::@setter::f#element
formalParameters
value @31
element: <testLibraryFragment>::@class::C::@setter::f::@parameter::value#element
class D @58
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
fields
synthetic f
reference: <testLibraryFragment>::@class::D::@field::f
element: <testLibraryFragment>::@class::D::@field::f#element
setter2: <testLibraryFragment>::@class::D::@setter::f
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
setters
set f @71
reference: <testLibraryFragment>::@class::D::@setter::f
element: <testLibraryFragment>::@class::D::@setter::f#element
formalParameters
value @77
element: <testLibraryFragment>::@class::D::@setter::f::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
fields
synthetic f
firstFragment: <testLibraryFragment>::@class::C::@field::f
type: int
setter: <testLibraryFragment>::@class::C::@setter::f#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
setters
set f
firstFragment: <testLibraryFragment>::@class::C::@setter::f
formalParameters
requiredPositional value
type: int
abstract class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
fields
synthetic f
firstFragment: <testLibraryFragment>::@class::D::@field::f
type: int
setter: <testLibraryFragment>::@class::D::@setter::f#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
setters
abstract set f
firstFragment: <testLibraryFragment>::@class::D::@setter::f
formalParameters
requiredPositional value
type: int
''');
}
test_class_setter_inferred_type_static_implicit_return() async {
var library = await buildLibrary('''
class C {
static set f(int value) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic static f @-1
reference: <testLibraryFragment>::@class::C::@field::f
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
static set f= @23
reference: <testLibraryFragment>::@class::C::@setter::f
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @29
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic f
reference: <testLibraryFragment>::@class::C::@field::f
element: <testLibraryFragment>::@class::C::@field::f#element
setter2: <testLibraryFragment>::@class::C::@setter::f
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set f @23
reference: <testLibraryFragment>::@class::C::@setter::f
element: <testLibraryFragment>::@class::C::@setter::f#element
formalParameters
value @29
element: <testLibraryFragment>::@class::C::@setter::f::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic static f
firstFragment: <testLibraryFragment>::@class::C::@field::f
type: int
setter: <testLibraryFragment>::@class::C::@setter::f#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
static set f
firstFragment: <testLibraryFragment>::@class::C::@setter::f
formalParameters
requiredPositional value
type: int
''');
}
test_class_setter_invalid_named_parameter() async {
var library = await buildLibrary('class C { void set x({a}) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @19
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
optionalNamed default a @22
reference: <testLibraryFragment>::@class::C::@setter::x::@parameter::a
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @19
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
default a @22
reference: <testLibraryFragment>::@class::C::@setter::x::@parameter::a
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::a#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
optionalNamed a
firstFragment: <testLibraryFragment>::@class::C::@setter::x::@parameter::a
type: dynamic
''');
}
test_class_setter_invalid_no_parameter() async {
var library = await buildLibrary('class C { void set x() {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @19
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @19
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
''');
}
test_class_setter_invalid_optional_parameter() async {
var library = await buildLibrary('class C { void set x([a]) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @19
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
optionalPositional default a @22
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @19
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
default a @22
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::a#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
optionalPositional a
type: dynamic
''');
}
test_class_setter_invalid_too_many_parameters() async {
var library = await buildLibrary('class C { void set x(a, b) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @19
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional a @21
type: dynamic
requiredPositional b @24
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @19
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
a @21
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::a#element
b @24
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::b#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional a
type: dynamic
requiredPositional b
type: dynamic
''');
}
test_class_setter_invokesSuperSelf_getter() async {
var library = await buildLibrary(r'''
class A {
set foo(int _) {
super.foo;
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo= @16
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @24
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo @16
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @24
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _
type: int
''');
}
test_class_setter_invokesSuperSelf_setter() async {
var library = await buildLibrary(r'''
class A {
set foo(int _) {
super.foo = 0;
}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo= @16 invokesSuperSelf
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @24
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo @16
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @24
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _
type: int
''');
}
test_class_setter_missingName() async {
var library = await buildLibrary('''
class A {
set (int _) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
set @12
reference: <testLibraryFragment>::@class::A::@method::set
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @21
type: int
returnType: dynamic
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
set @12
reference: <testLibraryFragment>::@class::A::@method::set
element: <testLibraryFragment>::@class::A::@method::set#element
formalParameters
_ @21
element: <testLibraryFragment>::@class::A::@method::set::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
set
reference: <testLibrary>::@class::A::@method::set
firstFragment: <testLibraryFragment>::@class::A::@method::set
formalParameters
requiredPositional _
type: int
''');
}
test_class_setter_native() async {
var library = await buildLibrary('''
class C {
void set x(int value) native;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
external set x= @21
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @27
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @21
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @27
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
external set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_setter_static() async {
var library =
await buildLibrary('class C { static void set x(int value) {} }');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic static x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
static set x= @26
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @32
type: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @26
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @32
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic static x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
static set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
''');
}
test_class_setters() async {
var library = await buildLibrary('''
class C {
void set x(int value) {}
set y(value) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: int
synthetic y @-1
reference: <testLibraryFragment>::@class::C::@field::y
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @21
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @27
type: int
returnType: void
set y= @43
reference: <testLibraryFragment>::@class::C::@setter::y
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional value @45
type: dynamic
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
synthetic y
reference: <testLibraryFragment>::@class::C::@field::y
element: <testLibraryFragment>::@class::C::@field::y#element
setter2: <testLibraryFragment>::@class::C::@setter::y
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @21
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
value @27
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::value#element
set y @43
reference: <testLibraryFragment>::@class::C::@setter::y
element: <testLibraryFragment>::@class::C::@setter::y#element
formalParameters
value @45
element: <testLibraryFragment>::@class::C::@setter::y::@parameter::value#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: int
setter: <testLibraryFragment>::@class::C::@setter::x#element
synthetic y
firstFragment: <testLibraryFragment>::@class::C::@field::y
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::y#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional value
type: int
set y
firstFragment: <testLibraryFragment>::@class::C::@setter::y
formalParameters
requiredPositional value
type: dynamic
''');
}
test_class_supertype() async {
var library = await buildLibrary('''
class A {}
class B extends A {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
class B @17
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
class B @17
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
''');
}
test_class_supertype_dynamic() async {
var library = await buildLibrary('''
class A extends dynamic {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_supertype_extensionType() async {
var library = await buildLibrary('''
extension type A(int it) {}
class B extends A {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class B @34
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
extensionTypes
A @15
reference: <testLibraryFragment>::@extensionType::A
enclosingElement3: <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
enclosingElement3: <testLibraryFragment>::@extensionType::A
type: int
accessors
synthetic get it @-1
reference: <testLibraryFragment>::@extensionType::A::@getter::it
enclosingElement3: <testLibraryFragment>::@extensionType::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @34
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
extensionTypes
extension type A @15
reference: <testLibraryFragment>::@extensionType::A
element: <testLibrary>::@extensionType::A
fields
it @21
reference: <testLibraryFragment>::@extensionType::A::@field::it
element: <testLibraryFragment>::@extensionType::A::@field::it#element
getter2: <testLibraryFragment>::@extensionType::A::@getter::it
getters
synthetic get it
reference: <testLibraryFragment>::@extensionType::A::@getter::it
element: <testLibraryFragment>::@extensionType::A::@getter::it#element
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
extensionTypes
extension type A
reference: <testLibrary>::@extensionType::A
firstFragment: <testLibraryFragment>::@extensionType::A
representation: <testLibraryFragment>::@extensionType::A::@field::it#element
primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new#element
typeErasure: int
fields
final it
firstFragment: <testLibraryFragment>::@extensionType::A::@field::it
type: int
getter: <testLibraryFragment>::@extensionType::A::@getter::it#element
getters
synthetic get it
firstFragment: <testLibraryFragment>::@extensionType::A::@getter::it
''');
}
test_class_supertype_genericClass() async {
var library = await buildLibrary('''
class C extends D<int, double> {}
class D<T1, T2> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D<int, double>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::D::@constructor::new
substitution: {T1: int, T2: double}
class D @40
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T1 @42
defaultType: dynamic
covariant T2 @46
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::D::@constructor::new
substitution: {T1: int, T2: double}
class D @40
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
typeParameters
T1 @42
element: <not-implemented>
T2 @46
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D<int, double>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
typeParameters
T1
T2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_supertype_genericClass_tooManyArguments() async {
var library = await buildLibrary('''
class A<T> {}
class B extends A<int, String> {}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
class B @20
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A<dynamic>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
class B @20
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A<dynamic>
''');
}
test_class_supertype_typeArguments_self() async {
var library = await buildLibrary('''
class A<T> {}
class B extends A<B> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @20
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
supertype: A<B>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: B}
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @20
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: B}
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A<B>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_class_supertype_typeParameter() async {
var library = await buildLibrary('''
class A<T> extends T<int> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_supertype_unresolved() async {
var library = await buildLibrary('class C extends D {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters() async {
var library = await buildLibrary('class C<T, U> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant U @11
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @11
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_bound() async {
var library = await buildLibrary('''
class C<T extends Object, U extends D> {}
class D {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: Object
defaultType: Object
covariant U @26
bound: D
defaultType: D
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @48
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @26
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @48
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: Object
U
bound: D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_class_typeParameters_cycle_1of1() async {
var library = await buildLibrary('class C<T extends T> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: dynamic
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: dynamic
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_cycle_2of3() async {
var library = await buildLibrary(r'''
class C<T extends V, U, V extends T> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: dynamic
defaultType: dynamic
covariant U @21
defaultType: dynamic
covariant V @24
bound: dynamic
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @21
element: <not-implemented>
V @24
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: dynamic
U
V
bound: dynamic
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_defaultType_cycle_genericFunctionType() async {
var library = await buildLibrary(r'''
class A<T extends void Function(A)> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: void Function(A<dynamic>)
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
bound: void Function(A<dynamic>)
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
var library = await buildLibrary(r'''
class C<T extends void Function<U extends C>()> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: void Function<U extends C<dynamic>>()
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: void Function<U extends C<dynamic>>()
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_defaultType_functionTypeAlias_contravariant() async {
var library = await buildLibrary(r'''
typedef F<X> = void Function(X);
class A<X extends F<X>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @40
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @42
bound: void Function(X)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
defaultType: void Function(Never)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
Never
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
typeParameters
contravariant X @10
defaultType: dynamic
aliasedType: void Function(X)
aliasedElement: GenericFunctionTypeElement
parameters
requiredPositional @-1
type: X
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @40
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @42
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
element: <testLibrary>::@typeAlias::F
typeParameters
X @10
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: void Function(X)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
typeAliases
F
firstFragment: <testLibraryFragment>::@typeAlias::F
typeParameters
X
aliasedType: void Function(X)
''');
}
test_class_typeParameters_defaultType_functionTypeAlias_covariant() async {
var library = await buildLibrary(r'''
typedef F<X> = X Function();
class A<X extends F<X>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @38
bound: X Function()
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
defaultType: dynamic Function()
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
typeParameters
covariant X @10
defaultType: dynamic
aliasedType: X Function()
aliasedElement: GenericFunctionTypeElement
returnType: X
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @38
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
element: <testLibrary>::@typeAlias::F
typeParameters
X @10
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: X Function()
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
typeAliases
F
firstFragment: <testLibraryFragment>::@typeAlias::F
typeParameters
X
aliasedType: X Function()
''');
}
test_class_typeParameters_defaultType_functionTypeAlias_invariant() async {
var library = await buildLibrary(r'''
typedef F<X> = X Function(X);
class A<X extends F<X>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @37
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @39
bound: X Function(X)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
defaultType: dynamic Function(dynamic)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
typeParameters
invariant X @10
defaultType: dynamic
aliasedType: X Function(X)
aliasedElement: GenericFunctionTypeElement
parameters
requiredPositional @-1
type: X
returnType: X
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @37
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @39
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
element: <testLibrary>::@typeAlias::F
typeParameters
X @10
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: X Function(X)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
typeAliases
F
firstFragment: <testLibraryFragment>::@typeAlias::F
typeParameters
X
aliasedType: X Function(X)
''');
}
test_class_typeParameters_defaultType_functionTypeAlias_invariant_legacy() async {
var library = await buildLibrary(r'''
typedef F<X> = X Function(X);
class A<X extends F<X>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @37
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @39
bound: X Function(X)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
defaultType: dynamic Function(dynamic)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
typeParameters
invariant X @10
defaultType: dynamic
aliasedType: X Function(X)
aliasedElement: GenericFunctionTypeElement
parameters
requiredPositional @-1
type: X
returnType: X
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @37
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @39
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeAliases
F @8
reference: <testLibraryFragment>::@typeAlias::F
element: <testLibrary>::@typeAlias::F
typeParameters
X @10
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: X Function(X)
alias: <testLibraryFragment>::@typeAlias::F
typeArguments
X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
typeAliases
F
firstFragment: <testLibraryFragment>::@typeAlias::F
typeParameters
X
aliasedType: X Function(X)
''');
}
test_class_typeParameters_defaultType_genericFunctionType_both() async {
var library = await buildLibrary(r'''
class A<X extends X Function(X)> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @8
bound: X Function(X)
defaultType: dynamic Function(Never)
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: X Function(X)
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_typeParameters_defaultType_genericFunctionType_contravariant() async {
var library = await buildLibrary(r'''
class A<X extends void Function(X)> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @8
bound: void Function(X)
defaultType: void Function(Never)
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: void Function(X)
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_typeParameters_defaultType_genericFunctionType_covariant() async {
var library = await buildLibrary(r'''
class A<X extends X Function()> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @8
bound: X Function()
defaultType: dynamic Function()
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: X Function()
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_typeParameters_defaultType_genericFunctionType_covariant_legacy() async {
var library = await buildLibrary(r'''
class A<X extends X Function()> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @8
bound: X Function()
defaultType: dynamic Function()
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
X @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
X
bound: X Function()
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_typeParameters_defaultType_typeAlias_interface_contravariant() async {
var library = await buildLibrary(r'''
typedef A<X> = List<void Function(X)>;
class B<X extends A<X>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class B @46
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @48
bound: List<void Function(X)>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
X
defaultType: List<void Function(Never)>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
Never
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
typeParameters
contravariant X @10
defaultType: dynamic
aliasedType: List<void Function(X)>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @46
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
X @48
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
element: <testLibrary>::@typeAlias::A
typeParameters
X @10
element: <not-implemented>
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
X
bound: List<void Function(X)>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
typeAliases
A
firstFragment: <testLibraryFragment>::@typeAlias::A
typeParameters
X
aliasedType: List<void Function(X)>
''');
}
test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
var library = await buildLibrary(r'''
typedef A<X> = Map<X, int>;
class B<X extends A<X>> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class B @35
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant X @37
bound: Map<X, int>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
X
defaultType: Map<dynamic, int>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
typeParameters
covariant X @10
defaultType: dynamic
aliasedType: Map<X, int>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class B @35
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
X @37
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
typeAliases
A @8
reference: <testLibraryFragment>::@typeAlias::A
element: <testLibrary>::@typeAlias::A
typeParameters
X @10
element: <not-implemented>
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
X
bound: Map<X, int>
alias: <testLibraryFragment>::@typeAlias::A
typeArguments
X
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
typeAliases
A
firstFragment: <testLibraryFragment>::@typeAlias::A
typeParameters
X
aliasedType: Map<X, int>
''');
}
test_class_typeParameters_f_bound_complex() async {
var library = await buildLibrary('class C<T extends List<U>, U> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: List<U>
defaultType: List<dynamic>
covariant U @27
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @27
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: List<U>
U
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_f_bound_simple() async {
var library = await buildLibrary('class C<T extends U, U> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: U
defaultType: dynamic
covariant U @21
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
U @21
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: U
U
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_missingName() async {
var library = await buildLibrary(r'''
class A<T,> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
covariant @10
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
<null-name>
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_class_typeParameters_variance_contravariant() async {
var library = await buildLibrary('class C<in T> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
contravariant T @11
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @11
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_variance_covariant() async {
var library = await buildLibrary('class C<out T> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @12
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @12
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_variance_invariant() async {
var library = await buildLibrary('class C<inout T> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
invariant T @14
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @14
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_class_typeParameters_variance_multiple() async {
var library = await buildLibrary('class C<inout T, in U, out V> {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
invariant T @14
defaultType: dynamic
contravariant U @20
defaultType: dynamic
covariant V @27
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @14
element: <not-implemented>
U @20
element: <not-implemented>
V @27
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
U
V
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_classAlias() async {
var library = await buildLibrary('''
class C = D with E, F, G;
class D {}
class E {}
class F {}
class G {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
mixins
E
F
G
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @32
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @43
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
class F @54
reference: <testLibraryFragment>::@class::F
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::F::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::F
class G @65
reference: <testLibraryFragment>::@class::G
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::G::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::G
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @32
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @43
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
class F @54
reference: <testLibraryFragment>::@class::F
element: <testLibrary>::@class::F
constructors
synthetic new
reference: <testLibraryFragment>::@class::F::@constructor::new
element: <testLibraryFragment>::@class::F::@constructor::new#element
typeName: F
class G @65
reference: <testLibraryFragment>::@class::G
element: <testLibrary>::@class::G
constructors
synthetic new
reference: <testLibraryFragment>::@class::G::@constructor::new
element: <testLibraryFragment>::@class::G::@constructor::new#element
typeName: G
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
mixins
E
F
G
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
class F
reference: <testLibrary>::@class::F
firstFragment: <testLibraryFragment>::@class::F
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::F::@constructor::new
class G
reference: <testLibrary>::@class::G
firstFragment: <testLibraryFragment>::@class::G
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::G::@constructor::new
''');
}
test_classAlias_abstract() async {
var library = await buildLibrary('''
abstract class C = D with E;
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract class alias C @15
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @35
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @46
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @15
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @35
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @46
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
abstract class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_base() async {
var library = await buildLibrary('''
base class C = Object with M;
mixin M {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
base class alias C @11
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @36
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @11
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @36
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
base class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: Object
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_constructors_beforeOtherProperties() async {
// https://github.com/dart-lang/sdk/issues/57035
var library = await buildLibrary('''
abstract mixin class A {}
mixin M {}
class X = A with M;
''');
var X = library.getClass('X')!;
expect(X.constructors, hasLength(1));
}
test_classAlias_constructors_default() async {
var library = await buildLibrary('''
class A {}
mixin class M {}
class X = A with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
mixin class M @23
reference: <testLibraryFragment>::@class::M
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M
class alias X @34
reference: <testLibraryFragment>::@class::X
enclosingElement3: <testLibraryFragment>
supertype: A
mixins
M
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::X::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::X
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class M @23
reference: <testLibraryFragment>::@class::M
element: <testLibrary>::@class::M
constructors
synthetic new
reference: <testLibraryFragment>::@class::M::@constructor::new
element: <testLibraryFragment>::@class::M::@constructor::new#element
typeName: M
class X @34
reference: <testLibraryFragment>::@class::X
element: <testLibrary>::@class::X
constructors
synthetic new
reference: <testLibraryFragment>::@class::X::@constructor::new
element: <testLibraryFragment>::@class::X::@constructor::new#element
typeName: X
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixin class M
reference: <testLibrary>::@class::M
firstFragment: <testLibraryFragment>::@class::M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M::@constructor::new
class alias X
reference: <testLibrary>::@class::X
firstFragment: <testLibraryFragment>::@class::X
supertype: A
mixins
M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::X::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_classAlias_constructors_dependencies() async {
var library = await buildLibrary('''
class A {
A(int i);
}
mixin class M1 {}
mixin class M2 {}
class C2 = C1 with M2;
class C1 = A with M1;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
@12
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional i @18
type: int
mixin class M1 @36
reference: <testLibraryFragment>::@class::M1
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M1::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M1
mixin class M2 @54
reference: <testLibraryFragment>::@class::M2
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M2::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M2
class alias C2 @67
reference: <testLibraryFragment>::@class::C2
enclosingElement3: <testLibraryFragment>
supertype: C1
mixins
M2
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C2::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C2
parameters
requiredPositional i @-1
type: int
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: i @-1
staticElement: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i
element: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::C1::@constructor::new
element: <testLibraryFragment>::@class::C1::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::C1::@constructor::new
class alias C1 @90
reference: <testLibraryFragment>::@class::C1
enclosingElement3: <testLibraryFragment>
supertype: A
mixins
M1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C1::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C1
parameters
requiredPositional i @-1
type: int
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: i @-1
staticElement: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i
element: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 12
formalParameters
i @18
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::i#element
class M1 @36
reference: <testLibraryFragment>::@class::M1
element: <testLibrary>::@class::M1
constructors
synthetic new
reference: <testLibraryFragment>::@class::M1::@constructor::new
element: <testLibraryFragment>::@class::M1::@constructor::new#element
typeName: M1
class M2 @54
reference: <testLibraryFragment>::@class::M2
element: <testLibrary>::@class::M2
constructors
synthetic new
reference: <testLibraryFragment>::@class::M2::@constructor::new
element: <testLibraryFragment>::@class::M2::@constructor::new#element
typeName: M2
class C2 @67
reference: <testLibraryFragment>::@class::C2
element: <testLibrary>::@class::C2
constructors
synthetic new
reference: <testLibraryFragment>::@class::C2::@constructor::new
element: <testLibraryFragment>::@class::C2::@constructor::new#element
typeName: C2
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: i @-1
staticElement: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i
element: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::C1::@constructor::new
element: <testLibraryFragment>::@class::C1::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::C1::@constructor::new
class C1 @90
reference: <testLibraryFragment>::@class::C1
element: <testLibrary>::@class::C1
constructors
synthetic new
reference: <testLibraryFragment>::@class::C1::@constructor::new
element: <testLibraryFragment>::@class::C1::@constructor::new#element
typeName: C1
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: i @-1
staticElement: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i
element: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional i
type: int
mixin class M1
reference: <testLibrary>::@class::M1
firstFragment: <testLibraryFragment>::@class::M1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M1::@constructor::new
mixin class M2
reference: <testLibrary>::@class::M2
firstFragment: <testLibraryFragment>::@class::M2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M2::@constructor::new
class alias C2
reference: <testLibrary>::@class::C2
firstFragment: <testLibraryFragment>::@class::C2
supertype: C1
mixins
M2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C2::@constructor::new
formalParameters
requiredPositional i
type: int
superConstructor: <testLibraryFragment>::@class::C1::@constructor::new#element
class alias C1
reference: <testLibrary>::@class::C1
firstFragment: <testLibraryFragment>::@class::C1
supertype: A
mixins
M1
M1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C1::@constructor::new
formalParameters
requiredPositional i
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_classAlias_constructors_optionalParameters() async {
var library = await buildLibrary('''
class A {
A.c1(int a);
A.c2(int a, [int? b, int c = 0]);
A.c3(int a, {int? b, int c = 0});
}
mixin M {}
class C = A with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
c1 @14
reference: <testLibraryFragment>::@class::A::@constructor::c1
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 13
nameEnd: 16
parameters
requiredPositional a @21
type: int
c2 @29
reference: <testLibraryFragment>::@class::A::@constructor::c2
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 31
parameters
requiredPositional a @36
type: int
optionalPositional default b @45
type: int?
optionalPositional default c @52
type: int
constantInitializer
IntegerLiteral
literal: 0 @56
staticType: int
c3 @65
reference: <testLibraryFragment>::@class::A::@constructor::c3
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 64
nameEnd: 67
parameters
requiredPositional a @72
type: int
optionalNamed default b @81
reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::b
type: int?
optionalNamed default c @88
reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::c
type: int
constantInitializer
IntegerLiteral
literal: 0 @92
staticType: int
class alias C @118
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: A
mixins
M
constructors
synthetic c1 @-1
reference: <testLibraryFragment>::@class::C::@constructor::c1
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional a @-1
type: int
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: c1 @-1
staticElement: <testLibraryFragment>::@class::A::@constructor::c1
element: <testLibraryFragment>::@class::A::@constructor::c1#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: a @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::c1
element: <testLibraryFragment>::@class::A::@constructor::c1#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::c1
synthetic c2 @-1
reference: <testLibraryFragment>::@class::C::@constructor::c2
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional a @-1
type: int
optionalPositional default b @-1
type: int?
optionalPositional default c @-1
type: int
constantInitializer
IntegerLiteral
literal: 0 @56
staticType: int
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: c2 @-1
staticElement: <testLibraryFragment>::@class::A::@constructor::c2
element: <testLibraryFragment>::@class::A::@constructor::c2#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: a @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a#element
staticType: int
SimpleIdentifier
token: b @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b#element
staticType: int?
SimpleIdentifier
token: c @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::c2
element: <testLibraryFragment>::@class::A::@constructor::c2#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::c2
synthetic c3 @-1
reference: <testLibraryFragment>::@class::C::@constructor::c3
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional a @-1
type: int
optionalNamed default b @-1
reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
type: int?
optionalNamed default c @-1
reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
type: int
constantInitializer
IntegerLiteral
literal: 0 @92
staticType: int
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: c3 @-1
staticElement: <testLibraryFragment>::@class::A::@constructor::c3
element: <testLibraryFragment>::@class::A::@constructor::c3#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: a @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a#element
staticType: int
SimpleIdentifier
token: b @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b#element
staticType: int?
SimpleIdentifier
token: c @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::c3
element: <testLibraryFragment>::@class::A::@constructor::c3#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::c3
mixins
mixin M @106
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
c1 @14
reference: <testLibraryFragment>::@class::A::@constructor::c1
element: <testLibraryFragment>::@class::A::@constructor::c1#element
typeName: A
typeNameOffset: 12
periodOffset: 13
formalParameters
a @21
element: <testLibraryFragment>::@class::A::@constructor::c1::@parameter::a#element
c2 @29
reference: <testLibraryFragment>::@class::A::@constructor::c2
element: <testLibraryFragment>::@class::A::@constructor::c2#element
typeName: A
typeNameOffset: 27
periodOffset: 28
formalParameters
a @36
element: <testLibraryFragment>::@class::A::@constructor::c2::@parameter::a#element
default b @45
element: <testLibraryFragment>::@class::A::@constructor::c2::@parameter::b#element
default c @52
element: <testLibraryFragment>::@class::A::@constructor::c2::@parameter::c#element
c3 @65
reference: <testLibraryFragment>::@class::A::@constructor::c3
element: <testLibraryFragment>::@class::A::@constructor::c3#element
typeName: A
typeNameOffset: 63
periodOffset: 64
formalParameters
a @72
element: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::a#element
default b @81
reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::b
element: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::b#element
default c @88
reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::c
element: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::c#element
class C @118
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic c1
reference: <testLibraryFragment>::@class::C::@constructor::c1
element: <testLibraryFragment>::@class::C::@constructor::c1#element
typeName: C
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: c1 @-1
staticElement: <testLibraryFragment>::@class::A::@constructor::c1
element: <testLibraryFragment>::@class::A::@constructor::c1#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: a @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::c1
element: <testLibraryFragment>::@class::A::@constructor::c1#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::c1
synthetic c2
reference: <testLibraryFragment>::@class::C::@constructor::c2
element: <testLibraryFragment>::@class::C::@constructor::c2#element
typeName: C
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a#element
default <null-name>
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b#element
default <null-name>
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: c2 @-1
staticElement: <testLibraryFragment>::@class::A::@constructor::c2
element: <testLibraryFragment>::@class::A::@constructor::c2#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: a @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a#element
staticType: int
SimpleIdentifier
token: b @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b#element
staticType: int?
SimpleIdentifier
token: c @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c
element: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::c2
element: <testLibraryFragment>::@class::A::@constructor::c2#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::c2
synthetic c3
reference: <testLibraryFragment>::@class::C::@constructor::c3
element: <testLibraryFragment>::@class::C::@constructor::c3#element
typeName: C
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a#element
default <null-name>
reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b#element
default <null-name>
reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: c3 @-1
staticElement: <testLibraryFragment>::@class::A::@constructor::c3
element: <testLibraryFragment>::@class::A::@constructor::c3#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: a @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a#element
staticType: int
SimpleIdentifier
token: b @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b#element
staticType: int?
SimpleIdentifier
token: c @-1
staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
element: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c#element
staticType: int
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::c3
element: <testLibraryFragment>::@class::A::@constructor::c3#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::c3
mixins
mixin M @106
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
c1
firstFragment: <testLibraryFragment>::@class::A::@constructor::c1
formalParameters
requiredPositional a
type: int
c2
firstFragment: <testLibraryFragment>::@class::A::@constructor::c2
formalParameters
requiredPositional a
type: int
optionalPositional b
type: int?
optionalPositional c
type: int
c3
firstFragment: <testLibraryFragment>::@class::A::@constructor::c3
formalParameters
requiredPositional a
type: int
optionalNamed b
firstFragment: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::b
type: int?
optionalNamed c
firstFragment: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::c
type: int
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: A
mixins
M
constructors
synthetic c1
firstFragment: <testLibraryFragment>::@class::C::@constructor::c1
formalParameters
requiredPositional a
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::c1#element
synthetic c2
firstFragment: <testLibraryFragment>::@class::C::@constructor::c2
formalParameters
requiredPositional a
type: int
optionalPositional b
type: int?
optionalPositional c
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::c2#element
synthetic c3
firstFragment: <testLibraryFragment>::@class::C::@constructor::c3
formalParameters
requiredPositional a
type: int
optionalNamed b
firstFragment: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
type: int?
optionalNamed c
firstFragment: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
type: int
superConstructor: <testLibraryFragment>::@class::A::@constructor::c3#element
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_constructors_requiredParameters() async {
var library = await buildLibrary('''
class A<T extends num> {
A(T x, T y);
}
mixin M {}
class B<E extends num> = A<E> with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: num
defaultType: num
constructors
@27
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional x @31
type: T
requiredPositional y @36
type: T
class alias B @61
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant E @63
bound: num
defaultType: num
supertype: A<E>
mixins
M
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional x @-1
type: E
requiredPositional y @-1
type: E
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x#element
staticType: E
SimpleIdentifier
token: y @-1
staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y#element
staticType: E
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: E}
mixins
mixin M @49
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @8
element: <not-implemented>
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 27
formalParameters
x @31
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::x#element
y @36
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::y#element
class B @61
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
E @63
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
formalParameters
<null-name>
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x#element
<null-name>
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x#element
staticType: E
SimpleIdentifier
token: y @-1
staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y
element: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y#element
staticType: E
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: E}
mixins
mixin M @49
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
bound: num
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional x
type: T
requiredPositional y
type: T
class alias B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
E
bound: num
supertype: A<E>
mixins
M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
formalParameters
requiredPositional x
type: E
requiredPositional y
type: E
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_documented() async {
var library = await buildLibrary('''
/**
* Docs
*/
class C = D with E;
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @22
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * Docs\n */
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @43
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @54
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @22
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @43
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @54
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_documented_tripleSlash() async {
var library = await buildLibrary('''
/// aaa
/// b
/// cc
class C = D with E;
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @27
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /// aaa\n/// b\n/// cc
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @48
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @59
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @27
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @48
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @59
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /// aaa\n/// b\n/// cc
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_documented_withLeadingNonDocumentation() async {
var library = await buildLibrary('''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
class C = D with E;
class D {}
class E {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @66
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
documentationComment: /**\n * Docs\n */
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @87
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @98
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @66
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @87
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @98
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
documentationComment: /**\n * Docs\n */
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_final() async {
var library = await buildLibrary('''
final class C = Object with M;
mixin M {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
final class alias C @12
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @37
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @12
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @37
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
final class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: Object
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_generic() async {
var library = await buildLibrary('''
class Z = A with B<int>, C<double>;
class A {}
class B<B1> {}
class C<C1> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias Z @6
reference: <testLibraryFragment>::@class::Z
enclosingElement3: <testLibraryFragment>
supertype: A
mixins
B<int>
C<double>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::Z::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::Z
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
class A @42
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @53
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant B1 @55
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
class C @68
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant C1 @70
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class Z @6
reference: <testLibraryFragment>::@class::Z
element: <testLibrary>::@class::Z
constructors
synthetic new
reference: <testLibraryFragment>::@class::Z::@constructor::new
element: <testLibraryFragment>::@class::Z::@constructor::new#element
typeName: Z
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
class A @42
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @53
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
B1 @55
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class C @68
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
C1 @70
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
classes
class alias Z
reference: <testLibrary>::@class::Z
firstFragment: <testLibraryFragment>::@class::Z
supertype: A
mixins
B<int>
C<double>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::Z::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
B1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
C1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
''');
}
test_classAlias_interface() async {
var library = await buildLibrary('''
interface class C = Object with M;
mixin M {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
interface class alias C @16
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @41
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @16
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @41
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
interface class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: Object
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_invalid_extendsEnum() async {
newFile('$testPackageLibPath/a.dart', r'''
enum E { v }
mixin M {}
''');
var library = await buildLibrary('''
import 'a.dart';
class A = E with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
class alias A @23
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
classes
class A @23
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
classes
class alias A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
supertype: Object
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_classAlias_invalid_extendsMixin() async {
var library = await buildLibrary('''
mixin M1 {}
mixin M2 {}
class A = M1 with M2;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias A @30
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M2
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M1 @6
reference: <testLibraryFragment>::@mixin::M1
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
mixin M2 @18
reference: <testLibraryFragment>::@mixin::M2
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @30
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M1 @6
reference: <testLibraryFragment>::@mixin::M1
element: <testLibrary>::@mixin::M1
mixin M2 @18
reference: <testLibraryFragment>::@mixin::M2
element: <testLibrary>::@mixin::M2
classes
class alias A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
supertype: Object
mixins
M2
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M1
reference: <testLibrary>::@mixin::M1
firstFragment: <testLibraryFragment>::@mixin::M1
superclassConstraints
Object
mixin M2
reference: <testLibrary>::@mixin::M2
firstFragment: <testLibraryFragment>::@mixin::M2
superclassConstraints
Object
''');
}
test_classAlias_mixin_class() async {
var library = await buildLibrary('''
mixin class C = Object with M;
mixin M {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
mixin class alias C @12
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @37
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @12
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @37
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
mixin class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: Object
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_notSimplyBounded_self() async {
var library = await buildLibrary('''
class C<T extends C> = D with E;
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
notSimplyBounded class alias C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
bound: C<dynamic>
defaultType: dynamic
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @39
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @50
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @39
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @50
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
bound: C<dynamic>
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_notSimplyBounded_simple_no_type_parameter_bound() async {
// If no bounds are specified, then the class is simply bounded by syntax
// alone, so there is no reason to assign it a slot.
var library = await buildLibrary('''
class C<T> = D with E;
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @29
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @40
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @29
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @40
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_notSimplyBounded_simple_non_generic() async {
// If no type parameters are specified, then the class is simply bounded, so
// there is no reason to assign it a slot.
var library = await buildLibrary('''
class C = D with E;
class D {}
class E {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @26
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @37
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @26
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @37
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
''');
}
test_classAlias_sealed() async {
var library = await buildLibrary('''
sealed class C = Object with M;
mixin M {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
abstract sealed class alias C @13
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: Object
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @38
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @13
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic const new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: dart:core::<fragment>::@class::Object::@constructor::new
element: dart:core::<fragment>::@class::Object::@constructor::new#element
mixins
mixin M @38
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
abstract sealed class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: Object
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_classAlias_with_const_constructors() async {
newFile('$testPackageLibPath/a.dart', r'''
class Base {
const Base._priv();
const Base();
const Base.named();
}
''');
var library = await buildLibrary('''
import "a.dart";
class M {}
class MixinApp = Base with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
class M @23
reference: <testLibraryFragment>::@class::M
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M
class alias MixinApp @34
reference: <testLibraryFragment>::@class::MixinApp
enclosingElement3: <testLibraryFragment>
supertype: Base
mixins
M
constructors
synthetic const @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
element: package:test/a.dart::<fragment>::@class::Base::@constructor::new#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
synthetic const named @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: named @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
element: package:test/a.dart::<fragment>::@class::Base::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
element: package:test/a.dart::<fragment>::@class::Base::@constructor::named#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
classes
class M @23
reference: <testLibraryFragment>::@class::M
element: <testLibrary>::@class::M
constructors
synthetic new
reference: <testLibraryFragment>::@class::M::@constructor::new
element: <testLibraryFragment>::@class::M::@constructor::new#element
typeName: M
class MixinApp @34
reference: <testLibraryFragment>::@class::MixinApp
element: <testLibrary>::@class::MixinApp
constructors
synthetic const new
reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
element: <testLibraryFragment>::@class::MixinApp::@constructor::new#element
typeName: MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
element: package:test/a.dart::<fragment>::@class::Base::@constructor::new#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
synthetic const named
reference: <testLibraryFragment>::@class::MixinApp::@constructor::named
element: <testLibraryFragment>::@class::MixinApp::@constructor::named#element
typeName: MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: named @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
element: package:test/a.dart::<fragment>::@class::Base::@constructor::named#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
element: package:test/a.dart::<fragment>::@class::Base::@constructor::named#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::named
classes
class M
reference: <testLibrary>::@class::M
firstFragment: <testLibraryFragment>::@class::M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M::@constructor::new
class alias MixinApp
reference: <testLibrary>::@class::MixinApp
firstFragment: <testLibraryFragment>::@class::MixinApp
supertype: Base
mixins
M
constructors
synthetic const new
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::new
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new#element
synthetic const named
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::named
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::named#element
''');
}
test_classAlias_with_forwarding_constructors() async {
newFile('$testPackageLibPath/a.dart', r'''
class Base {
bool x = true;
Base._priv();
Base();
Base.noArgs();
Base.requiredArg(x);
Base.positionalArg([bool x = true]);
Base.positionalArg2([this.x = true]);
Base.namedArg({int x = 42});
Base.namedArg2({this.x = true});
factory Base.fact() => Base();
factory Base.fact2() = Base.noArgs;
}
''');
var library = await buildLibrary('''
import "a.dart";
class M {}
class MixinApp = Base with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
class M @23
reference: <testLibraryFragment>::@class::M
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M
class alias MixinApp @34
reference: <testLibraryFragment>::@class::MixinApp
enclosingElement3: <testLibraryFragment>
supertype: Base
mixins
M
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
element: package:test/a.dart::<fragment>::@class::Base::@constructor::new#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
synthetic noArgs @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::noArgs
enclosingElement3: <testLibraryFragment>::@class::MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: noArgs @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
element: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
element: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
synthetic requiredArg @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
requiredPositional x @-1
type: dynamic
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: requiredArg @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x#element
staticType: dynamic
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
synthetic positionalArg @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
optionalPositional default x @-1
type: bool
constantInitializer
BooleanLiteral
literal: true @127
staticType: bool
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: positionalArg @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x#element
staticType: bool
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
synthetic positionalArg2 @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
optionalPositional default final x @-1
type: bool
constantInitializer
BooleanLiteral
literal: true @167
staticType: bool
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: positionalArg2 @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x#element
staticType: bool
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
synthetic namedArg @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
optionalNamed default x @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
type: int
constantInitializer
IntegerLiteral
literal: 42 @200
staticType: int
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: namedArg @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x#element
staticType: int
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
synthetic namedArg2 @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
optionalNamed default final x @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
type: bool
constantInitializer
BooleanLiteral
literal: true @233
staticType: bool
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: namedArg2 @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x#element
staticType: bool
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
classes
class M @23
reference: <testLibraryFragment>::@class::M
element: <testLibrary>::@class::M
constructors
synthetic new
reference: <testLibraryFragment>::@class::M::@constructor::new
element: <testLibraryFragment>::@class::M::@constructor::new#element
typeName: M
class MixinApp @34
reference: <testLibraryFragment>::@class::MixinApp
element: <testLibrary>::@class::MixinApp
constructors
synthetic new
reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
element: <testLibraryFragment>::@class::MixinApp::@constructor::new#element
typeName: MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
element: package:test/a.dart::<fragment>::@class::Base::@constructor::new#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
synthetic noArgs
reference: <testLibraryFragment>::@class::MixinApp::@constructor::noArgs
element: <testLibraryFragment>::@class::MixinApp::@constructor::noArgs#element
typeName: MixinApp
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: noArgs @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
element: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
element: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
synthetic requiredArg
reference: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg
element: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg#element
typeName: MixinApp
formalParameters
<null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: requiredArg @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x#element
staticType: dynamic
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
synthetic positionalArg
reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg#element
typeName: MixinApp
formalParameters
default <null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: positionalArg @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x#element
staticType: bool
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
synthetic positionalArg2
reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2#element
typeName: MixinApp
formalParameters
default <null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: positionalArg2 @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x#element
staticType: bool
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
synthetic namedArg
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg#element
typeName: MixinApp
formalParameters
default <null-name>
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: namedArg @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x#element
staticType: int
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
synthetic namedArg2
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2#element
typeName: MixinApp
formalParameters
default <null-name>
reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: namedArg2 @-1
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: x @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
element: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x#element
staticType: bool
rightParenthesis: ) @0
staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
element: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2#element
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
classes
class M
reference: <testLibrary>::@class::M
firstFragment: <testLibraryFragment>::@class::M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M::@constructor::new
class alias MixinApp
reference: <testLibrary>::@class::MixinApp
firstFragment: <testLibraryFragment>::@class::MixinApp
supertype: Base
mixins
M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::new
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new#element
synthetic noArgs
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::noArgs
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs#element
synthetic requiredArg
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg
formalParameters
requiredPositional x
type: dynamic
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg#element
synthetic positionalArg
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg
formalParameters
optionalPositional x
type: bool
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg#element
synthetic positionalArg2
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2
formalParameters
optionalPositional final x
type: bool
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2#element
synthetic namedArg
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg
formalParameters
optionalNamed x
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
type: int
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg#element
synthetic namedArg2
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2
formalParameters
optionalNamed final x
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
type: bool
superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2#element
''');
}
test_classAlias_with_forwarding_constructors_type_substitution() async {
var library = await buildLibrary('''
class Base<T> {
Base.ctor(T t, List<T> l);
}
class M {}
class MixinApp = Base with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class Base @6
reference: <testLibraryFragment>::@class::Base
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @11
defaultType: dynamic
constructors
ctor @23
reference: <testLibraryFragment>::@class::Base::@constructor::ctor
enclosingElement3: <testLibraryFragment>::@class::Base
periodOffset: 22
nameEnd: 27
parameters
requiredPositional t @30
type: T
requiredPositional l @41
type: List<T>
class M @53
reference: <testLibraryFragment>::@class::M
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M
class alias MixinApp @64
reference: <testLibraryFragment>::@class::MixinApp
enclosingElement3: <testLibraryFragment>
supertype: Base<dynamic>
mixins
M
constructors
synthetic ctor @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
requiredPositional t @-1
type: dynamic
requiredPositional l @-1
type: List<dynamic>
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: ctor @-1
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: t @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t#element
staticType: dynamic
SimpleIdentifier
token: l @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l#element
staticType: List<dynamic>
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::Base::@constructor::ctor
substitution: {T: dynamic}
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class Base @6
reference: <testLibraryFragment>::@class::Base
element: <testLibrary>::@class::Base
typeParameters
T @11
element: <not-implemented>
constructors
ctor @23
reference: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
typeName: Base
typeNameOffset: 18
periodOffset: 22
formalParameters
t @30
element: <testLibraryFragment>::@class::Base::@constructor::ctor::@parameter::t#element
l @41
element: <testLibraryFragment>::@class::Base::@constructor::ctor::@parameter::l#element
class M @53
reference: <testLibraryFragment>::@class::M
element: <testLibrary>::@class::M
constructors
synthetic new
reference: <testLibraryFragment>::@class::M::@constructor::new
element: <testLibraryFragment>::@class::M::@constructor::new#element
typeName: M
class MixinApp @64
reference: <testLibraryFragment>::@class::MixinApp
element: <testLibrary>::@class::MixinApp
constructors
synthetic ctor
reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor#element
typeName: MixinApp
formalParameters
<null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t#element
<null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: ctor @-1
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: t @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t#element
staticType: dynamic
SimpleIdentifier
token: l @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l#element
staticType: List<dynamic>
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::Base::@constructor::ctor
substitution: {T: dynamic}
classes
class Base
reference: <testLibrary>::@class::Base
firstFragment: <testLibraryFragment>::@class::Base
typeParameters
T
constructors
ctor
firstFragment: <testLibraryFragment>::@class::Base::@constructor::ctor
formalParameters
requiredPositional t
type: T
requiredPositional l
type: List<T>
class M
reference: <testLibrary>::@class::M
firstFragment: <testLibraryFragment>::@class::M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M::@constructor::new
class alias MixinApp
reference: <testLibrary>::@class::MixinApp
firstFragment: <testLibraryFragment>::@class::MixinApp
supertype: Base<dynamic>
mixins
M
constructors
synthetic ctor
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
formalParameters
requiredPositional t
type: dynamic
requiredPositional l
type: List<dynamic>
superConstructor: <testLibraryFragment>::@class::Base::@constructor::ctor#element
''');
}
test_classAlias_with_forwarding_constructors_type_substitution_complex() async {
var library = await buildLibrary('''
class Base<T> {
Base.ctor(T t, List<T> l);
}
class M {}
class MixinApp<U> = Base<List<U>> with M;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class Base @6
reference: <testLibraryFragment>::@class::Base
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @11
defaultType: dynamic
constructors
ctor @23
reference: <testLibraryFragment>::@class::Base::@constructor::ctor
enclosingElement3: <testLibraryFragment>::@class::Base
periodOffset: 22
nameEnd: 27
parameters
requiredPositional t @30
type: T
requiredPositional l @41
type: List<T>
class M @53
reference: <testLibraryFragment>::@class::M
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::M::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::M
class alias MixinApp @64
reference: <testLibraryFragment>::@class::MixinApp
enclosingElement3: <testLibraryFragment>
typeParameters
covariant U @73
defaultType: dynamic
supertype: Base<List<U>>
mixins
M
constructors
synthetic ctor @-1
reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
enclosingElement3: <testLibraryFragment>::@class::MixinApp
parameters
requiredPositional t @-1
type: List<U>
requiredPositional l @-1
type: List<List<U>>
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: ctor @-1
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: t @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t#element
staticType: List<U>
SimpleIdentifier
token: l @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l#element
staticType: List<List<U>>
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::Base::@constructor::ctor
substitution: {T: List<U>}
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class Base @6
reference: <testLibraryFragment>::@class::Base
element: <testLibrary>::@class::Base
typeParameters
T @11
element: <not-implemented>
constructors
ctor @23
reference: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
typeName: Base
typeNameOffset: 18
periodOffset: 22
formalParameters
t @30
element: <testLibraryFragment>::@class::Base::@constructor::ctor::@parameter::t#element
l @41
element: <testLibraryFragment>::@class::Base::@constructor::ctor::@parameter::l#element
class M @53
reference: <testLibraryFragment>::@class::M
element: <testLibrary>::@class::M
constructors
synthetic new
reference: <testLibraryFragment>::@class::M::@constructor::new
element: <testLibraryFragment>::@class::M::@constructor::new#element
typeName: M
class MixinApp @64
reference: <testLibraryFragment>::@class::MixinApp
element: <testLibrary>::@class::MixinApp
typeParameters
U @73
element: <not-implemented>
constructors
synthetic ctor
reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor#element
typeName: MixinApp
formalParameters
<null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t#element
<null-name>
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l#element
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
period: . @0
constructorName: SimpleIdentifier
token: ctor @-1
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
staticType: null
argumentList: ArgumentList
leftParenthesis: ( @0
arguments
SimpleIdentifier
token: t @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t#element
staticType: List<U>
SimpleIdentifier
token: l @-1
staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
element: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l#element
staticType: List<List<U>>
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
element: <testLibraryFragment>::@class::Base::@constructor::ctor#element
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::Base::@constructor::ctor
substitution: {T: List<U>}
classes
class Base
reference: <testLibrary>::@class::Base
firstFragment: <testLibraryFragment>::@class::Base
typeParameters
T
constructors
ctor
firstFragment: <testLibraryFragment>::@class::Base::@constructor::ctor
formalParameters
requiredPositional t
type: T
requiredPositional l
type: List<T>
class M
reference: <testLibrary>::@class::M
firstFragment: <testLibraryFragment>::@class::M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::M::@constructor::new
class alias MixinApp
reference: <testLibrary>::@class::MixinApp
firstFragment: <testLibraryFragment>::@class::MixinApp
typeParameters
U
supertype: Base<List<U>>
mixins
M
constructors
synthetic ctor
firstFragment: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
formalParameters
requiredPositional t
type: List<U>
requiredPositional l
type: List<List<U>>
superConstructor: <testLibraryFragment>::@class::Base::@constructor::ctor#element
''');
}
test_classAlias_with_mixin_members() async {
var library = await buildLibrary('''
class C = D with E;
class D {}
class E {
int get a => null;
void set b(int i) {}
void f() {}
int x;
}''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class alias C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
supertype: D
mixins
E
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @26
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
class E @37
reference: <testLibraryFragment>::@class::E
enclosingElement3: <testLibraryFragment>
fields
x @105
reference: <testLibraryFragment>::@class::E::@field::x
enclosingElement3: <testLibraryFragment>::@class::E
type: int
synthetic a @-1
reference: <testLibraryFragment>::@class::E::@field::a
enclosingElement3: <testLibraryFragment>::@class::E
type: int
synthetic b @-1
reference: <testLibraryFragment>::@class::E::@field::b
enclosingElement3: <testLibraryFragment>::@class::E
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::E::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::E
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::E::@getter::x
enclosingElement3: <testLibraryFragment>::@class::E
returnType: int
synthetic set x= @-1
reference: <testLibraryFragment>::@class::E::@setter::x
enclosingElement3: <testLibraryFragment>::@class::E
parameters
requiredPositional _x @-1
type: int
returnType: void
get a @51
reference: <testLibraryFragment>::@class::E::@getter::a
enclosingElement3: <testLibraryFragment>::@class::E
returnType: int
set b= @73
reference: <testLibraryFragment>::@class::E::@setter::b
enclosingElement3: <testLibraryFragment>::@class::E
parameters
requiredPositional i @79
type: int
returnType: void
methods
f @92
reference: <testLibraryFragment>::@class::E::@method::f
enclosingElement3: <testLibraryFragment>::@class::E
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
staticElement: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
superConstructor: <testLibraryFragment>::@class::D::@constructor::new
class D @26
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
class E @37
reference: <testLibraryFragment>::@class::E
element: <testLibrary>::@class::E
fields
x @105
reference: <testLibraryFragment>::@class::E::@field::x
element: <testLibraryFragment>::@class::E::@field::x#element
getter2: <testLibraryFragment>::@class::E::@getter::x
setter2: <testLibraryFragment>::@class::E::@setter::x
synthetic a
reference: <testLibraryFragment>::@class::E::@field::a
element: <testLibraryFragment>::@class::E::@field::a#element
getter2: <testLibraryFragment>::@class::E::@getter::a
synthetic b
reference: <testLibraryFragment>::@class::E::@field::b
element: <testLibraryFragment>::@class::E::@field::b#element
setter2: <testLibraryFragment>::@class::E::@setter::b
constructors
synthetic new
reference: <testLibraryFragment>::@class::E::@constructor::new
element: <testLibraryFragment>::@class::E::@constructor::new#element
typeName: E
getters
synthetic get x
reference: <testLibraryFragment>::@class::E::@getter::x
element: <testLibraryFragment>::@class::E::@getter::x#element
get a @51
reference: <testLibraryFragment>::@class::E::@getter::a
element: <testLibraryFragment>::@class::E::@getter::a#element
setters
synthetic set x
reference: <testLibraryFragment>::@class::E::@setter::x
element: <testLibraryFragment>::@class::E::@setter::x#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::E::@setter::x::@parameter::_x#element
set b @73
reference: <testLibraryFragment>::@class::E::@setter::b
element: <testLibraryFragment>::@class::E::@setter::b#element
formalParameters
i @79
element: <testLibraryFragment>::@class::E::@setter::b::@parameter::i#element
methods
f @92
reference: <testLibraryFragment>::@class::E::@method::f
element: <testLibraryFragment>::@class::E::@method::f#element
classes
class alias C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: D
mixins
E
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::D::@constructor::new#element
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
class E
reference: <testLibrary>::@class::E
firstFragment: <testLibraryFragment>::@class::E
fields
x
firstFragment: <testLibraryFragment>::@class::E::@field::x
type: int
getter: <testLibraryFragment>::@class::E::@getter::x#element
setter: <testLibraryFragment>::@class::E::@setter::x#element
synthetic a
firstFragment: <testLibraryFragment>::@class::E::@field::a
type: int
getter: <testLibraryFragment>::@class::E::@getter::a#element
synthetic b
firstFragment: <testLibraryFragment>::@class::E::@field::b
type: int
setter: <testLibraryFragment>::@class::E::@setter::b#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::E::@constructor::new
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::E::@getter::x
get a
firstFragment: <testLibraryFragment>::@class::E::@getter::a
setters
synthetic set x
firstFragment: <testLibraryFragment>::@class::E::@setter::x
formalParameters
requiredPositional _x
type: int
set b
firstFragment: <testLibraryFragment>::@class::E::@setter::b
formalParameters
requiredPositional i
type: int
methods
f
reference: <testLibrary>::@class::E::@method::f
firstFragment: <testLibraryFragment>::@class::E::@method::f
''');
}
test_classes() async {
var library = await buildLibrary('class C {} class D {}');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
class D @17
reference: <testLibraryFragment>::@class::D
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::D::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::D
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
class D @17
reference: <testLibraryFragment>::@class::D
element: <testLibrary>::@class::D
constructors
synthetic new
reference: <testLibraryFragment>::@class::D::@constructor::new
element: <testLibraryFragment>::@class::D::@constructor::new#element
typeName: D
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
class D
reference: <testLibrary>::@class::D
firstFragment: <testLibraryFragment>::@class::D
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::D::@constructor::new
''');
}
test_implicitConstructor_named_const() async {
var library = await buildLibrary('''
class C {
final Object x;
const C.named(this.x);
}
const x = C.named(42);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
final x @25
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: Object
constructors
const named @38
reference: <testLibraryFragment>::@class::C::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::C
periodOffset: 37
nameEnd: 43
parameters
requiredPositional final this.x @49
type: Object
field: <testLibraryFragment>::@class::C::@field::x
accessors
synthetic get x @-1
reference: <testLibraryFragment>::@class::C::@getter::x
enclosingElement3: <testLibraryFragment>::@class::C
returnType: Object
topLevelVariables
static const x @61
reference: <testLibraryFragment>::@topLevelVariable::x
enclosingElement3: <testLibraryFragment>
type: C
shouldUseTypeForInitializerInference: false
constantInitializer
InstanceCreationExpression
constructorName: ConstructorName
type: NamedType
name: C @65
element: <testLibraryFragment>::@class::C
element2: <testLibrary>::@class::C
type: C
period: . @66
name: SimpleIdentifier
token: named @67
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
staticType: null
staticElement: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
argumentList: ArgumentList
leftParenthesis: ( @72
arguments
IntegerLiteral
literal: 42 @73
staticType: int
rightParenthesis: ) @75
staticType: C
accessors
synthetic static get x @-1
reference: <testLibraryFragment>::@getter::x
enclosingElement3: <testLibraryFragment>
returnType: C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
x @25
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
getter2: <testLibraryFragment>::@class::C::@getter::x
constructors
const named @38
reference: <testLibraryFragment>::@class::C::@constructor::named
element: <testLibraryFragment>::@class::C::@constructor::named#element
typeName: C
typeNameOffset: 36
periodOffset: 37
formalParameters
this.x @49
element: <testLibraryFragment>::@class::C::@constructor::named::@parameter::x#element
getters
synthetic get x
reference: <testLibraryFragment>::@class::C::@getter::x
element: <testLibraryFragment>::@class::C::@getter::x#element
topLevelVariables
hasInitializer x @61
reference: <testLibraryFragment>::@topLevelVariable::x
element: <testLibrary>::@topLevelVariable::x
getter2: <testLibraryFragment>::@getter::x
getters
synthetic get x
reference: <testLibraryFragment>::@getter::x
element: <testLibraryFragment>::@getter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
final x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: Object
getter: <testLibraryFragment>::@class::C::@getter::x#element
constructors
const named
firstFragment: <testLibraryFragment>::@class::C::@constructor::named
formalParameters
requiredPositional final x
type: Object
getters
synthetic get x
firstFragment: <testLibraryFragment>::@class::C::@getter::x
topLevelVariables
const hasInitializer x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: <testLibraryFragment>::@topLevelVariable::x
type: C
getter: <testLibraryFragment>::@getter::x#element
getters
synthetic static get x
firstFragment: <testLibraryFragment>::@getter::x
''');
}
test_invalid_setterParameter_fieldFormalParameter() async {
var library = await buildLibrary('''
class C {
int foo;
void set bar(this.foo) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
foo @16
reference: <testLibraryFragment>::@class::C::@field::foo
enclosingElement3: <testLibraryFragment>::@class::C
type: int
synthetic bar @-1
reference: <testLibraryFragment>::@class::C::@field::bar
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::C::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::C
returnType: int
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::C::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional _foo @-1
type: int
returnType: void
set bar= @32
reference: <testLibraryFragment>::@class::C::@setter::bar
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.foo @41
type: dynamic
field: <null>
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
foo @16
reference: <testLibraryFragment>::@class::C::@field::foo
element: <testLibraryFragment>::@class::C::@field::foo#element
getter2: <testLibraryFragment>::@class::C::@getter::foo
setter2: <testLibraryFragment>::@class::C::@setter::foo
synthetic bar
reference: <testLibraryFragment>::@class::C::@field::bar
element: <testLibraryFragment>::@class::C::@field::bar#element
setter2: <testLibraryFragment>::@class::C::@setter::bar
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
getters
synthetic get foo
reference: <testLibraryFragment>::@class::C::@getter::foo
element: <testLibraryFragment>::@class::C::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::C::@setter::foo
element: <testLibraryFragment>::@class::C::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::C::@setter::foo::@parameter::_foo#element
set bar @32
reference: <testLibraryFragment>::@class::C::@setter::bar
element: <testLibraryFragment>::@class::C::@setter::bar#element
formalParameters
this.foo @41
element: <testLibraryFragment>::@class::C::@setter::bar::@parameter::foo#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
foo
firstFragment: <testLibraryFragment>::@class::C::@field::foo
type: int
getter: <testLibraryFragment>::@class::C::@getter::foo#element
setter: <testLibraryFragment>::@class::C::@setter::foo#element
synthetic bar
firstFragment: <testLibraryFragment>::@class::C::@field::bar
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::bar#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::C::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::C::@setter::foo
formalParameters
requiredPositional _foo
type: int
set bar
firstFragment: <testLibraryFragment>::@class::C::@setter::bar
formalParameters
requiredPositional final foo
type: dynamic
''');
}
test_invalid_setterParameter_fieldFormalParameter_self() async {
var library = await buildLibrary('''
class C {
set x(this.x) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
fields
synthetic x @-1
reference: <testLibraryFragment>::@class::C::@field::x
enclosingElement3: <testLibraryFragment>::@class::C
type: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
accessors
set x= @16
reference: <testLibraryFragment>::@class::C::@setter::x
enclosingElement3: <testLibraryFragment>::@class::C
parameters
requiredPositional final this.x @23
type: dynamic
field: <null>
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
fields
synthetic x
reference: <testLibraryFragment>::@class::C::@field::x
element: <testLibraryFragment>::@class::C::@field::x#element
setter2: <testLibraryFragment>::@class::C::@setter::x
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
setters
set x @16
reference: <testLibraryFragment>::@class::C::@setter::x
element: <testLibraryFragment>::@class::C::@setter::x#element
formalParameters
this.x @23
element: <testLibraryFragment>::@class::C::@setter::x::@parameter::x#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
fields
synthetic x
firstFragment: <testLibraryFragment>::@class::C::@field::x
type: dynamic
setter: <testLibraryFragment>::@class::C::@setter::x#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
setters
set x
firstFragment: <testLibraryFragment>::@class::C::@setter::x
formalParameters
requiredPositional final x
type: dynamic
''');
}
test_unused_type_parameter() async {
var library = await buildLibrary('''
class C<T> {
void f() {}
}
C<int> c;
var v = c.f;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class C @6
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @8
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
methods
f @20
reference: <testLibraryFragment>::@class::C::@method::f
enclosingElement3: <testLibraryFragment>::@class::C
returnType: void
topLevelVariables
static c @36
reference: <testLibraryFragment>::@topLevelVariable::c
enclosingElement3: <testLibraryFragment>
type: C<int>
static v @43
reference: <testLibraryFragment>::@topLevelVariable::v
enclosingElement3: <testLibraryFragment>
type: void Function()
shouldUseTypeForInitializerInference: false
accessors
synthetic static get c @-1
reference: <testLibraryFragment>::@getter::c
enclosingElement3: <testLibraryFragment>
returnType: C<int>
synthetic static set c= @-1
reference: <testLibraryFragment>::@setter::c
enclosingElement3: <testLibraryFragment>
parameters
requiredPositional _c @-1
type: C<int>
returnType: void
synthetic static get v @-1
reference: <testLibraryFragment>::@getter::v
enclosingElement3: <testLibraryFragment>
returnType: void Function()
synthetic static set v= @-1
reference: <testLibraryFragment>::@setter::v
enclosingElement3: <testLibraryFragment>
parameters
requiredPositional _v @-1
type: void Function()
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class C @6
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
typeParameters
T @8
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
methods
f @20
reference: <testLibraryFragment>::@class::C::@method::f
element: <testLibraryFragment>::@class::C::@method::f#element
topLevelVariables
c @36
reference: <testLibraryFragment>::@topLevelVariable::c
element: <testLibrary>::@topLevelVariable::c
getter2: <testLibraryFragment>::@getter::c
setter2: <testLibraryFragment>::@setter::c
hasInitializer v @43
reference: <testLibraryFragment>::@topLevelVariable::v
element: <testLibrary>::@topLevelVariable::v
getter2: <testLibraryFragment>::@getter::v
setter2: <testLibraryFragment>::@setter::v
getters
synthetic get c
reference: <testLibraryFragment>::@getter::c
element: <testLibraryFragment>::@getter::c#element
synthetic get v
reference: <testLibraryFragment>::@getter::v
element: <testLibraryFragment>::@getter::v#element
setters
synthetic set c
reference: <testLibraryFragment>::@setter::c
element: <testLibraryFragment>::@setter::c#element
formalParameters
<null-name>
element: <testLibraryFragment>::@setter::c::@parameter::_c#element
synthetic set v
reference: <testLibraryFragment>::@setter::v
element: <testLibraryFragment>::@setter::v#element
formalParameters
<null-name>
element: <testLibraryFragment>::@setter::v::@parameter::_v#element
classes
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
methods
f
reference: <testLibrary>::@class::C::@method::f
firstFragment: <testLibraryFragment>::@class::C::@method::f
topLevelVariables
c
reference: <testLibrary>::@topLevelVariable::c
firstFragment: <testLibraryFragment>::@topLevelVariable::c
type: C<int>
getter: <testLibraryFragment>::@getter::c#element
setter: <testLibraryFragment>::@setter::c#element
hasInitializer v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: <testLibraryFragment>::@topLevelVariable::v
type: void Function()
getter: <testLibraryFragment>::@getter::v#element
setter: <testLibraryFragment>::@setter::v#element
getters
synthetic static get c
firstFragment: <testLibraryFragment>::@getter::c
synthetic static get v
firstFragment: <testLibraryFragment>::@getter::v
setters
synthetic static set c
firstFragment: <testLibraryFragment>::@setter::c
formalParameters
requiredPositional _c
type: C<int>
synthetic static set v
firstFragment: <testLibraryFragment>::@setter::v
formalParameters
requiredPositional _v
type: void Function()
''');
}
}
abstract class ClassElementTest_augmentation extends ElementsBaseTest {
test_add_augment() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
class A {
void foo() {}
}
augment class A {
void bar() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
class A @28
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::A
methods
foo @39
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::A
returnType: void
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
<testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
augment class A @65
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
methods
bar @76
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @28
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new#element
typeName: A
methods
foo @39
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
element: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo#element
class A @65
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A
methods
bar @76
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
bar
reference: <testLibrary>::@class::A::@method::bar
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
''');
}
test_augmentation_constField_hasConstConstructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
static const int foo = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
const A();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
const @33
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
static const foo @58
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @64
staticType: int
accessors
synthetic static get foo @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 33
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo @58
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
getters
synthetic get foo
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
static const hasInitializer foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic static get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
''');
}
test_augmentation_constField_noConstConstructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
static const int foo = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
static const foo @58
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @64
staticType: int
accessors
synthetic static get foo @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo @58
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
getters
synthetic get foo
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
static const hasInitializer foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic static get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
''');
}
test_augmentation_finalField_hasConstConstructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
final int foo = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
const A();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
const @33
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
final foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @57
staticType: int
accessors
synthetic get foo @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 33
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
getters
synthetic get foo
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final hasInitializer foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
''');
}
test_augmentation_finalField_noConstConstructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
final int foo = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
final foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
accessors
synthetic get foo @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
getters
synthetic get foo
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final hasInitializer foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
''');
}
test_augmentationTarget() async {
newFile('$testPackageLibPath/a1.dart', r'''
part of 'test.dart';
part 'a11.dart';
part 'a12.dart';
augment class A {}
''');
newFile('$testPackageLibPath/a11.dart', r'''
part of 'a1.dart';
augment class A {}
''');
newFile('$testPackageLibPath/a12.dart', r'''
part of 'a1.dart';
augment class A {}
''');
newFile('$testPackageLibPath/a2.dart', r'''
part of 'test.dart';
part 'a21.dart';
part 'a22.dart';
augment class A {}
''');
newFile('$testPackageLibPath/a21.dart', r'''
part of 'a2.dart';
augment class A {}
''');
newFile('$testPackageLibPath/a22.dart', r'''
part of 'a2.dart';
augment class A {}
''');
configuration.withExportScope = true;
var library = await buildLibrary(r'''
part 'a1.dart';
part 'a2.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a1.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a1.dart
part_1
uri: package:test/a2.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a2.dart
classes
class A @38
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a1.dart
enclosingElement3: <testLibraryFragment>
parts
part_2
uri: package:test/a11.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
unit: <testLibrary>::@fragment::package:test/a11.dart
part_3
uri: package:test/a12.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
unit: <testLibrary>::@fragment::package:test/a12.dart
classes
augment class A @69
reference: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a11.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
classes
augment class A @33
reference: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a11.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
augmentation: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a12.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
classes
augment class A @33
reference: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a12.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
augmentation: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a2.dart
enclosingElement3: <testLibraryFragment>
parts
part_4
uri: package:test/a21.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
unit: <testLibrary>::@fragment::package:test/a21.dart
part_5
uri: package:test/a22.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
unit: <testLibrary>::@fragment::package:test/a22.dart
classes
augment class A @69
reference: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
augmentation: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a21.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
classes
augment class A @33
reference: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a21.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
augmentation: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a22.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
classes
augment class A @33
reference: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a22.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
exportedReferences
declared <testLibraryFragment>::@class::A
exportNamespace
A: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a1.dart
classes
class A @38
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a1.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/a11.dart
classes
class A @69
reference: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a11.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a1.dart
previousFragment: <testLibrary>::@fragment::package:test/a1.dart
nextFragment: <testLibrary>::@fragment::package:test/a12.dart
classes
class A @33
reference: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
nextFragment: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a12.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a1.dart
previousFragment: <testLibrary>::@fragment::package:test/a11.dart
nextFragment: <testLibrary>::@fragment::package:test/a2.dart
classes
class A @33
reference: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
nextFragment: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a2.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a12.dart
nextFragment: <testLibrary>::@fragment::package:test/a21.dart
classes
class A @69
reference: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
nextFragment: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a21.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a2.dart
previousFragment: <testLibrary>::@fragment::package:test/a2.dart
nextFragment: <testLibrary>::@fragment::package:test/a22.dart
classes
class A @33
reference: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
nextFragment: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a22.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a2.dart
previousFragment: <testLibrary>::@fragment::package:test/a21.dart
classes
class A @33
reference: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
exportedReferences
declared <testLibraryFragment>::@class::A
exportNamespace
A: <testLibraryFragment>::@class::A
''');
}
test_augmentationTarget_augmentationThenDeclaration() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
void foo1() {}
}
class A {
void foo2() {}
}
augment class A {
void foo3() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
methods
foo1 @47
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
returnType: void
class A @66
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::A
methods
foo2 @77
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::A
returnType: void
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
augment class A @104
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
methods
foo3 @115
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
element: <testLibrary>::@class::A::@def::0
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new#element
typeName: A
methods
foo1 @47
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1#element
class A @66
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
element: <testLibrary>::@class::A::@def::1
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new#element
typeName: A
methods
foo2 @77
reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2#element
class A @104
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
element: <testLibrary>::@class::A::@def::1
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A
methods
foo3 @115
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3#element
classes
class A
reference: <testLibrary>::@class::A::@def::0
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
methods
foo1
reference: <testLibrary>::@class::A::@def::0::@method::foo1
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
class A
reference: <testLibrary>::@class::A::@def::1
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
methods
foo2
reference: <testLibrary>::@class::A::@def::1::@method::foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
foo3
reference: <testLibrary>::@class::A::@def::1::@method::foo3
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
''');
}
test_augmentationTarget_no2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment class A {
void foo1() {}
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment class A {
void foo2() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class B {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class B @21
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
classes
augment class A @50
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo1 @61
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
classes
augment class A @32
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo2 @43
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class B @21
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @50
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new#element
typeName: A
methods
foo1 @61
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1#element
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @32
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo2 @43
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
element: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2#element
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
methods
foo1
reference: <testLibrary>::@class::A::@method::foo1
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
foo2
reference: <testLibrary>::@class::A::@method::foo2
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
''');
}
test_augmented_constructor_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A.foo();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 54
augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo#element
typeName: A
typeNameOffset: 49
periodOffset: 50
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_constructor_augment_getter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A.foo();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
accessors
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 54
augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
getters
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo#element
typeName: A
typeNameOffset: 49
periodOffset: 50
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_augmented_constructor_augment_method() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A.foo();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
methods
<testLibraryFragment>::@class::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 54
augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo#element
typeName: A
typeNameOffset: 49
periodOffset: 50
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_constructor_augment_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A.foo();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
set foo(int _) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
accessors
set foo= @31
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @39
type: int
returnType: void
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
accessors
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 54
augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
setter2: <testLibraryFragment>::@class::A::@setter::foo
setters
set foo @31
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @39
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
augment foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo#element
typeName: A
typeNameOffset: 49
periodOffset: 50
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_constructors_add_named() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
A.named();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
named @43
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 42
nameEnd: 48
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
named @43
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named#element
typeName: A
typeNameOffset: 41
periodOffset: 42
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
named
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
''');
}
test_augmented_constructors_add_named_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T2> {
A.named(T2 a);
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T1> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T1 @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
augmented
constructors
ConstructorMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
augmentationSubstitution: {T2: T1}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
constructors
named @47
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 46
nameEnd: 52
parameters
requiredPositional a @56
type: T2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T1 @23
element: <not-implemented>
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T2 @37
element: <not-implemented>
constructors
named @47
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named#element
typeName: A
typeNameOffset: 45
periodOffset: 46
formalParameters
a @56
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named::@parameter::a#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T1
constructors
named
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
formalParameters
requiredPositional a
type: T2
''');
}
test_augmented_constructors_add_named_hasUnnamed() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
A.named();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
@27
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
named @43
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 42
nameEnd: 48
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 27
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
named @43
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named#element
typeName: A
typeNameOffset: 41
periodOffset: 42
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
named
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
''');
}
test_augmented_constructors_add_unnamed() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
A();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
@41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
new
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new#element
typeName: A
typeNameOffset: 41
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
''');
}
test_augmented_constructors_add_unnamed_hasNamed() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
A();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
named @29
reference: <testLibraryFragment>::@class::A::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 34
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
<testLibraryFragment>::@class::A::@constructor::named
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
@41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
named @29
reference: <testLibraryFragment>::@class::A::@constructor::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 27
periodOffset: 28
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
new
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new#element
typeName: A
typeNameOffset: 41
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
named
firstFragment: <testLibraryFragment>::@class::A::@constructor::named
new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
''');
}
test_augmented_constructors_add_useFieldFormal() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
A.named(this.f);
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
final int f;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
final f @37
reference: <testLibraryFragment>::@class::A::@field::f
enclosingElement3: <testLibraryFragment>::@class::A
type: int
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::A::@getter::f
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
augmented
fields
<testLibraryFragment>::@class::A::@field::f
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
accessors
<testLibraryFragment>::@class::A::@getter::f
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
named @43
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 42
nameEnd: 48
parameters
requiredPositional final this.f @54
type: int
field: <testLibraryFragment>::@class::A::@field::f
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
f @37
reference: <testLibraryFragment>::@class::A::@field::f
element: <testLibraryFragment>::@class::A::@field::f#element
getter2: <testLibraryFragment>::@class::A::@getter::f
getters
synthetic get f
reference: <testLibraryFragment>::@class::A::@getter::f
element: <testLibraryFragment>::@class::A::@getter::f#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
named @43
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named#element
typeName: A
typeNameOffset: 41
periodOffset: 42
formalParameters
this.f @54
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named::@parameter::f#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final f
firstFragment: <testLibraryFragment>::@class::A::@field::f
type: int
getter: <testLibraryFragment>::@class::A::@getter::f#element
constructors
named
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
formalParameters
requiredPositional final f
type: int
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::A::@getter::f
''');
}
test_augmented_constructors_add_useFieldInitializer() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
const A.named() : f = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
final int f;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
final f @37
reference: <testLibraryFragment>::@class::A::@field::f
enclosingElement3: <testLibraryFragment>::@class::A
type: int
accessors
synthetic get f @-1
reference: <testLibraryFragment>::@class::A::@getter::f
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
augmented
fields
<testLibraryFragment>::@class::A::@field::f
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
accessors
<testLibraryFragment>::@class::A::@getter::f
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
const named @49
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 48
nameEnd: 54
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: f @59
staticElement: <testLibraryFragment>::@class::A::@field::f
element: <testLibraryFragment>::@class::A::@field::f#element
staticType: null
equals: = @61
expression: IntegerLiteral
literal: 0 @63
staticType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
f @37
reference: <testLibraryFragment>::@class::A::@field::f
element: <testLibraryFragment>::@class::A::@field::f#element
getter2: <testLibraryFragment>::@class::A::@getter::f
getters
synthetic get f
reference: <testLibraryFragment>::@class::A::@getter::f
element: <testLibraryFragment>::@class::A::@getter::f#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
const named @49
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named#element
typeName: A
typeNameOffset: 47
periodOffset: 48
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: f @59
staticElement: <testLibraryFragment>::@class::A::@field::f
element: <testLibraryFragment>::@class::A::@field::f#element
staticType: null
equals: = @61
expression: IntegerLiteral
literal: 0 @63
staticType: int
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final f
firstFragment: <testLibraryFragment>::@class::A::@field::f
type: int
getter: <testLibraryFragment>::@class::A::@getter::f#element
constructors
const named
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
getters
synthetic get f
firstFragment: <testLibraryFragment>::@class::A::@getter::f
''');
}
test_augmented_field_augment_constructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A.foo();
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 32
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
element: <testLibraryFragment>::@class::A::@constructor::foo#element
typeName: A
typeNameOffset: 27
periodOffset: 28
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
type: int
constructors
foo
firstFragment: <testLibraryFragment>::@class::A::@constructor::foo
''');
}
test_augmented_field_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_field_augment_field2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 1;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_2
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_field_augment_field_afterGetter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 1;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_field_augment_field_afterSetter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo(int _) {}
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
augmented
fields
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
accessors
augment set foo= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
setters
augment set foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @61
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo::@parameter::_#element
previousFragment: <testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_field_augment_field_augmentedInvocation() async {
// This is invalid code, but it should not crash.
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {;
augment static const int foo = augmented();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
static const int foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
static const foo @44
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @50
staticType: int
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic static get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment static const foo @67
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
AugmentedInvocation
augmentedKeyword: augmented @73
arguments: ArgumentList
leftParenthesis: ( @82
rightParenthesis: ) @83
element: <null>
element2: <null>
staticType: InvalidType
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @44
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @67
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
static const hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic static get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_augmented_field_augment_field_differentTypes() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment double foo = 1.2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment foo @56
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: double
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @56
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_field_augment_field_plus() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment final int foo = augmented + 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
final int foo = 0;
const A();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
final foo @37
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
IntegerLiteral
literal: 0 @43
staticType: int
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
const @54
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment final foo @59
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
constantInitializer
BinaryExpression
leftOperand: AugmentedExpression
augmentedKeyword: augmented @65
element: <testLibraryFragment>::@class::A::@field::foo
element2: <testLibraryFragment>::@class::A::@field::foo#element
staticType: int
operator: + @75
rightOperand: IntegerLiteral
literal: 1 @77
staticType: int
staticElement: dart:core::<fragment>::@class::num::@method::+
element: dart:core::<fragment>::@class::num::@method::+#element
staticInvokeType: num Function(num)
staticType: int
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @37
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 54
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @59
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::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 class A {
augment int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_augmented_field_augment_method() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibraryFragment>::@class::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
type: int
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
/// This is not allowed by the specification, but allowed syntactically,
/// so we need a way to handle it.
test_augmented_field_augment_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int foo = 1;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
set foo(int _) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
setter: setter_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo= @31
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @39
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
augment foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo @31
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @39
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
augment hasInitializer foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
previousFragment: <testLibraryFragment>::@class::A::@field::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_fields_add() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
int foo2 = 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo1 = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo1 @31
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo1 @-1
reference: <testLibraryFragment>::@class::A::@getter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
synthetic set foo1= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo1 @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo1
<testLibraryFragment>::@class::A::@setter::foo1
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
foo2 @45
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
shouldUseTypeForInitializerInference: true
id: field_1
getter: getter_1
setter: setter_1
accessors
synthetic get foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: field_1
synthetic set foo2= @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _foo2 @-1
type: int
returnType: void
id: setter_1
variable: field_1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo1 @31
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
getter2: <testLibraryFragment>::@class::A::@getter::foo1
setter2: <testLibraryFragment>::@class::A::@setter::foo1
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo1
reference: <testLibraryFragment>::@class::A::@getter::foo1
element: <testLibraryFragment>::@class::A::@getter::foo1#element
setters
synthetic set foo1
reference: <testLibraryFragment>::@class::A::@setter::foo1
element: <testLibraryFragment>::@class::A::@setter::foo1#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo1::@parameter::_foo1#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo2 @45
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
setter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
getters
synthetic get foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
setters
synthetic set foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element
formalParameters
<null-name>
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2::@parameter::_foo2#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo1#element
setter: <testLibraryFragment>::@class::A::@setter::foo1#element
hasInitializer foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
setter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo1
firstFragment: <testLibraryFragment>::@class::A::@getter::foo1
synthetic get foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
setters
synthetic set foo1
firstFragment: <testLibraryFragment>::@class::A::@setter::foo1
formalParameters
requiredPositional _foo1
type: int
synthetic set foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
formalParameters
requiredPositional _foo2
type: int
''');
}
test_augmented_fields_add_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T1> {
T1 foo2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T1> {
T1 foo1;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T1 @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo1 @34
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: T1
id: field_0
getter: getter_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo1 @-1
reference: <testLibraryFragment>::@class::A::@getter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
returnType: T1
id: getter_0
variable: field_0
synthetic set foo1= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo1 @-1
type: T1
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
FieldMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
augmentationSubstitution: {T1: T1}
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo1
<testLibraryFragment>::@class::A::@setter::foo1
GetterMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
augmentationSubstitution: {T1: T1}
SetterMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
augmentationSubstitution: {T1: T1}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T1 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
fields
foo2 @48
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: T1
id: field_1
getter: getter_1
setter: setter_1
accessors
synthetic get foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: T1
id: getter_1
variable: field_1
synthetic set foo2= @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _foo2 @-1
type: T1
returnType: void
id: setter_1
variable: field_1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T1 @23
element: <not-implemented>
fields
foo1 @34
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
getter2: <testLibraryFragment>::@class::A::@getter::foo1
setter2: <testLibraryFragment>::@class::A::@setter::foo1
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo1
reference: <testLibraryFragment>::@class::A::@getter::foo1
element: <testLibraryFragment>::@class::A::@getter::foo1#element
setters
synthetic set foo1
reference: <testLibraryFragment>::@class::A::@setter::foo1
element: <testLibraryFragment>::@class::A::@setter::foo1#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo1::@parameter::_foo1#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T1 @37
element: <not-implemented>
fields
foo2 @48
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
setter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
getters
synthetic get foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
setters
synthetic set foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element
formalParameters
<null-name>
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2::@parameter::_foo2#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T1
fields
foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: T1
getter: <testLibraryFragment>::@class::A::@getter::foo1#element
setter: <testLibraryFragment>::@class::A::@setter::foo1#element
foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
type: T1
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
setter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo1
firstFragment: <testLibraryFragment>::@class::A::@getter::foo1
synthetic get foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
setters
synthetic set foo1
firstFragment: <testLibraryFragment>::@class::A::@setter::foo1
formalParameters
requiredPositional _foo1
type: T1
synthetic set foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
formalParameters
requiredPositional _foo2
type: T1
''');
}
test_augmented_fields_add_useFieldFormal() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
final int foo;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A(this.foo);
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
@27
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional final this.foo @34
type: int
field: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
final foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
accessors
synthetic get foo @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 27
formalParameters
this.foo @34
element: <testLibraryFragment>::@class::A::@constructor::new::@parameter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
getters
synthetic get foo
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
formalParameters
requiredPositional final foo
type: int
getters
synthetic get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
''');
}
test_augmented_fields_add_useFieldInitializer() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
final int foo;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
const A() : foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
const @33
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: foo @39
staticElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
staticType: null
equals: = @43
expression: IntegerLiteral
literal: 0 @45
staticType: int
augmented
fields
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
final foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
accessors
synthetic get foo @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
const new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 33
constantInitializers
ConstructorFieldInitializer
fieldName: SimpleIdentifier
token: foo @39
staticElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
staticType: null
equals: = @43
expression: IntegerLiteral
literal: 0 @45
staticType: int
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
foo @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
getters
synthetic get foo
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
final foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo#element
constructors
const new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
''');
}
test_augmented_getter_augments_constructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A.foo();
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 32
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::foo
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_0
variable: <null>
augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
element: <testLibraryFragment>::@class::A::@constructor::foo#element
typeName: A
typeNameOffset: 27
periodOffset: 28
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
foo
firstFragment: <testLibraryFragment>::@class::A::@constructor::foo
getters
get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
''');
}
test_augmented_getter_augments_method() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
methods
<testLibraryFragment>::@class::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_0
variable: <null>
augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_getter_augments_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
set foo(int _) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo= @31
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @39
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_0
variable: <null>
augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo @31
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @39
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_getters_add() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
int get foo2 => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo1 => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1 @-1
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo1 @35
reference: <testLibraryFragment>::@class::A::@getter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo1
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
synthetic foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
id: field_1
getter: getter_1
accessors
get foo2 @49
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: field_1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
getter2: <testLibraryFragment>::@class::A::@getter::foo1
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo1 @35
reference: <testLibraryFragment>::@class::A::@getter::foo1
element: <testLibraryFragment>::@class::A::@getter::foo1#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
synthetic foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
getters
get foo2 @49
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo1#element
synthetic foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
type: int
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo1
firstFragment: <testLibraryFragment>::@class::A::@getter::foo1
get foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
''');
}
test_augmented_getters_add_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T1> {
T1 get foo2;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T1> {
T1 get foo1;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T1 @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1 @-1
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: T1
id: field_0
getter: getter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
abstract get foo1 @38
reference: <testLibraryFragment>::@class::A::@getter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
returnType: T1
id: getter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
FieldMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
augmentationSubstitution: {T1: T1}
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo1
GetterMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
augmentationSubstitution: {T1: T1}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T1 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
fields
synthetic foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: T1
id: field_1
getter: getter_1
accessors
abstract get foo2 @52
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: T1
id: getter_1
variable: field_1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T1 @23
element: <not-implemented>
fields
synthetic foo1
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
getter2: <testLibraryFragment>::@class::A::@getter::foo1
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo1 @38
reference: <testLibraryFragment>::@class::A::@getter::foo1
element: <testLibraryFragment>::@class::A::@getter::foo1#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T1 @37
element: <not-implemented>
fields
synthetic foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element
getter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
getters
get foo2 @52
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T1
fields
synthetic foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: T1
getter: <testLibraryFragment>::@class::A::@getter::foo1#element
synthetic foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
type: T1
getter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
abstract get foo1
firstFragment: <testLibraryFragment>::@class::A::@getter::foo1
abstract get foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
''');
}
test_augmented_getters_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibraryFragment>::@class::A::@getter::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_getters_augment_field2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibraryFragment>::@class::A::@setter::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
returnType: int
id: getter_2
variable: <null>
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @46
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibraryFragment>::@class::A::@getter::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_getters_augment_getter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo1 => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo1 => 0;
int get foo2 => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1 @-1
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
synthetic foo2 @-1
reference: <testLibraryFragment>::@class::A::@field::foo2
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_1
getter: getter_1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo1 @35
reference: <testLibraryFragment>::@class::A::@getter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
get foo2 @56
reference: <testLibraryFragment>::@class::A::@getter::foo2
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_1
variable: field_1
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
<testLibraryFragment>::@class::A::@field::foo2
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
<testLibraryFragment>::@class::A::@getter::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo1 @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_2
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
getter2: <testLibraryFragment>::@class::A::@getter::foo1
synthetic foo2
reference: <testLibraryFragment>::@class::A::@field::foo2
element: <testLibraryFragment>::@class::A::@field::foo2#element
getter2: <testLibraryFragment>::@class::A::@getter::foo2
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo1 @35
reference: <testLibraryFragment>::@class::A::@getter::foo1
element: <testLibraryFragment>::@class::A::@getter::foo1#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
get foo2 @56
reference: <testLibraryFragment>::@class::A::@getter::foo2
element: <testLibraryFragment>::@class::A::@getter::foo2#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo1 @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
element: <testLibraryFragment>::@class::A::@getter::foo1#element
previousFragment: <testLibraryFragment>::@class::A::@getter::foo1
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo1#element
synthetic foo2
firstFragment: <testLibraryFragment>::@class::A::@field::foo2
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo2
firstFragment: <testLibraryFragment>::@class::A::@getter::foo2
get foo1
firstFragment: <testLibraryFragment>::@class::A::@getter::foo1
''');
}
test_augmented_getters_augment_getter2_oneLib_oneTop() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
augment get foo @85
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_2
variable: <null>
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibraryFragment>::@class::A::@getter::foo
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
augment get foo @85
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_augmented_getters_augment_getter2_twoLib() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {
int get foo => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @50
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
returnType: int
id: getter_2
variable: <null>
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @50
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibraryFragment>::@class::A::@getter::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
''');
}
test_augmented_getters_augment_nothing() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment int get foo => 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
configuration
..withConstructors = false
..withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
augmented
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: int
id: getter_0
variable: <null>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
getters
augment get foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
getters
get foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
''');
}
test_augmented_interfaces() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A implements I2 {}
class I2 {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A implements I1 {}
class I1 {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
interfaces
I1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
interfaces
I1
I2
constructors
<testLibraryFragment>::@class::A::@constructor::new
class I1 @46
reference: <testLibraryFragment>::@class::I1
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::I1::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::I1
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
interfaces
I2
class I2 @60
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class I1 @46
reference: <testLibraryFragment>::@class::I1
element: <testLibrary>::@class::I1
constructors
synthetic new
reference: <testLibraryFragment>::@class::I1::@constructor::new
element: <testLibraryFragment>::@class::I1::@constructor::new#element
typeName: I1
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
class I2 @60
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
element: <testLibrary>::@class::I2
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element
typeName: I2
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
interfaces
I1
I2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class I1
reference: <testLibrary>::@class::I1
firstFragment: <testLibraryFragment>::@class::I1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::I1::@constructor::new
class I2
reference: <testLibrary>::@class::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
''');
}
test_augmented_interfaces_chain() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment class A implements I2 {}
class I2 {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment class A implements I3 {}
class I3 {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A implements I1 {}
class I1 {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
interfaces
I1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
interfaces
I1
I2
I3
constructors
<testLibraryFragment>::@class::A::@constructor::new
class I1 @46
reference: <testLibraryFragment>::@class::I1
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::I1::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::I1
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
classes
augment class A @50
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
interfaces
I2
class I2 @75
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
classes
augment class A @32
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
interfaces
I3
class I3 @57
reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@class::I3
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class I1 @46
reference: <testLibraryFragment>::@class::I1
element: <testLibrary>::@class::I1
constructors
synthetic new
reference: <testLibraryFragment>::@class::I1::@constructor::new
element: <testLibraryFragment>::@class::I1::@constructor::new#element
typeName: I1
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @50
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
class I2 @75
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
element: <testLibrary>::@class::I2
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element
typeName: I2
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @32
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
class I3 @57
reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
element: <testLibrary>::@class::I3
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
element: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new#element
typeName: I3
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
interfaces
I1
I2
I3
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class I1
reference: <testLibrary>::@class::I1
firstFragment: <testLibraryFragment>::@class::I1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::I1::@constructor::new
class I2
reference: <testLibrary>::@class::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
class I3
reference: <testLibrary>::@class::I3
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@class::I3
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
''');
}
test_augmented_interfaces_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T2> implements I2<T2> {}
class I2<E> {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T> implements I1 {}
class I1 {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
interfaces
I1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
interfaces
I1
I2<T>
constructors
<testLibraryFragment>::@class::A::@constructor::new
class I1 @49
reference: <testLibraryFragment>::@class::I1
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::I1::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::I1
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
interfaces
I2<T2>
class I2 @68
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant E @71
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class I1 @49
reference: <testLibraryFragment>::@class::I1
element: <testLibrary>::@class::I1
constructors
synthetic new
reference: <testLibraryFragment>::@class::I1::@constructor::new
element: <testLibraryFragment>::@class::I1::@constructor::new#element
typeName: I1
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T2 @37
element: <not-implemented>
class I2 @68
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
element: <testLibrary>::@class::I2
typeParameters
E @71
element: <not-implemented>
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element
typeName: I2
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
interfaces
I1
I2<T>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class I1
reference: <testLibrary>::@class::I1
firstFragment: <testLibraryFragment>::@class::I1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::I1::@constructor::new
class I2
reference: <testLibrary>::@class::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
typeParameters
E
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
''');
}
test_augmented_interfaces_generic_mismatch() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T2, T3> implements I2<T2> {}
class I2<E> {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T> implements I1 {}
class I1 {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
interfaces
I1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
interfaces
I1
constructors
<testLibraryFragment>::@class::A::@constructor::new
class I1 @49
reference: <testLibraryFragment>::@class::I1
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::I1::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::I1
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
covariant T3 @41
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
interfaces
I2<T2>
class I2 @72
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant E @75
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@class::I2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class I1 @49
reference: <testLibraryFragment>::@class::I1
element: <testLibrary>::@class::I1
constructors
synthetic new
reference: <testLibraryFragment>::@class::I1::@constructor::new
element: <testLibraryFragment>::@class::I1::@constructor::new#element
typeName: I1
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T2 @37
element: <not-implemented>
T3 @41
element: <not-implemented>
class I2 @72
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
element: <testLibrary>::@class::I2
typeParameters
E @75
element: <not-implemented>
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
element: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new#element
typeName: I2
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
interfaces
I1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class I1
reference: <testLibrary>::@class::I1
firstFragment: <testLibraryFragment>::@class::I1
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::I1::@constructor::new
class I2
reference: <testLibrary>::@class::I2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
typeParameters
E
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
''');
}
test_augmented_method_augments_constructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A.foo();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 32
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::foo
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
element: <testLibraryFragment>::@class::A::@constructor::foo#element
typeName: A
typeNameOffset: 27
periodOffset: 28
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
foo
firstFragment: <testLibraryFragment>::@class::A::@constructor::foo
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
''');
}
test_augmented_method_augments_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo = 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibraryFragment>::@class::A::@setter::foo
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
''');
}
test_augmented_method_augments_getter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
''');
}
test_augmented_method_augments_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
set foo(int _) {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo= @31
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @39
type: int
returnType: void
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@setter::foo
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo @31
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @39
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _
type: int
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
''');
}
test_augmented_methods() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
void bar() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
<testLibraryFragment>::@class::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
bar @46
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
bar @46
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
bar
reference: <testLibrary>::@class::A::@method::bar
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
''');
}
test_augmented_methods_add_withDefaultValue() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
void foo([int x = 42]) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
foo @46
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
optionalPositional default x @55
type: int
constantInitializer
IntegerLiteral
literal: 42 @59
staticType: int
returnType: void
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
foo @46
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo#element
formalParameters
default x @55
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo::@parameter::x#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
formalParameters
optionalPositional x
type: int
''');
}
test_augmented_methods_augment() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo1() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo1() {}
void foo2() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo1 @32
reference: <testLibraryFragment>::@class::A::@method::foo1
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
foo2 @49
reference: <testLibraryFragment>::@class::A::@method::foo2
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
<testLibraryFragment>::@class::A::@method::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo1 @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@class::A::@method::foo1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo1 @32
reference: <testLibraryFragment>::@class::A::@method::foo1
element: <testLibraryFragment>::@class::A::@method::foo1#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
foo2 @49
reference: <testLibraryFragment>::@class::A::@method::foo2
element: <testLibraryFragment>::@class::A::@method::foo2#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
augment foo1 @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
element: <testLibraryFragment>::@class::A::@method::foo1#element
previousFragment: <testLibraryFragment>::@class::A::@method::foo1
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo1
reference: <testLibrary>::@class::A::@method::foo1
firstFragment: <testLibraryFragment>::@class::A::@method::foo1
foo2
reference: <testLibrary>::@class::A::@method::foo2
firstFragment: <testLibraryFragment>::@class::A::@method::foo2
''');
}
test_augmented_methods_augment2_oneLib_oneTop() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo() {}
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
augment foo @78
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibraryFragment>::@class::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
augment foo @78
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_methods_augment2_oneLib_twoTop() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment void foo() {}
}
augment class A {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
returnType: void
augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
augment class A @79
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
methods
augment foo @98
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
returnType: void
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
methods
augment foo @54
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibraryFragment>::@class::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
class A @79
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
methods
augment foo @98
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_methods_augment2_twoLib() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
part 'b.dart';
augment class A {
augment void foo() {}
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
augment class A {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
parts
part_1
uri: package:test/b.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
unit: <testLibrary>::@fragment::package:test/b.dart
classes
augment class A @50
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
methods
augment foo @69
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
classes
augment class A @32
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
augment foo @51
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
returnType: void
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @50
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
methods
augment foo @69
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibraryFragment>::@class::A::@method::foo
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibrary>::@fragment::package:test/a.dart
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @32
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
augment foo @51
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_methods_generic() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T2> {
T2 bar() => throw 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T> {
T foo() => throw 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: T
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
MethodMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
augmentationSubstitution: {T2: T}
<testLibraryFragment>::@class::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
methods
bar @48
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: T2
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T2 @37
element: <not-implemented>
methods
bar @48
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
bar
reference: <testLibrary>::@class::A::@method::bar
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
''');
}
test_augmented_methods_generic_augment() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T2> {
augment T2 foo() => throw 0;
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T> {
T foo() => throw 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: T
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
methods
MethodMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
augmentationSubstitution: {T2: T}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @56
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: T2
augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T2 @37
element: <not-implemented>
methods
augment foo @56
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibraryFragment>::@class::A::@method::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_mixins() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A with M2 {}
mixin M2 {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A with M1 {}
mixin M1 {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
supertype: Object
mixins
M1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
mixins
M1
M2
constructors
<testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M1 @40
reference: <testLibraryFragment>::@mixin::M1
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
mixins
M2
mixins
mixin M2 @54
reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
mixins
mixin M1 @40
reference: <testLibraryFragment>::@mixin::M1
element: <testLibrary>::@mixin::M1
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
mixins
mixin M2 @54
reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
element: <testLibrary>::@mixin::M2
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
supertype: Object
mixins
M1
M2
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M1
reference: <testLibrary>::@mixin::M1
firstFragment: <testLibraryFragment>::@mixin::M1
superclassConstraints
Object
mixin M2
reference: <testLibrary>::@mixin::M2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
superclassConstraints
Object
''');
}
test_augmented_mixins_inferredTypeArguments() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T2> with M2 {}
mixin M2<U2> on M1<U2> {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A<T3> with M3 {}
mixin M3<U3> on M2<U3> {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class B<S> {}
class A<T1> extends B<T1> with M1 {}
mixin M1<U1> on B<U1> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class B @36
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant S @38
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
class A @50
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T1 @52
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
supertype: B<T1>
mixins
M1<T1>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::B::@constructor::new
substitution: {S: T1}
augmented
mixins
M1<T1>
M2<T1>
M3<T1>
constructors
<testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M1 @87
reference: <testLibraryFragment>::@mixin::M1
enclosingElement3: <testLibraryFragment>
typeParameters
covariant U1 @90
defaultType: dynamic
superclassConstraints
B<U1>
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
mixins
M2<T2>
mixins
mixin M2 @58
reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant U2 @61
defaultType: dynamic
superclassConstraints
M1<U2>
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
typeParameters
covariant T3 @37
defaultType: dynamic
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
mixins
M3<T3>
mixins
mixin M3 @58
reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
typeParameters
covariant U3 @61
defaultType: dynamic
superclassConstraints
M2<U3>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class B @36
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
typeParameters
S @38
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class A @50
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T1 @52
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::B::@constructor::new
substitution: {S: T1}
mixins
mixin M1 @87
reference: <testLibraryFragment>::@mixin::M1
element: <testLibrary>::@mixin::M1
typeParameters
U1 @90
element: <not-implemented>
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
typeParameters
T2 @37
element: <not-implemented>
mixins
mixin M2 @58
reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
element: <testLibrary>::@mixin::M2
typeParameters
U2 @61
element: <not-implemented>
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T3 @37
element: <not-implemented>
mixins
mixin M3 @58
reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
element: <testLibrary>::@mixin::M3
typeParameters
U3 @61
element: <not-implemented>
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
S
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T1
supertype: B<T1>
mixins
M1<T1>
M2<T1>
M3<T1>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
superConstructor: <testLibraryFragment>::@class::B::@constructor::new#element
mixins
mixin M1
reference: <testLibrary>::@mixin::M1
firstFragment: <testLibraryFragment>::@mixin::M1
typeParameters
U1
superclassConstraints
B<U1>
mixin M2
reference: <testLibrary>::@mixin::M2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
typeParameters
U2
superclassConstraints
M1<U2>
mixin M3
reference: <testLibrary>::@mixin::M3
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
typeParameters
U3
superclassConstraints
M2<U3>
''');
}
test_augmented_setter_augments_constructor() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A.foo();
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 32
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::foo
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment set foo= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_0
variable: <null>
augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
foo @29
reference: <testLibraryFragment>::@class::A::@constructor::foo
element: <testLibraryFragment>::@class::A::@constructor::foo#element
typeName: A
typeNameOffset: 27
periodOffset: 28
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
setters
augment set foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo#element
formalParameters
_ @61
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
foo
firstFragment: <testLibraryFragment>::@class::A::@constructor::foo
setters
set foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_setter_augments_getter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int get foo => 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo @-1
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
getter: getter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment set foo= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_0
variable: <null>
augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
get foo @35
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
setters
augment set foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo#element
formalParameters
_ @61
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
set foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_setter_augments_method() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
methods
<testLibraryFragment>::@class::A::@method::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment set foo= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_0
variable: <null>
augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
setters
augment set foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo#element
formalParameters
_ @61
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
formalParameters
requiredPositional _
type: int
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
''');
}
test_augmented_setters_add() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
set foo2(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
set foo1(int _) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1 @-1
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo1= @31
reference: <testLibraryFragment>::@class::A::@setter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @40
type: int
returnType: void
id: setter_0
variable: field_0
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@setter::foo1
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
fields
synthetic foo2 @-1
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
type: int
id: field_1
setter: setter_1
accessors
set foo2= @45
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @54
type: int
returnType: void
id: setter_1
variable: field_1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
setter2: <testLibraryFragment>::@class::A::@setter::foo1
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo1 @31
reference: <testLibraryFragment>::@class::A::@setter::foo1
element: <testLibraryFragment>::@class::A::@setter::foo1#element
formalParameters
_ @40
element: <testLibraryFragment>::@class::A::@setter::foo1::@parameter::_#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
fields
synthetic foo2
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2#element
setter2: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
setters
set foo2 @45
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element
formalParameters
_ @54
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo1#element
synthetic foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
type: int
setter: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo1
firstFragment: <testLibraryFragment>::@class::A::@setter::foo1
formalParameters
requiredPositional _
type: int
set foo2
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_setters_augment_field() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
int foo = 0;
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
enclosingElement3: <testLibraryFragment>::@class::A
type: int
shouldUseTypeForInitializerInference: true
id: field_0
getter: getter_0
setter: setter_0
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
synthetic get foo @-1
reference: <testLibraryFragment>::@class::A::@getter::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: int
id: getter_0
variable: field_0
synthetic set foo= @-1
reference: <testLibraryFragment>::@class::A::@setter::foo
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _foo @-1
type: int
returnType: void
id: setter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
augmented
fields
<testLibraryFragment>::@class::A::@field::foo
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibraryFragment>::@class::A::@getter::foo
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment set foo= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_1
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
hasInitializer foo @31
reference: <testLibraryFragment>::@class::A::@field::foo
element: <testLibraryFragment>::@class::A::@field::foo#element
getter2: <testLibraryFragment>::@class::A::@getter::foo
setter2: <testLibraryFragment>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
getters
synthetic get foo
reference: <testLibraryFragment>::@class::A::@getter::foo
element: <testLibraryFragment>::@class::A::@getter::foo#element
setters
synthetic set foo
reference: <testLibraryFragment>::@class::A::@setter::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
<null-name>
element: <testLibraryFragment>::@class::A::@setter::foo::@parameter::_foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
setters
augment set foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
element: <testLibraryFragment>::@class::A::@setter::foo#element
formalParameters
_ @61
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo::@parameter::_#element
previousFragment: <testLibraryFragment>::@class::A::@setter::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
hasInitializer foo
firstFragment: <testLibraryFragment>::@class::A::@field::foo
type: int
getter: <testLibraryFragment>::@class::A::@getter::foo#element
setter: <testLibraryFragment>::@class::A::@setter::foo#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
getters
synthetic get foo
firstFragment: <testLibraryFragment>::@class::A::@getter::foo
setters
synthetic set foo
firstFragment: <testLibraryFragment>::@class::A::@setter::foo
formalParameters
requiredPositional _foo
type: int
''');
}
test_augmented_setters_augment_nothing() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {}
''');
configuration
..withConstructors = false
..withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
augmented
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment set foo= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_0
variable: <null>
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
setters
augment set foo @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo#element
formalParameters
_ @61
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo::@parameter::_#element
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
setters
set foo
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
formalParameters
requiredPositional _
type: int
''');
}
test_augmented_setters_augment_setter() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment set foo1(int _) {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
set foo1(int _) {}
set foo2(int _) {}
}
''');
configuration.withPropertyLinking = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1 @-1
reference: <testLibraryFragment>::@class::A::@field::foo1
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_0
setter: setter_0
synthetic foo2 @-1
reference: <testLibraryFragment>::@class::A::@field::foo2
enclosingElement3: <testLibraryFragment>::@class::A
type: int
id: field_1
setter: setter_1
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
accessors
set foo1= @31
reference: <testLibraryFragment>::@class::A::@setter::foo1
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @40
type: int
returnType: void
id: setter_0
variable: field_0
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
set foo2= @52
reference: <testLibraryFragment>::@class::A::@setter::foo2
enclosingElement3: <testLibraryFragment>::@class::A
parameters
requiredPositional _ @61
type: int
returnType: void
id: setter_1
variable: field_1
augmented
fields
<testLibraryFragment>::@class::A::@field::foo1
<testLibraryFragment>::@class::A::@field::foo2
constructors
<testLibraryFragment>::@class::A::@constructor::new
accessors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
<testLibraryFragment>::@class::A::@setter::foo2
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
accessors
augment set foo1= @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
parameters
requiredPositional _ @62
type: int
returnType: void
id: setter_2
variable: <null>
augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo1
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
fields
synthetic foo1
reference: <testLibraryFragment>::@class::A::@field::foo1
element: <testLibraryFragment>::@class::A::@field::foo1#element
setter2: <testLibraryFragment>::@class::A::@setter::foo1
synthetic foo2
reference: <testLibraryFragment>::@class::A::@field::foo2
element: <testLibraryFragment>::@class::A::@field::foo2#element
setter2: <testLibraryFragment>::@class::A::@setter::foo2
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
setters
set foo1 @31
reference: <testLibraryFragment>::@class::A::@setter::foo1
element: <testLibraryFragment>::@class::A::@setter::foo1#element
formalParameters
_ @40
element: <testLibraryFragment>::@class::A::@setter::foo1::@parameter::_#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
set foo2 @52
reference: <testLibraryFragment>::@class::A::@setter::foo2
element: <testLibraryFragment>::@class::A::@setter::foo2#element
formalParameters
_ @61
element: <testLibraryFragment>::@class::A::@setter::foo2::@parameter::_#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
setters
augment set foo1 @53
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
element: <testLibraryFragment>::@class::A::@setter::foo1#element
formalParameters
_ @62
element: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1::@parameter::_#element
previousFragment: <testLibraryFragment>::@class::A::@setter::foo1
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
fields
synthetic foo1
firstFragment: <testLibraryFragment>::@class::A::@field::foo1
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo1#element
synthetic foo2
firstFragment: <testLibraryFragment>::@class::A::@field::foo2
type: int
setter: <testLibraryFragment>::@class::A::@setter::foo2#element
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
setters
set foo2
firstFragment: <testLibraryFragment>::@class::A::@setter::foo2
formalParameters
requiredPositional _
type: int
set foo1
firstFragment: <testLibraryFragment>::@class::A::@setter::foo1
formalParameters
requiredPositional _
type: int
''');
}
test_augmentedBy_mixin2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment mixin A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment mixin A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @37
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
mixins
augment mixin A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTargetAny: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
superclassConstraints
Object
augmented
superclassConstraints
Object
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
mixins
augment mixin A @36
reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @37
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
mixins
mixin A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
element: <testLibrary>::@mixin::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
mixins
mixin A @36
reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
element: <testLibrary>::@mixin::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixins
mixin A
reference: <testLibrary>::@mixin::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
superclassConstraints
Object
''');
}
/// Invalid augmentation of class with mixin does not "own" the name.
/// When a valid class augmentation follows, it can use the name.
test_augmentedBy_mixin_class() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment mixin A {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @37
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
mixins
augment mixin A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTargetAny: <testLibraryFragment>::@class::A
superclassConstraints
Object
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @36
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTargetAny: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
constructors
synthetic @-1
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructor::new
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @37
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A::@def::0
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
mixins
mixin A @36
reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
element: <testLibrary>::@mixin::A
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A::@def::1
constructors
synthetic new
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructor::new
element: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructor::new#element
typeName: A
classes
class A
reference: <testLibrary>::@class::A::@def::0
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class A
reference: <testLibrary>::@class::A::@def::1
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
constructors
synthetic new
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructor::new
mixins
mixin A
reference: <testLibrary>::@mixin::A
firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
superclassConstraints
Object
''');
}
test_constructors_augment2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A.named();
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class A {
augment A.named();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {
A.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
named @44
reference: <testLibraryFragment>::@class::A::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 43
nameEnd: 49
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
augmented
constructors
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
constructors
augment named @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 56
augmentationTarget: <testLibraryFragment>::@class::A::@constructor::named
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
augment named @51
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 56
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
named @44
reference: <testLibraryFragment>::@class::A::@constructor::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 42
periodOffset: 43
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
constructors
augment named @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 49
periodOffset: 50
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
previousFragment: <testLibraryFragment>::@class::A::@constructor::named
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
augment named @51
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 49
periodOffset: 50
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
named
firstFragment: <testLibraryFragment>::@class::A::@constructor::named
''');
}
test_constructors_augment_named() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A.named();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A.named();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
named @29
reference: <testLibraryFragment>::@class::A::@constructor::named
enclosingElement3: <testLibraryFragment>::@class::A
periodOffset: 28
nameEnd: 34
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
augment named @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
periodOffset: 50
nameEnd: 56
augmentationTarget: <testLibraryFragment>::@class::A::@constructor::named
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
named @29
reference: <testLibraryFragment>::@class::A::@constructor::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 27
periodOffset: 28
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
augment named @51
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
element: <testLibraryFragment>::@class::A::@constructor::named#element
typeName: A
typeNameOffset: 49
periodOffset: 50
previousFragment: <testLibraryFragment>::@class::A::@constructor::named
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
named
firstFragment: <testLibraryFragment>::@class::A::@constructor::named
''');
}
test_constructors_augment_unnamed() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A {
augment A();
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
A();
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
@27
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
augmented
constructors
<testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
constructors
augment @49
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
augmentationTarget: <testLibraryFragment>::@class::A::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 27
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
constructors
augment new
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
typeNameOffset: 49
previousFragment: <testLibraryFragment>::@class::A::@constructor::new
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_inferTypes_method_ofAugment() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {
int foo(String a) => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class B {
foo(a) => 0;
}
''');
var library = await buildLibrary(r'''
import 'a.dart';
part 'b.dart';
class B extends A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
parts
part_0
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class B @39
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
augmented
constructors
<testLibraryFragment>::@class::B::@constructor::new
methods
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class B @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibraryFragment>::@class::B
methods
foo @41
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
parameters
requiredPositional a @45
type: String
returnType: int
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
libraryImports
package:test/a.dart
classes
class B @39
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class B @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
element: <testLibrary>::@class::B
previousFragment: <testLibraryFragment>::@class::B
methods
foo @41
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
element: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo#element
formalParameters
a @45
element: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo::@parameter::a#element
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new#element
methods
foo
reference: <testLibrary>::@class::B::@method::foo
firstFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
formalParameters
requiredPositional a
type: String
''');
}
test_inferTypes_method_usingAugmentation_interface() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {
int foo(String a) => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
import 'a.dart';
augment class B implements A {}
''');
var library = await buildLibrary(r'''
part 'b.dart';
class B {
foo(a) => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class B @22
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
methods
foo @28
reference: <testLibraryFragment>::@class::B::@method::foo
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional a @32
type: String
returnType: int
augmented
interfaces
A
constructors
<testLibraryFragment>::@class::B::@constructor::new
methods
<testLibraryFragment>::@class::B::@method::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
libraryImports
package:test/a.dart
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
classes
augment class B @52
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibraryFragment>::@class::B
interfaces
A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class B @22
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
methods
foo @28
reference: <testLibraryFragment>::@class::B::@method::foo
element: <testLibraryFragment>::@class::B::@method::foo#element
formalParameters
a @32
element: <testLibraryFragment>::@class::B::@method::foo::@parameter::a#element
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
libraryImports
package:test/a.dart
classes
class B @52
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
element: <testLibrary>::@class::B
previousFragment: <testLibraryFragment>::@class::B
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
interfaces
A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
methods
foo
reference: <testLibrary>::@class::B::@method::foo
firstFragment: <testLibraryFragment>::@class::B::@method::foo
formalParameters
requiredPositional a
type: String
''');
}
test_inferTypes_method_usingAugmentation_mixin() async {
newFile('$testPackageLibPath/a.dart', r'''
mixin A {
int foo(String a) => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
import 'a.dart';
augment class B with A {}
''');
var library = await buildLibrary(r'''
part 'b.dart';
class B {
foo(a) => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class B @22
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
methods
foo @28
reference: <testLibraryFragment>::@class::B::@method::foo
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional a @32
type: String
returnType: int
augmented
mixins
A
constructors
<testLibraryFragment>::@class::B::@constructor::new
methods
<testLibraryFragment>::@class::B::@method::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
libraryImports
package:test/a.dart
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
classes
augment class B @52
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibraryFragment>::@class::B
mixins
A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class B @22
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
methods
foo @28
reference: <testLibraryFragment>::@class::B::@method::foo
element: <testLibraryFragment>::@class::B::@method::foo#element
formalParameters
a @32
element: <testLibraryFragment>::@class::B::@method::foo::@parameter::a#element
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
libraryImports
package:test/a.dart
classes
class B @52
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
element: <testLibrary>::@class::B
previousFragment: <testLibraryFragment>::@class::B
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: Object
mixins
A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
methods
foo
reference: <testLibrary>::@class::B::@method::foo
firstFragment: <testLibraryFragment>::@class::B::@method::foo
formalParameters
requiredPositional a
type: String
''');
}
test_inferTypes_method_withAugment() async {
newFile('$testPackageLibPath/a.dart', r'''
class A {
int foo(String a) => 0;
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class B {
augment foo(a) => 0;
}
''');
var library = await buildLibrary(r'''
import 'a.dart';
part 'b.dart';
class B extends A {
foo(a) => 0;
}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
libraryImports
package:test/a.dart
enclosingElement3: <testLibraryFragment>
parts
part_0
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class B @39
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
methods
foo @55
reference: <testLibraryFragment>::@class::B::@method::foo
enclosingElement3: <testLibraryFragment>::@class::B
parameters
requiredPositional a @59
type: String
returnType: int
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
augmented
constructors
<testLibraryFragment>::@class::B::@constructor::new
methods
<testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class B @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibraryFragment>::@class::B
methods
augment foo @49
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
parameters
requiredPositional a @53
type: String
returnType: int
augmentationTarget: <testLibraryFragment>::@class::B::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
libraryImports
package:test/a.dart
classes
class B @39
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
methods
foo @55
reference: <testLibraryFragment>::@class::B::@method::foo
element: <testLibraryFragment>::@class::B::@method::foo#element
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
formalParameters
a @59
element: <testLibraryFragment>::@class::B::@method::foo::@parameter::a#element
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class B @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
element: <testLibrary>::@class::B
previousFragment: <testLibraryFragment>::@class::B
methods
augment foo @49
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
element: <testLibraryFragment>::@class::B::@method::foo#element
previousFragment: <testLibraryFragment>::@class::B::@method::foo
formalParameters
a @53
element: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo::@parameter::a#element
classes
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new#element
methods
foo
reference: <testLibrary>::@class::B::@method::foo
firstFragment: <testLibraryFragment>::@class::B::@method::foo
formalParameters
requiredPositional a
type: String
''');
}
test_methods_typeParameterCountMismatch() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T> {
augment void foo() {}
}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A {
void foo() {}
void bar() {}
}
''');
configuration.withConstructors = false;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
bar @48
reference: <testLibraryFragment>::@class::A::@method::bar
enclosingElement3: <testLibraryFragment>::@class::A
returnType: void
augmented
methods
<testLibraryFragment>::@class::A::@method::bar
MethodMember
base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
augmentationSubstitution: {T: InvalidType}
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::A
methods
augment foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
returnType: void
augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
methods
foo @32
reference: <testLibraryFragment>::@class::A::@method::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
bar @48
reference: <testLibraryFragment>::@class::A::@method::bar
element: <testLibraryFragment>::@class::A::@method::bar#element
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T @37
element: <not-implemented>
methods
augment foo @57
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
element: <testLibraryFragment>::@class::A::@method::foo#element
previousFragment: <testLibraryFragment>::@class::A::@method::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: <testLibraryFragment>::@class::A::@method::foo
bar
reference: <testLibrary>::@class::A::@method::bar
firstFragment: <testLibraryFragment>::@class::A::@method::bar
''');
}
test_modifiers_abstract() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment abstract class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
abstract class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
abstract class A @30
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment abstract class A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @30
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @44
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
abstract class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_modifiers_base() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment base class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
base class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
base class A @26
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment base class A @40
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @26
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @40
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
base class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_modifiers_final() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment final class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
final class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
final class A @27
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment final class A @41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @27
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
final class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_modifiers_interface() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment interface class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
interface class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
interface class A @31
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment interface class A @45
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @31
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @45
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
interface class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_modifiers_macro() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment macro class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
macro class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
macro class A @27
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment macro class A @41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @27
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_modifiers_mixin() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment mixin class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
mixin class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
mixin class A @27
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment mixin class A @41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @27
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @41
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
mixin class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_modifiers_sealed() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment sealed class A {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
sealed class A {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
abstract sealed class A @28
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment abstract sealed class A @42
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @28
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @42
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
classes
abstract sealed class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_notAugmented_interfaces() async {
var library = await buildLibrary(r'''
class A implements I {}
class I {}
''');
configuration.withAugmentedWithoutAugmentation = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
interfaces
I
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
interfaces
I
constructors
<testLibraryFragment>::@class::A::@constructor::new
class I @30
reference: <testLibraryFragment>::@class::I
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::I::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::I
augmented
constructors
<testLibraryFragment>::@class::I::@constructor::new
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class I @30
reference: <testLibraryFragment>::@class::I
element: <testLibrary>::@class::I
constructors
synthetic new
reference: <testLibraryFragment>::@class::I::@constructor::new
element: <testLibraryFragment>::@class::I::@constructor::new#element
typeName: I
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
interfaces
I
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class I
reference: <testLibrary>::@class::I
firstFragment: <testLibraryFragment>::@class::I
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::I::@constructor::new
''');
}
test_notAugmented_mixins() async {
var library = await buildLibrary(r'''
class A implements M {}
mixin M {}
''');
configuration.withAugmentedWithoutAugmentation = true;
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
classes
class A @6
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
interfaces
M
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
interfaces
M
constructors
<testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M @30
reference: <testLibraryFragment>::@mixin::M
enclosingElement3: <testLibraryFragment>
superclassConstraints
Object
augmented
superclassConstraints
Object
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
classes
class A @6
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
mixins
mixin M @30
reference: <testLibraryFragment>::@mixin::M
element: <testLibrary>::@mixin::M
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
interfaces
M
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: <testLibraryFragment>::@mixin::M
superclassConstraints
Object
''');
}
test_notSimplyBounded_self() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T extends A> {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T extends A> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
notSimplyBounded class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
bound: A<dynamic>
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T @37
bound: A<dynamic>
defaultType: A<dynamic>
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T @37
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
bound: A<dynamic>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
''');
}
test_supertype_fromAugmentation() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class B<T2> extends A<T2> {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T> {}
class B<T1> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
defaultType: dynamic
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @35
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T1 @37
defaultType: dynamic
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
supertype: A<T1>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: T1}
augmented
constructors
<testLibraryFragment>::@class::B::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class B @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T2 @37
defaultType: dynamic
augmentationTarget: <testLibraryFragment>::@class::B
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @35
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
typeParameters
T1 @37
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
superConstructor: ConstructorMember
base: <testLibraryFragment>::@class::A::@constructor::new
substitution: {T: T1}
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class B @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
element: <testLibrary>::@class::B
previousFragment: <testLibraryFragment>::@class::B
typeParameters
T2 @37
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
typeParameters
T1
supertype: A<T1>
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_supertype_fromAugmentation2() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class C extends A {}
''');
// `extends B` should be ignored, we already have `extends A`
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment class C extends B {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
part 'b.dart';
class A {}
class B {}
class C {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
part_1
uri: package:test/b.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/b.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
class B @47
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
class C @58
reference: <testLibraryFragment>::@class::C
enclosingElement3: <testLibraryFragment>
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
supertype: A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::C::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::C
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
augmented
constructors
<testLibraryFragment>::@class::C::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class C @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
augmentationTarget: <testLibraryFragment>::@class::C
augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
<testLibrary>::@fragment::package:test/b.dart
enclosingElement3: <testLibraryFragment>
classes
augment class C @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @36
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @47
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
class C @58
reference: <testLibraryFragment>::@class::C
element: <testLibrary>::@class::C
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
constructors
synthetic new
reference: <testLibraryFragment>::@class::C::@constructor::new
element: <testLibraryFragment>::@class::C::@constructor::new#element
typeName: C
superConstructor: <testLibraryFragment>::@class::A::@constructor::new
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
nextFragment: <testLibrary>::@fragment::package:test/b.dart
classes
class C @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
element: <testLibrary>::@class::C
previousFragment: <testLibraryFragment>::@class::C
nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
<testLibrary>::@fragment::package:test/b.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class C @35
reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
element: <testLibrary>::@class::C
previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
class C
reference: <testLibrary>::@class::C
firstFragment: <testLibraryFragment>::@class::C
supertype: A
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::C::@constructor::new
superConstructor: <testLibraryFragment>::@class::A::@constructor::new#element
''');
}
test_typeParameters_defaultType() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment class A<T extends B> {}
''');
var library = await buildLibrary(r'''
part 'a.dart';
class A<T extends B> {}
class B {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
definingUnit: <testLibraryFragment>
units
<testLibraryFragment>
enclosingElement3: <null>
parts
part_0
uri: package:test/a.dart
enclosingElement3: <testLibraryFragment>
unit: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
enclosingElement3: <testLibraryFragment>
typeParameters
covariant T @23
bound: B
defaultType: B
augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::A::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::A
augmented
constructors
<testLibraryFragment>::@class::A::@constructor::new
class B @45
reference: <testLibraryFragment>::@class::B
enclosingElement3: <testLibraryFragment>
constructors
synthetic @-1
reference: <testLibraryFragment>::@class::B::@constructor::new
enclosingElement3: <testLibraryFragment>::@class::B
<testLibrary>::@fragment::package:test/a.dart
enclosingElement3: <testLibraryFragment>
classes
augment class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
typeParameters
covariant T @37
bound: B
defaultType: B
augmentationTarget: <testLibraryFragment>::@class::A
----------------------------------------
library
reference: <testLibrary>
fragments
<testLibraryFragment>
element: <testLibrary>
nextFragment: <testLibrary>::@fragment::package:test/a.dart
classes
class A @21
reference: <testLibraryFragment>::@class::A
element: <testLibrary>::@class::A
nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
typeParameters
T @23
element: <not-implemented>
constructors
synthetic new
reference: <testLibraryFragment>::@class::A::@constructor::new
element: <testLibraryFragment>::@class::A::@constructor::new#element
typeName: A
class B @45
reference: <testLibraryFragment>::@class::B
element: <testLibrary>::@class::B
constructors
synthetic new
reference: <testLibraryFragment>::@class::B::@constructor::new
element: <testLibraryFragment>::@class::B::@constructor::new#element
typeName: B
<testLibrary>::@fragment::package:test/a.dart
element: <testLibrary>
enclosingFragment: <testLibraryFragment>
previousFragment: <testLibraryFragment>
classes
class A @35
reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
element: <testLibrary>::@class::A
previousFragment: <testLibraryFragment>::@class::A
typeParameters
T @37
element: <not-implemented>
classes
class A
reference: <testLibrary>::@class::A
firstFragment: <testLibraryFragment>::@class::A
typeParameters
T
bound: B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::A::@constructor::new
class B
reference: <testLibrary>::@class::B
firstFragment: <testLibraryFragment>::@class::B
constructors
synthetic new
firstFragment: <testLibraryFragment>::@class::B::@constructor::new
''');
}
}
@reflectiveTest
class ClassElementTest_augmentation_fromBytes
extends ClassElementTest_augmentation {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class ClassElementTest_augmentation_keepLinking
extends ClassElementTest_augmentation {
@override
bool get keepLinkingLibraries => true;
}
@reflectiveTest
class ClassElementTest_fromBytes extends ClassElementTest {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class ClassElementTest_keepLinking extends ClassElementTest {
@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;
};
}
}