blob: 2382a4951a9184c7db4b59e37a357bd967b3ef71 [file]
// 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(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 isOriginGetterSetter isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::a
#F2 isOriginGetterSetter isStatic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
element: <testLibrary>::@topLevelVariable::b
getters
#F3 isCompleteDeclaration isOriginDeclaration isStatic a (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::a
setters
#F4 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic b (nameOffset:20) (firstTokenOffset:16) (offset:20)
element: <testLibrary>::@setter::b
formalParameters
#F5 requiredPositional isOriginDeclaration _ (nameOffset:26) (firstTokenOffset:22) (offset:26)
element: <testLibrary>::@setter::b::@formalParameter::_
#F6 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic a (nameOffset:36) (firstTokenOffset:32) (offset:36)
element: <testLibrary>::@setter::a
formalParameters
#F7 requiredPositional isOriginDeclaration _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
element: <testLibrary>::@setter::a::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
isOriginGetterSetter isStatic b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F2
type: int
setter: <testLibrary>::@setter::b
getters
isOriginDeclaration isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::a
setters
isOriginDeclaration isStatic b
reference: <testLibrary>::@setter::b
firstFragment: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::b
isOriginDeclaration isStatic 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 isOriginGetterSetter isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
element: <testLibrary>::@topLevelVariable::a
#F2 isOriginGetterSetter isStatic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::b
getters
#F3 isCompleteDeclaration isOriginDeclaration isStatic b (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::b
#F4 isCompleteDeclaration isOriginDeclaration isStatic a (nameOffset:40) (firstTokenOffset:32) (offset:40)
element: <testLibrary>::@getter::a
setters
#F5 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic a (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::a
formalParameters
#F6 requiredPositional isOriginDeclaration _ (nameOffset:10) (firstTokenOffset:6) (offset:10)
element: <testLibrary>::@setter::a::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
isOriginGetterSetter isStatic b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::b
getters
isOriginDeclaration isStatic b
reference: <testLibrary>::@getter::b
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::b
isOriginDeclaration isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::a
setters
isOriginDeclaration isStatic a
reference: <testLibrary>::@setter::a
firstFragment: #F5
formalParameters
#E0 requiredPositional _
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_getter_abstract() async {
var library = await buildLibrary(r'''
int get x;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isOriginDeclaration isStatic x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
''');
}
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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isAsynchronous isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:16) (firstTokenOffset:0) (offset:16)
element: <testLibrary>::@getter::foo
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: Future<int>
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isAsynchronous isCompleteDeclaration isGenerator isOriginDeclaration isStatic foo (nameOffset:38) (firstTokenOffset:22) (offset:38)
element: <testLibrary>::@getter::foo
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: Stream<int>
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: Stream<int>
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getter_augmentation_chain() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:37) (firstTokenOffset:18) (offset:37)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_fromVariable() 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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:29) (firstTokenOffset:13) (offset:29)
element: <testLibrary>::@getter::foo
previousFragment: #F2
setters
#F4 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_getter_augmentation_chain_fromVariable_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 isConst isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_0
IntegerLiteral
literal: 0 @16
staticType: int
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
hasInitializer isConst isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getter_augmentation_chain_fromVariable_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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:32) (firstTokenOffset:13) (offset:32)
element: <testLibrary>::@getter::foo
previousFragment: #F2
setters
#F4 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_getter_augmentation_chain_fromVariable_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 isFinal isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
element: <testLibrary>::@getter::foo
previousFragment: #F2
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_fromVariable_metadata() 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 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isOriginDeclaration isStatic 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
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginVariable isStatic 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
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_metadata() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic 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 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic 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 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic 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
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic 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
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_noIntroductoryDeclaration() async {
var library = await buildLibrary(r'''
augment int get foo => 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:16) (firstTokenOffset:0) (offset:16)
element: <testLibrary>::@getter::foo
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_twoDeclarations() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
previousFragment: #F2
nextFragment: #F4
#F4 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:60) (firstTokenOffset:44) (offset:60)
element: <testLibrary>::@getter::foo
previousFragment: #F3
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_chain_twoDeclarations_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
nextFragment: #F3
#F3 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
previousFragment: #F2
nextFragment: #F4
#F4 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:63) (firstTokenOffset:44) (offset:63)
element: <testLibrary>::@getter::foo
previousFragment: #F3
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_sameName_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 isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
topLevelVariables
#F3 isOriginGetterSetter isStatic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
element: <testLibrary>::@topLevelVariable::A
getters
#F4 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic A (nameOffset:27) (firstTokenOffset:11) (offset:27)
element: <testLibrary>::@getter::A
classes
isSimplyBounded class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
topLevelVariables
isOriginGetterSetter isStatic A
reference: <testLibrary>::@topLevelVariable::A
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::A
getters
isOriginDeclaration isStatic A
reference: <testLibrary>::@getter::A
firstFragment: #F4
previousFragmentOfDifferentKind: #F1
returnType: int
variable: <testLibrary>::@topLevelVariable::A
exportEntries
declared <testLibrary>::@getter::A
exportNamespace
A: <testLibrary>::@getter::A
''');
}
test_getter_augmentation_sameName_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:30) (firstTokenOffset:14) (offset:30)
element: <testLibrary>::@getter::foo
functions
#F3 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::foo
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
previousFragmentOfDifferentKind: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
functions
isOriginDeclaration isStatic foo
reference: <testLibrary>::@function::foo
firstFragment: #F3
returnType: void
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_getter_augmentation_sameName_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
previousFragmentOfDifferentKind: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_getter_documented() async {
var library = await buildLibrary(r'''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
get x => null;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:64) (firstTokenOffset:44) (offset:64)
element: <testLibrary>::@getter::x
documentationComment: /**\n * Docs\n */
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::x
getters
isOriginDeclaration isStatic 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(r'''
external int get x;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isExternal isOriginDeclaration isStatic x (nameOffset:17) (firstTokenOffset:0) (offset:17)
element: <testLibrary>::@getter::x
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
isExternal isOriginDeclaration isStatic 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(r'''
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 hasExtendsClause class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
fields
#F2 isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@field::f
constructors
#F3 isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@constructor::new
typeName: C
getters
#F4 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration f (nameOffset:26) (firstTokenOffset:22) (offset:26)
element: <testLibrary>::@class::C::@getter::f
#F5 isAbstract class D (nameOffset:55) (firstTokenOffset:40) (offset:55)
element: <testLibrary>::@class::D
fields
#F6 isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
element: <testLibrary>::@class::D::@field::f
constructors
#F7 isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
element: <testLibrary>::@class::D::@constructor::new
typeName: D
getters
#F8 isAbstract isOriginDeclaration f (nameOffset:69) (firstTokenOffset:61) (offset:69)
element: <testLibrary>::@class::D::@getter::f
classes
isSimplyBounded class C
reference: <testLibrary>::@class::C
firstFragment: #F1
supertype: D
fields
isOriginGetterSetter f
reference: <testLibrary>::@class::C::@field::f
firstFragment: #F2
type: int
getter: <testLibrary>::@class::C::@getter::f
constructors
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
isAbstract isSimplyBounded class D
reference: <testLibrary>::@class::D
firstFragment: #F5
fields
isOriginGetterSetter f
reference: <testLibrary>::@class::D::@field::f
firstFragment: #F6
type: int
getter: <testLibrary>::@class::D::@getter::f
constructors
isOriginImplicitDefault new
reference: <testLibrary>::@class::D::@constructor::new
firstFragment: #F7
getters
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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isGenerator isOriginDeclaration isStatic foo (nameOffset:18) (firstTokenOffset:0) (offset:18)
element: <testLibrary>::@getter::foo
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: Iterator<int>
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: Iterator<int>
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_getters() async {
var library = await buildLibrary(r'''
int get x => null;
get y => null;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
#F2 isOriginGetterSetter isStatic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@topLevelVariable::y
getters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
#F4 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic y (nameOffset:23) (firstTokenOffset:19) (offset:23)
element: <testLibrary>::@getter::y
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
isOriginGetterSetter isStatic y
reference: <testLibrary>::@topLevelVariable::y
firstFragment: #F2
type: dynamic
getter: <testLibrary>::@getter::y
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::x
isOriginDeclaration isStatic y
reference: <testLibrary>::@getter::y
firstFragment: #F4
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::y
''');
}
test_implicitTopLevelVariable_getterFirst() async {
var library = await buildLibrary(r'''
int get x => 0;
void set x(int value) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional isOriginDeclaration value (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic 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(r'''
void set x(int value) {}
int get x => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:33) (firstTokenOffset:25) (offset:33)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:9) (firstTokenOffset:0) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional isOriginDeclaration value (nameOffset:15) (firstTokenOffset:11) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_setter_abstract() async {
var library = await buildLibrary(r'''
set x(int _);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::x
setters
#F2 hasImplicitReturnType isOriginDeclaration isStatic x (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::x
formalParameters
#F3 requiredPositional isOriginDeclaration _ (nameOffset:10) (firstTokenOffset:6) (offset:10)
element: <testLibrary>::@setter::x::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::x
setters
isOriginDeclaration isStatic x
reference: <testLibrary>::@setter::x
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_setter_augmentation_chain() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional isOriginDeclaration _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
nextFragment: #F5
#F5 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:38) (firstTokenOffset:34) (offset:38)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F3
previousFragment: #F2
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_chain_fromVariable() 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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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
nextFragment: #F6
#F6 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional isOriginDeclaration _ (nameOffset:33) (firstTokenOffset:29) (offset:33)
element: <testLibrary>::@setter::foo::@formalParameter::value
previousFragment: #F4
previousFragment: #F3
topLevelVariables
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_chain_fromVariable_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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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
nextFragment: #F6
#F6 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
element: <testLibrary>::@setter::foo
formalParameters
#F5 requiredPositional isOriginDeclaration _ (nameOffset:36) (firstTokenOffset:29) (offset:36)
element: <testLibrary>::@setter::foo::@formalParameter::value
previousFragment: #F4
previousFragment: #F3
topLevelVariables
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_chain_metadata() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:26) (firstTokenOffset:18) (offset:26)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @18
name: SimpleIdentifier
token: a1 @19
element: package:test/a.dart::@getter::a1
staticType: null
element: package:test/a.dart::@getter::a1
formalParameters
#F3 requiredPositional isOriginDeclaration _ (nameOffset:34) (firstTokenOffset:30) (offset:34)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
nextFragment: #F5
#F5 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:56) (firstTokenOffset:40) (offset:56)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @40
name: SimpleIdentifier
token: a2 @41
element: package:test/a.dart::@getter::a2
staticType: null
element: package:test/a.dart::@getter::a2
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:64) (firstTokenOffset:60) (offset:64)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F3
nextFragment: #F6
previousFragment: #F2
nextFragment: #F7
#F7 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:86) (firstTokenOffset:70) (offset:86)
element: <testLibrary>::@setter::foo
metadata
Annotation
atSign: @ @70
name: SimpleIdentifier
token: a3 @71
element: package:test/a.dart::@getter::a3
staticType: null
element: package:test/a.dart::@getter::a3
formalParameters
#F6 requiredPositional isOriginDeclaration _ (nameOffset:94) (firstTokenOffset:90) (offset:94)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F4
previousFragment: #F5
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
metadata
Annotation
atSign: @ @18
name: SimpleIdentifier
token: a1 @19
element: package:test/a.dart::@getter::a1
staticType: null
element: package:test/a.dart::@getter::a1
Annotation
atSign: @ @40
name: SimpleIdentifier
token: a2 @41
element: package:test/a.dart::@getter::a2
staticType: null
element: package:test/a.dart::@getter::a2
Annotation
atSign: @ @70
name: SimpleIdentifier
token: a3 @71
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
exportEntries
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_chain_noIntroductoryDeclaration() async {
var library = await buildLibrary(r'''
augment set foo(int value) {}
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:12) (firstTokenOffset:0) (offset:12)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional isOriginDeclaration value (nameOffset:20) (firstTokenOffset:16) (offset:20)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional value
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_chain_twoDeclarations() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional isOriginDeclaration _ (nameOffset:16) (firstTokenOffset:12) (offset:16)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
nextFragment: #F5
#F5 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F3
nextFragment: #F6
previousFragment: #F2
nextFragment: #F7
#F7 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional isOriginDeclaration _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F4
previousFragment: #F5
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_chain_twoDeclarations_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional isOriginDeclaration _ (nameOffset:16) (firstTokenOffset:12) (offset:16)
element: <testLibrary>::@setter::foo::@formalParameter::_
nextFragment: #F4
nextFragment: #F5
#F5 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F3
nextFragment: #F6
previousFragment: #F2
nextFragment: #F7
#F7 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
element: <testLibrary>::@setter::foo
formalParameters
#F6 requiredPositional isOriginDeclaration _ (nameOffset:71) (firstTokenOffset:64) (offset:71)
element: <testLibrary>::@setter::foo::@formalParameter::_
previousFragment: #F4
previousFragment: #F5
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_sameName_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 isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
topLevelVariables
#F3 isOriginGetterSetter isStatic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::A
setters
#F4 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic A (nameOffset:24) (firstTokenOffset:12) (offset:24)
element: <testLibrary>::@setter::A
formalParameters
#F5 requiredPositional isOriginDeclaration _ (nameOffset:30) (firstTokenOffset:26) (offset:30)
element: <testLibrary>::@setter::A::@formalParameter::_
classes
isSimplyBounded class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
topLevelVariables
isOriginGetterSetter isStatic A
reference: <testLibrary>::@topLevelVariable::A
firstFragment: #F3
type: int
setter: <testLibrary>::@setter::A
setters
isOriginDeclaration isStatic A
reference: <testLibrary>::@setter::A
firstFragment: #F4
previousFragmentOfDifferentKind: #F1
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::A
exportEntries
declared <testLibrary>::@class::A
declared <testLibrary>::@setter::A
exportNamespace
A: <testLibrary>::@class::A
A=: <testLibrary>::@setter::A
''');
}
test_setter_augmentation_sameName_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@topLevelVariable::foo
setters
#F2 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:26) (firstTokenOffset:14) (offset:26)
element: <testLibrary>::@setter::foo
formalParameters
#F3 requiredPositional isOriginDeclaration _ (nameOffset:34) (firstTokenOffset:30) (offset:34)
element: <testLibrary>::@setter::foo::@formalParameter::_
functions
#F4 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::foo
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F2
previousFragmentOfDifferentKind: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F3
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
functions
isOriginDeclaration isStatic foo
reference: <testLibrary>::@function::foo
firstFragment: #F4
returnType: void
exportEntries
declared <testLibrary>::@function::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@function::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_sameName_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:38) (firstTokenOffset:34) (offset:38)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
previousFragmentOfDifferentKind: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_sameName_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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:41) (firstTokenOffset:34) (offset:41)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
previousFragmentOfDifferentKind: #F2
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: double
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_sameName_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 isConst isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_0
IntegerLiteral
literal: 0 @16
staticType: int
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
hasInitializer isConst isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
previousFragmentOfDifferentKind: #F1
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_setter_augmentation_sameName_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 isFinal isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
previousFragmentOfDifferentKind: #F1
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_augmentation_sameName_variable_metadata() 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 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isAugmentation isCompleteDeclaration isOriginDeclaration isStatic 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 isOriginDeclaration _ (nameOffset:47) (firstTokenOffset:43) (offset:47)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
previousFragmentOfDifferentKind: #F1
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
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_setter_documented() async {
var library = await buildLibrary(r'''
// 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 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
element: <testLibrary>::@topLevelVariable::x
setters
#F2 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:69) (firstTokenOffset:44) (offset:69)
element: <testLibrary>::@setter::x
documentationComment: /**\n * Docs\n */
formalParameters
#F3 requiredPositional hasImplicitType isOriginDeclaration value (nameOffset:71) (firstTokenOffset:71) (offset:71)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: dynamic
setter: <testLibrary>::@setter::x
setters
isOriginDeclaration isStatic 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(r'''
external void set x(int value);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
element: <testLibrary>::@topLevelVariable::x
setters
#F2 isCompleteDeclaration isExternal isOriginDeclaration isStatic x (nameOffset:18) (firstTokenOffset:0) (offset:18)
element: <testLibrary>::@setter::x
formalParameters
#F3 requiredPositional isOriginDeclaration value (nameOffset:24) (firstTokenOffset:20) (offset:24)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::x
setters
isExternal isOriginDeclaration isStatic 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(r'''
set f(int value) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::f
setters
#F2 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic f (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::f
formalParameters
#F3 requiredPositional isOriginDeclaration value (nameOffset:10) (firstTokenOffset:6) (offset:10)
element: <testLibrary>::@setter::f::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic f
reference: <testLibrary>::@topLevelVariable::f
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::f
setters
isOriginDeclaration isStatic 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(r'''
void set x(int value) {}
set y(value) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
element: <testLibrary>::@topLevelVariable::x
#F2 isOriginGetterSetter isStatic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
element: <testLibrary>::@topLevelVariable::y
setters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:9) (firstTokenOffset:0) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional isOriginDeclaration value (nameOffset:15) (firstTokenOffset:11) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
#F5 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic y (nameOffset:29) (firstTokenOffset:25) (offset:29)
element: <testLibrary>::@setter::y
formalParameters
#F6 requiredPositional hasImplicitType isOriginDeclaration value (nameOffset:31) (firstTokenOffset:31) (offset:31)
element: <testLibrary>::@setter::y::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::x
isOriginGetterSetter isStatic y
reference: <testLibrary>::@topLevelVariable::y
firstFragment: #F2
type: dynamic
setter: <testLibrary>::@setter::y
setters
isOriginDeclaration isStatic x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
isOriginDeclaration isStatic y
reference: <testLibrary>::@setter::y
firstFragment: #F5
formalParameters
#E1 requiredPositional hasImplicitType value
firstFragment: #F6
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::y
''');
}
test_unit_implicitVariable_getterFirst() async {
var library = await buildLibrary(r'''
int get x => 0;
void set x(int value) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional isOriginDeclaration value (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic 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(r'''
void set x(int value) {}
int get x => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:33) (firstTokenOffset:25) (offset:33)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:9) (firstTokenOffset:0) (offset:9)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional isOriginDeclaration value (nameOffset:15) (firstTokenOffset:11) (offset:15)
element: <testLibrary>::@setter::x::@formalParameter::value
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic 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(r'''
int foo = 0;
int foo = 1;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
#F2 hasInitializer isOriginDeclaration isStatic foo (nameOffset:17) (firstTokenOffset:17) (offset:17)
element: <testLibrary>::@topLevelVariable::foo#1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
#F4 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@getter::foo#1
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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
#F7 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@setter::foo#1
formalParameters
#F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@setter::foo#1::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo#1
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::foo#1
setter: <testLibrary>::@setter::foo#1
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo#1
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo#1
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo#1
firstFragment: #F7
formalParameters
#E1 requiredPositional value
firstFragment: #F8
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo#1
''');
}
test_unit_variable_duplicate_getter() async {
var library = await buildLibrary(r'''
int foo = 0;
int get foo => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
#F2 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
element: <testLibrary>::@topLevelVariable::foo#1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
#F4 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:21) (firstTokenOffset:13) (offset:21)
element: <testLibrary>::@getter::foo#1
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo#1
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::foo#1
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo#1
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo#1
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_unit_variable_duplicate_setter() async {
var library = await buildLibrary(r'''
int foo = 0;
set foo(int _) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
#F2 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
element: <testLibrary>::@topLevelVariable::foo#1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 isCompleteDeclaration isOriginVariable isStatic 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
#F6 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:17) (firstTokenOffset:13) (offset:17)
element: <testLibrary>::@setter::foo#1
formalParameters
#F7 requiredPositional isOriginDeclaration _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
element: <testLibrary>::@setter::foo#1::@formalParameter::_
topLevelVariables
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo#1
firstFragment: #F2
type: int
setter: <testLibrary>::@setter::foo#1
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo#1
firstFragment: #F6
formalParameters
#E1 requiredPositional _
firstFragment: #F7
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo#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 isFinal isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
setters
#F3 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:23) (firstTokenOffset:19) (offset:23)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration newValue (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::foo::@formalParameter::newValue
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginDeclaration isStatic 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(r'''
int x = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration isStatic x (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginVariable isStatic x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_abstract() async {
var library = await buildLibrary(r'''
abstract int i;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isAbstract isOriginDeclaration isStatic i (nameOffset:13) (firstTokenOffset:13) (offset:13)
element: <testLibrary>::@topLevelVariable::i
getters
#F2 isAbstract isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
element: <testLibrary>::@getter::i
setters
#F3 isAbstract isOriginVariable isStatic 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
isAbstract isOriginDeclaration isStatic i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
setter: <testLibrary>::@setter::i
getters
isOriginVariable isStatic i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
setters
isOriginVariable isStatic i
reference: <testLibrary>::@setter::i
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_augmentation_chain() 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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_chain_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 isConst isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_0
IntegerLiteral
literal: 0 @16
staticType: null
nextFragment: #F2
#F2 hasInitializer isAugmentation isConst isOriginDeclaration isStatic foo (nameOffset:37) (firstTokenOffset:37) (offset:37)
element: <testLibrary>::@topLevelVariable::foo
initializer: expression_1
IntegerLiteral
literal: 1 @43
staticType: int
previousFragment: #F1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
topLevelVariables
hasInitializer isConst isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
constantInitializer
fragment: #F2
expression: expression_1
getter: <testLibrary>::@getter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
''');
}
test_variable_augmentation_chain_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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 isAugmentation isOriginDeclaration isStatic foo (nameOffset:28) (firstTokenOffset:28) (offset:28)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_chain_final() async {
var library = await buildLibrary(r'''
final int foo = 0;
augment int foo = 1;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isFinal isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:31) (firstTokenOffset:31) (offset:31)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_variable_augmentation_chain_fromGetter() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
topLevelVariables
hasInitializer isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_variable_augmentation_chain_fromSetter() 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 isOriginGetterSetter isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
setters
#F3 hasImplicitReturnType isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::_
topLevelVariables
hasInitializer isOriginGetterSetter isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
setter: <testLibrary>::@setter::foo
setters
isOriginDeclaration isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional _
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@setter::foo
exportNamespace
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_chain_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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:21) (firstTokenOffset:21) (offset:21)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F4 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional value
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_chain_metadata() 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 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasImplicitType isAugmentation isFinal isOriginDeclaration isStatic 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 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::foo
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer 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
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
''');
}
test_variable_augmentation_chain_noIntroductoryDeclaration() async {
var library = await buildLibrary(r'''
augment int foo = 0;
''');
configuration.withExportScope = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:12) (firstTokenOffset:12) (offset:12)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
element: <testLibrary>::@getter::foo
setters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
element: <testLibrary>::@setter::foo
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
element: <testLibrary>::@setter::foo::@formalParameter::value
topLevelVariables
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_chain_twoDeclarations() 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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
nextFragment: #F3
#F3 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:46) (firstTokenOffset:46) (offset:46)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F2
getters
#F4 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_chain_twoDeclarations_differentType() 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 isStatic foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::foo
nextFragment: #F2
#F2 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F1
nextFragment: #F3
#F3 isAugmentation isOriginDeclaration isStatic foo (nameOffset:49) (firstTokenOffset:49) (offset:49)
element: <testLibrary>::@topLevelVariable::foo
previousFragment: #F2
getters
#F4 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::foo
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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 isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_augmentation_sameName_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 isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
topLevelVariables
#F3 hasInitializer isAugmentation isOriginDeclaration isStatic A (nameOffset:23) (firstTokenOffset:23) (offset:23)
element: <testLibrary>::@topLevelVariable::A
getters
#F4 isCompleteDeclaration isOriginVariable isStatic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
element: <testLibrary>::@getter::A
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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
isSimplyBounded class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
isOriginImplicitDefault new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
topLevelVariables
hasInitializer isOriginDeclaration isStatic A
reference: <testLibrary>::@topLevelVariable::A
firstFragment: #F3
previousFragmentOfDifferentKind: #F1
type: int
getter: <testLibrary>::@getter::A
setter: <testLibrary>::@setter::A
getters
isOriginVariable isStatic A
reference: <testLibrary>::@getter::A
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::A
setters
isOriginVariable isStatic A
reference: <testLibrary>::@setter::A
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::A
exportEntries
declared <testLibrary>::@getter::A
declared <testLibrary>::@setter::A
exportNamespace
A: <testLibrary>::@getter::A
A=: <testLibrary>::@setter::A
''');
}
test_variable_augmentation_sameName_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 hasInitializer isAugmentation isOriginDeclaration isStatic foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
element: <testLibrary>::@getter::foo
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isCompleteDeclaration isOriginDeclaration isStatic foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::foo
topLevelVariables
hasInitializer isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
previousFragmentOfDifferentKind: #F5
type: int
getter: <testLibrary>::@getter::foo
setter: <testLibrary>::@setter::foo
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
setters
isOriginVariable isStatic foo
reference: <testLibrary>::@setter::foo
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::foo
functions
isOriginDeclaration isStatic foo
reference: <testLibrary>::@function::foo
firstFragment: #F5
returnType: void
exportEntries
declared <testLibrary>::@getter::foo
declared <testLibrary>::@setter::foo
exportNamespace
foo: <testLibrary>::@getter::foo
foo=: <testLibrary>::@setter::foo
''');
}
test_variable_const() async {
var library = await buildLibrary(r'''
const int i = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isConst isOriginDeclaration isStatic i (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::i
initializer: expression_0
IntegerLiteral
literal: 0 @14
staticType: int
getters
#F2 isCompleteDeclaration isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::i
topLevelVariables
hasInitializer isConst isOriginDeclaration isStatic i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::i
getters
isOriginVariable isStatic i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_const_late() async {
var library = await buildLibrary(r'''
late const int i = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isConst isLate isOriginDeclaration isStatic i (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: <testLibrary>::@topLevelVariable::i
initializer: expression_0
IntegerLiteral
literal: 0 @19
staticType: int
getters
#F2 isCompleteDeclaration isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@getter::i
topLevelVariables
hasInitializer isConst isLate isOriginDeclaration isStatic i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::i
getters
isOriginVariable isStatic i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_documented() async {
var library = await buildLibrary(r'''
// Extra comment so doc comment offset != 0
/**
* Docs
*/
var x;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType isOriginDeclaration isStatic x (nameOffset:64) (firstTokenOffset:64) (offset:64)
element: <testLibrary>::@topLevelVariable::x
documentationComment: /**\n * Docs\n */
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
documentationComment: /**\n * Docs\n */
type: dynamic
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginVariable isStatic x
reference: <testLibrary>::@setter::x
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_external() async {
var library = await buildLibrary(r'''
external int i;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isExternal isOriginDeclaration isStatic i (nameOffset:13) (firstTokenOffset:13) (offset:13)
element: <testLibrary>::@topLevelVariable::i
getters
#F2 isCompleteDeclaration isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
element: <testLibrary>::@getter::i
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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
isExternal isOriginDeclaration isStatic i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
setter: <testLibrary>::@setter::i
getters
isOriginVariable isStatic i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
setters
isOriginVariable isStatic i
reference: <testLibrary>::@setter::i
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_final() async {
var library = await buildLibrary(r'''
final int x = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isFinal isOriginDeclaration isStatic x (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::x
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
isOriginVariable isStatic 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 isFinal isOriginDeclaration isStatic foo (nameOffset:38) (firstTokenOffset:38) (offset:38)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
element: <testLibrary>::@getter::foo
topLevelVariables
isFinal isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int Function(int, {void Function() fn})?
getter: <testLibrary>::@getter::foo
getters
isOriginVariable isStatic 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', r'''
part of my.lib;
void set x(int _) {}
''');
var library = await buildLibrary(r'''
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: 17
unit: #F1
topLevelVariables
#F2 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
element: <testLibrary>::@topLevelVariable::x
getters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:41) (firstTokenOffset:33) (offset:41)
element: <testLibrary>::@getter::x
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
setters
#F4 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F5 requiredPositional isOriginDeclaration _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic 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', r'''
part of my.lib;
int get x => 42;
''');
var library = await buildLibrary(r'''
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: 17
unit: #F1
topLevelVariables
#F2 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::x
setters
#F3 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:42) (firstTokenOffset:33) (offset:42)
element: <testLibrary>::@setter::x
formalParameters
#F4 requiredPositional isOriginDeclaration _ (nameOffset:48) (firstTokenOffset:44) (offset:48)
element: <testLibrary>::@setter::x::@formalParameter::_
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
getters
#F5 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::x
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F5
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic 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', r'''
part of my.lib;
int get x => 42;
''');
newFile('$testPackageLibPath/b.dart', r'''
part of my.lib;
void set x(int _) {}
''');
var library = await buildLibrary(r'''
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: 17
unit: #F1
part_1
uri: package:test/b.dart
partKeywordOffset: 32
unit: #F2
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
nextFragment: #F2
topLevelVariables
#F3 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::x
getters
#F4 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::x
#F2 package:test/b.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F1
setters
#F5 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F6 requiredPositional isOriginDeclaration _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::_
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic 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(r'''
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(r'''
var x;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType isOriginDeclaration isStatic x (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginVariable isStatic 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(r'''
int v = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isOriginDeclaration isStatic v (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::v
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
isOriginVariable isStatic v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
setters
isOriginVariable isStatic 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(r'''
final int v = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isFinal isOriginDeclaration isStatic v (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::v
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
getters
isOriginVariable isStatic v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_initializer_final_untyped() async {
var library = await buildLibrary(r'''
final v = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic v (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::v
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
getters
isOriginVariable isStatic v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_initializer_recordType() async {
var library = await buildLibrary(r'''
const x = (1, true);
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType hasInitializer isConst isOriginDeclaration isStatic 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 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::x
topLevelVariables
hasImplicitType hasInitializer isConst isOriginDeclaration isStatic isTypeInferredFromInitializer x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: (int, bool)
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: (int, bool)
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_initializer_staticMethod_ofExtension() async {
var library = await buildLibrary(r'''
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 isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
extensions
#F3 extension E (nameOffset:22) (firstTokenOffset:12) (offset:22)
element: <testLibrary>::@extension::E
methods
#F4 isCompleteDeclaration isOriginDeclaration isStatic f (nameOffset:44) (firstTokenOffset:33) (offset:44)
element: <testLibrary>::@extension::E::@method::f
topLevelVariables
#F5 hasImplicitType hasInitializer isOriginDeclaration isStatic x (nameOffset:61) (firstTokenOffset:61) (offset:61)
element: <testLibrary>::@topLevelVariable::x
getters
#F6 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
element: <testLibrary>::@getter::x
setters
#F7 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
element: <testLibrary>::@setter::x
formalParameters
#F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
element: <testLibrary>::@setter::x::@formalParameter::value
classes
isSimplyBounded class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
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
isOriginDeclaration isStatic f
reference: <testLibrary>::@extension::E::@method::f
firstFragment: #F4
returnType: int
topLevelVariables
hasImplicitType hasInitializer isOriginDeclaration isStatic isTypeInferredFromInitializer x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F5
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F6
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginVariable isStatic 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(r'''
var v = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType hasInitializer isOriginDeclaration isStatic v (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::v
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic isTypeInferredFromInitializer v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
isOriginVariable isStatic v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
setters
isOriginVariable isStatic 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(r'''
late int x = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isLate isOriginDeclaration isStatic x (nameOffset:9) (firstTokenOffset:9) (offset:9)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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
hasInitializer isLate isOriginDeclaration isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginVariable isStatic 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(r'''
late final int x;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isFinal isLate isOriginDeclaration isStatic x (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@getter::x
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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
isFinal isLate isOriginDeclaration isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginVariable isStatic 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(r'''
late final int x = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isFinal isLate isOriginDeclaration isStatic x (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
element: <testLibrary>::@getter::x
topLevelVariables
hasInitializer isFinal isLate isOriginDeclaration isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::x
getters
isOriginVariable isStatic 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 isStatic a (nameOffset:8) (firstTokenOffset:8) (offset:8)
element: <testLibrary>::@topLevelVariable::a
#F2 isOriginDeclaration isStatic <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::#0
getters
#F3 isCompleteDeclaration isOriginVariable isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@getter::a
#F4 isCompleteDeclaration isOriginVariable isStatic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::#1
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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 isCompleteDeclaration isOriginVariable isStatic <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 isStatic a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: Object?
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
isOriginDeclaration isStatic <null-name>
reference: <testLibrary>::@topLevelVariable::#0
firstFragment: #F2
type: Object?
getter: <testLibrary>::@getter::#1
setter: <testLibrary>::@setter::#2
getters
isOriginVariable isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F3
returnType: Object?
variable: <testLibrary>::@topLevelVariable::a
isOriginVariable isStatic <null-name>
reference: <testLibrary>::@getter::#1
firstFragment: #F4
returnType: Object?
variable: <testLibrary>::@topLevelVariable::#0
setters
isOriginVariable isStatic a
reference: <testLibrary>::@setter::a
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: Object?
returnType: void
variable: <testLibrary>::@topLevelVariable::a
isOriginVariable isStatic <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(r'''
const i = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType hasInitializer isConst isOriginDeclaration isStatic i (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::i
initializer: expression_0
IntegerLiteral
literal: 0 @10
staticType: int
getters
#F2 isCompleteDeclaration isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::i
topLevelVariables
hasImplicitType hasInitializer isConst isOriginDeclaration isStatic isTypeInferredFromInitializer i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
constantInitializer
fragment: #F1
expression: expression_0
getter: <testLibrary>::@getter::i
getters
isOriginVariable isStatic i
reference: <testLibrary>::@getter::i
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::i
''');
}
test_variable_propagatedType_final_dep_inLib() async {
newFile('$testPackageLibPath/a.dart', r'''
final a = 1;
''');
var library = await buildLibrary(r'''
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 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic b (nameOffset:24) (firstTokenOffset:24) (offset:24)
element: <testLibrary>::@topLevelVariable::b
getters
#F2 isCompleteDeclaration isOriginVariable isStatic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@getter::b
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F1
type: double
getter: <testLibrary>::@getter::b
getters
isOriginVariable isStatic b
reference: <testLibrary>::@getter::b
firstFragment: #F2
returnType: double
variable: <testLibrary>::@topLevelVariable::b
''');
}
test_variable_propagatedType_final_dep_inPart() async {
newFile('$testPackageLibPath/a.dart', r'''
part of lib;
final a = 1;
''');
var library = await buildLibrary(r'''
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: 14
unit: #F1
topLevelVariables
#F2 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic b (nameOffset:36) (firstTokenOffset:36) (offset:36)
element: <testLibrary>::@topLevelVariable::b
getters
#F3 isCompleteDeclaration isOriginVariable isStatic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
element: <testLibrary>::@getter::b
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
topLevelVariables
#F4 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic a (nameOffset:19) (firstTokenOffset:19) (offset:19)
element: <testLibrary>::@topLevelVariable::a
getters
#F5 isCompleteDeclaration isOriginVariable isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
element: <testLibrary>::@getter::a
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer b
reference: <testLibrary>::@topLevelVariable::b
firstFragment: #F2
type: double
getter: <testLibrary>::@getter::b
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F4
type: int
getter: <testLibrary>::@getter::a
getters
isOriginVariable isStatic b
reference: <testLibrary>::@getter::b
firstFragment: #F3
returnType: double
variable: <testLibrary>::@topLevelVariable::b
isOriginVariable isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F5
returnType: int
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variable_propagatedType_final_noDep() async {
var library = await buildLibrary(r'''
final i = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic i (nameOffset:6) (firstTokenOffset:6) (offset:6)
element: <testLibrary>::@topLevelVariable::i
getters
#F2 isCompleteDeclaration isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@getter::i
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
getters
isOriginVariable isStatic 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', r'''
class C {}
''');
newFile('$testPackageLibPath/b.dart', r'''
import "a.dart";
C f() => null;
''');
var library = await buildLibrary(r'''
import "b.dart";
final x = f();
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
libraryImports
package:test/b.dart
topLevelVariables
#F1 hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic x (nameOffset:24) (firstTokenOffset:24) (offset:24)
element: <testLibrary>::@topLevelVariable::x
getters
#F2 isCompleteDeclaration isOriginVariable isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@getter::x
topLevelVariables
hasImplicitType hasInitializer isFinal isOriginDeclaration isStatic isTypeInferredFromInitializer x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F1
type: C
getter: <testLibrary>::@getter::x
getters
isOriginVariable isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F2
returnType: C
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_setterInPart_getterInPart() async {
newFile('$testPackageLibPath/a.dart', r'''
part of my.lib;
void set x(int _) {}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of my.lib;
int get x => 42;
''');
var library = await buildLibrary(r'''
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: 17
unit: #F1
part_1
uri: package:test/b.dart
partKeywordOffset: 32
unit: #F2
#F1 package:test/a.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F0
nextFragment: #F2
topLevelVariables
#F3 isOriginGetterSetter isStatic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
element: <testLibrary>::@topLevelVariable::x
setters
#F4 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:25) (firstTokenOffset:16) (offset:25)
element: <testLibrary>::@setter::x
formalParameters
#F5 requiredPositional isOriginDeclaration _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: <testLibrary>::@setter::x::@formalParameter::_
#F2 package:test/b.dart
element: <testLibrary>
enclosingFragment: #F0
previousFragment: #F1
getters
#F6 isCompleteDeclaration isOriginDeclaration isStatic x (nameOffset:24) (firstTokenOffset:16) (offset:24)
element: <testLibrary>::@getter::x
topLevelVariables
isOriginGetterSetter isStatic x
reference: <testLibrary>::@topLevelVariable::x
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::x
setter: <testLibrary>::@setter::x
getters
isOriginDeclaration isStatic x
reference: <testLibrary>::@getter::x
firstFragment: #F6
returnType: int
variable: <testLibrary>::@topLevelVariable::x
setters
isOriginDeclaration isStatic x
reference: <testLibrary>::@setter::x
firstFragment: #F4
formalParameters
#E0 requiredPositional _
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::x
''');
}
test_variable_type_dynamic() async {
var library = await buildLibrary(r'''
dynamic v;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration isStatic v (nameOffset:8) (firstTokenOffset:8) (offset:8)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@getter::v
setters
#F3 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@setter::v
formalParameters
#F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@setter::v::@formalParameter::value
topLevelVariables
isOriginDeclaration isStatic v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
isOriginVariable isStatic v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::v
setters
isOriginVariable isStatic v
reference: <testLibrary>::@setter::v
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::v
''');
}
test_variable_type_inferred() async {
var library = await buildLibrary(r'''
var v = 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasImplicitType hasInitializer isOriginDeclaration isStatic v (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::v
getters
#F2 isCompleteDeclaration isOriginVariable isStatic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::v
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic isTypeInferredFromInitializer v
reference: <testLibrary>::@topLevelVariable::v
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::v
setter: <testLibrary>::@setter::v
getters
isOriginVariable isStatic v
reference: <testLibrary>::@getter::v
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::v
setters
isOriginVariable isStatic 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 hasImplicitType hasInitializer isOriginDeclaration isStatic a (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::a
getters
#F2 isCompleteDeclaration isOriginVariable isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::a
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic isTypeInferredFromInitializer a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: Never
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
getters
isOriginVariable isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F2
returnType: Never
variable: <testLibrary>::@topLevelVariable::a
setters
isOriginVariable isStatic 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 hasImplicitType isOriginDeclaration isStatic a (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::a
getters
#F2 isCompleteDeclaration isOriginVariable isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::a
setters
#F3 isCompleteDeclaration isOriginVariable isStatic 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 isStatic a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F1
type: dynamic
getter: <testLibrary>::@getter::a
setter: <testLibrary>::@setter::a
getters
isOriginVariable isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F2
returnType: dynamic
variable: <testLibrary>::@topLevelVariable::a
setters
isOriginVariable isStatic a
reference: <testLibrary>::@setter::a
firstFragment: #F3
formalParameters
#E0 requiredPositional value
firstFragment: #F4
type: dynamic
returnType: void
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variable_type_invalidType_topLevelVariable() async {
var library = await buildLibrary(r'''
final int foo = 0;
final foo bar;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer isFinal isOriginDeclaration isStatic foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: <testLibrary>::@topLevelVariable::foo
#F2 isFinal isOriginDeclaration isStatic bar (nameOffset:29) (firstTokenOffset:29) (offset:29)
element: <testLibrary>::@topLevelVariable::bar
getters
#F3 isCompleteDeclaration isOriginVariable isStatic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
element: <testLibrary>::@getter::foo
#F4 isCompleteDeclaration isOriginVariable isStatic bar (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
element: <testLibrary>::@getter::bar
topLevelVariables
hasInitializer isFinal isOriginDeclaration isStatic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
isFinal isOriginDeclaration isStatic bar
reference: <testLibrary>::@topLevelVariable::bar
firstFragment: #F2
type: InvalidType
getter: <testLibrary>::@getter::bar
getters
isOriginVariable isStatic foo
reference: <testLibrary>::@getter::foo
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
isOriginVariable isStatic bar
reference: <testLibrary>::@getter::bar
firstFragment: #F4
returnType: InvalidType
variable: <testLibrary>::@topLevelVariable::bar
''');
}
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 isConst isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
typeNameOffset: 21
topLevelVariables
#F4 hasInitializer isConst isOriginDeclaration isStatic a (nameOffset:42) (firstTokenOffset:42) (offset:42)
element: <testLibrary>::@topLevelVariable::a
initializer: expression_0
InstanceCreationExpression
constructorName: ConstructorName
type: NamedType
name: A @46
element: <testLibrary>::@class::A
type: A<int>
element: ConstructorMember
baseElement: <testLibrary>::@class::A::@constructor::new
substitution: {T: int}
argumentList: ArgumentList
leftParenthesis: ( @47
rightParenthesis: ) @48
staticType: A<int>
getters
#F5 isCompleteDeclaration isOriginVariable isStatic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
element: <testLibrary>::@getter::a
classes
isSimplyBounded class A
reference: <testLibrary>::@class::A
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
constructors
hasEnclosingTypeParameterReference isConst isOriginDeclaration new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
topLevelVariables
hasInitializer isConst isOriginDeclaration isStatic a
reference: <testLibrary>::@topLevelVariable::a
firstFragment: #F4
type: A<int>
constantInitializer
fragment: #F4
expression: expression_0
getter: <testLibrary>::@getter::a
getters
isOriginVariable isStatic a
reference: <testLibrary>::@getter::a
firstFragment: #F5
returnType: A<int>
variable: <testLibrary>::@topLevelVariable::a
''');
}
test_variables() async {
var library = await buildLibrary(r'''
int i;
int j;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 isOriginDeclaration isStatic i (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::i
#F2 isOriginDeclaration isStatic j (nameOffset:11) (firstTokenOffset:11) (offset:11)
element: <testLibrary>::@topLevelVariable::j
getters
#F3 isCompleteDeclaration isOriginVariable isStatic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::i
#F4 isCompleteDeclaration isOriginVariable isStatic j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
element: <testLibrary>::@getter::j
setters
#F5 isCompleteDeclaration isOriginVariable isStatic 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 isCompleteDeclaration isOriginVariable isStatic 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 isStatic i
reference: <testLibrary>::@topLevelVariable::i
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::i
setter: <testLibrary>::@setter::i
isOriginDeclaration isStatic j
reference: <testLibrary>::@topLevelVariable::j
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::j
setter: <testLibrary>::@setter::j
getters
isOriginVariable isStatic i
reference: <testLibrary>::@getter::i
firstFragment: #F3
returnType: int
variable: <testLibrary>::@topLevelVariable::i
isOriginVariable isStatic j
reference: <testLibrary>::@getter::j
firstFragment: #F4
returnType: int
variable: <testLibrary>::@topLevelVariable::j
setters
isOriginVariable isStatic i
reference: <testLibrary>::@setter::i
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::i
isOriginVariable isStatic 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);
}
}
@reflectiveTest
class TopLevelVariableElementTest_fromBytes
extends TopLevelVariableElementTest {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class TopLevelVariableElementTest_keepLinking
extends TopLevelVariableElementTest {
@override
bool get keepLinkingLibraries => true;
}