Skip to content

Commit 15805da

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Support for extensions in ManifestElementKind.
Change-Id: Ia097086e6af98d963f534dd6e5999f76cbe4a2a2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/444501 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent f610946 commit 15805da

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed

pkg/analyzer/lib/src/fine/manifest_context.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ final class ManifestElement {
207207
enum ManifestElementKind {
208208
class_,
209209
enum_,
210+
extension_,
210211
extensionType,
211212
mixin_,
212213
typeAlias,
@@ -226,6 +227,8 @@ enum ManifestElementKind {
226227
return ManifestElementKind.class_;
227228
case EnumElement():
228229
return ManifestElementKind.enum_;
230+
case ExtensionElement():
231+
return ManifestElementKind.extension_;
229232
case ExtensionTypeElement():
230233
return ManifestElementKind.extensionType;
231234
case MixinElement():

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44672,6 +44672,66 @@ const d = A.b;
4467244672
);
4467344673
}
4467444674

44675+
test_manifest_constInitializer_prefixedIdentifier_extensionName_fieldName() async {
44676+
await _runLibraryManifestScenario(
44677+
initialCode: r'''
44678+
extension A on Object {
44679+
static const a = 0;
44680+
static const b = 0;
44681+
}
44682+
44683+
const c = A.a;
44684+
const d = A.b;
44685+
''',
44686+
expectedInitialEvents: r'''
44687+
[operation] linkLibraryCycle SDK
44688+
[operation] linkLibraryCycle
44689+
package:test/test.dart
44690+
declaredExtensions
44691+
A: #M0
44692+
declaredFields
44693+
a: #M1
44694+
b: #M2
44695+
declaredGetters
44696+
a: #M3
44697+
b: #M4
44698+
declaredGetters
44699+
c: #M5
44700+
d: #M6
44701+
declaredVariables
44702+
c: #M7
44703+
d: #M8
44704+
''',
44705+
updatedCode: r'''
44706+
extension A on Object {
44707+
static const a = 0;
44708+
static const b = 1;
44709+
}
44710+
44711+
const c = A.a;
44712+
const d = A.b;
44713+
''',
44714+
expectedUpdatedEvents: r'''
44715+
[operation] linkLibraryCycle
44716+
package:test/test.dart
44717+
declaredExtensions
44718+
A: #M0
44719+
declaredFields
44720+
a: #M1
44721+
b: #M9
44722+
declaredGetters
44723+
a: #M3
44724+
b: #M4
44725+
declaredGetters
44726+
c: #M5
44727+
d: #M6
44728+
declaredVariables
44729+
c: #M7
44730+
d: #M10
44731+
''',
44732+
);
44733+
}
44734+
4467544735
test_manifest_constInitializer_prefixedIdentifier_importPrefix_className_fieldName() async {
4467644736
var a = newFile('$testPackageLibPath/a.dart', r'''
4467744737
class A {

pkg/analyzer/test/src/summary/elements/metadata_test.dart

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6932,6 +6932,55 @@ library
69326932
''');
69336933
}
69346934

6935+
test_metadata_value_extension_staticField_unnamed() async {
6936+
var library = await buildLibrary('''
6937+
extension on Object {
6938+
@foo
6939+
static const foo = 0;
6940+
}
6941+
''');
6942+
checkElementText(library, r'''
6943+
library
6944+
reference: <testLibrary>
6945+
fragments
6946+
#F0 <testLibraryFragment>
6947+
element: <testLibrary>
6948+
extensions
6949+
#F1 extension <null-name> (nameOffset:<null>) (firstTokenOffset:0) (offset:0)
6950+
element: <testLibrary>::@extension::0
6951+
fields
6952+
#F2 hasInitializer foo (nameOffset:44) (firstTokenOffset:44) (offset:44)
6953+
element: <testLibrary>::@extension::0::@field::foo
6954+
initializer: expression_0
6955+
IntegerLiteral
6956+
literal: 0 @50
6957+
staticType: int
6958+
getters
6959+
#F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
6960+
element: <testLibrary>::@extension::0::@getter::foo
6961+
extensions
6962+
extension <null-name>
6963+
reference: <testLibrary>::@extension::0
6964+
firstFragment: #F1
6965+
extendedType: Object
6966+
fields
6967+
static const hasInitializer foo
6968+
reference: <testLibrary>::@extension::0::@field::foo
6969+
firstFragment: #F2
6970+
type: int
6971+
constantInitializer
6972+
fragment: #F2
6973+
expression: expression_0
6974+
getter: <testLibrary>::@extension::0::@getter::foo
6975+
getters
6976+
synthetic static foo
6977+
reference: <testLibrary>::@extension::0::@getter::foo
6978+
firstFragment: #F3
6979+
returnType: int
6980+
variable: <testLibrary>::@extension::0::@field::foo
6981+
''');
6982+
}
6983+
69356984
test_metadata_value_prefix_extension_staticField() async {
69366985
newFile('$testPackageLibPath/foo.dart', '''
69376986
extension E on int {

0 commit comments

Comments
 (0)