blob: a56d31206296982bb355c285605bc7a20eb0379b [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/type.dart';
import 'package:analyzer/src/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 '../elements_base.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(TopLevelVariableElementTest_keepLinking);
defineReflectiveTests(TopLevelVariableElementTest_fromBytes);
defineReflectiveTests(TopLevelVariableElementTest_augmentation_keepLinking);
defineReflectiveTests(TopLevelVariableElementTest_augmentation_fromBytes);
defineReflectiveTests(UpdateNodeTextExpectations);
});
}
abstract class TopLevelVariableElementTest extends ElementsBaseTest {
test_fragmentOrder_g1_s2_s1() async {
var library = await buildLibrary(r'''
int get a => 0;
set b(int _) {}
set a(int _) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::a
#F2 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
element: <testLibrary>::@topLevelVariable::b
getters
#F3 isOriginDeclaration a (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::a
setters
#F4 isOriginDeclaration b (nameOffset:20) (firstTokenOffset:16) (offset:20)
element: <testLibrary>::@setter::b
formalParameters
#F5 requiredPositional _ (nameOffset:26) (firstTokenOffset:22) (offset:26)
element: <testLibrary>::@setter::b::@formalParameter::_
#F6 isOriginDeclaration a (nameOffset:36) (firstTokenOffset:32) (offset:36)
element: <testLibrary>::@setter::a
formalParameters
#F7 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
element: <testLibrary>::@setter::a::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
synthetic isOriginGetterSetter b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F2
type: int
setter: <testLibrary>::@setter::b
getters
static isOriginDeclaration a
reference: <testLibrary>::@getter::a
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::a
setters
static isOriginDeclaration b
reference: <testLibrary>::@setter::b
firstFragment: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::b
static isOriginDeclaration a
reference: <testLibrary>::@setter::a
firstFragment: #F6
formalParameters
#E1 requiredPositional _
firstFragment: #F7
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_fragmentOrder_s1_g2_g1() async {
var library = await buildLibrary(r'''
set a(int _) {}
int get b => 0;
int get a => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
element: <testLibrary>::@topLevelVariable::a
#F2 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::b
getters
#F3 isOriginDeclaration b (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::b
#F4 isOriginDeclaration a (nameOffset:40) (firstTokenOffset:32) (offset:40)
element: <testLibrary>::@getter::a
setters
#F5 isOriginDeclaration a (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::a
formalParameters
#F6 requiredPositional _ (nameOffset:10) (firstTokenOffset:6) (offset:10)
element: <testLibrary>::@setter::a::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
synthetic isOriginGetterSetter b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::b
getters
static isOriginDeclaration b
reference: <testLibrary>::@getter::b
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::b
static isOriginDeclaration a
reference: <testLibrary>::@getter::a
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::a
setters
static isOriginDeclaration a
reference: <testLibrary>::@setter::a
firstFragment: #F5
formalParameters
#E0 requiredPositional _
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_getter_async() async {
var library = await buildLibrary(r'''
Future<int> get foo async => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:0) (offset:16)
element: <testLibrary>::@getter::foo
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: Future<int>
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: Future<int>
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getter_asyncStar() async {
var library = await buildLibrary(r'''
import 'dart:async';
Stream<int> get foo async* {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
libraryImports
dart:async
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:21) (offset:37)
element: <testLibrary>::@getter::foo
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: Stream<int>
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: Stream<int>
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getter_documented() async {
var library = await buildLibrary('''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
get x => null;''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:44) (offset:64)
element: <testLibrary>::@getter::x
documentationComment: /**\n * Docs\n */
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F2
documentationComment: /**\n * Docs\n */
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_getter_external() async {
var library = await buildLibrary('external int get x;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration x (nameOffset:17) (firstTokenOffset:0) (offset:17)
element: <testLibrary>::@getter::x
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
static external isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_getter_inferred_type_nonStatic_implicit_return() async {
var library = await buildLibrary(
'class C extends D { get f => null; } abstract class D { int get f; }',
);
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
fields
#F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@field::f
constructors
#F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@constructor::new
typeName: C
getters
#F4 isOriginDeclaration f (nameOffset:24) (firstTokenOffset:20) (offset:24)
element: <testLibrary>::@class::C::@getter::f
#F5 class D (nameOffset:52) (firstTokenOffset:37) (offset:52)
element: <testLibrary>::@class::D
fields
#F6 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
element: <testLibrary>::@class::D::@field::f
constructors
#F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
element: <testLibrary>::@class::D::@constructor::new
typeName: D
getters
#F8 isOriginDeclaration f (nameOffset:64) (firstTokenOffset:56) (offset:64)
element: <testLibrary>::@class::D::@getter::f
classes
class C
reference: <testLibrary>::@class::C
firstFragment: #F1
supertype: D
fields
synthetic isOriginGetterSetter f
reference: <testLibrary>::@class::C::@field::f
firstFragment: #F2
type: int
getter: <testLibrary>::@class::C::@getter::f
constructors
synthetic isOriginImplicitDefault new
reference: <testLibrary>::@class::C::@constructor::new
firstFragment: #F3
superConstructor: <testLibrary>::@class::D::@constructor::new
getters
isOriginDeclaration f
reference: <testLibrary>::@class::C::@getter::f
firstFragment: #F4
returnType: int
variable: <testLibrary>::@class::C::@field::f
abstract class D
reference: <testLibrary>::@class::D
firstFragment: #F5
fields
synthetic isOriginGetterSetter f
reference: <testLibrary>::@class::D::@field::f
firstFragment: #F6
type: int
getter: <testLibrary>::@class::D::@getter::f
constructors
synthetic isOriginImplicitDefault new
reference: <testLibrary>::@class::D::@constructor::new
firstFragment: #F7
getters
abstract isOriginDeclaration f
reference: <testLibrary>::@class::D::@getter::f
firstFragment: #F8
returnType: int
variable: <testLibrary>::@class::D::@field::f
''');
}
test_getter_syncStar() async {
var library = await buildLibrary(r'''
Iterator<int> get foo sync* {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:18) (firstTokenOffset:0) (offset:18)
element: <testLibrary>::@getter::foo
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: Iterator<int>
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: Iterator<int>
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getters() async {
var library = await buildLibrary('int get x => null; get y => null;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
#F2 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@topLevelVariable::y
getters
#F3 isOriginDeclaration x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
#F4 isOriginDeclaration y (nameOffset:23) (firstTokenOffset:19) (offset:23)
element: <testLibrary>::@getter::y
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
synthetic isOriginGetterSetter y
reference: <testLibrary>::@topLevelVariable::y
firstFragment: #F2
type: dynamic
getter: <testLibrary>::@getter::y
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::x
static isOriginDeclaration y
reference: <testLibrary>::@getter::y
firstFragment: #F4
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::y
''');
}
test_implicitTopLevelVariable_getterFirst() async {
var library = await buildLibrary(
'int get x => 0; void set x(int value) {}',
);
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
setters
#F3 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_implicitTopLevelVariable_setterFirst() async {
var library = await buildLibrary(
'void set x(int value) {} int get x => 0;',
);
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration x (nameOffset:33) (firstTokenOffset:25) (offset:33)
element: <testLibrary>::@getter::x
setters
#F3 isOriginDeclaration x (nameOffset:9) (firstTokenOffset:0) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:15) (firstTokenOffset:11) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_setter_documented() async {
var library = await buildLibrary('''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
void set x(value) {}''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
element: <testLibrary>::@topLevelVariable::x
setters
#F2 isOriginDeclaration x (nameOffset:69) (firstTokenOffset:44) (offset:69)
element: <testLibrary>::@setter::x
documentationComment: /**\n * Docs\n */
formalParameters
#F3 requiredPositional value (nameOffset:71) (firstTokenOffset:71) (offset:71)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: dynamic
setter: <testLibrary>::@setter::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F2
documentationComment: /**\n * Docs\n */
formalParameters
#E0 requiredPositional hasImplicitType value
firstFragment: #F3
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_setter_external() async {
var library = await buildLibrary('external void set x(int value);');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
element: <testLibrary>::@topLevelVariable::x
setters
#F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:0) (offset:18)
element: <testLibrary>::@setter::x
formalParameters
#F3 requiredPositional value (nameOffset:24) (firstTokenOffset:20) (offset:24)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::x
setters
static external isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F2
formalParameters
#E0 requiredPositional value
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_setter_inferred_type_top_level_implicit_return() async {
var library = await buildLibrary('set f(int value) {}');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::f
setters
#F2 isOriginDeclaration f (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::f
formalParameters
#F3 requiredPositional value (nameOffset:10) (firstTokenOffset:6) (offset:10)
element: <testLibrary>::@setter::f::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter f
reference: <testLibrary>::@topLevelVariable::f
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::f
setters
static isOriginDeclaration f
reference: <testLibrary>::@setter::f
firstFragment: #F2
formalParameters
#E0 requiredPositional value
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::f
''');
}
test_setters() async {
var library = await buildLibrary(
'void set x(int value) {} set y(value) {}',
);
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
element: <testLibrary>::@topLevelVariable::x
#F2 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
element: <testLibrary>::@topLevelVariable::y
setters
#F3 isOriginDeclaration x (nameOffset:9) (firstTokenOffset:0) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:15) (firstTokenOffset:11) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
#F5 isOriginDeclaration y (nameOffset:29) (firstTokenOffset:25) (offset:29)
element: <testLibrary>::@setter::y
formalParameters
#F6 requiredPositional value (nameOffset:31) (firstTokenOffset:31) (offset:31)
element: <testLibrary>::@setter::y::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::x
synthetic isOriginGetterSetter y
reference: <testLibrary>::@topLevelVariable::y
firstFragment: #F2
type: dynamic
setter: <testLibrary>::@setter::y
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
static isOriginDeclaration y
reference: <testLibrary>::@setter::y
firstFragment: #F5
formalParameters
#E1 requiredPositional hasImplicitType value
firstFragment: #F6
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::y
''');
}
test_top_level_variable_external() async {
var library = await buildLibrary('''
external int i;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration i (nameOffset:13) (firstTokenOffset:13) (offset:13)
element: <testLibrary>::@topLevelVariable::i
getters
#F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
element: <testLibrary>::@getter::i
setters
#F3 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
element: <testLibrary>::@setter::i
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
element: <testLibrary>::@setter::i::@formalParameter::value
topLevelVariables
external isOriginDeclaration i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
setter: <testLibrary>::@setter::i
getters
synthetic static isOriginVariable i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
setters
synthetic static isOriginVariable i
reference: <testLibrary>::@setter::i
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_unit_implicitVariable_getterFirst() async {
var library = await buildLibrary('''
int get x => 0;
void set x(int value) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
setters
#F3 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_unit_implicitVariable_setterFirst() async {
var library = await buildLibrary('''
void set x(int value) {}
int get x => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration x (nameOffset:33) (firstTokenOffset:25) (offset:33)
element: <testLibrary>::@getter::x
setters
#F3 isOriginDeclaration x (nameOffset:9) (firstTokenOffset:0) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:15) (firstTokenOffset:11) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_unit_variable_duplicate() async {
var library = await buildLibrary('''
int foo = 0;
int foo = 1;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo::@def::0
#F2 hasInitializer isOriginDeclaration foo (nameOffset:17) (firstTokenOffset:17) (offset:17)
element: <testLibrary>::@topLevelVariable::foo::@def::1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo::@def::0
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@getter::foo::@def::1
setters
#F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@def::0
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@def::0::@formalParameter::value
#F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@setter::foo::@def::1
formalParameters
#F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@setter::foo::@def::1::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo::@def::0
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo::@def::0
setter: <testLibrary>::@setter::foo::@def::0
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo::@def::1
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::foo::@def::1
setter: <testLibrary>::@setter::foo::@def::1
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo::@def::0
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo::@def::0
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo::@def::1
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo::@def::1
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo::@def::0
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo::@def::0
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo::@def::1
firstFragment: #F7
formalParameters
#E1 requiredPositional value
firstFragment: #F8
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo::@def::1
''');
}
test_unit_variable_duplicate_getter() async {
var library = await buildLibrary('''
int foo = 0;
int get foo => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo::@def::0
#F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
element: <testLibrary>::@topLevelVariable::foo::@def::1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo::@def::0
#F4 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:13) (offset:21)
element: <testLibrary>::@getter::foo::@def::1
setters
#F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo::@def::0
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo::@def::0
setter: <testLibrary>::@setter::foo
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo::@def::1
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::foo::@def::1
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo::@def::0
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo::@def::0
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo::@def::1
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo::@def::1
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo::@def::0
''');
}
test_unit_variable_duplicate_setter() async {
var library = await buildLibrary('''
int foo = 0;
set foo(int _) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo::@def::0
#F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@topLevelVariable::foo::@def::1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@def::0
formalParameters
#F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@def::0::@formalParameter::value
#F6 isOriginDeclaration foo (nameOffset:17) (firstTokenOffset:13) (offset:17)
element: <testLibrary>::@setter::foo::@def::1
formalParameters
#F7 requiredPositional _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
element: <testLibrary>::@setter::foo::@def::1::@formalParameter::_
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo::@def::0
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo::@def::0
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo::@def::1
firstFragment: #F2
type: int
setter: <testLibrary>::@setter::foo::@def::1
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo::@def::0
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo::@def::0
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo::@def::0
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo::@def::1
firstFragment: #F6
formalParameters
#E1 requiredPositional _
firstFragment: #F7
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo::@def::1
''');
}
test_unit_variable_final_withSetter() async {
var library = await buildLibrary(r'''
final int foo = 0;
set foo(int newValue) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
setters
#F3 isOriginDeclaration foo (nameOffset:23) (firstTokenOffset:19) (offset:23)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional newValue (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::foo::@formalParameter::newValue
topLevelVariables
final hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional newValue
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_variable() async {
var library = await buildLibrary('int x = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::x
setters
#F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
synthetic static isOriginVariable x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_const() async {
var library = await buildLibrary('const int i = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration i (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::i
initializer: expression_0
IntegerLiteral
literal: 0 @14
staticType: int
getters
#F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::i
topLevelVariables
const hasInitializer isOriginDeclaration i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::i
getters
synthetic static isOriginVariable i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_const_late() async {
var library = await buildLibrary('late const int i = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration i (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: <testLibrary>::@topLevelVariable::i
initializer: expression_0
IntegerLiteral
literal: 0 @19
staticType: int
getters
#F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@getter::i
topLevelVariables
late const hasInitializer isOriginDeclaration i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::i
getters
synthetic static isOriginVariable i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_documented() async {
var library = await buildLibrary('''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
var x;''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:64) (offset:64)
element: <testLibrary>::@topLevelVariable::x
documentationComment: /**\n * Docs\n */
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
element: <testLibrary>::@getter::x
setters
#F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
hasImplicitType isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
documentationComment: /**\n * Docs\n */
type: dynamic
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::x
setters
synthetic static isOriginVariable x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_final() async {
var library = await buildLibrary('final int x = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration x (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::x
topLevelVariables
final hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_functionTyped_nested_invalid_functionTypedFormal() async {
var library = await buildLibrary(r'''
final int Function(int, {void fn()})? foo;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration foo (nameOffset:38) (firstTokenOffset:38) (offset:38)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
element: <testLibrary>::@getter::foo
topLevelVariables
final isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int Function(int, {void Function() fn})?
getter: <testLibrary>::@getter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int Function(int, {void Function() fn})?
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_variable_getterInLib_setterInPart() async {
newFile('$testPackageLibPath/a.dart', '''
part of my.lib;
void set x(int _) {}
''');
var library = await buildLibrary('''
library my.lib;
part 'a.dart';
int get x => 42;''');
checkElementText(library, r'''
library
reference: <testLibrary>
name: my.lib
fragments
#F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:8)
element: <testLibrary>
nextFragment: #F1
parts
part_0
uri: package:test/a.dart
partKeywordOffset: 16
unit: #F1
topLevelVariables
#F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
element: <testLibrary>::@topLevelVariable::x
getters
#F3 isOriginDeclaration x (nameOffset:39) (firstTokenOffset:31) (offset:39)
element: <testLibrary>::@getter::x
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
setters
#F4 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F5 requiredPositional _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_getterInPart_setterInLib() async {
newFile('$testPackageLibPath/a.dart', '''
part of my.lib;
int get x => 42;
''');
var library = await buildLibrary('''
library my.lib;
part 'a.dart';
void set x(int _) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
name: my.lib
fragments
#F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:8)
element: <testLibrary>
nextFragment: #F1
parts
part_0
uri: package:test/a.dart
partKeywordOffset: 16
unit: #F1
topLevelVariables
#F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::x
setters
#F3 isOriginDeclaration x (nameOffset:40) (firstTokenOffset:31) (offset:40)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional _ (nameOffset:46) (firstTokenOffset:42) (offset:46)
element: <testLibrary>::@setter::x::@formalParameter::_
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
getters
#F5 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::x
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F5
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_getterInPart_setterInPart() async {
newFile('$testPackageLibPath/a.dart', 'part of my.lib; int get x => 42;');
newFile(
'$testPackageLibPath/b.dart',
'part of my.lib; void set x(int _) {}',
);
var library = await buildLibrary(
'library my.lib; part "a.dart"; part "b.dart";',
);
checkElementText(library, r'''
library
reference: <testLibrary>
name: my.lib
fragments
#F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:8)
element: <testLibrary>
nextFragment: #F1
parts
part_0
uri: package:test/a.dart
partKeywordOffset: 16
unit: #F1
part_1
uri: package:test/b.dart
partKeywordOffset: 31
unit: #F2
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
nextFragment: #F2
topLevelVariables
#F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::x
getters
#F4 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::x
#F2 package:test/b.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F1
setters
#F5 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F6 requiredPositional _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F5
formalParameters
#E0 requiredPositional _
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_implicit() async {
var library = await buildLibrary('int get x => 0;');
// We intentionally don't check the text, because we want to test
// requesting individual elements, not all accessors/variables at once.
var getter = library.getters.single;
var variable = getter.variable as TopLevelVariableElementImpl;
expect(variable, isNotNull);
expect(variable.isFinal, isFalse);
expect(variable.getter, same(getter));
_assertTypeStr(variable.type, 'int');
expect(variable, same(library.topLevelVariables.single));
}
test_variable_implicit_type() async {
var library = await buildLibrary('var x;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::x
setters
#F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
hasImplicitType isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::x
setters
synthetic static isOriginVariable x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_initializer() async {
var library = await buildLibrary('int v = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::v
setters
#F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::v
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::v::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
synthetic static isOriginVariable v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
setters
synthetic static isOriginVariable v
reference: <testLibrary>::@setter::v
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_initializer_final() async {
var library = await buildLibrary('final int v = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration v (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::v
topLevelVariables
final hasInitializer isOriginDeclaration v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
getters
synthetic static isOriginVariable v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_initializer_final_untyped() async {
var library = await buildLibrary('final v = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::v
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
getters
synthetic static isOriginVariable v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_initializer_recordType() async {
var library = await buildLibrary('''
const x = (1, true);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration x (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::x
initializer: expression_0
RecordLiteral
leftParenthesis: ( @10
fields
IntegerLiteral
literal: 1 @11
staticType: int
BooleanLiteral
literal: true @14
staticType: bool
rightParenthesis: ) @18
staticType: (int, bool)
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::x
topLevelVariables
const hasImplicitType hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: (int, bool)
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: (int, bool)
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_initializer_staticMethod_ofExtension() async {
var library = await buildLibrary('''
class A {}
extension E on A {
static int f() => 0;
}
var x = E.f();
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
constructors
#F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
extensions
#F3 extension E (nameOffset:21) (firstTokenOffset:11) (offset:21)
element: <testLibrary>::@extension::E
methods
#F4 isOriginDeclaration f (nameOffset:43) (firstTokenOffset:32) (offset:43)
element: <testLibrary>::@extension::E::@method::f
topLevelVariables
#F5 hasInitializer isOriginDeclaration x (nameOffset:59) (firstTokenOffset:59) (offset:59)
element: <testLibrary>::@topLevelVariable::x
getters
#F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
element: <testLibrary>::@getter::x
setters
#F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
element: <testLibrary>::@setter::x
formalParameters
#F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
element: <testLibrary>::@setter::x::@formalParameter::value
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
extensions
extension E
reference: <testLibrary>::@extension::E
firstFragment: #F3
extendedType: A
onDeclaration: <testLibrary>::@class::A
methods
static isOriginDeclaration f
reference: <testLibrary>::@extension::E::@method::f
firstFragment: #F4
returnType: int
topLevelVariables
hasImplicitType hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F5
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F6
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
synthetic static isOriginVariable x
reference: <testLibrary>::@setter::x
firstFragment: #F7
formalParameters
#E0 requiredPositional value
firstFragment: #F8
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_initializer_untyped() async {
var library = await buildLibrary('var v = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::v
setters
#F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::v
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::v::@formalParameter::value
topLevelVariables
hasImplicitType hasInitializer isOriginDeclaration v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
synthetic static isOriginVariable v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
setters
synthetic static isOriginVariable v
reference: <testLibrary>::@setter::v
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_late() async {
var library = await buildLibrary('late int x = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration x (nameOffset:9) (firstTokenOffset:9) (offset:9)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
element: <testLibrary>::@getter::x
setters
#F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
late hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
synthetic static isOriginVariable x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_late_final() async {
var library = await buildLibrary('late final int x;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration x (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@getter::x
setters
#F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
late final isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
synthetic static isOriginVariable x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_late_final_initialized() async {
var library = await buildLibrary('late final int x = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration x (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@getter::x
topLevelVariables
late final hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_missingName() async {
var library = await buildLibrary(r'''
Object? a,;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
element: <testLibrary>::@topLevelVariable::a
#F2 isOriginDeclaration <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::0
getters
#F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@getter::a
#F4 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::1
setters
#F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@setter::a
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@setter::a::@formalParameter::value
#F7 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@setter::2
formalParameters
#F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@setter::2::@formalParameter::value
topLevelVariables
isOriginDeclaration a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: Object?
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
isOriginDeclaration <null-name>
reference: <testLibrary>::@topLevelVariable::0
firstFragment: #F2
type: Object?
getter: <testLibrary>::@getter::1
setter: <testLibrary>::@setter::2
getters
synthetic static isOriginVariable a
reference: <testLibrary>::@getter::a
firstFragment: #F3
returnType: Object?
variable: <testLibrary>::@topLevelVariable::a
synthetic static isOriginVariable <null-name>
reference: <testLibrary>::@getter::1
firstFragment: #F4
returnType: Object?
variable: <testLibrary>::@topLevelVariable::0
setters
synthetic static isOriginVariable a
reference: <testLibrary>::@setter::a
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: Object?
returnType: void
variable: <testLibrary>::@topLevelVariable::a
synthetic static isOriginVariable <null-name>
reference: <testLibrary>::@setter::2
firstFragment: #F7
formalParameters
#E1 requiredPositional value
firstFragment: #F8
type: Object?
returnType: void
variable: <testLibrary>::@topLevelVariable::0
''');
}
test_variable_propagatedType_const_noDep() async {
var library = await buildLibrary('const i = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration i (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::i
initializer: expression_0
IntegerLiteral
literal: 0 @10
staticType: int
getters
#F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::i
topLevelVariables
const hasImplicitType hasInitializer isOriginDeclaration i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::i
getters
synthetic static isOriginVariable i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_propagatedType_final_dep_inLib() async {
newFile('$testPackageLibPath/a.dart', 'final a = 1;');
var library = await buildLibrary('import "a.dart"; final b = a / 2;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
topLevelVariables
#F1 hasInitializer isOriginDeclaration b (nameOffset:23) (firstTokenOffset:23) (offset:23)
element: <testLibrary>::@topLevelVariable::b
getters
#F2 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@getter::b
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F1
type: double
getter: <testLibrary>::@getter::b
getters
synthetic static isOriginVariable b
reference: <testLibrary>::@getter::b
firstFragment: #F2
returnType: double
variable: <testLibrary>::@topLevelVariable::b
''');
}
test_variable_propagatedType_final_dep_inPart() async {
newFile('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
var library = await buildLibrary(
'library lib; part "a.dart"; final b = a / 2;',
);
checkElementText(library, r'''
library
reference: <testLibrary>
name: lib
fragments
#F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:8)
element: <testLibrary>
nextFragment: #F1
parts
part_0
uri: package:test/a.dart
partKeywordOffset: 13
unit: #F1
topLevelVariables
#F2 hasInitializer isOriginDeclaration b (nameOffset:34) (firstTokenOffset:34) (offset:34)
element: <testLibrary>::@topLevelVariable::b
getters
#F3 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
element: <testLibrary>::@getter::b
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
topLevelVariables
#F4 hasInitializer isOriginDeclaration a (nameOffset:19) (firstTokenOffset:19) (offset:19)
element: <testLibrary>::@topLevelVariable::a
getters
#F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
element: <testLibrary>::@getter::a
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F2
type: double
getter: <testLibrary>::@getter::b
final hasImplicitType hasInitializer isOriginDeclaration a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F4
type: int
getter: <testLibrary>::@getter::a
getters
synthetic static isOriginVariable b
reference: <testLibrary>::@getter::b
firstFragment: #F3
returnType: double
variable: <testLibrary>::@topLevelVariable::b
synthetic static isOriginVariable a
reference: <testLibrary>::@getter::a
firstFragment: #F5
returnType: int
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variable_propagatedType_final_noDep() async {
var library = await buildLibrary('final i = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration i (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::i
getters
#F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::i
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
getters
synthetic static isOriginVariable i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_propagatedType_implicit_dep() async {
// The propagated type is defined in a library that is not imported.
newFile('$testPackageLibPath/a.dart', 'class C {}');
newFile('$testPackageLibPath/b.dart', 'import "a.dart"; C f() => null;');
var library = await buildLibrary('import "b.dart"; final x = f();');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/b.dart
topLevelVariables
#F1 hasInitializer isOriginDeclaration x (nameOffset:23) (firstTokenOffset:23) (offset:23)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@getter::x
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: C
getter: <testLibrary>::@getter::x
getters
synthetic static isOriginVariable x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: C
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_setterInPart_getterInPart() async {
newFile(
'$testPackageLibPath/a.dart',
'part of my.lib; void set x(int _) {}',
);
newFile('$testPackageLibPath/b.dart', 'part of my.lib; int get x => 42;');
var library = await buildLibrary(
'library my.lib; part "a.dart"; part "b.dart";',
);
checkElementText(library, r'''
library
reference: <testLibrary>
name: my.lib
fragments
#F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:8)
element: <testLibrary>
nextFragment: #F1
parts
part_0
uri: package:test/a.dart
partKeywordOffset: 16
unit: #F1
part_1
uri: package:test/b.dart
partKeywordOffset: 31
unit: #F2
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
nextFragment: #F2
topLevelVariables
#F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::x
setters
#F4 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F5 requiredPositional _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::_
#F2 package:test/b.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F1
getters
#F6 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::x
topLevelVariables
synthetic isOriginGetterSetter x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
static isOriginDeclaration x
reference: <testLibrary>::@getter::x
firstFragment: #F6
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
static isOriginDeclaration x
reference: <testLibrary>::@setter::x
firstFragment: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_type_inferred() async {
var library = await buildLibrary('var v = 0;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::v
setters
#F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::v
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::v::@formalParameter::value
topLevelVariables
hasImplicitType hasInitializer isOriginDeclaration v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
synthetic static isOriginVariable v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
setters
synthetic static isOriginVariable v
reference: <testLibrary>::@setter::v
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_type_inferred_Never() async {
var library = await buildLibrary(r'''
var a = throw 42;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::a
getters
#F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::a
setters
#F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::a
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::a::@formalParameter::value
topLevelVariables
hasImplicitType hasInitializer isOriginDeclaration a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: Never
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
getters
synthetic static isOriginVariable a
reference: <testLibrary>::@getter::a
firstFragment: #F2
returnType: Never
variable: <testLibrary>::@topLevelVariable::a
setters
synthetic static isOriginVariable a
reference: <testLibrary>::@setter::a
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: Never
returnType: void
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variable_type_inferred_noInitializer() async {
var library = await buildLibrary(r'''
var a;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::a
getters
#F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::a
setters
#F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::a
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::a::@formalParameter::value
topLevelVariables
hasImplicitType isOriginDeclaration a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
getters
synthetic static isOriginVariable a
reference: <testLibrary>::@getter::a
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::a
setters
synthetic static isOriginVariable a
reference: <testLibrary>::@setter::a
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variableInitializer_contextType_after_astRewrite() async {
var library = await buildLibrary(r'''
class A<T> {
const A();
}
const A<int> a = A();
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
typeParameters
#F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
element: #E0 T
constructors
#F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
typeNameOffset: 21
topLevelVariables
#F4 hasInitializer isOriginDeclaration a (nameOffset:41) (firstTokenOffset:41) (offset:41)
element: <testLibrary>::@topLevelVariable::a
initializer: expression_0
InstanceCreationExpression
constructorName: ConstructorName
type: NamedType
name: A @45
element: <testLibrary>::@class::A
type: A<int>
element: ConstructorMember
baseElement: <testLibrary>::@class::A::@constructor::new
substitution: {T: int}
argumentList: ArgumentList
leftParenthesis: ( @46
rightParenthesis: ) @47
staticType: A<int>
getters
#F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
element: <testLibrary>::@getter::a
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
constructors
const isOriginDeclaration new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
topLevelVariables
const hasInitializer isOriginDeclaration a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F4
type: A<int>
constantInitializer
fragment: #F4
expression: expression_0
getter: <testLibrary>::@getter::a
getters
synthetic static isOriginVariable a
reference: <testLibrary>::@getter::a
firstFragment: #F5
returnType: A<int>
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variables() async {
var library = await buildLibrary('int i; int j;');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration i (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::i
#F2 isOriginDeclaration j (nameOffset:11) (firstTokenOffset:11) (offset:11)
element: <testLibrary>::@topLevelVariable::j
getters
#F3 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::i
#F4 synthetic isOriginVariable j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
element: <testLibrary>::@getter::j
setters
#F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::i
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::i::@formalParameter::value
#F7 synthetic isOriginVariable j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
element: <testLibrary>::@setter::j
formalParameters
#F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
element: <testLibrary>::@setter::j::@formalParameter::value
topLevelVariables
isOriginDeclaration i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
setter: <testLibrary>::@setter::i
isOriginDeclaration j
reference: <testLibrary>::@topLevelVariable::j
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::j
setter: <testLibrary>::@setter::j
getters
synthetic static isOriginVariable i
reference: <testLibrary>::@getter::i
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::i
synthetic static isOriginVariable j
reference: <testLibrary>::@getter::j
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::j
setters
synthetic static isOriginVariable i
reference: <testLibrary>::@setter::i
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::i
synthetic static isOriginVariable j
reference: <testLibrary>::@setter::j
firstFragment: #F7
formalParameters
#E1 requiredPositional value
firstFragment: #F8
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::j
''');
}
// TODO(scheglov): This is duplicate.
void _assertTypeStr(DartType type, String expected) {
var typeStr = type.getDisplayString();
expect(typeStr, expected);
}
}
abstract class TopLevelVariableElementTest_augmentation
extends ElementsBaseTest {
test_getter_augment_class() async {
var library = await buildLibrary(r'''
class A {}
augment int get A => 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
constructors
#F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
topLevelVariables
#F3 synthetic isOriginGetterSetter A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
element: <testLibrary>::@topLevelVariable::A
getters
#F4 augment isOriginDeclaration A (nameOffset:27) (firstTokenOffset:11) (offset:27)
element: <testLibrary>::@getter::A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
topLevelVariables
synthetic isOriginGetterSetter A
reference: <testLibrary>::@topLevelVariable::A
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::A
getters
static isOriginDeclaration A
reference: <testLibrary>::@getter::A
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::A
exportedReferences
declared <testLibrary>::@getter::A
exportNamespace
A: <testLibrary>::@getter::A
''');
}
test_getter_augment_function() async {
var library = await buildLibrary(r'''
void foo() {}
augment int get foo => 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:14) (offset:30)
element: <testLibrary>::@getter::foo
functions
#F3 isOriginDeclaration foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::foo
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
functions
isOriginDeclaration foo
reference: <testLibrary>::@function::foo
firstFragment: #F3
returnType: void
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_getter() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment int get foo => 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_getter_differentType() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment double get foo => 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:18) (offset:37)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_getter_multiple_annotations() async {
newFile('$testPackageLibPath/a.dart', r'''
const a1 = 1;
const a2 = 2;
const a3 = 3;
''');
var library = await buildLibrary(r'''
import 'a.dart';
@a1
int get foo => 0;
@a2
augment int get foo => 1;
@a3
augment int get foo => 2;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:17) (offset:29)
element: <testLibrary>::@getter::foo
metadata
Annotation
atSign: @ @17
name: SimpleIdentifier
token: a1 @18
element: package:test/a.dart::@getter::a1
staticType: null
element: package:test/a.dart::@getter::a1
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:59) (firstTokenOffset:39) (offset:59)
element: <testLibrary>::@getter::foo
metadata
Annotation
atSign: @ @39
name: SimpleIdentifier
token: a2 @40
element: package:test/a.dart::@getter::a2
staticType: null
element: package:test/a.dart::@getter::a2
previousFragment: #F2
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:89) (firstTokenOffset:69) (offset:89)
element: <testLibrary>::@getter::foo
metadata
Annotation
atSign: @ @69
name: SimpleIdentifier
token: a3 @70
element: package:test/a.dart::@getter::a3
staticType: null
element: package:test/a.dart::@getter::a3
previousFragment: #F3
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
metadata
Annotation
atSign: @ @17
name: SimpleIdentifier
token: a1 @18
element: package:test/a.dart::@getter::a1
staticType: null
element: package:test/a.dart::@getter::a1
Annotation
atSign: @ @39
name: SimpleIdentifier
token: a2 @40
element: package:test/a.dart::@getter::a2
staticType: null
element: package:test/a.dart::@getter::a2
Annotation
atSign: @ @69
name: SimpleIdentifier
token: a3 @70
element: package:test/a.dart::@getter::a3
staticType: null
element: package:test/a.dart::@getter::a3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_multiple_getters() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment int get foo => 1;
augment int get foo => 2;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
previousFragment: #F2
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:44) (offset:60)
element: <testLibrary>::@getter::foo
previousFragment: #F3
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_multiple_getters_differentType() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment int get foo => 1;
augment double get foo => 2;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
previousFragment: #F2
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:44) (offset:63)
element: <testLibrary>::@getter::foo
previousFragment: #F3
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_setter() async {
var library = await buildLibrary(r'''
set foo(int _) {}
augment int get foo => 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
setters
#F3 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_getter_augment_variable() async {
var library = await buildLibrary(r'''
int foo = 0;
augment int get foo => 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:13) (offset:29)
element: <testLibrary>::@getter::foo
previousFragment: #F2
setters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_getter_augment_variable_annotated() async {
var library = await buildLibrary(r'''
final foo = 0;
@deprecated
augment int get foo;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:43) (firstTokenOffset:15) (offset:43)
element: <testLibrary>::@getter::foo
metadata
Annotation
atSign: @ @15
name: SimpleIdentifier
token: deprecated @16
element: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
previousFragment: #F2
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
metadata
Annotation
atSign: @ @15
name: SimpleIdentifier
token: deprecated @16
element: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augment_variable_const() async {
var library = await buildLibrary(r'''
const int foo = 0;
augment int get foo => 1;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_0
IntegerLiteral
literal: 0 @16
staticType: int
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
const hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getter_augment_variable_differentType() async {
var library = await buildLibrary(r'''
int foo = 0;
augment double get foo => 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:32) (firstTokenOffset:13) (offset:32)
element: <testLibrary>::@getter::foo
previousFragment: #F2
setters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_getter_augment_variable_final() async {
var library = await buildLibrary(r'''
final int foo = 0;
augment int get foo => 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
final hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_setter_augment_class() async {
var library = await buildLibrary(r'''
class A {}
augment set A(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
constructors
#F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
topLevelVariables
#F3 synthetic isOriginGetterSetter A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@topLevelVariable::A
setters
#F4 augment isOriginDeclaration A (nameOffset:23) (firstTokenOffset:11) (offset:23)
element: <testLibrary>::@setter::A
formalParameters
#F5 requiredPositional _ (nameOffset:29) (firstTokenOffset:25) (offset:29)
element: <testLibrary>::@setter::A::@formalParameter::_
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
topLevelVariables
synthetic isOriginGetterSetter A
reference: <testLibrary>::@topLevelVariable::A
firstFragment: #F3
type: int
setter: <testLibrary>::@setter::A
setters
static isOriginDeclaration A
reference: <testLibrary>::@setter::A
firstFragment: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::A
exportedReferences
declared <testLibrary>::@class::A
declared <testLibrary>::@setter::A
exportNamespace
A: <testLibrary>::@class::A
A=: <testLibrary>::@setter::A
''');
}
test_setter_augment_function() async {
var library = await buildLibrary(r'''
void foo() {}
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 augment isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:14) (offset:26)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional _ (nameOffset:34) (firstTokenOffset:30) (offset:34)
element: <testLibrary>::@setter::foo::@formalParameter::_
functions
#F4 isOriginDeclaration foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::foo
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
functions
isOriginDeclaration foo
reference: <testLibrary>::@function::foo
firstFragment: #F4
returnType: void
exportedReferences
declared <testLibrary>::@function::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@function::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_getter() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
setters
#F3 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional _ (nameOffset:38) (firstTokenOffset:34) (offset:38)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_getter_differentType() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment set foo(double _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
setters
#F3 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional _ (nameOffset:41) (firstTokenOffset:34) (offset:41)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: double
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_getter_multiple_annotations() async {
newFile('$testPackageLibPath/a.dart', r'''
const a1 = 1;
const a2 = 2;
const a3 = 3;
''');
var library = await buildLibrary(r'''
import 'a.dart';
@a1
set foo(int _) {}
@a2
augment set foo(int _) {}
@a3
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/a.dart
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @17
name: SimpleIdentifier
token: a1 @18
element: package:test/a.dart::@getter::a1
staticType: null
element: package:test/a.dart::@getter::a1
formalParameters
#F3 requiredPositional _ (nameOffset:33) (firstTokenOffset:29) (offset:33)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:55) (firstTokenOffset:39) (offset:55)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @39
name: SimpleIdentifier
token: a2 @40
element: package:test/a.dart::@getter::a2
staticType: null
element: package:test/a.dart::@getter::a2
formalParameters
#F5 requiredPositional _ (nameOffset:63) (firstTokenOffset:59) (offset:63)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F2
nextFragment: #F6
#F6 augment isOriginDeclaration foo (nameOffset:85) (firstTokenOffset:69) (offset:85)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @69
name: SimpleIdentifier
token: a3 @70
element: package:test/a.dart::@getter::a3
staticType: null
element: package:test/a.dart::@getter::a3
formalParameters
#F7 requiredPositional _ (nameOffset:93) (firstTokenOffset:89) (offset:93)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F4
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
metadata
Annotation
atSign: @ @17
name: SimpleIdentifier
token: a1 @18
element: package:test/a.dart::@getter::a1
staticType: null
element: package:test/a.dart::@getter::a1
Annotation
atSign: @ @39
name: SimpleIdentifier
token: a2 @40
element: package:test/a.dart::@getter::a2
staticType: null
element: package:test/a.dart::@getter::a2
Annotation
atSign: @ @69
name: SimpleIdentifier
token: a3 @70
element: package:test/a.dart::@getter::a3
staticType: null
element: package:test/a.dart::@getter::a3
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_multiple_setters() async {
var library = await buildLibrary(r'''
int set foo(int _) {}
augment set foo(int _) {}
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional _ (nameOffset:16) (firstTokenOffset:12) (offset:16)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F2
nextFragment: #F6
#F6 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
element: <testLibrary>::@setter::foo
formalParameters
#F7 requiredPositional _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F4
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_multiple_setters_differentType() async {
var library = await buildLibrary(r'''
int set foo(int _) {}
augment set foo(int _) {}
augment set foo(double _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional _ (nameOffset:16) (firstTokenOffset:12) (offset:16)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F2
nextFragment: #F6
#F6 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
element: <testLibrary>::@setter::foo
formalParameters
#F7 requiredPositional _ (nameOffset:71) (firstTokenOffset:64) (offset:71)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F4
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_setter() async {
var library = await buildLibrary(r'''
set foo(int _) {}
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
#F4 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional _ (nameOffset:38) (firstTokenOffset:34) (offset:38)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F2
topLevelVariables
synthetic isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_variable() async {
var library = await buildLibrary(r'''
int foo = 0;
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
nextFragment: #F5
#F5 augment isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional _ (nameOffset:33) (firstTokenOffset:29) (offset:33)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F3
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_variable_annotated() async {
var library = await buildLibrary(r'''
final foo = 0;
@deprecated
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::foo
setters
#F3 augment isOriginDeclaration foo (nameOffset:39) (firstTokenOffset:15) (offset:39)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @15
name: SimpleIdentifier
token: deprecated @16
element: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
formalParameters
#F4 requiredPositional _ (nameOffset:47) (firstTokenOffset:43) (offset:47)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
metadata
Annotation
atSign: @ @15
name: SimpleIdentifier
token: deprecated @16
element: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_variable_const() async {
var library = await buildLibrary(r'''
const int foo = 0;
augment set foo(int _) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_0
IntegerLiteral
literal: 0 @16
staticType: int
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
setters
#F3 augment isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
const hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_setter_augment_variable_differentType() async {
var library = await buildLibrary(r'''
int foo = 0;
augment set foo(double _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
nextFragment: #F5
#F5 augment isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional _ (nameOffset:36) (firstTokenOffset:29) (offset:36)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F3
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augment_variable_final() async {
var library = await buildLibrary(r'''
final int foo = 0;
augment set foo(int _) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
setters
#F3 augment isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
final hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_class() async {
var library = await buildLibrary(r'''
class A {}
augment int A = 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
constructors
#F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
topLevelVariables
#F3 augment hasInitializer isOriginDeclaration A (nameOffset:23) (firstTokenOffset:23) (offset:23)
element: <testLibrary>::@topLevelVariable::A
getters
#F4 synthetic isOriginVariable A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@getter::A
setters
#F5 synthetic isOriginVariable A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@setter::A
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@setter::A::@formalParameter::value
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
topLevelVariables
hasInitializer isOriginDeclaration A
reference: <testLibrary>::@topLevelVariable::A
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::A
setter: <testLibrary>::@setter::A
getters
synthetic static isOriginVariable A
reference: <testLibrary>::@getter::A
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::A
setters
synthetic static isOriginVariable A
reference: <testLibrary>::@setter::A
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::A
exportedReferences
declared <testLibrary>::@getter::A
declared <testLibrary>::@setter::A
exportNamespace
A: <testLibrary>::@getter::A
A=: <testLibrary>::@setter::A
''');
}
test_variable_augment_function() async {
var library = await buildLibrary(r'''
void foo() {}
augment int foo = 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 augment hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@getter::foo
setters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@setter::foo::@formalParameter::value
functions
#F5 isOriginDeclaration foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::foo
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
functions
isOriginDeclaration foo
reference: <testLibrary>::@function::foo
firstFragment: #F5
returnType: void
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_getter() async {
var library = await buildLibrary(r'''
int get foo => 0;
augment int foo = 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
topLevelVariables
synthetic hasInitializer isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static isOriginDeclaration foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_variable_augment_multiple_variables() async {
var library = await buildLibrary(r'''
int foo = 0;
augment int foo = 1;
augment int foo = 2;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
nextFragment: #F3
#F3 augment hasInitializer isOriginDeclaration foo (nameOffset:46) (firstTokenOffset:46) (offset:46)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F2
getters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_multiple_variables_different_type() async {
var library = await buildLibrary(r'''
int foo = 0;
augment int foo = 1;
augment double foo;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
nextFragment: #F3
#F3 augment isOriginDeclaration foo (nameOffset:49) (firstTokenOffset:49) (offset:49)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F2
getters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_setter() async {
var library = await buildLibrary(r'''
set foo(int _) {}
augment int foo = 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
setters
#F3 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
synthetic hasInitializer isOriginGetterSetter foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
static isOriginDeclaration foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_variable() async {
var library = await buildLibrary(r'''
int foo = 0;
augment int foo = 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_variable_annotated() async {
var library = await buildLibrary(r'''
final foo = 0;
@deprecated
augment final foo;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment isOriginDeclaration foo (nameOffset:41) (firstTokenOffset:41) (offset:41)
element: <testLibrary>::@topLevelVariable::foo
metadata
Annotation
atSign: @ @15
name: SimpleIdentifier
token: deprecated @16
element: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
previousFragment: #F1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::foo
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
metadata
Annotation
atSign: @ @15
name: SimpleIdentifier
token: deprecated @16
element: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
type: int
getter: <testLibrary>::@getter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_variable_augment_variable_augmented_const() async {
var library = await buildLibrary(r'''
const int foo = 0;
augment const int foo = 1;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_0
IntegerLiteral
literal: 0 @16
staticType: null
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:37) (offset:37)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_1
IntegerLiteral
literal: 1 @43
staticType: int
previousFragment: #F1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
topLevelVariables
const hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
constantInitializer
fragment: #F2
expression: expression_1
getter: <testLibrary>::@getter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_variable_augment_variable_differentType() async {
var library = await buildLibrary(r'''
int foo = 0;
augment double foo;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment isOriginDeclaration foo (nameOffset:28) (firstTokenOffset:28) (offset:28)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augment_variable_final() async {
var library = await buildLibrary(r'''
final int = 0;
augment int foo = 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration int (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::int
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
element: <testLibrary>::@topLevelVariable::foo
getters
#F3 synthetic isOriginVariable int (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::int
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
element: <testLibrary>::@getter::foo
setters
#F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
final hasImplicitType hasInitializer isOriginDeclaration int
reference: <testLibrary>::@topLevelVariable::int
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::int
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F2
type: dynamic
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable int
reference: <testLibrary>::@getter::int
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::int
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F4
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@getter::int
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
int: <testLibrary>::@getter::int
''');
}
test_variable_augment_variable_initializer() async {
var library = await buildLibrary(r'''
int foo;
augment int foo = 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 augment hasInitializer isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:21) (offset:21)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
synthetic static isOriginVariable foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
synthetic static isOriginVariable foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportedReferences
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
}
@reflectiveTest
class TopLevelVariableElementTest_augmentation_fromBytes
extends TopLevelVariableElementTest_augmentation {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class TopLevelVariableElementTest_augmentation_keepLinking
extends TopLevelVariableElementTest_augmentation {
@override
bool get keepLinkingLibraries => true;
}
@reflectiveTest
class TopLevelVariableElementTest_fromBytes
extends TopLevelVariableElementTest {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class TopLevelVariableElementTest_keepLinking
extends TopLevelVariableElementTest {
@override
bool get keepLinkingLibraries => true;
}