Skip to content

Commit e13b1b6

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Build summary2 for SDK.
Note, that this will start building it always, regardless of the state of the useSummary2 flag. Summary1: 4892680 bytes. Summary2: 7105744 bytes. Both: 10748992 bytes. Time: Summary1: 2550 ms. Summary2: 2750 ms. Both: 4000 ms. Change-Id: If81367c24654c1d57a4dcdbd42f76d80ae8c4b39 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102540 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 58cf83d commit e13b1b6

File tree

5 files changed

+94
-9
lines changed

5 files changed

+94
-9
lines changed

pkg/analyzer/lib/src/summary/format.dart

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16242,6 +16242,7 @@ abstract class _LinkedUnitMixin implements idl.LinkedUnit {
1624216242
class PackageBundleBuilder extends Object
1624316243
with _PackageBundleMixin
1624416244
implements idl.PackageBundle {
16245+
LinkedNodeBundleBuilder _bundle2;
1624516246
List<LinkedLibraryBuilder> _linkedLibraries;
1624616247
List<String> _linkedLibraryUris;
1624716248
int _majorVersion;
@@ -16253,6 +16254,14 @@ class PackageBundleBuilder extends Object
1625316254
Null get apiSignature =>
1625416255
throw new UnimplementedError('attempt to access deprecated field');
1625516256

16257+
@override
16258+
LinkedNodeBundleBuilder get bundle2 => _bundle2;
16259+
16260+
/// The version 2 of the summary.
16261+
set bundle2(LinkedNodeBundleBuilder value) {
16262+
this._bundle2 = value;
16263+
}
16264+
1625616265
@override
1625716266
Null get dependencies =>
1625816267
throw new UnimplementedError('attempt to access deprecated field');
@@ -16317,13 +16326,15 @@ class PackageBundleBuilder extends Object
1631716326
}
1631816327

1631916328
PackageBundleBuilder(
16320-
{List<LinkedLibraryBuilder> linkedLibraries,
16329+
{LinkedNodeBundleBuilder bundle2,
16330+
List<LinkedLibraryBuilder> linkedLibraries,
1632116331
List<String> linkedLibraryUris,
1632216332
int majorVersion,
1632316333
int minorVersion,
1632416334
List<UnlinkedUnitBuilder> unlinkedUnits,
1632516335
List<String> unlinkedUnitUris})
16326-
: _linkedLibraries = linkedLibraries,
16336+
: _bundle2 = bundle2,
16337+
_linkedLibraries = linkedLibraries,
1632716338
_linkedLibraryUris = linkedLibraryUris,
1632816339
_majorVersion = majorVersion,
1632916340
_minorVersion = minorVersion,
@@ -16332,6 +16343,7 @@ class PackageBundleBuilder extends Object
1633216343

1633316344
/// Flush [informative] data recursively.
1633416345
void flushInformative() {
16346+
_bundle2?.flushInformative();
1633516347
_linkedLibraries?.forEach((b) => b.flushInformative());
1633616348
_unlinkedUnits?.forEach((b) => b.flushInformative());
1633716349
}
@@ -16372,6 +16384,8 @@ class PackageBundleBuilder extends Object
1637216384
}
1637316385
signature.addInt(this._majorVersion ?? 0);
1637416386
signature.addInt(this._minorVersion ?? 0);
16387+
signature.addBool(this._bundle2 != null);
16388+
this._bundle2?.collectApiSignature(signature);
1637516389
}
1637616390

1637716391
List<int> toBuffer() {
@@ -16380,10 +16394,14 @@ class PackageBundleBuilder extends Object
1638016394
}
1638116395

1638216396
fb.Offset finish(fb.Builder fbBuilder) {
16397+
fb.Offset offset_bundle2;
1638316398
fb.Offset offset_linkedLibraries;
1638416399
fb.Offset offset_linkedLibraryUris;
1638516400
fb.Offset offset_unlinkedUnits;
1638616401
fb.Offset offset_unlinkedUnitUris;
16402+
if (_bundle2 != null) {
16403+
offset_bundle2 = _bundle2.finish(fbBuilder);
16404+
}
1638716405
if (!(_linkedLibraries == null || _linkedLibraries.isEmpty)) {
1638816406
offset_linkedLibraries = fbBuilder
1638916407
.writeList(_linkedLibraries.map((b) => b.finish(fbBuilder)).toList());
@@ -16401,6 +16419,9 @@ class PackageBundleBuilder extends Object
1640116419
_unlinkedUnitUris.map((b) => fbBuilder.writeString(b)).toList());
1640216420
}
1640316421
fbBuilder.startTable();
16422+
if (offset_bundle2 != null) {
16423+
fbBuilder.addOffset(9, offset_bundle2);
16424+
}
1640416425
if (offset_linkedLibraries != null) {
1640516426
fbBuilder.addOffset(0, offset_linkedLibraries);
1640616427
}
@@ -16444,6 +16465,7 @@ class _PackageBundleImpl extends Object
1644416465

