blob: a68125e89c1362445dd4b794fbbe687457699412 [file] [log] [blame] [edit]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../dart/resolution/node_text_expectations.dart';
import '../elements_base.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(OffsetsElementTest_keepLinking);
defineReflectiveTests(OffsetsElementTest_fromBytes);
defineReflectiveTests(UpdateNodeTextExpectations);
});
}
abstract class OffsetsElementTest extends ElementsBaseTest {
test_codeRange_class() async {
var library = await buildLibrary('''
class Raw {}
/// Comment 1.
/// Comment 2.
class HasDocComment {}
@Object()
class HasAnnotation {}
@Object()
/// Comment 1.
/// Comment 2.
class AnnotationThenComment {}
/// Comment 1.
/// Comment 2.
@Object()
class CommentThenAnnotation {}
/// Comment 1.
@Object()
/// Comment 2.
class CommentAroundAnnotation {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class Raw (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::Raw
constructors
#F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::Raw::@constructor::new
typeName: Raw
#F3 class HasDocComment (nameOffset:50) (firstTokenOffset:14) (offset:50)
element: <testLibrary>::@class::HasDocComment
constructors
#F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
element: <testLibrary>::@class::HasDocComment::@constructor::new
typeName: HasDocComment
#F5 class HasAnnotation (nameOffset:84) (firstTokenOffset:68) (offset:84)
element: <testLibrary>::@class::HasAnnotation
constructors
#F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
element: <testLibrary>::@class::HasAnnotation::@constructor::new
typeName: HasAnnotation
#F7 class AnnotationThenComment (nameOffset:148) (firstTokenOffset:102) (offset:148)
element: <testLibrary>::@class::AnnotationThenComment
constructors
#F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
element: <testLibrary>::@class::AnnotationThenComment::@constructor::new
typeName: AnnotationThenComment
#F9 class CommentThenAnnotation (nameOffset:220) (firstTokenOffset:174) (offset:220)
element: <testLibrary>::@class::CommentThenAnnotation
constructors
#F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:220)
element: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
typeName: CommentThenAnnotation
#F11 class CommentAroundAnnotation (nameOffset:292) (firstTokenOffset:261) (offset:292)
element: <testLibrary>::@class::CommentAroundAnnotation
constructors
#F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:292)
element: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
typeName: CommentAroundAnnotation
classes
class Raw
reference: <testLibrary>::@class::Raw
firstFragment: #F1
constructors
synthetic new
reference: <testLibrary>::@class::Raw::@constructor::new
firstFragment: #F2
class HasDocComment
reference: <testLibrary>::@class::HasDocComment
firstFragment: #F3
documentationComment: /// Comment 1.\n/// Comment 2.
constructors
synthetic new
reference: <testLibrary>::@class::HasDocComment::@constructor::new
firstFragment: #F4
class HasAnnotation
reference: <testLibrary>::@class::HasAnnotation
firstFragment: #F5
constructors
synthetic new
reference: <testLibrary>::@class::HasAnnotation::@constructor::new
firstFragment: #F6
class AnnotationThenComment
reference: <testLibrary>::@class::AnnotationThenComment
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
constructors
synthetic new
reference: <testLibrary>::@class::AnnotationThenComment::@constructor::new
firstFragment: #F8
class CommentThenAnnotation
reference: <testLibrary>::@class::CommentThenAnnotation
firstFragment: #F9
documentationComment: /// Comment 1.\n/// Comment 2.
constructors
synthetic new
reference: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
firstFragment: #F10
class CommentAroundAnnotation
reference: <testLibrary>::@class::CommentAroundAnnotation
firstFragment: #F11
documentationComment: /// Comment 2.
constructors
synthetic new
reference: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
firstFragment: #F12
''');
}
test_codeRange_class_namedMixin() async {
var library = await buildLibrary('''
class A {}
class B {}
class Raw = Object with A, B;
/// Comment 1.
/// Comment 2.
class HasDocComment = Object with A, B;
@Object()
class HasAnnotation = Object with A, B;
@Object()
/// Comment 1.
/// Comment 2.
class AnnotationThenComment = Object with A, B;
/// Comment 1.
/// Comment 2.
@Object()
class CommentThenAnnotation = Object with A, B;
/// Comment 1.
@Object()
/// Comment 2.
class CommentAroundAnnotation = Object with A, B;
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
constructors
#F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
#F3 class B (nameOffset:18) (firstTokenOffset:12) (offset:18)
element: <testLibrary>::@class::B
constructors
#F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
element: <testLibrary>::@class::B::@constructor::new
typeName: B
#F5 class Raw (nameOffset:30) (firstTokenOffset:24) (offset:30)
element: <testLibrary>::@class::Raw
constructors
#F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
element: <testLibrary>::@class::Raw::@constructor::new
typeName: Raw
#F7 class HasDocComment (nameOffset:91) (firstTokenOffset:55) (offset:91)
element: <testLibrary>::@class::HasDocComment
constructors
#F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
element: <testLibrary>::@class::HasDocComment::@constructor::new
typeName: HasDocComment
#F9 class HasAnnotation (nameOffset:142) (firstTokenOffset:126) (offset:142)
element: <testLibrary>::@class::HasAnnotation
constructors
#F10 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:142)
element: <testLibrary>::@class::HasAnnotation::@constructor::new
typeName: HasAnnotation
#F11 class AnnotationThenComment (nameOffset:223) (firstTokenOffset:177) (offset:223)
element: <testLibrary>::@class::AnnotationThenComment
constructors
#F12 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:223)
element: <testLibrary>::@class::AnnotationThenComment::@constructor::new
typeName: AnnotationThenComment
#F13 class CommentThenAnnotation (nameOffset:312) (firstTokenOffset:266) (offset:312)
element: <testLibrary>::@class::CommentThenAnnotation
constructors
#F14 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:312)
element: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
typeName: CommentThenAnnotation
#F15 class CommentAroundAnnotation (nameOffset:401) (firstTokenOffset:370) (offset:401)
element: <testLibrary>::@class::CommentAroundAnnotation
constructors
#F16 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:401)
element: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
typeName: CommentAroundAnnotation
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
class B
reference: <testLibrary>::@class::B
firstFragment: #F3
constructors
synthetic new
reference: <testLibrary>::@class::B::@constructor::new
firstFragment: #F4
class alias Raw
reference: <testLibrary>::@class::Raw
firstFragment: #F5
supertype: Object
mixins
A
B
constructors
synthetic const new
reference: <testLibrary>::@class::Raw::@constructor::new
firstFragment: #F6
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
element: dart:core::@class::Object::@constructor::new
class alias HasDocComment
reference: <testLibrary>::@class::HasDocComment
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
supertype: Object
mixins
A
B
constructors
synthetic const new
reference: <testLibrary>::@class::HasDocComment::@constructor::new
firstFragment: #F8
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
element: dart:core::@class::Object::@constructor::new
class alias HasAnnotation
reference: <testLibrary>::@class::HasAnnotation
firstFragment: #F9
supertype: Object
mixins
A
B
constructors
synthetic const new
reference: <testLibrary>::@class::HasAnnotation::@constructor::new
firstFragment: #F10
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
element: dart:core::@class::Object::@constructor::new
class alias AnnotationThenComment
reference: <testLibrary>::@class::AnnotationThenComment
firstFragment: #F11
documentationComment: /// Comment 1.\n/// Comment 2.
supertype: Object
mixins
A
B
constructors
synthetic const new
reference: <testLibrary>::@class::AnnotationThenComment::@constructor::new
firstFragment: #F12
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
element: dart:core::@class::Object::@constructor::new
class alias CommentThenAnnotation
reference: <testLibrary>::@class::CommentThenAnnotation
firstFragment: #F13
documentationComment: /// Comment 1.\n/// Comment 2.
supertype: Object
mixins
A
B
constructors
synthetic const new
reference: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
firstFragment: #F14
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
element: dart:core::@class::Object::@constructor::new
class alias CommentAroundAnnotation
reference: <testLibrary>::@class::CommentAroundAnnotation
firstFragment: #F15
documentationComment: /// Comment 2.
supertype: Object
mixins
A
B
constructors
synthetic const new
reference: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
firstFragment: #F16
constantInitializers
SuperConstructorInvocation
superKeyword: super @0
argumentList: ArgumentList
leftParenthesis: ( @0
rightParenthesis: ) @0
element: dart:core::@class::Object::@constructor::new
''');
}
test_codeRange_constructor() async {
var library = await buildLibrary('''
class C {
C();
C.raw() {}
/// Comment 1.
/// Comment 2.
C.hasDocComment() {}
@Object()
C.hasAnnotation() {}
@Object()
/// Comment 1.
/// Comment 2.
C.annotationThenComment() {}
/// Comment 1.
/// Comment 2.
@Object()
C.commentThenAnnotation() {}
/// Comment 1.
@Object()
/// Comment 2.
C.commentAroundAnnotation() {}
}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
constructors
#F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
element: <testLibrary>::@class::C::@constructor::new
codeOffset: 12
codeLength: 4
typeName: C
typeNameOffset: 12
#F3 raw (nameOffset:22) (firstTokenOffset:20) (offset:22)
element: <testLibrary>::@class::C::@constructor::raw
codeOffset: 20
codeLength: 10
typeName: C
typeNameOffset: 20
periodOffset: 21
#F4 hasDocComment (nameOffset:70) (firstTokenOffset:34) (offset:70)
element: <testLibrary>::@class::C::@constructor::hasDocComment
documentationComment: /// Comment 1.\n/// Comment 2.
codeOffset: 34
codeLength: 54
typeName: C
typeNameOffset: 68
periodOffset: 69
#F5 hasAnnotation (nameOffset:106) (firstTokenOffset:92) (offset:106)
element: <testLibrary>::@class::C::@constructor::hasAnnotation
metadata
Annotation
atSign: @ @92
name: SimpleIdentifier
token: Object @93
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @99
rightParenthesis: ) @100
element: dart:core::@class::Object::@constructor::new
codeOffset: 92
codeLength: 32
typeName: C
typeNameOffset: 104
periodOffset: 105
#F6 annotationThenComment (nameOffset:176) (firstTokenOffset:128) (offset:176)
element: <testLibrary>::@class::C::@constructor::annotationThenComment
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @128
name: SimpleIdentifier
token: Object @129
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @135
rightParenthesis: ) @136
element: dart:core::@class::Object::@constructor::new
codeOffset: 128
codeLength: 74
typeName: C
typeNameOffset: 174
periodOffset: 175
#F7 commentThenAnnotation (nameOffset:254) (firstTokenOffset:206) (offset:254)
element: <testLibrary>::@class::C::@constructor::commentThenAnnotation
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @240
name: SimpleIdentifier
token: Object @241
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @247
rightParenthesis: ) @248
element: dart:core::@class::Object::@constructor::new
codeOffset: 206
codeLength: 74
typeName: C
typeNameOffset: 252
periodOffset: 253
#F8 commentAroundAnnotation (nameOffset:332) (firstTokenOffset:301) (offset:332)
element: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @301
name: SimpleIdentifier
token: Object @302
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @308
rightParenthesis: ) @309
element: dart:core::@class::Object::@constructor::new
codeOffset: 301
codeLength: 59
typeName: C
typeNameOffset: 330
periodOffset: 331
classes
class C
reference: <testLibrary>::@class::C
firstFragment: #F1
constructors
new
reference: <testLibrary>::@class::C::@constructor::new
firstFragment: #F2
raw
reference: <testLibrary>::@class::C::@constructor::raw
firstFragment: #F3
hasDocComment
reference: <testLibrary>::@class::C::@constructor::hasDocComment
firstFragment: #F4
documentationComment: /// Comment 1.\n/// Comment 2.
hasAnnotation
reference: <testLibrary>::@class::C::@constructor::hasAnnotation
firstFragment: #F5
metadata
Annotation
atSign: @ @92
name: SimpleIdentifier
token: Object @93
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @99
rightParenthesis: ) @100
element: dart:core::@class::Object::@constructor::new
annotationThenComment
reference: <testLibrary>::@class::C::@constructor::annotationThenComment
firstFragment: #F6
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @128
name: SimpleIdentifier
token: Object @129
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @135
rightParenthesis: ) @136
element: dart:core::@class::Object::@constructor::new
commentThenAnnotation
reference: <testLibrary>::@class::C::@constructor::commentThenAnnotation
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @240
name: SimpleIdentifier
token: Object @241
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @247
rightParenthesis: ) @248
element: dart:core::@class::Object::@constructor::new
commentAroundAnnotation
reference: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
firstFragment: #F8
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @301
name: SimpleIdentifier
token: Object @302
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @308
rightParenthesis: ) @309
element: dart:core::@class::Object::@constructor::new
''');
}
test_codeRange_constructor_factory() async {
var library = await buildLibrary('''
class C {
factory C() => throw 0;
factory C.raw() => throw 0;
/// Comment 1.
/// Comment 2.
factory C.hasDocComment() => throw 0;
@Object()
factory C.hasAnnotation() => throw 0;
@Object()
/// Comment 1.
/// Comment 2.
factory C.annotationThenComment() => throw 0;
/// Comment 1.
/// Comment 2.
@Object()
factory C.commentThenAnnotation() => throw 0;
/// Comment 1.
@Object()
/// Comment 2.
factory C.commentAroundAnnotation() => throw 0;
}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
constructors
#F2 factory new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
element: <testLibrary>::@class::C::@constructor::new
codeOffset: 12
codeLength: 23
typeName: C
typeNameOffset: 20
#F3 factory raw (nameOffset:49) (firstTokenOffset:39) (offset:49)
element: <testLibrary>::@class::C::@constructor::raw
codeOffset: 39
codeLength: 27
typeName: C
typeNameOffset: 47
periodOffset: 48
#F4 factory hasDocComment (nameOffset:114) (firstTokenOffset:70) (offset:114)
element: <testLibrary>::@class::C::@constructor::hasDocComment
documentationComment: /// Comment 1.\n/// Comment 2.
codeOffset: 70
codeLength: 71
typeName: C
typeNameOffset: 112
periodOffset: 113
#F5 factory hasAnnotation (nameOffset:167) (firstTokenOffset:145) (offset:167)
element: <testLibrary>::@class::C::@constructor::hasAnnotation
metadata
Annotation
atSign: @ @145
name: SimpleIdentifier
token: Object @146
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @152
rightParenthesis: ) @153
element: dart:core::@class::Object::@constructor::new
codeOffset: 145
codeLength: 49
typeName: C
typeNameOffset: 165
periodOffset: 166
#F6 factory annotationThenComment (nameOffset:254) (firstTokenOffset:198) (offset:254)
element: <testLibrary>::@class::C::@constructor::annotationThenComment
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @198
name: SimpleIdentifier
token: Object @199
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @205
rightParenthesis: ) @206
element: dart:core::@class::Object::@constructor::new
codeOffset: 198
codeLength: 91
typeName: C
typeNameOffset: 252
periodOffset: 253
#F7 factory commentThenAnnotation (nameOffset:349) (firstTokenOffset:293) (offset:349)
element: <testLibrary>::@class::C::@constructor::commentThenAnnotation
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @327
name: SimpleIdentifier
token: Object @328
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @334
rightParenthesis: ) @335
element: dart:core::@class::Object::@constructor::new
codeOffset: 293
codeLength: 91
typeName: C
typeNameOffset: 347
periodOffset: 348
#F8 factory commentAroundAnnotation (nameOffset:444) (firstTokenOffset:405) (offset:444)
element: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @405
name: SimpleIdentifier
token: Object @406
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @412
rightParenthesis: ) @413
element: dart:core::@class::Object::@constructor::new
codeOffset: 405
codeLength: 76
typeName: C
typeNameOffset: 442
periodOffset: 443
classes
class C
reference: <testLibrary>::@class::C
firstFragment: #F1
constructors
factory new
reference: <testLibrary>::@class::C::@constructor::new
firstFragment: #F2
factory raw
reference: <testLibrary>::@class::C::@constructor::raw
firstFragment: #F3
factory hasDocComment
reference: <testLibrary>::@class::C::@constructor::hasDocComment
firstFragment: #F4
documentationComment: /// Comment 1.\n/// Comment 2.
factory hasAnnotation
reference: <testLibrary>::@class::C::@constructor::hasAnnotation
firstFragment: #F5
metadata
Annotation
atSign: @ @145
name: SimpleIdentifier
token: Object @146
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @152
rightParenthesis: ) @153
element: dart:core::@class::Object::@constructor::new
factory annotationThenComment
reference: <testLibrary>::@class::C::@constructor::annotationThenComment
firstFragment: #F6
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @198
name: SimpleIdentifier
token: Object @199
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @205
rightParenthesis: ) @206
element: dart:core::@class::Object::@constructor::new
factory commentThenAnnotation
reference: <testLibrary>::@class::C::@constructor::commentThenAnnotation
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @327
name: SimpleIdentifier
token: Object @328
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @334
rightParenthesis: ) @335
element: dart:core::@class::Object::@constructor::new
factory commentAroundAnnotation
reference: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
firstFragment: #F8
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @405
name: SimpleIdentifier
token: Object @406
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @412
rightParenthesis: ) @413
element: dart:core::@class::Object::@constructor::new
''');
}
test_codeRange_extensions() async {
var library = await buildLibrary('''
class A {}
extension Raw on A {}
/// Comment 1.
/// Comment 2.
extension HasDocComment on A {}
@Object()
extension HasAnnotation on A {}
@Object()
/// Comment 1.
/// Comment 2.
extension AnnotationThenComment on A {}
/// Comment 1.
/// Comment 2.
@Object()
extension CommentThenAnnotation on A {}
/// Comment 1.
@Object()
/// Comment 2.
extension CommentAroundAnnotation on A {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::A
constructors
#F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
extensions
#F3 extension Raw (nameOffset:22) (firstTokenOffset:12) (offset:22)
element: <testLibrary>::@extension::Raw
#F4 extension HasDocComment (nameOffset:75) (firstTokenOffset:35) (offset:75)
element: <testLibrary>::@extension::HasDocComment
#F5 extension HasAnnotation (nameOffset:118) (firstTokenOffset:98) (offset:118)
element: <testLibrary>::@extension::HasAnnotation
#F6 extension AnnotationThenComment (nameOffset:191) (firstTokenOffset:141) (offset:191)
element: <testLibrary>::@extension::AnnotationThenComment
#F7 extension CommentThenAnnotation (nameOffset:272) (firstTokenOffset:222) (offset:272)
element: <testLibrary>::@extension::CommentThenAnnotation
#F8 extension CommentAroundAnnotation (nameOffset:353) (firstTokenOffset:318) (offset:353)
element: <testLibrary>::@extension::CommentAroundAnnotation
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
extensions
extension Raw
reference: <testLibrary>::@extension::Raw
firstFragment: #F3
extendedType: A
extension HasDocComment
reference: <testLibrary>::@extension::HasDocComment
firstFragment: #F4
documentationComment: /// Comment 1.\n/// Comment 2.
extendedType: A
extension HasAnnotation
reference: <testLibrary>::@extension::HasAnnotation
firstFragment: #F5
extendedType: A
extension AnnotationThenComment
reference: <testLibrary>::@extension::AnnotationThenComment
firstFragment: #F6
documentationComment: /// Comment 1.\n/// Comment 2.
extendedType: A
extension CommentThenAnnotation
reference: <testLibrary>::@extension::CommentThenAnnotation
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
extendedType: A
extension CommentAroundAnnotation
reference: <testLibrary>::@extension::CommentAroundAnnotation
firstFragment: #F8
documentationComment: /// Comment 2.
extendedType: A
''');
}
test_codeRange_field() async {
var library = await buildLibrary('''
class C {
int withInit = 1;
int withoutInit;
int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
fields
#F2 hasInitializer withInit (nameOffset:16) (firstTokenOffset:16) (offset:16)
element: <testLibrary>::@class::C::@field::withInit
#F3 withoutInit (nameOffset:37) (firstTokenOffset:37) (offset:37)
element: <testLibrary>::@class::C::@field::withoutInit
#F4 hasInitializer multiWithInit (nameOffset:57) (firstTokenOffset:57) (offset:57)
element: <testLibrary>::@class::C::@field::multiWithInit
#F5 multiWithoutInit (nameOffset:76) (firstTokenOffset:76) (offset:76)
element: <testLibrary>::@class::C::@field::multiWithoutInit
#F6 hasInitializer multiWithInit2 (nameOffset:94) (firstTokenOffset:94) (offset:94)
element: <testLibrary>::@class::C::@field::multiWithInit2
constructors
#F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@constructor::new
typeName: C
getters
#F8 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@class::C::@getter::withInit
#F9 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
element: <testLibrary>::@class::C::@getter::withoutInit
#F10 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
element: <testLibrary>::@class::C::@getter::multiWithInit
#F11 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
element: <testLibrary>::@class::C::@getter::multiWithoutInit
#F12 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
element: <testLibrary>::@class::C::@getter::multiWithInit2
setters
#F13 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@class::C::@setter::withInit
formalParameters
#F14 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@class::C::@setter::withInit::@formalParameter::value
#F15 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
element: <testLibrary>::@class::C::@setter::withoutInit
formalParameters
#F16 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
element: <testLibrary>::@class::C::@setter::withoutInit::@formalParameter::value
#F17 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
element: <testLibrary>::@class::C::@setter::multiWithInit
formalParameters
#F18 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
element: <testLibrary>::@class::C::@setter::multiWithInit::@formalParameter::value
#F19 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
element: <testLibrary>::@class::C::@setter::multiWithoutInit
formalParameters
#F20 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
element: <testLibrary>::@class::C::@setter::multiWithoutInit::@formalParameter::value
#F21 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
element: <testLibrary>::@class::C::@setter::multiWithInit2
formalParameters
#F22 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
element: <testLibrary>::@class::C::@setter::multiWithInit2::@formalParameter::value
classes
hasNonFinalField class C
reference: <testLibrary>::@class::C
firstFragment: #F1
fields
hasInitializer withInit
reference: <testLibrary>::@class::C::@field::withInit
firstFragment: #F2
type: int
getter: <testLibrary>::@class::C::@getter::withInit
setter: <testLibrary>::@class::C::@setter::withInit
withoutInit
reference: <testLibrary>::@class::C::@field::withoutInit
firstFragment: #F3
type: int
getter: <testLibrary>::@class::C::@getter::withoutInit
setter: <testLibrary>::@class::C::@setter::withoutInit
hasInitializer multiWithInit
reference: <testLibrary>::@class::C::@field::multiWithInit
firstFragment: #F4
type: int
getter: <testLibrary>::@class::C::@getter::multiWithInit
setter: <testLibrary>::@class::C::@setter::multiWithInit
multiWithoutInit
reference: <testLibrary>::@class::C::@field::multiWithoutInit
firstFragment: #F5
type: int
getter: <testLibrary>::@class::C::@getter::multiWithoutInit
setter: <testLibrary>::@class::C::@setter::multiWithoutInit
hasInitializer multiWithInit2
reference: <testLibrary>::@class::C::@field::multiWithInit2
firstFragment: #F6
type: int
getter: <testLibrary>::@class::C::@getter::multiWithInit2
setter: <testLibrary>::@class::C::@setter::multiWithInit2
constructors
synthetic new
reference: <testLibrary>::@class::C::@constructor::new
firstFragment: #F7
getters
synthetic withInit
reference: <testLibrary>::@class::C::@getter::withInit
firstFragment: #F8
returnType: int
variable: <testLibrary>::@class::C::@field::withInit
synthetic withoutInit
reference: <testLibrary>::@class::C::@getter::withoutInit
firstFragment: #F9
returnType: int
variable: <testLibrary>::@class::C::@field::withoutInit
synthetic multiWithInit
reference: <testLibrary>::@class::C::@getter::multiWithInit
firstFragment: #F10
returnType: int
variable: <testLibrary>::@class::C::@field::multiWithInit
synthetic multiWithoutInit
reference: <testLibrary>::@class::C::@getter::multiWithoutInit
firstFragment: #F11
returnType: int
variable: <testLibrary>::@class::C::@field::multiWithoutInit
synthetic multiWithInit2
reference: <testLibrary>::@class::C::@getter::multiWithInit2
firstFragment: #F12
returnType: int
variable: <testLibrary>::@class::C::@field::multiWithInit2
setters
synthetic withInit
reference: <testLibrary>::@class::C::@setter::withInit
firstFragment: #F13
formalParameters
#E0 requiredPositional value
firstFragment: #F14
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::withInit
synthetic withoutInit
reference: <testLibrary>::@class::C::@setter::withoutInit
firstFragment: #F15
formalParameters
#E1 requiredPositional value
firstFragment: #F16
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::withoutInit
synthetic multiWithInit
reference: <testLibrary>::@class::C::@setter::multiWithInit
firstFragment: #F17
formalParameters
#E2 requiredPositional value
firstFragment: #F18
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::multiWithInit
synthetic multiWithoutInit
reference: <testLibrary>::@class::C::@setter::multiWithoutInit
firstFragment: #F19
formalParameters
#E3 requiredPositional value
firstFragment: #F20
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::multiWithoutInit
synthetic multiWithInit2
reference: <testLibrary>::@class::C::@setter::multiWithInit2
firstFragment: #F21
formalParameters
#E4 requiredPositional value
firstFragment: #F22
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::multiWithInit2
''');
}
test_codeRange_field_annotations() async {
var library = await buildLibrary('''
class C {
/// Comment 1.
/// Comment 2.
int hasDocComment, hasDocComment2;
@Object()
int hasAnnotation, hasAnnotation2;
@Object()
/// Comment 1.
/// Comment 2.
int annotationThenComment, annotationThenComment2;
/// Comment 1.
/// Comment 2.
@Object()
int commentThenAnnotation, commentThenAnnotation2;
/// Comment 1.
@Object()
/// Comment 2.
int commentAroundAnnotation, commentAroundAnnotation2;
}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
fields
#F2 hasDocComment (nameOffset:50) (firstTokenOffset:50) (offset:50)
element: <testLibrary>::@class::C::@field::hasDocComment
#F3 hasDocComment2 (nameOffset:65) (firstTokenOffset:65) (offset:65)
element: <testLibrary>::@class::C::@field::hasDocComment2
#F4 hasAnnotation (nameOffset:100) (firstTokenOffset:100) (offset:100)
element: <testLibrary>::@class::C::@field::hasAnnotation
#F5 hasAnnotation2 (nameOffset:115) (firstTokenOffset:115) (offset:115)
element: <testLibrary>::@class::C::@field::hasAnnotation2
#F6 annotationThenComment (nameOffset:184) (firstTokenOffset:184) (offset:184)
element: <testLibrary>::@class::C::@field::annotationThenComment
#F7 annotationThenComment2 (nameOffset:207) (firstTokenOffset:207) (offset:207)
element: <testLibrary>::@class::C::@field::annotationThenComment2
#F8 commentThenAnnotation (nameOffset:284) (firstTokenOffset:284) (offset:284)
element: <testLibrary>::@class::C::@field::commentThenAnnotation
#F9 commentThenAnnotation2 (nameOffset:307) (firstTokenOffset:307) (offset:307)
element: <testLibrary>::@class::C::@field::commentThenAnnotation2
#F10 commentAroundAnnotation (nameOffset:384) (firstTokenOffset:384) (offset:384)
element: <testLibrary>::@class::C::@field::commentAroundAnnotation
#F11 commentAroundAnnotation2 (nameOffset:409) (firstTokenOffset:409) (offset:409)
element: <testLibrary>::@class::C::@field::commentAroundAnnotation2
constructors
#F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@constructor::new
typeName: C
getters
#F13 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
element: <testLibrary>::@class::C::@getter::hasDocComment
#F14 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
element: <testLibrary>::@class::C::@getter::hasDocComment2
#F15 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
element: <testLibrary>::@class::C::@getter::hasAnnotation
#F16 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
element: <testLibrary>::@class::C::@getter::hasAnnotation2
#F17 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
element: <testLibrary>::@class::C::@getter::annotationThenComment
#F18 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
element: <testLibrary>::@class::C::@getter::annotationThenComment2
#F19 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
element: <testLibrary>::@class::C::@getter::commentThenAnnotation
#F20 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
element: <testLibrary>::@class::C::@getter::commentThenAnnotation2
#F21 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
element: <testLibrary>::@class::C::@getter::commentAroundAnnotation
#F22 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
element: <testLibrary>::@class::C::@getter::commentAroundAnnotation2
setters
#F23 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
element: <testLibrary>::@class::C::@setter::hasDocComment
formalParameters
#F24 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
element: <testLibrary>::@class::C::@setter::hasDocComment::@formalParameter::value
#F25 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
element: <testLibrary>::@class::C::@setter::hasDocComment2
formalParameters
#F26 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
element: <testLibrary>::@class::C::@setter::hasDocComment2::@formalParameter::value
#F27 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
element: <testLibrary>::@class::C::@setter::hasAnnotation
formalParameters
#F28 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
element: <testLibrary>::@class::C::@setter::hasAnnotation::@formalParameter::value
#F29 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
element: <testLibrary>::@class::C::@setter::hasAnnotation2
formalParameters
#F30 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
element: <testLibrary>::@class::C::@setter::hasAnnotation2::@formalParameter::value
#F31 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
element: <testLibrary>::@class::C::@setter::annotationThenComment
formalParameters
#F32 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
element: <testLibrary>::@class::C::@setter::annotationThenComment::@formalParameter::value
#F33 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
element: <testLibrary>::@class::C::@setter::annotationThenComment2
formalParameters
#F34 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
element: <testLibrary>::@class::C::@setter::annotationThenComment2::@formalParameter::value
#F35 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
element: <testLibrary>::@class::C::@setter::commentThenAnnotation
formalParameters
#F36 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
element: <testLibrary>::@class::C::@setter::commentThenAnnotation::@formalParameter::value
#F37 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
element: <testLibrary>::@class::C::@setter::commentThenAnnotation2
formalParameters
#F38 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
element: <testLibrary>::@class::C::@setter::commentThenAnnotation2::@formalParameter::value
#F39 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
element: <testLibrary>::@class::C::@setter::commentAroundAnnotation
formalParameters
#F40 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
element: <testLibrary>::@class::C::@setter::commentAroundAnnotation::@formalParameter::value
#F41 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
element: <testLibrary>::@class::C::@setter::commentAroundAnnotation2
formalParameters
#F42 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
element: <testLibrary>::@class::C::@setter::commentAroundAnnotation2::@formalParameter::value
classes
hasNonFinalField class C
reference: <testLibrary>::@class::C
firstFragment: #F1
fields
hasDocComment
reference: <testLibrary>::@class::C::@field::hasDocComment
firstFragment: #F2
type: int
getter: <testLibrary>::@class::C::@getter::hasDocComment
setter: <testLibrary>::@class::C::@setter::hasDocComment
hasDocComment2
reference: <testLibrary>::@class::C::@field::hasDocComment2
firstFragment: #F3
type: int
getter: <testLibrary>::@class::C::@getter::hasDocComment2
setter: <testLibrary>::@class::C::@setter::hasDocComment2
hasAnnotation
reference: <testLibrary>::@class::C::@field::hasAnnotation
firstFragment: #F4
type: int
getter: <testLibrary>::@class::C::@getter::hasAnnotation
setter: <testLibrary>::@class::C::@setter::hasAnnotation
hasAnnotation2
reference: <testLibrary>::@class::C::@field::hasAnnotation2
firstFragment: #F5
type: int
getter: <testLibrary>::@class::C::@getter::hasAnnotation2
setter: <testLibrary>::@class::C::@setter::hasAnnotation2
annotationThenComment
reference: <testLibrary>::@class::C::@field::annotationThenComment
firstFragment: #F6
type: int
getter: <testLibrary>::@class::C::@getter::annotationThenComment
setter: <testLibrary>::@class::C::@setter::annotationThenComment
annotationThenComment2
reference: <testLibrary>::@class::C::@field::annotationThenComment2
firstFragment: #F7
type: int
getter: <testLibrary>::@class::C::@getter::annotationThenComment2
setter: <testLibrary>::@class::C::@setter::annotationThenComment2
commentThenAnnotation
reference: <testLibrary>::@class::C::@field::commentThenAnnotation
firstFragment: #F8
type: int
getter: <testLibrary>::@class::C::@getter::commentThenAnnotation
setter: <testLibrary>::@class::C::@setter::commentThenAnnotation
commentThenAnnotation2
reference: <testLibrary>::@class::C::@field::commentThenAnnotation2
firstFragment: #F9
type: int
getter: <testLibrary>::@class::C::@getter::commentThenAnnotation2
setter: <testLibrary>::@class::C::@setter::commentThenAnnotation2
commentAroundAnnotation
reference: <testLibrary>::@class::C::@field::commentAroundAnnotation
firstFragment: #F10
type: int
getter: <testLibrary>::@class::C::@getter::commentAroundAnnotation
setter: <testLibrary>::@class::C::@setter::commentAroundAnnotation
commentAroundAnnotation2
reference: <testLibrary>::@class::C::@field::commentAroundAnnotation2
firstFragment: #F11
type: int
getter: <testLibrary>::@class::C::@getter::commentAroundAnnotation2
setter: <testLibrary>::@class::C::@setter::commentAroundAnnotation2
constructors
synthetic new
reference: <testLibrary>::@class::C::@constructor::new
firstFragment: #F12
getters
synthetic hasDocComment
reference: <testLibrary>::@class::C::@getter::hasDocComment
firstFragment: #F13
returnType: int
variable: <testLibrary>::@class::C::@field::hasDocComment
synthetic hasDocComment2
reference: <testLibrary>::@class::C::@getter::hasDocComment2
firstFragment: #F14
returnType: int
variable: <testLibrary>::@class::C::@field::hasDocComment2
synthetic hasAnnotation
reference: <testLibrary>::@class::C::@getter::hasAnnotation
firstFragment: #F15
returnType: int
variable: <testLibrary>::@class::C::@field::hasAnnotation
synthetic hasAnnotation2
reference: <testLibrary>::@class::C::@getter::hasAnnotation2
firstFragment: #F16
returnType: int
variable: <testLibrary>::@class::C::@field::hasAnnotation2
synthetic annotationThenComment
reference: <testLibrary>::@class::C::@getter::annotationThenComment
firstFragment: #F17
returnType: int
variable: <testLibrary>::@class::C::@field::annotationThenComment
synthetic annotationThenComment2
reference: <testLibrary>::@class::C::@getter::annotationThenComment2
firstFragment: #F18
returnType: int
variable: <testLibrary>::@class::C::@field::annotationThenComment2
synthetic commentThenAnnotation
reference: <testLibrary>::@class::C::@getter::commentThenAnnotation
firstFragment: #F19
returnType: int
variable: <testLibrary>::@class::C::@field::commentThenAnnotation
synthetic commentThenAnnotation2
reference: <testLibrary>::@class::C::@getter::commentThenAnnotation2
firstFragment: #F20
returnType: int
variable: <testLibrary>::@class::C::@field::commentThenAnnotation2
synthetic commentAroundAnnotation
reference: <testLibrary>::@class::C::@getter::commentAroundAnnotation
firstFragment: #F21
returnType: int
variable: <testLibrary>::@class::C::@field::commentAroundAnnotation
synthetic commentAroundAnnotation2
reference: <testLibrary>::@class::C::@getter::commentAroundAnnotation2
firstFragment: #F22
returnType: int
variable: <testLibrary>::@class::C::@field::commentAroundAnnotation2
setters
synthetic hasDocComment
reference: <testLibrary>::@class::C::@setter::hasDocComment
firstFragment: #F23
formalParameters
#E0 requiredPositional value
firstFragment: #F24
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::hasDocComment
synthetic hasDocComment2
reference: <testLibrary>::@class::C::@setter::hasDocComment2
firstFragment: #F25
formalParameters
#E1 requiredPositional value
firstFragment: #F26
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::hasDocComment2
synthetic hasAnnotation
reference: <testLibrary>::@class::C::@setter::hasAnnotation
firstFragment: #F27
formalParameters
#E2 requiredPositional value
firstFragment: #F28
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::hasAnnotation
synthetic hasAnnotation2
reference: <testLibrary>::@class::C::@setter::hasAnnotation2
firstFragment: #F29
formalParameters
#E3 requiredPositional value
firstFragment: #F30
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::hasAnnotation2
synthetic annotationThenComment
reference: <testLibrary>::@class::C::@setter::annotationThenComment
firstFragment: #F31
formalParameters
#E4 requiredPositional value
firstFragment: #F32
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::annotationThenComment
synthetic annotationThenComment2
reference: <testLibrary>::@class::C::@setter::annotationThenComment2
firstFragment: #F33
formalParameters
#E5 requiredPositional value
firstFragment: #F34
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::annotationThenComment2
synthetic commentThenAnnotation
reference: <testLibrary>::@class::C::@setter::commentThenAnnotation
firstFragment: #F35
formalParameters
#E6 requiredPositional value
firstFragment: #F36
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::commentThenAnnotation
synthetic commentThenAnnotation2
reference: <testLibrary>::@class::C::@setter::commentThenAnnotation2
firstFragment: #F37
formalParameters
#E7 requiredPositional value
firstFragment: #F38
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::commentThenAnnotation2
synthetic commentAroundAnnotation
reference: <testLibrary>::@class::C::@setter::commentAroundAnnotation
firstFragment: #F39
formalParameters
#E8 requiredPositional value
firstFragment: #F40
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::commentAroundAnnotation
synthetic commentAroundAnnotation2
reference: <testLibrary>::@class::C::@setter::commentAroundAnnotation2
firstFragment: #F41
formalParameters
#E9 requiredPositional value
firstFragment: #F42
type: int
returnType: void
variable: <testLibrary>::@class::C::@field::commentAroundAnnotation2
''');
}
test_codeRange_function() async {
var library = await buildLibrary('''
void raw() {}
/// Comment 1.
/// Comment 2.
void hasDocComment() {}
@Object()
void hasAnnotation() {}
@Object()
/// Comment 1.
/// Comment 2.
void annotationThenComment() {}
/// Comment 1.
/// Comment 2.
@Object()
void commentThenAnnotation() {}
/// Comment 1.
@Object()
/// Comment 2.
void commentAroundAnnotation() {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
functions
#F1 raw (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::raw
#F2 hasDocComment (nameOffset:50) (firstTokenOffset:15) (offset:50)
element: <testLibrary>::@function::hasDocComment
documentationComment: /// Comment 1.\n/// Comment 2.
#F3 hasAnnotation (nameOffset:85) (firstTokenOffset:70) (offset:85)
element: <testLibrary>::@function::hasAnnotation
metadata
Annotation
atSign: @ @70
name: SimpleIdentifier
token: Object @71
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @77
rightParenthesis: ) @78
element: dart:core::@class::Object::@constructor::new
#F4 annotationThenComment (nameOffset:150) (firstTokenOffset:105) (offset:150)
element: <testLibrary>::@function::annotationThenComment
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @105
name: SimpleIdentifier
token: Object @106
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @112
rightParenthesis: ) @113
element: dart:core::@class::Object::@constructor::new
#F5 commentThenAnnotation (nameOffset:223) (firstTokenOffset:178) (offset:223)
element: <testLibrary>::@function::commentThenAnnotation
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @208
name: SimpleIdentifier
token: Object @209
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @215
rightParenthesis: ) @216
element: dart:core::@class::Object::@constructor::new
#F6 commentAroundAnnotation (nameOffset:296) (firstTokenOffset:266) (offset:296)
element: <testLibrary>::@function::commentAroundAnnotation
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @266
name: SimpleIdentifier
token: Object @267
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @273
rightParenthesis: ) @274
element: dart:core::@class::Object::@constructor::new
functions
raw
reference: <testLibrary>::@function::raw
firstFragment: #F1
returnType: void
hasDocComment
reference: <testLibrary>::@function::hasDocComment
firstFragment: #F2
documentationComment: /// Comment 1.\n/// Comment 2.
returnType: void
hasAnnotation
reference: <testLibrary>::@function::hasAnnotation
firstFragment: #F3
metadata
Annotation
atSign: @ @70
name: SimpleIdentifier
token: Object @71
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @77
rightParenthesis: ) @78
element: dart:core::@class::Object::@constructor::new
returnType: void
annotationThenComment
reference: <testLibrary>::@function::annotationThenComment
firstFragment: #F4
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @105
name: SimpleIdentifier
token: Object @106
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @112
rightParenthesis: ) @113
element: dart:core::@class::Object::@constructor::new
returnType: void
commentThenAnnotation
reference: <testLibrary>::@function::commentThenAnnotation
firstFragment: #F5
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @208
name: SimpleIdentifier
token: Object @209
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @215
rightParenthesis: ) @216
element: dart:core::@class::Object::@constructor::new
returnType: void
commentAroundAnnotation
reference: <testLibrary>::@function::commentAroundAnnotation
firstFragment: #F6
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @266
name: SimpleIdentifier
token: Object @267
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @273
rightParenthesis: ) @274
element: dart:core::@class::Object::@constructor::new
returnType: void
''');
}
test_codeRange_method() async {
var library = await buildLibrary('''
class C {
void raw() {}
/// Comment 1.
/// Comment 2.
void hasDocComment() {}
@Object()
void hasAnnotation() {}
@Object()
/// Comment 1.
/// Comment 2.
void annotationThenComment() {}
/// Comment 1.
/// Comment 2.
@Object()
void commentThenAnnotation() {}
/// Comment 1.
@Object()
/// Comment 2.
void commentAroundAnnotation() {}
}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
classes
#F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@class::C
constructors
#F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::C::@constructor::new
typeName: C
methods
#F3 raw (nameOffset:17) (firstTokenOffset:12) (offset:17)
element: <testLibrary>::@class::C::@method::raw
codeOffset: 12
codeLength: 13
#F4 hasDocComment (nameOffset:68) (firstTokenOffset:29) (offset:68)
element: <testLibrary>::@class::C::@method::hasDocComment
documentationComment: /// Comment 1.\n/// Comment 2.
codeOffset: 29
codeLength: 57
#F5 hasAnnotation (nameOffset:107) (firstTokenOffset:90) (offset:107)
element: <testLibrary>::@class::C::@method::hasAnnotation
metadata
Annotation
atSign: @ @90
name: SimpleIdentifier
token: Object @91
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @97
rightParenthesis: ) @98
element: dart:core::@class::Object::@constructor::new
codeOffset: 90
codeLength: 35
#F6 annotationThenComment (nameOffset:180) (firstTokenOffset:129) (offset:180)
element: <testLibrary>::@class::C::@method::annotationThenComment
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @129
name: SimpleIdentifier
token: Object @130
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @136
rightParenthesis: ) @137
element: dart:core::@class::Object::@constructor::new
codeOffset: 129
codeLength: 77
#F7 commentThenAnnotation (nameOffset:261) (firstTokenOffset:210) (offset:261)
element: <testLibrary>::@class::C::@method::commentThenAnnotation
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @244
name: SimpleIdentifier
token: Object @245
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @251
rightParenthesis: ) @252
element: dart:core::@class::Object::@constructor::new
codeOffset: 210
codeLength: 77
#F8 commentAroundAnnotation (nameOffset:342) (firstTokenOffset:308) (offset:342)
element: <testLibrary>::@class::C::@method::commentAroundAnnotation
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @308
name: SimpleIdentifier
token: Object @309
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @315
rightParenthesis: ) @316
element: dart:core::@class::Object::@constructor::new
codeOffset: 308
codeLength: 62
classes
class C
reference: <testLibrary>::@class::C
firstFragment: #F1
constructors
synthetic new
reference: <testLibrary>::@class::C::@constructor::new
firstFragment: #F2
methods
raw
reference: <testLibrary>::@class::C::@method::raw
firstFragment: #F3
returnType: void
hasDocComment
reference: <testLibrary>::@class::C::@method::hasDocComment
firstFragment: #F4
documentationComment: /// Comment 1.\n/// Comment 2.
returnType: void
hasAnnotation
reference: <testLibrary>::@class::C::@method::hasAnnotation
firstFragment: #F5
metadata
Annotation
atSign: @ @90
name: SimpleIdentifier
token: Object @91
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @97
rightParenthesis: ) @98
element: dart:core::@class::Object::@constructor::new
returnType: void
annotationThenComment
reference: <testLibrary>::@class::C::@method::annotationThenComment
firstFragment: #F6
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @129
name: SimpleIdentifier
token: Object @130
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @136
rightParenthesis: ) @137
element: dart:core::@class::Object::@constructor::new
returnType: void
commentThenAnnotation
reference: <testLibrary>::@class::C::@method::commentThenAnnotation
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @244
name: SimpleIdentifier
token: Object @245
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @251
rightParenthesis: ) @252
element: dart:core::@class::Object::@constructor::new
returnType: void
commentAroundAnnotation
reference: <testLibrary>::@class::C::@method::commentAroundAnnotation
firstFragment: #F8
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @308
name: SimpleIdentifier
token: Object @309
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @315
rightParenthesis: ) @316
element: dart:core::@class::Object::@constructor::new
returnType: void
''');
}
test_codeRange_parameter() async {
var library = await buildLibrary('''
main({int a = 1, int b, int c = 2}) {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
functions
#F1 main (nameOffset:0) (firstTokenOffset:0) (offset:0)
element: <testLibrary>::@function::main
formalParameters
#F2 a (nameOffset:10) (firstTokenOffset:6) (offset:10)
element: <testLibrary>::@function::main::@formalParameter::a
initializer: expression_0
IntegerLiteral
literal: 1 @14
staticType: int
#F3 b (nameOffset:21) (firstTokenOffset:17) (offset:21)
element: <testLibrary>::@function::main::@formalParameter::b
#F4 c (nameOffset:28) (firstTokenOffset:24) (offset:28)
element: <testLibrary>::@function::main::@formalParameter::c
initializer: expression_1
IntegerLiteral
literal: 2 @32
staticType: int
functions
main
reference: <testLibrary>::@function::main
firstFragment: #F1
formalParameters
#E0 optionalNamed a
firstFragment: #F2
type: int
constantInitializer
fragment: #F2
expression: expression_0
#E1 optionalNamed b
firstFragment: #F3
type: int
#E2 optionalNamed c
firstFragment: #F4
type: int
constantInitializer
fragment: #F4
expression: expression_1
returnType: dynamic
''');
}
test_codeRange_parameter_annotations() async {
var library = await buildLibrary('''
main(@Object() int a, int b, @Object() int c) {}
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
functions
#F1 main (nameOffset:0) (firstTokenOffset:0) (offset:0)
element: <testLibrary>::@function::main
formalParameters
#F2 a (nameOffset:19) (firstTokenOffset:5) (offset:19)
element: <testLibrary>::@function::main::@formalParameter::a
metadata
Annotation
atSign: @ @5
name: SimpleIdentifier
token: Object @6
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @12
rightParenthesis: ) @13
element: dart:core::@class::Object::@constructor::new
#F3 b (nameOffset:26) (firstTokenOffset:22) (offset:26)
element: <testLibrary>::@function::main::@formalParameter::b
#F4 c (nameOffset:43) (firstTokenOffset:29) (offset:43)
element: <testLibrary>::@function::main::@formalParameter::c
metadata
Annotation
atSign: @ @29
name: SimpleIdentifier
token: Object @30
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @36
rightParenthesis: ) @37
element: dart:core::@class::Object::@constructor::new
functions
main
reference: <testLibrary>::@function::main
firstFragment: #F1
formalParameters
#E0 requiredPositional a
firstFragment: #F2
type: int
metadata
Annotation
atSign: @ @5
name: SimpleIdentifier
token: Object @6
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @12
rightParenthesis: ) @13
element: dart:core::@class::Object::@constructor::new
#E1 requiredPositional b
firstFragment: #F3
type: int
#E2 requiredPositional c
firstFragment: #F4
type: int
metadata
Annotation
atSign: @ @29
name: SimpleIdentifier
token: Object @30
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @36
rightParenthesis: ) @37
element: dart:core::@class::Object::@constructor::new
returnType: dynamic
''');
}
test_codeRange_topLevelVariable() async {
var library = await buildLibrary('''
int withInit = 1 + 2 * 3;
int withoutInit;
int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasInitializer withInit (nameOffset:4) (firstTokenOffset:4) (offset:4)
element: <testLibrary>::@topLevelVariable::withInit
#F2 withoutInit (nameOffset:31) (firstTokenOffset:31) (offset:31)
element: <testLibrary>::@topLevelVariable::withoutInit
#F3 hasInitializer multiWithInit (nameOffset:49) (firstTokenOffset:49) (offset:49)
element: <testLibrary>::@topLevelVariable::multiWithInit
#F4 multiWithoutInit (nameOffset:68) (firstTokenOffset:68) (offset:68)
element: <testLibrary>::@topLevelVariable::multiWithoutInit
#F5 hasInitializer multiWithInit2 (nameOffset:86) (firstTokenOffset:86) (offset:86)
element: <testLibrary>::@topLevelVariable::multiWithInit2
getters
#F6 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@getter::withInit
#F7 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
element: <testLibrary>::@getter::withoutInit
#F8 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
element: <testLibrary>::@getter::multiWithInit
#F9 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
element: <testLibrary>::@getter::multiWithoutInit
#F10 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
element: <testLibrary>::@getter::multiWithInit2
setters
#F11 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::withInit
formalParameters
#F12 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
element: <testLibrary>::@setter::withInit::@formalParameter::value
#F13 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
element: <testLibrary>::@setter::withoutInit
formalParameters
#F14 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
element: <testLibrary>::@setter::withoutInit::@formalParameter::value
#F15 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
element: <testLibrary>::@setter::multiWithInit
formalParameters
#F16 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
element: <testLibrary>::@setter::multiWithInit::@formalParameter::value
#F17 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
element: <testLibrary>::@setter::multiWithoutInit
formalParameters
#F18 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
element: <testLibrary>::@setter::multiWithoutInit::@formalParameter::value
#F19 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
element: <testLibrary>::@setter::multiWithInit2
formalParameters
#F20 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
element: <testLibrary>::@setter::multiWithInit2::@formalParameter::value
topLevelVariables
hasInitializer withInit
reference: <testLibrary>::@topLevelVariable::withInit
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::withInit
setter: <testLibrary>::@setter::withInit
withoutInit
reference: <testLibrary>::@topLevelVariable::withoutInit
firstFragment: #F2
type: int
getter: <testLibrary>::@getter::withoutInit
setter: <testLibrary>::@setter::withoutInit
hasInitializer multiWithInit
reference: <testLibrary>::@topLevelVariable::multiWithInit
firstFragment: #F3
type: int
getter: <testLibrary>::@getter::multiWithInit
setter: <testLibrary>::@setter::multiWithInit
multiWithoutInit
reference: <testLibrary>::@topLevelVariable::multiWithoutInit
firstFragment: #F4
type: int
getter: <testLibrary>::@getter::multiWithoutInit
setter: <testLibrary>::@setter::multiWithoutInit
hasInitializer multiWithInit2
reference: <testLibrary>::@topLevelVariable::multiWithInit2
firstFragment: #F5
type: int
getter: <testLibrary>::@getter::multiWithInit2
setter: <testLibrary>::@setter::multiWithInit2
getters
synthetic static withInit
reference: <testLibrary>::@getter::withInit
firstFragment: #F6
returnType: int
variable: <testLibrary>::@topLevelVariable::withInit
synthetic static withoutInit
reference: <testLibrary>::@getter::withoutInit
firstFragment: #F7
returnType: int
variable: <testLibrary>::@topLevelVariable::withoutInit
synthetic static multiWithInit
reference: <testLibrary>::@getter::multiWithInit
firstFragment: #F8
returnType: int
variable: <testLibrary>::@topLevelVariable::multiWithInit
synthetic static multiWithoutInit
reference: <testLibrary>::@getter::multiWithoutInit
firstFragment: #F9
returnType: int
variable: <testLibrary>::@topLevelVariable::multiWithoutInit
synthetic static multiWithInit2
reference: <testLibrary>::@getter::multiWithInit2
firstFragment: #F10
returnType: int
variable: <testLibrary>::@topLevelVariable::multiWithInit2
setters
synthetic static withInit
reference: <testLibrary>::@setter::withInit
firstFragment: #F11
formalParameters
#E0 requiredPositional value
firstFragment: #F12
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::withInit
synthetic static withoutInit
reference: <testLibrary>::@setter::withoutInit
firstFragment: #F13
formalParameters
#E1 requiredPositional value
firstFragment: #F14
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::withoutInit
synthetic static multiWithInit
reference: <testLibrary>::@setter::multiWithInit
firstFragment: #F15
formalParameters
#E2 requiredPositional value
firstFragment: #F16
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::multiWithInit
synthetic static multiWithoutInit
reference: <testLibrary>::@setter::multiWithoutInit
firstFragment: #F17
formalParameters
#E3 requiredPositional value
firstFragment: #F18
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::multiWithoutInit
synthetic static multiWithInit2
reference: <testLibrary>::@setter::multiWithInit2
firstFragment: #F19
formalParameters
#E4 requiredPositional value
firstFragment: #F20
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::multiWithInit2
''');
}
test_codeRange_topLevelVariable_annotations() async {
var library = await buildLibrary('''
/// Comment 1.
/// Comment 2.
int hasDocComment, hasDocComment2;
@Object()
int hasAnnotation, hasAnnotation2;
@Object()
/// Comment 1.
/// Comment 2.
int annotationThenComment, annotationThenComment2;
/// Comment 1.
/// Comment 2.
@Object()
int commentThenAnnotation, commentThenAnnotation2;
/// Comment 1.
@Object()
/// Comment 2.
int commentAroundAnnotation, commentAroundAnnotation2;
''');
configuration.withCodeRanges = true;
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 hasDocComment (nameOffset:34) (firstTokenOffset:34) (offset:34)
element: <testLibrary>::@topLevelVariable::hasDocComment
documentationComment: /// Comment 1.\n/// Comment 2.
#F2 hasDocComment2 (nameOffset:49) (firstTokenOffset:49) (offset:49)
element: <testLibrary>::@topLevelVariable::hasDocComment2
documentationComment: /// Comment 1.\n/// Comment 2.
#F3 hasAnnotation (nameOffset:80) (firstTokenOffset:80) (offset:80)
element: <testLibrary>::@topLevelVariable::hasAnnotation
metadata
Annotation
atSign: @ @66
name: SimpleIdentifier
token: Object @67
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @73
rightParenthesis: ) @74
element: dart:core::@class::Object::@constructor::new
#F4 hasAnnotation2 (nameOffset:95) (firstTokenOffset:95) (offset:95)
element: <testLibrary>::@topLevelVariable::hasAnnotation2
metadata
Annotation
atSign: @ @66
name: SimpleIdentifier
token: Object @67
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @73
rightParenthesis: ) @74
element: dart:core::@class::Object::@constructor::new
#F5 annotationThenComment (nameOffset:156) (firstTokenOffset:156) (offset:156)
element: <testLibrary>::@topLevelVariable::annotationThenComment
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @112
name: SimpleIdentifier
token: Object @113
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @119
rightParenthesis: ) @120
element: dart:core::@class::Object::@constructor::new
#F6 annotationThenComment2 (nameOffset:179) (firstTokenOffset:179) (offset:179)
element: <testLibrary>::@topLevelVariable::annotationThenComment2
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @112
name: SimpleIdentifier
token: Object @113
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @119
rightParenthesis: ) @120
element: dart:core::@class::Object::@constructor::new
#F7 commentThenAnnotation (nameOffset:248) (firstTokenOffset:248) (offset:248)
element: <testLibrary>::@topLevelVariable::commentThenAnnotation
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @234
name: SimpleIdentifier
token: Object @235
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @241
rightParenthesis: ) @242
element: dart:core::@class::Object::@constructor::new
#F8 commentThenAnnotation2 (nameOffset:271) (firstTokenOffset:271) (offset:271)
element: <testLibrary>::@topLevelVariable::commentThenAnnotation2
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @234
name: SimpleIdentifier
token: Object @235
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @241
rightParenthesis: ) @242
element: dart:core::@class::Object::@constructor::new
#F9 commentAroundAnnotation (nameOffset:340) (firstTokenOffset:340) (offset:340)
element: <testLibrary>::@topLevelVariable::commentAroundAnnotation
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @311
name: SimpleIdentifier
token: Object @312
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @318
rightParenthesis: ) @319
element: dart:core::@class::Object::@constructor::new
#F10 commentAroundAnnotation2 (nameOffset:365) (firstTokenOffset:365) (offset:365)
element: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @311
name: SimpleIdentifier
token: Object @312
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @318
rightParenthesis: ) @319
element: dart:core::@class::Object::@constructor::new
getters
#F11 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
element: <testLibrary>::@getter::hasDocComment
#F12 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
element: <testLibrary>::@getter::hasDocComment2
#F13 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
element: <testLibrary>::@getter::hasAnnotation
#F14 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
element: <testLibrary>::@getter::hasAnnotation2
#F15 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
element: <testLibrary>::@getter::annotationThenComment
#F16 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
element: <testLibrary>::@getter::annotationThenComment2
#F17 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
element: <testLibrary>::@getter::commentThenAnnotation
#F18 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
element: <testLibrary>::@getter::commentThenAnnotation2
#F19 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
element: <testLibrary>::@getter::commentAroundAnnotation
#F20 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
element: <testLibrary>::@getter::commentAroundAnnotation2
setters
#F21 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
element: <testLibrary>::@setter::hasDocComment
formalParameters
#F22 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
element: <testLibrary>::@setter::hasDocComment::@formalParameter::value
#F23 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
element: <testLibrary>::@setter::hasDocComment2
formalParameters
#F24 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
element: <testLibrary>::@setter::hasDocComment2::@formalParameter::value
#F25 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
element: <testLibrary>::@setter::hasAnnotation
formalParameters
#F26 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
element: <testLibrary>::@setter::hasAnnotation::@formalParameter::value
#F27 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
element: <testLibrary>::@setter::hasAnnotation2
formalParameters
#F28 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
element: <testLibrary>::@setter::hasAnnotation2::@formalParameter::value
#F29 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
element: <testLibrary>::@setter::annotationThenComment
formalParameters
#F30 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
element: <testLibrary>::@setter::annotationThenComment::@formalParameter::value
#F31 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
element: <testLibrary>::@setter::annotationThenComment2
formalParameters
#F32 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
element: <testLibrary>::@setter::annotationThenComment2::@formalParameter::value
#F33 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
element: <testLibrary>::@setter::commentThenAnnotation
formalParameters
#F34 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
element: <testLibrary>::@setter::commentThenAnnotation::@formalParameter::value
#F35 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
element: <testLibrary>::@setter::commentThenAnnotation2
formalParameters
#F36 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
element: <testLibrary>::@setter::commentThenAnnotation2::@formalParameter::value
#F37 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
element: <testLibrary>::@setter::commentAroundAnnotation
formalParameters
#F38 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
element: <testLibrary>::@setter::commentAroundAnnotation::@formalParameter::value
#F39 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
element: <testLibrary>::@setter::commentAroundAnnotation2
formalParameters
#F40 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
element: <testLibrary>::@setter::commentAroundAnnotation2::@formalParameter::value
topLevelVariables
hasDocComment
reference: <testLibrary>::@topLevelVariable::hasDocComment
firstFragment: #F1
documentationComment: /// Comment 1.\n/// Comment 2.
type: int
getter: <testLibrary>::@getter::hasDocComment
setter: <testLibrary>::@setter::hasDocComment
hasDocComment2
reference: <testLibrary>::@topLevelVariable::hasDocComment2
firstFragment: #F2
documentationComment: /// Comment 1.\n/// Comment 2.
type: int
getter: <testLibrary>::@getter::hasDocComment2
setter: <testLibrary>::@setter::hasDocComment2
hasAnnotation
reference: <testLibrary>::@topLevelVariable::hasAnnotation
firstFragment: #F3
metadata
Annotation
atSign: @ @66
name: SimpleIdentifier
token: Object @67
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @73
rightParenthesis: ) @74
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::hasAnnotation
setter: <testLibrary>::@setter::hasAnnotation
hasAnnotation2
reference: <testLibrary>::@topLevelVariable::hasAnnotation2
firstFragment: #F4
metadata
Annotation
atSign: @ @66
name: SimpleIdentifier
token: Object @67
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @73
rightParenthesis: ) @74
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::hasAnnotation2
setter: <testLibrary>::@setter::hasAnnotation2
annotationThenComment
reference: <testLibrary>::@topLevelVariable::annotationThenComment
firstFragment: #F5
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @112
name: SimpleIdentifier
token: Object @113
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @119
rightParenthesis: ) @120
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::annotationThenComment
setter: <testLibrary>::@setter::annotationThenComment
annotationThenComment2
reference: <testLibrary>::@topLevelVariable::annotationThenComment2
firstFragment: #F6
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @112
name: SimpleIdentifier
token: Object @113
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @119
rightParenthesis: ) @120
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::annotationThenComment2
setter: <testLibrary>::@setter::annotationThenComment2
commentThenAnnotation
reference: <testLibrary>::@topLevelVariable::commentThenAnnotation
firstFragment: #F7
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @234
name: SimpleIdentifier
token: Object @235
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @241
rightParenthesis: ) @242
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::commentThenAnnotation
setter: <testLibrary>::@setter::commentThenAnnotation
commentThenAnnotation2
reference: <testLibrary>::@topLevelVariable::commentThenAnnotation2
firstFragment: #F8
documentationComment: /// Comment 1.\n/// Comment 2.
metadata
Annotation
atSign: @ @234
name: SimpleIdentifier
token: Object @235
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @241
rightParenthesis: ) @242
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::commentThenAnnotation2
setter: <testLibrary>::@setter::commentThenAnnotation2
commentAroundAnnotation
reference: <testLibrary>::@topLevelVariable::commentAroundAnnotation
firstFragment: #F9
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @311
name: SimpleIdentifier
token: Object @312
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @318
rightParenthesis: ) @319
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::commentAroundAnnotation
setter: <testLibrary>::@setter::commentAroundAnnotation
commentAroundAnnotation2
reference: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
firstFragment: #F10
documentationComment: /// Comment 2.
metadata
Annotation
atSign: @ @311
name: SimpleIdentifier
token: Object @312
element: dart:core::@class::Object
staticType: null
arguments: ArgumentList
leftParenthesis: ( @318
rightParenthesis: ) @319
element: dart:core::@class::Object::@constructor::new
type: int
getter: <testLibrary>::@getter::commentAroundAnnotation2
setter: <testLibrary>::@setter::commentAroundAnnotation2
getters
synthetic static hasDocComment
reference: <testLibrary>::@getter::hasDocComment
firstFragment: #F11
returnType: int
variable: <testLibrary>::@topLevelVariable::hasDocComment
synthetic static hasDocComment2
reference: <testLibrary>::@getter::hasDocComment2
firstFragment: #F12
returnType: int
variable: <testLibrary>::@topLevelVariable::hasDocComment2
synthetic static hasAnnotation
reference: <testLibrary>::@getter::hasAnnotation
firstFragment: #F13
returnType: int
variable: <testLibrary>::@topLevelVariable::hasAnnotation
synthetic static hasAnnotation2
reference: <testLibrary>::@getter::hasAnnotation2
firstFragment: #F14
returnType: int
variable: <testLibrary>::@topLevelVariable::hasAnnotation2
synthetic static annotationThenComment
reference: <testLibrary>::@getter::annotationThenComment
firstFragment: #F15
returnType: int
variable: <testLibrary>::@topLevelVariable::annotationThenComment
synthetic static annotationThenComment2
reference: <testLibrary>::@getter::annotationThenComment2
firstFragment: #F16
returnType: int
variable: <testLibrary>::@topLevelVariable::annotationThenComment2
synthetic static commentThenAnnotation
reference: <testLibrary>::@getter::commentThenAnnotation
firstFragment: #F17
returnType: int
variable: <testLibrary>::@topLevelVariable::commentThenAnnotation
synthetic static commentThenAnnotation2
reference: <testLibrary>::@getter::commentThenAnnotation2
firstFragment: #F18
returnType: int
variable: <testLibrary>::@topLevelVariable::commentThenAnnotation2
synthetic static commentAroundAnnotation
reference: <testLibrary>::@getter::commentAroundAnnotation
firstFragment: #F19
returnType: int
variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation
synthetic static commentAroundAnnotation2
reference: <testLibrary>::@getter::commentAroundAnnotation2
firstFragment: #F20
returnType: int
variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
setters
synthetic static hasDocComment
reference: <testLibrary>::@setter::hasDocComment
firstFragment: #F21
formalParameters
#E0 requiredPositional value
firstFragment: #F22
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::hasDocComment
synthetic static hasDocComment2
reference: <testLibrary>::@setter::hasDocComment2
firstFragment: #F23
formalParameters
#E1 requiredPositional value
firstFragment: #F24
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::hasDocComment2
synthetic static hasAnnotation
reference: <testLibrary>::@setter::hasAnnotation
firstFragment: #F25
formalParameters
#E2 requiredPositional value
firstFragment: #F26
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::hasAnnotation
synthetic static hasAnnotation2
reference: <testLibrary>::@setter::hasAnnotation2
firstFragment: #F27
formalParameters
#E3 requiredPositional value
firstFragment: #F28
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::hasAnnotation2
synthetic static annotationThenComment
reference: <testLibrary>::@setter::annotationThenComment
firstFragment: #F29
formalParameters
#E4 requiredPositional value
firstFragment: #F30
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::annotationThenComment
synthetic static annotationThenComment2
reference: <testLibrary>::@setter::annotationThenComment2
firstFragment: #F31
formalParameters
#E5 requiredPositional value
firstFragment: #F32
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::annotationThenComment2
synthetic static commentThenAnnotation
reference: <testLibrary>::@setter::commentThenAnnotation
firstFragment: #F33
formalParameters
#E6 requiredPositional value
firstFragment: #F34
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::commentThenAnnotation
synthetic static commentThenAnnotation2
reference: <testLibrary>::@setter::commentThenAnnotation2
firstFragment: #F35
formalParameters
#E7 requiredPositional value
firstFragment: #F36
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::commentThenAnnotation2
synthetic static commentAroundAnnotation
reference: <testLibrary>::@setter::commentAroundAnnotation
firstFragment: #F37
formalParameters
#E8 requiredPositional value
firstFragment: #F38
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation
synthetic static commentAroundAnnotation2
reference: <testLibrary>::@setter::commentAroundAnnotation2
firstFragment: #F39
formalParameters
#E9 requiredPositional value
firstFragment: #F40
type: int
returnType: void
variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
''');
}
test_codeRange_type_parameter() async {
var library = await buildLibrary('''
class A<T> {}
void f<U extends num> {}
''');
configuration.withCodeRanges = 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
typeParameters
#F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
element: #E0 T
constructors
#F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
functions
#F4 f (nameOffset:19) (firstTokenOffset:14) (offset:19)
element: <testLibrary>::@function::f
typeParameters
#F5 U (nameOffset:21) (firstTokenOffset:21) (offset:21)
element: #E1 U
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
functions
f
reference: <testLibrary>::@function::f
firstFragment: #F4
typeParameters
#E1 U
firstFragment: #F5
bound: num
returnType: void
''');
}
test_nameOffset_class_constructor() async {
var library = await buildLibrary(r'''
class A {
A();
A.named();
}
''');
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 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
typeNameOffset: 12
#F3 named (nameOffset:21) (firstTokenOffset:19) (offset:21)
element: <testLibrary>::@class::A::@constructor::named
typeName: A
typeNameOffset: 19
periodOffset: 20
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
named
reference: <testLibrary>::@class::A::@constructor::named
firstFragment: #F3
''');
}
test_nameOffset_class_constructor_parameter() async {
var library = await buildLibrary(r'''
class A {
A(int 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
constructors
#F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
typeNameOffset: 12
formalParameters
#F3 a (nameOffset:18) (firstTokenOffset:14) (offset:18)
element: <testLibrary>::@class::A::@constructor::new::@formalParameter::a
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
formalParameters
#E0 requiredPositional a
firstFragment: #F3
type: int
''');
}
test_nameOffset_class_field() async {
var library = await buildLibrary(r'''
class A {
int foo = 0;
}
''');
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
fields
#F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
element: <testLibrary>::@class::A::@field::foo
constructors
#F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
getters
#F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@class::A::@getter::foo
setters
#F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@class::A::@setter::foo
formalParameters
#F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
element: <testLibrary>::@class::A::@setter::foo::@formalParameter::value
classes
hasNonFinalField class A
reference: <testLibrary>::@class::A
firstFragment: #F1
fields
hasInitializer foo
reference: <testLibrary>::@class::A::@field::foo
firstFragment: #F2
type: int
getter: <testLibrary>::@class::A::@getter::foo
setter: <testLibrary>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
getters
synthetic foo
reference: <testLibrary>::@class::A::@getter::foo
firstFragment: #F4
returnType: int
variable: <testLibrary>::@class::A::@field::foo
setters
synthetic foo
reference: <testLibrary>::@class::A::@setter::foo
firstFragment: #F5
formalParameters
#E0 requiredPositional value
firstFragment: #F6
type: int
returnType: void
variable: <testLibrary>::@class::A::@field::foo
''');
}
test_nameOffset_class_getter() async {
var library = await buildLibrary(r'''
class A {
int get foo => 0;
}
''');
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
fields
#F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@field::foo
constructors
#F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
getters
#F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
element: <testLibrary>::@class::A::@getter::foo
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
fields
synthetic foo
reference: <testLibrary>::@class::A::@field::foo
firstFragment: #F2
type: int
getter: <testLibrary>::@class::A::@getter::foo
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
getters
foo
reference: <testLibrary>::@class::A::@getter::foo
firstFragment: #F4
returnType: int
variable: <testLibrary>::@class::A::@field::foo
''');
}
test_nameOffset_class_method() async {
var library = await buildLibrary(r'''
class A {
void foo<T>(int 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
constructors
#F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
methods
#F3 foo (nameOffset:17) (firstTokenOffset:12) (offset:17)
element: <testLibrary>::@class::A::@method::foo
typeParameters
#F4 T (nameOffset:21) (firstTokenOffset:21) (offset:21)
element: #E0 T
formalParameters
#F5 a (nameOffset:28) (firstTokenOffset:24) (offset:28)
element: <testLibrary>::@class::A::@method::foo::@formalParameter::a
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F2
methods
foo
reference: <testLibrary>::@class::A::@method::foo
firstFragment: #F3
typeParameters
#E0 T
firstFragment: #F4
formalParameters
#E1 requiredPositional a
firstFragment: #F5
type: int
returnType: void
''');
}
test_nameOffset_class_setter() async {
var library = await buildLibrary(r'''
class A {
set foo(int x) {}
}
''');
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
fields
#F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@field::foo
constructors
#F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
setters
#F4 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
element: <testLibrary>::@class::A::@setter::foo
formalParameters
#F5 x (nameOffset:24) (firstTokenOffset:20) (offset:24)
element: <testLibrary>::@class::A::@setter::foo::@formalParameter::x
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
fields
synthetic foo
reference: <testLibrary>::@class::A::@field::foo
firstFragment: #F2
type: int
setter: <testLibrary>::@class::A::@setter::foo
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
setters
foo
reference: <testLibrary>::@class::A::@setter::foo
firstFragment: #F4
formalParameters
#E0 requiredPositional x
firstFragment: #F5
type: int
returnType: void
variable: <testLibrary>::@class::A::@field::foo
''');
}
test_nameOffset_class_typeParameter() async {
var library = await buildLibrary(r'''
class A<T> {}
''');
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 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
element: <testLibrary>::@class::A::@constructor::new
typeName: A
classes
class A
reference: <testLibrary>::@class::A
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
constructors
synthetic new
reference: <testLibrary>::@class::A::@constructor::new
firstFragment: #F3
''');
}
test_nameOffset_extension_typeParameter() async {
var library = await buildLibrary(r'''
extension E<T> on int {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
extensions
#F1 extension E (nameOffset:10) (firstTokenOffset:0) (offset:10)
element: <testLibrary>::@extension::E
typeParameters
#F2 T (nameOffset:12) (firstTokenOffset:12) (offset:12)
element: #E0 T
extensions
extension E
reference: <testLibrary>::@extension::E
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
extendedType: int
''');
}
test_nameOffset_function_functionTypedFormal_parameter() async {
var library = await buildLibrary(r'''
void f(void f<U>(int a)) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
functions
#F1 f (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::f
formalParameters
#F2 f (nameOffset:12) (firstTokenOffset:7) (offset:12)
element: <testLibrary>::@function::f::@formalParameter::f
typeParameters
#F3 U (nameOffset:14) (firstTokenOffset:14) (offset:14)
element: #E0 U
parameters
#F4 a (nameOffset:21) (firstTokenOffset:17) (offset:21)
element: a@21
functions
f
reference: <testLibrary>::@function::f
firstFragment: #F1
formalParameters
#E1 requiredPositional f
firstFragment: #F2
type: void Function<U>(int)
typeParameters
#E0 U
firstFragment: #F3
formalParameters
#E2 requiredPositional a
firstFragment: #F4
type: int
returnType: void
''');
}
test_nameOffset_function_functionTypedFormal_parameter2() async {
var library = await buildLibrary(r'''
void f({required void f<U>(int a)}) {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
functions
#F1 f (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::f
formalParameters
#F2 f (nameOffset:22) (firstTokenOffset:8) (offset:22)
element: <testLibrary>::@function::f::@formalParameter::f
typeParameters
#F3 U (nameOffset:24) (firstTokenOffset:24) (offset:24)
element: #E0 U
parameters
#F4 a (nameOffset:31) (firstTokenOffset:27) (offset:31)
element: a@31
functions
f
reference: <testLibrary>::@function::f
firstFragment: #F1
formalParameters
#E1 requiredNamed f
firstFragment: #F2
type: void Function<U>(int)
typeParameters
#E0 U
firstFragment: #F3
formalParameters
#E2 requiredPositional a
firstFragment: #F4
type: int
returnType: void
''');
}
test_nameOffset_function_typeParameter() async {
var library = await buildLibrary(r'''
void f<T>() {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
functions
#F1 f (nameOffset:5) (firstTokenOffset:0) (offset:5)
element: <testLibrary>::@function::f
typeParameters
#F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
element: #E0 T
functions
f
reference: <testLibrary>::@function::f
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
returnType: void
''');
}
test_nameOffset_functionTypeAlias_typeParameter() async {
var library = await buildLibrary(r'''
typedef void F<T>();
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
typeAliases
#F1 F (nameOffset:13) (firstTokenOffset:0) (offset:13)
element: <testLibrary>::@typeAlias::F
typeParameters
#F2 T (nameOffset:15) (firstTokenOffset:15) (offset:15)
element: #E0 T
typeAliases
F
reference: <testLibrary>::@typeAlias::F
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
aliasedType: void Function()
''');
}
test_nameOffset_genericTypeAlias_typeParameter() async {
var library = await buildLibrary(r'''
typedef F<T> = void Function();
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
typeAliases
#F1 F (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@typeAlias::F
typeParameters
#F2 T (nameOffset:10) (firstTokenOffset:10) (offset:10)
element: #E0 T
typeAliases
F
reference: <testLibrary>::@typeAlias::F
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
aliasedType: void Function()
''');
}
test_nameOffset_mixin_typeParameter() async {
var library = await buildLibrary(r'''
mixin M<T> {}
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
mixins
#F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
element: <testLibrary>::@mixin::M
typeParameters
#F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
element: #E0 T
mixins
mixin M
reference: <testLibrary>::@mixin::M
firstFragment: #F1
typeParameters
#E0 T
firstFragment: #F2
superclassConstraints
Object
''');
}
test_nameOffset_unit_getter() async {
var library = await buildLibrary(r'''
int get foo => 0;
''');
checkElementText(library, r'''
library
reference: <testLibrary>
fragments
#F0 <testLibraryFragment>
element: <testLibrary>
topLevelVariables
#F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
element: <testLibrary>::@topLevelVariable::foo
getters
#F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
element: <testLibrary>::@getter::foo
topLevelVariables
synthetic foo
reference: <testLibrary>::@topLevelVariable::foo
firstFragment: #F1
type: int
getter: <testLibrary>::@getter::foo
getters
static foo
reference: <testLibrary>::@getter::foo
firstFragment: #F2
returnType: int
variable: <testLibrary>::@topLevelVariable::foo
''');
}
}
@reflectiveTest
class OffsetsElementTest_fromBytes extends OffsetsElementTest {
@override
bool get keepLinkingLibraries => false;
}
@reflectiveTest
class OffsetsElementTest_keepLinking extends OffsetsElementTest {
@override
bool get keepLinkingLibraries => true;
}