Print augmentation libraries after the defining unit.
So, we can read it more naturally, first the declaration, then its
augmentations.
Change-Id: I21805969bff6874660500d4477b39ce5aba7484a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/312880
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index cedeba6..96190a6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -87,7 +87,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 280;
+ static const int DATA_VERSION = 281;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 9cccd1b..84f97fd 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -122,7 +122,6 @@
}
set augmentationTarget(ClassOrAugmentationElementMixin? value) {
- value?._augmentation = this;
_augmentationTarget = value;
}
@@ -665,6 +664,10 @@
return _augmentation;
}
+ set augmentation(ClassAugmentationElementImpl? value) {
+ _augmentation = value;
+ }
+
@override
ClassElementImpl? get augmentedDeclaration;
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 393aa0b..ff9e4be 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -101,10 +101,12 @@
unitElement: element.enclosingElement2,
);
_readTypeParameters(reader, element.typeParameters);
- element.augmentationTarget =
- reader.readElement() as ClassOrAugmentationElementMixin;
element.mixins = reader._readInterfaceTypeList();
element.interfaces = reader._readInterfaceTypeList();
+ element.augmentationTarget =
+ reader.readElement() as ClassOrAugmentationElementMixin?;
+ element.augmentation =
+ reader.readElement() as ClassAugmentationElementImpl?;
applyConstantOffsets?.perform();
}
}
@@ -147,6 +149,8 @@
element.supertype = reader._readOptionalInterfaceType();
element.mixins = reader._readInterfaceTypeList();
element.interfaces = reader._readInterfaceTypeList();
+ element.augmentation =
+ reader.readElement() as ClassAugmentationElementImpl?;
applyConstantOffsets?.perform();
}
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index ed14263..74ecc42 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -146,9 +146,10 @@
_resolutionSink._writeAnnotationList(element.metadata);
_writeTypeParameters(element.typeParameters, () {
- _resolutionSink.writeElement(element.augmentationTarget);
_resolutionSink._writeTypeList(element.mixins);
_resolutionSink._writeTypeList(element.interfaces);
+ _resolutionSink.writeElement(element.augmentationTarget);
+ _resolutionSink.writeElement(element.augmentation);
_writeList(
element.fields.where((e) => !e.isSynthetic).toList(),
@@ -180,6 +181,7 @@
_resolutionSink.writeType(element.supertype);
_resolutionSink._writeTypeList(element.mixins);
_resolutionSink._writeTypeList(element.interfaces);
+ _resolutionSink.writeElement(element.augmentation);
if (!element.isMixinApplication) {
var membersOffset = _sink.offset;
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index eb68367..585bf0a 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -760,6 +760,7 @@
}
}
+ /// TODO(scheglov) merge while building
void _mergeAugmentations() {
final targets = <String, ClassOrAugmentationElementMixin>{};
for (final unitElement in element.units) {
@@ -768,8 +769,9 @@
}
for (final augmentation in unitElement.classAugmentations) {
final name = augmentation.name;
- // TODO(scheglov) create synthetic instead of null assert
- augmentation.augmentationTarget = targets[name]!;
+ final target = targets[name]!;
+ augmentation.augmentationTarget = target;
+ target.augmentation = augmentation;
targets[augmentation.name] = augmentation;
}
}
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 6dacd9b..fd761c6 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -604,9 +604,6 @@
_writeElements('exports', e.libraryExports, _writeExportElement);
- _writeElements('augmentationImports', e.augmentationImports,
- _writeAugmentationImportElement);
-
_sink.writelnWithIndent('definingUnit');
_sink.withIndent(() {
_writeUnitElement(e.definingCompilationUnit);
@@ -615,6 +612,9 @@
if (e is LibraryElementImpl) {
_writeLibraryAugmentations(e);
}
+
+ _writeElements('augmentationImports', e.augmentationImports,
+ _writeAugmentationImportElement);
}
void _writeMetadata(Element element) {
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index d8718a0..86c516c 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -44,8 +44,20 @@
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class A @31
+ augmentation: self::@augmentation::package:test/a.dart::@classAugmentation::A
+ constructors
+ synthetic @-1
augmentationImports
package:test/a.dart
+ definingUnit
+ classAugmentations
+ augment class A @68
+ augmentationTarget: self::@class::A
+ augmentedDeclaration: self::@class::A
+ augmentation: self::@augmentation::package:test/b.dart::@classAugmentation::A
augmentationImports
package:test/b.dart
definingUnit
@@ -53,18 +65,6 @@
augment class A @40
augmentationTarget: self::@augmentation::package:test/a.dart::@classAugmentation::A
augmentedDeclaration: self::@class::A
- definingUnit
- classAugmentations
- augment class A @68
- augmentationTarget: self::@class::A
- augmentedDeclaration: self::@class::A
- augmentation: self::@augmentation::package:test/b.dart::@classAugmentation::A
- definingUnit
- classes
- class A @31
- augmentation: self::@augmentation::package:test/a.dart::@classAugmentation::A
- constructors
- synthetic @-1
''');
}
}
@@ -201,8 +201,18 @@
''');
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class C @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/a.dart
+ definingUnit
+ classes
+ class A @60
+ constructors
+ synthetic @-1
augmentationImports
package:test/b.dart
definingUnit
@@ -210,16 +220,6 @@
class B @32
constructors
synthetic @-1
- definingUnit
- classes
- class A @60
- constructors
- synthetic @-1
- definingUnit
- classes
- class C @31
- constructors
- synthetic @-1
''');
}
@@ -238,17 +238,6 @@
''');
checkElementText(library, r'''
library
- augmentationImports
- package:test/a.dart
- definingUnit
- classes
- class B @35
- supertype: A<int>
- constructors
- @56
- superConstructor: ConstructorMember
- base: self::@class::A::@constructor::named
- substitution: {T: int}
definingUnit
classes
class A @31
@@ -262,6 +251,17 @@
parameters
requiredPositional a @50
type: T
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ classes
+ class B @35
+ supertype: A<int>
+ constructors
+ @56
+ superConstructor: ConstructorMember
+ base: self::@class::A::@constructor::named
+ substitution: {T: int}
''');
}
@@ -280,6 +280,13 @@
''');
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class A @31
+ constructors
+ named @39
+ periodOffset: 38
+ nameEnd: 44
augmentationImports
package:test/a.dart
definingUnit
@@ -289,13 +296,6 @@
constructors
@51
superConstructor: self::@class::A::@constructor::named
- definingUnit
- classes
- class A @31
- constructors
- named @39
- periodOffset: 38
- nameEnd: 44
''');
}
@@ -312,6 +312,11 @@
''');
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class A @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/a.dart
definingUnit
@@ -321,11 +326,6 @@
constructors
@51
superConstructor: self::@class::A::@constructor::new
- definingUnit
- classes
- class A @31
- constructors
- synthetic @-1
''');
}
@@ -342,6 +342,15 @@
''');
checkElementText(library, r'''
library
+ definingUnit
+ typeAliases
+ functionTypeAliasBased notSimplyBounded F @33
+ aliasedType: dynamic Function(C<dynamic>)
+ aliasedElement: GenericFunctionTypeElement
+ parameters
+ requiredPositional value @37
+ type: C<dynamic>
+ returnType: dynamic
augmentationImports
package:test/a.dart
definingUnit
@@ -353,15 +362,6 @@
defaultType: dynamic
constructors
synthetic @-1
- definingUnit
- typeAliases
- functionTypeAliasBased notSimplyBounded F @33
- aliasedType: dynamic Function(C<dynamic>)
- aliasedElement: GenericFunctionTypeElement
- parameters
- requiredPositional value @37
- type: C<dynamic>
- returnType: dynamic
''');
}
@@ -375,6 +375,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
definingUnit
@@ -386,7 +387,6 @@
defaultType: dynamic
constructors
synthetic @-1
- definingUnit
''');
}
@@ -409,6 +409,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -433,7 +434,6 @@
staticElement: package:test/a.dart::@class::A::@getter::a
staticType: int
returnType: void
- definingUnit
''');
}
@@ -456,6 +456,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -487,7 +488,6 @@
staticType: int
staticType: int
returnType: void
- definingUnit
''');
}
@@ -501,11 +501,11 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
documentationComment: /// My documentation.
definingUnit
- definingUnit
''');
}
@@ -526,6 +526,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -543,7 +544,6 @@
accessors
synthetic static get b @-1
returnType: int
- definingUnit
''');
}
@@ -566,6 +566,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -591,7 +592,6 @@
accessors
synthetic static get b @-1
returnType: int
- definingUnit
''');
}
@@ -614,6 +614,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -638,7 +639,6 @@
accessors
synthetic static get a @-1
returnType: A
- definingUnit
''');
}
@@ -661,6 +661,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -693,7 +694,6 @@
accessors
synthetic static get b @-1
returnType: int
- definingUnit
''');
}
@@ -714,6 +714,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -722,7 +723,6 @@
functions
f @65
returnType: A
- definingUnit
''');
}
@@ -743,6 +743,7 @@
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
imports
@@ -755,7 +756,6 @@
accessors
synthetic static get b @-1
returnType: int
- definingUnit
''');
}
@@ -779,6 +779,10 @@
// But the library does not import, so there `A` is unresolved.
checkElementText(library, r'''
library
+ definingUnit
+ functions
+ f @27
+ returnType: InvalidType
augmentationImports
package:test/b.dart
imports
@@ -787,10 +791,6 @@
functions
f @48
returnType: A
- definingUnit
- functions
- f @27
- returnType: InvalidType
''');
}
@@ -816,16 +816,16 @@
library
imports
package:test/a.dart
+ definingUnit
+ functions
+ f @44
+ returnType: A
augmentationImports
package:test/b.dart
definingUnit
functions
f @31
returnType: InvalidType
- definingUnit
- functions
- f @44
- returnType: A
''');
}
@@ -848,6 +848,7 @@
library
imports
dart:io
+ definingUnit
augmentationImports
package:test/a.dart
exports
@@ -858,7 +859,6 @@
dart:collection
dart:math
definingUnit
- definingUnit
''');
}
@@ -881,6 +881,7 @@
library
imports
dart:io
+ definingUnit
augmentationImports
package:test/a.dart
imports
@@ -891,7 +892,6 @@
dart:collection
dart:math
definingUnit
- definingUnit
''');
}
@@ -910,6 +910,10 @@
// The augmentation declares `A`, and can it be used in the library.
checkElementText(library, r'''
library
+ definingUnit
+ functions
+ f @27
+ returnType: A
augmentationImports
package:test/a.dart
definingUnit
@@ -920,10 +924,6 @@
functions
f @42
returnType: A
- definingUnit
- functions
- f @27
- returnType: A
''');
}
@@ -942,12 +942,6 @@
// The library declares `A`, and can it be used in the augmentation.
checkElementText(library, r'''
library
- augmentationImports
- package:test/a.dart
- definingUnit
- functions
- f @31
- returnType: A
definingUnit
classes
class A @31
@@ -956,6 +950,12 @@
functions
f @38
returnType: A
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ functions
+ f @31
+ returnType: A
''');
}
@@ -23629,6 +23629,11 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class B @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/a.dart
definingUnit
@@ -23636,11 +23641,6 @@
class A @35
constructors
synthetic @-1
- definingUnit
- classes
- class B @31
- constructors
- synthetic @-1
exportedReferences
declared self::@augmentation::package:test/a.dart::@class::A
declared self::@class::B
@@ -23678,6 +23678,11 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class X @56
+ constructors
+ synthetic @-1
augmentationImports
package:test/d.dart
exports
@@ -23688,11 +23693,6 @@
package:test/b.dart
package:test/c.dart
definingUnit
- definingUnit
- classes
- class X @56
- constructors
- synthetic @-1
exportedReferences
exported[(1, 0)] package:test/a.dart::@class::A
exported[(2, 0)] package:test/b.dart::@class::B1
@@ -23726,6 +23726,11 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class X @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/b.dart
exports
@@ -23733,11 +23738,6 @@
combinators
hide: A2, A4
definingUnit
- definingUnit
- classes
- class X @31
- constructors
- synthetic @-1
exportedReferences
exported[(1, 0)] package:test/a.dart::@class::A1
exported[(1, 0)] package:test/a.dart::@class::A3
@@ -23766,6 +23766,11 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class X @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/b.dart
exports
@@ -23773,11 +23778,6 @@
combinators
show: A1, A3
definingUnit
- definingUnit
- classes
- class X @31
- constructors
- synthetic @-1
exportedReferences
exported[(1, 0)] package:test/a.dart::@class::A1
exported[(1, 0)] package:test/a.dart::@class::A3
@@ -23806,8 +23806,18 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class C @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/a.dart
+ definingUnit
+ classes
+ class A @60
+ constructors
+ synthetic @-1
augmentationImports
package:test/b.dart
definingUnit
@@ -23815,16 +23825,6 @@
class B @32
constructors
synthetic @-1
- definingUnit
- classes
- class A @60
- constructors
- synthetic @-1
- definingUnit
- classes
- class C @31
- constructors
- synthetic @-1
exportedReferences
declared self::@augmentation::package:test/a.dart::@class::A
declared self::@augmentation::package:test/b.dart::@class::B
@@ -23859,21 +23859,21 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
- augmentationImports
- package:test/c.dart
- exports
- package:test/a.dart
- augmentationImports
- package:test/d.dart
- exports
- package:test/b.dart
- definingUnit
- definingUnit
definingUnit
classes
class X @31
constructors
synthetic @-1
+ augmentationImports
+ package:test/c.dart
+ exports
+ package:test/a.dart
+ definingUnit
+ augmentationImports
+ package:test/d.dart
+ exports
+ package:test/b.dart
+ definingUnit
exportedReferences
exported[(1, 0)] package:test/a.dart::@class::A
exported[(2, 0)] package:test/b.dart::@class::B
@@ -23896,6 +23896,7 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
definingUnit
@@ -23911,7 +23912,6 @@
requiredPositional _a @-1
type: int
returnType: void
- definingUnit
exportedReferences
declared self::@augmentation::package:test/a.dart::@getter::a
declared self::@augmentation::package:test/a.dart::@setter::a
@@ -23932,6 +23932,7 @@
configuration.withExportScope = true;
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
definingUnit
@@ -23946,7 +23947,6 @@
accessors
synthetic static get a @-1
returnType: int
- definingUnit
exportedReferences
declared self::@augmentation::package:test/a.dart::@getter::a
exportNamespace
@@ -29095,6 +29095,11 @@
''');
checkElementText(library, r'''
library
+ definingUnit
+ classes
+ class B @31
+ constructors
+ synthetic @-1
augmentationImports
package:test/a.dart
definingUnit
@@ -29102,11 +29107,6 @@
class A @35
constructors
synthetic @-1
- definingUnit
- classes
- class B @31
- constructors
- synthetic @-1
''');
final import_0 = library.augmentationImports[0];
@@ -29136,19 +29136,19 @@
configuration.withLibraryAugmentations = true;
checkElementText(library, r'''
library
- augmentationImports
- package:test/a.dart
- augmentationImports
- package:test/b.dart
- definingUnit
- definingUnit
- package:test/c.dart
- definingUnit
definingUnit
augmentations
self::@augmentation::package:test/a.dart
self::@augmentation::package:test/b.dart
self::@augmentation::package:test/c.dart
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ augmentationImports
+ package:test/b.dart
+ definingUnit
+ package:test/c.dart
+ definingUnit
''');
final import_0 = library.augmentationImports[0];
@@ -29162,9 +29162,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
noRelativeUriString
- definingUnit
''');
}
@@ -29174,9 +29174,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
source 'package:test/test.dart'
- definingUnit
''');
}
@@ -29186,9 +29186,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
relativeUri 'foo:bar'
- definingUnit
''');
}
@@ -29201,9 +29201,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
source 'package:test/a.dart'
- definingUnit
''');
}
@@ -29216,9 +29216,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
source 'package:test/a.dart'
- definingUnit
''');
}
@@ -29228,9 +29228,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
source 'package:test/a.dart'
- definingUnit
''');
}
@@ -29240,9 +29240,9 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
relativeUriString ':'
- definingUnit
''');
}
@@ -29949,6 +29949,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
definingUnit
@@ -29964,7 +29965,6 @@
element: dart:core::@getter::deprecated
constructors
synthetic @-1
- definingUnit
''');
}
@@ -29978,6 +29978,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
metadata
@@ -29989,7 +29990,6 @@
staticType: null
element: dart:core::@getter::deprecated
definingUnit
- definingUnit
''');
}
@@ -30004,6 +30004,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
exports
@@ -30017,7 +30018,6 @@
staticType: null
element: dart:core::@getter::deprecated
definingUnit
- definingUnit
''');
}
@@ -30035,8 +30035,10 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/b.dart
+ definingUnit
augmentationImports
package:test/a.dart
metadata
@@ -30048,8 +30050,6 @@
staticType: null
element: dart:core::@getter::deprecated
definingUnit
- definingUnit
- definingUnit
''');
}
@@ -30064,6 +30064,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
imports
@@ -30077,7 +30078,6 @@
staticType: null
element: dart:core::@getter::deprecated
definingUnit
- definingUnit
''');
}
@@ -30091,6 +30091,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
metadata
@@ -30102,7 +30103,6 @@
staticType: null
element: dart:core::@getter::deprecated
definingUnit
- definingUnit
''');
}
@@ -32695,6 +32695,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
package:test/a.dart
metadata
@@ -32706,7 +32707,6 @@
staticType: null
element: dart:core::@getter::deprecated
definingUnit
- definingUnit
''');
}
@@ -32718,6 +32718,7 @@
''');
checkElementText(library, r'''
library
+ definingUnit
augmentationImports
source 'dart:math'
metadata
@@ -32728,7 +32729,6 @@
staticElement: dart:core::@getter::deprecated
staticType: null
element: dart:core::@getter::deprecated
- definingUnit
''');
}