1644516466
_PackageBundleImpl(this._bc, this._bcOffset);
1644616467

16468+
idl.LinkedNodeBundle _bundle2;
1644716469
List<idl.LinkedLibrary> _linkedLibraries;
1644816470
List<String> _linkedLibraryUris;
1644916471
int _majorVersion;
@@ -16455,6 +16477,13 @@ class _PackageBundleImpl extends Object
1645516477
Null get apiSignature =>
1645616478
throw new UnimplementedError('attempt to access deprecated field');
1645716479

16480+
@override
16481+
idl.LinkedNodeBundle get bundle2 {
16482+
_bundle2 ??=
16483+
const _LinkedNodeBundleReader().vTableGet(_bc, _bcOffset, 9, null);
16484+
return _bundle2;
16485+
}
16486+
1645816487
@override
1645916488
Null get dependencies =>
1646016489
throw new UnimplementedError('attempt to access deprecated field');
@@ -16510,6 +16539,7 @@ abstract class _PackageBundleMixin implements idl.PackageBundle {
1651016539
@override
1651116540
Map<String, Object> toJson() {
1651216541
Map<String, Object> _result = <String, Object>{};
16542+
if (bundle2 != null) _result["bundle2"] = bundle2.toJson();
1651316543
if (linkedLibraries.isNotEmpty)
1651416544
_result["linkedLibraries"] =
1651516545
linkedLibraries.map((_value) => _value.toJson()).toList();
@@ -16527,6 +16557,7 @@ abstract class _PackageBundleMixin implements idl.PackageBundle {
1652716557

1652816558
@override
1652916559
Map<String, Object> toMap() => {
16560+
"bundle2": bundle2,
1653016561
"linkedLibraries": linkedLibraries,
1653116562
"linkedLibraryUris": linkedLibraryUris,
1653216563
"majorVersion": majorVersion,

pkg/analyzer/lib/src/summary/format.fbs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2160,6 +2160,9 @@ table PackageBundle {
21602160
/// package may have changed.
21612161
apiSignature:string (id: 7, deprecated);
21622162

2163+
/// The version 2 of the summary.
2164+
bundle2:LinkedNodeBundle (id: 9);
2165+
21632166
/// Information about the packages this package depends on, if known.
21642167
dependencies:[PackageDependencyInfo] (id: 8, deprecated);
21652168

pkg/analyzer/lib/src/summary/idl.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,10 @@ abstract class PackageBundle extends base.SummaryClass {
21832183
@deprecated
21842184
String get apiSignature;
21852185

2186+
/// The version 2 of the summary.
2187+
@Id(9)
2188+
LinkedNodeBundle get bundle2;
2189+
21862190
/// Information about the packages this package depends on, if known.
21872191
@Id(8)
21882192
@informative

pkg/analyzer/lib/src/summary/summarize_elements.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class PackageBundleAssembler {
3535
final Map<String, UnlinkedUnitBuilder> _unlinkedUnitMap =
3636
<String, UnlinkedUnitBuilder>{};
3737

38+
LinkedNodeBundleBuilder _bundle2;
39+
3840
void addLinkedLibrary(String uri, LinkedLibraryBuilder library) {
3941
_linkedLibraries.add(library);
4042
_linkedLibraryUris.add(uri);
@@ -60,6 +62,14 @@ class PackageBundleAssembler {
6062
unlinkedUnitUris: _unlinkedUnitUris,
6163
unlinkedUnits: _unlinkedUnits,
6264
majorVersion: currentMajorVersion,
63-
minorVersion: currentMinorVersion);
65+
minorVersion: currentMinorVersion,
66+
bundle2: _bundle2);
67+
}
68+
69+
void setBundle2(LinkedNodeBundleBuilder bundle2) {
70+
if (this._bundle2 != null) {
71+
throw StateError('Bundle2 may be set only once.');
72+
}
73+
_bundle2 = bundle2;
6474
}
6575
}

pkg/analyzer/lib/src/summary/summary_file_builder.dart

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:analyzer/dart/ast/token.dart';
1111
import 'package:analyzer/error/listener.dart';
1212
import 'package:analyzer/file_system/file_system.dart';
1313
import 'package:analyzer/file_system/physical_file_system.dart';
14+
import 'package:analyzer/src/dart/element/element.dart';
1415
import 'package:analyzer/src/dart/scanner/reader.dart';
1516
import 'package:analyzer/src/dart/scanner/scanner.dart';
1617
import 'package:analyzer/src/dart/sdk/sdk.dart';
@@ -23,6 +24,9 @@ import 'package:analyzer/src/summary/idl.dart';
2324
import 'package:analyzer/src/summary/link.dart';
2425
import 'package:analyzer/src/summary/summarize_ast.dart';
2526
import 'package:analyzer/src/summary/summarize_elements.dart';
27+
import 'package:analyzer/src/summary2/link.dart' as summary2;
28+
import 'package:analyzer/src/summary2/linked_element_factory.dart' as summary2;
29+
import 'package:analyzer/src/summary2/reference.dart' as summary2;
2630

2731
class SummaryBuilder {
2832
final Iterable<Source> librarySources;
@@ -73,6 +77,7 @@ class _Builder {
7377

7478
final Set<String> libraryUris = new Set<String>();
7579
final Map<String, UnlinkedUnit> unlinkedMap = <String, UnlinkedUnit>{};
80+
final List<summary2.LinkInputLibrary> inputLibraries = [];
7681

7782
final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
7883

@@ -95,6 +100,8 @@ class _Builder {
95100
}, DeclaredVariables(), context.analysisOptions);
96101
map.forEach(bundleAssembler.addLinkedLibrary);
97102

103+
_link2();
104+
98105
return bundleAssembler.assemble().toBuffer();
99106
}
100107

@@ -103,27 +110,57 @@ class _Builder {
103110
if (!libraryUris.add(uriStr)) {
104111
return;
105112
}
106-
CompilationUnit unit = _addUnlinked(source);
107-
for (Directive directive in unit.directives) {
113+
114+
var inputUnits = <summary2.LinkInputUnit>[];
115+
116+
CompilationUnit definingUnit = _parse(source);
117+
_addUnlinked(source, definingUnit);
118+
inputUnits.add(
119+
summary2.LinkInputUnit(source, false, definingUnit),
120+
);
121+
122+
for (Directive directive in definingUnit.directives) {
108123
if (directive is NamespaceDirective) {
109124
String libUri = directive.uri.stringValue;
110125
Source libSource = context.sourceFactory.resolveUri(source, libUri);
111126
_addLibrary(libSource);
112127
} else if (directive is PartDirective) {
113128
String partUri = directive.uri.stringValue;
114129
Source partSource = context.sourceFactory.resolveUri(source, partUri);
115-
_addUnlinked(partSource);
130+
CompilationUnit partUnit = _parse(partSource);
131+
_addUnlinked(partSource, partUnit);
132+
inputUnits.add(
133+
summary2.LinkInputUnit(partSource, false, partUnit),
134+
);
116135
}
117136
}
137+
138+
inputLibraries.add(
139+
summary2.LinkInputLibrary(source, inputUnits),
140+
);
118141
}
119142

120-
CompilationUnit _addUnlinked(Source source) {
143+
void _addUnlinked(Source source, CompilationUnit unit) {
121144
String uriStr = source.uri.toString();
122-
CompilationUnit unit = _parse(source);
123145
UnlinkedUnitBuilder unlinked = serializeAstUnlinked(unit);
124146
unlinkedMap[uriStr] = unlinked;
125147
bundleAssembler.addUnlinkedUnit(source, unlinked);
126-
return unit;
148+
}
149+
150+
void _link2() {
151+
var rootReference = summary2.Reference.root();
152+
var dartCoreRef = rootReference.getChild('dart:core');
153+
dartCoreRef.getChild('dynamic').element = DynamicElementImpl.instance;
154+
dartCoreRef.getChild('Never').element = NeverElementImpl.instance;
155+
156+
var elementFactory = summary2.LinkedElementFactory(
157+
context,
158+
null,
159+
rootReference,
160+
);
161+
162+
var linkResult = summary2.link(elementFactory, inputLibraries);
163+
bundleAssembler.setBundle2(linkResult.bundle);
127164
}
128165

129166
CompilationUnit _parse(Source source) {

0 commit comments

Comments
 (0)