Skip to content

Commit a07b997

Browse files
committed
Downplay the distinction between linked and prelinked summaries.
Following a discussion on Tuesday, we've decided to only deal with the distinction between linked and unlinked information in the summary definition for now. This should allow fully-linked information (such as constant evaluation, propagated types, and inferred types) to be added to summaries without much trouble. The distinction is preserved in the prelinker (which can't currently handle fully-linked information), and to some degree it will be preserved in unit tests (to minimize future churn). [email protected] Review URL: https://codereview.chromium.org/1584313005 .
1 parent 9da8970 commit a07b997

File tree

11 files changed

+502
-519
lines changed

11 files changed

+502
-519
lines changed

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

Lines changed: 153 additions & 153 deletions
Large diffs are not rendered by default.

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

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import 'package:analyzer/src/summary/format.dart';
66
import 'package:analyzer/src/summary/name_filter.dart';
77

88
/**
9-
* Create a [PrelinkedLibraryBuilder] corresponding to the given
9+
* Create a [LinkedLibraryBuilder] corresponding to the given
1010
* [definingUnit], which should be the defining compilation unit for a library.
1111
* Compilation units referenced by the defining compilation unit via `part`
1212
* declarations will be retrieved using [getPart]. Public namespaces for
1313
* libraries referenced by the defining compilation unit via `import`
1414
* declarations (and files reachable from them via `part` and `export`
1515
* declarations) will be retrieved using [getImport].
1616
*/
17-
PrelinkedLibraryBuilder prelink(UnlinkedUnit definingUnit,
18-
GetPartCallback getPart, GetImportCallback getImport) {
17+
LinkedLibraryBuilder prelink(UnlinkedUnit definingUnit, GetPartCallback getPart,
18+
GetImportCallback getImport) {
1919
return new _Prelinker(definingUnit, getPart, getImport).prelink();
2020
}
2121

@@ -53,7 +53,7 @@ class _Meaning {
5353
/**
5454
* The kind of entity being referred to.
5555
*/
56-
final PrelinkedReferenceKind kind;
56+
final ReferenceKind kind;
5757

5858
/**
5959
* Which of the dependencies of the library being prelinked contains the
@@ -70,18 +70,18 @@ class _Meaning {
7070
_Meaning(this.unit, this.kind, this.dependency, this.numTypeParameters);
7171

7272
/**
73-
* Encode this [_Meaning] as a [PrelinkedExportName], using the given [name].
73+
* Encode this [_Meaning] as a [LinkedExportName], using the given [name].
7474
*/
75-
PrelinkedExportName encodeExportName(String name) {
76-
return new PrelinkedExportNameBuilder(
75+
LinkedExportName encodeExportName(String name) {
76+
return new LinkedExportNameBuilder(
7777
name: name, dependency: dependency, unit: unit, kind: kind);
7878
}
7979

8080
/**
81-
* Encode this [_Meaning] as a [PrelinkedReference].
81+
* Encode this [_Meaning] as a [LinkedReference].
8282
*/
83-
PrelinkedReferenceBuilder encodeReference() {
84-
return new PrelinkedReferenceBuilder(
83+
LinkedReferenceBuilder encodeReference() {
84+
return new LinkedReferenceBuilder(
8585
unit: unit,
8686
kind: kind,
8787
dependency: dependency,
@@ -95,7 +95,7 @@ class _Meaning {
9595
class _PrefixMeaning extends _Meaning {
9696
final Map<String, _Meaning> namespace = <String, _Meaning>{};
9797

98-
_PrefixMeaning() : super(0, PrelinkedReferenceKind.prefix, 0, 0);
98+
_PrefixMeaning() : super(0, ReferenceKind.prefix, 0, 0);
9999
}
100100

101101
/**
@@ -125,15 +125,16 @@ class _Prelinker {
125125
* Names defined inside the library being prelinked.
126126
*/
127127
final Map<String, _Meaning> privateNamespace = <String, _Meaning>{
128-
'': new _Meaning(0, PrelinkedReferenceKind.classOrEnum, 0, 0)
128+
'': new _Meaning(0, ReferenceKind.classOrEnum, 0, 0)
129129
};
130130

131131
/**
132132
* List of dependencies of the library being prelinked. This will be output
133-
* to [PrelinkedLibrary.dependencies].
133+
* to [LinkedLibrary.dependencies].
134134
*/
135-
final List<PrelinkedDependencyBuilder> dependencies =
136-
<PrelinkedDependencyBuilder>[new PrelinkedDependencyBuilder()];
135+
final List<LinkedDependencyBuilder> dependencies = <LinkedDependencyBuilder>[
136+
new LinkedDependencyBuilder()
137+
];
137138

138139
/**
139140
* Map from the relative URI of a dependent library to the index of the
@@ -165,10 +166,9 @@ class _Prelinker {
165166
int dependency = dependencies.length;
166167
uriToDependency[relativeUri] = dependency;
167168
List<String> unitUris = getUnitUris(relativeUri);
168-
PrelinkedDependencyBuilder prelinkedDependency =
169-
new PrelinkedDependencyBuilder(
170-
uri: relativeUri, parts: unitUris.sublist(1));
171-
dependencies.add(prelinkedDependency);
169+
LinkedDependencyBuilder linkedDependency = new LinkedDependencyBuilder(
170+
uri: relativeUri, parts: unitUris.sublist(1));
171+
dependencies.add(linkedDependency);
172172

173173
Map<String, _Meaning> aggregated = <String, _Meaning>{};
174174

@@ -238,42 +238,40 @@ class _Prelinker {
238238
for (UnlinkedClass cls in unit.classes) {
239239
privateNamespace.putIfAbsent(
240240
cls.name,
241-
() => new _Meaning(unitNum, PrelinkedReferenceKind.classOrEnum, 0,
241+
() => new _Meaning(unitNum, ReferenceKind.classOrEnum, 0,
242242
cls.typeParameters.length));
243243
}
244244
for (UnlinkedEnum enm in unit.enums) {
245-
privateNamespace.putIfAbsent(
246-
enm.name,
247-
() =>
248-
new _Meaning(unitNum, PrelinkedReferenceKind.classOrEnum, 0, 0));
245+
privateNamespace.putIfAbsent(enm.name,
246+
() => new _Meaning(unitNum, ReferenceKind.classOrEnum, 0, 0));
249247
}
250248
for (UnlinkedExecutable executable in unit.executables) {
251249
privateNamespace.putIfAbsent(
252250
executable.name,
253251
() => new _Meaning(
254252
unitNum,
255253
executable.kind == UnlinkedExecutableKind.functionOrMethod
256-
? PrelinkedReferenceKind.topLevelFunction
257-
: PrelinkedReferenceKind.topLevelPropertyAccessor,
254+
? ReferenceKind.topLevelFunction
255+
: ReferenceKind.topLevelPropertyAccessor,
258256
0,
259257
executable.typeParameters.length));
260258
}
261259
for (UnlinkedTypedef typedef in unit.typedefs) {
262260
privateNamespace.putIfAbsent(
263261
typedef.name,
264-
() => new _Meaning(unitNum, PrelinkedReferenceKind.typedef, 0,
262+
() => new _Meaning(unitNum, ReferenceKind.typedef, 0,
265263
typedef.typeParameters.length));
266264
}
267265
for (UnlinkedVariable variable in unit.variables) {
268266
privateNamespace.putIfAbsent(
269267
variable.name,
270268
() => new _Meaning(
271-
unitNum, PrelinkedReferenceKind.topLevelPropertyAccessor, 0, 0));
269+
unitNum, ReferenceKind.topLevelPropertyAccessor, 0, 0));
272270
if (!(variable.isConst || variable.isFinal)) {
273271
privateNamespace.putIfAbsent(
274272
variable.name + '=',
275-
() => new _Meaning(unitNum,
276-
PrelinkedReferenceKind.topLevelPropertyAccessor, 0, 0));
273+
() => new _Meaning(
274+
unitNum, ReferenceKind.topLevelPropertyAccessor, 0, 0));
277275
}
278276
}
279277
}
@@ -353,16 +351,16 @@ class _Prelinker {
353351
}
354352

355353
/**
356-
* Produce a [PrelinkedUnit] for the given [unit], by resolving every one of
354+
* Produce a [LinkedUnit] for the given [unit], by resolving every one of
357355
* its references.
358356
*/
359-
PrelinkedUnitBuilder linkUnit(UnlinkedUnit unit) {
357+
LinkedUnitBuilder linkUnit(UnlinkedUnit unit) {
360358
if (unit == null) {
361-
return new PrelinkedUnitBuilder();
359+
return new LinkedUnitBuilder();
362360
}
363361
Map<int, Map<String, _Meaning>> prefixNamespaces =
364362
<int, Map<String, _Meaning>>{};
365-
List<PrelinkedReferenceBuilder> references = <PrelinkedReferenceBuilder>[];
363+
List<LinkedReferenceBuilder> references = <LinkedReferenceBuilder>[];
366364
for (int i = 0; i < unit.references.length; i++) {
367365
UnlinkedReference reference = unit.references[i];
368366
Map<String, _Meaning> namespace;
@@ -382,18 +380,18 @@ class _Prelinker {
382380
}
383381
references.add(meaning.encodeReference());
384382
} else {
385-
references.add(new PrelinkedReferenceBuilder(
386-
kind: PrelinkedReferenceKind.unresolved));
383+
references
384+
.add(new LinkedReferenceBuilder(kind: ReferenceKind.unresolved));
387385
}
388386
}
389-
return new PrelinkedUnitBuilder(references: references);
387+
return new LinkedUnitBuilder(references: references);
390388
}
391389

392390
/**
393-
* Form the [PrelinkedLibrary] for the [definingUnit] that was passed to the
391+
* Form the [LinkedLibrary] for the [definingUnit] that was passed to the
394392
* constructor.
395393
*/
396-
PrelinkedLibraryBuilder prelink() {
394+
LinkedLibraryBuilder prelink() {
397395
// Gather up the unlinked summaries for all the compilation units in the
398396
// library.
399397
List<UnlinkedUnit> units = getUnitUris(null).map(getPartCached).toList();
@@ -410,8 +408,7 @@ class _Prelinker {
410408
// Fill in exported names. This must be done before filling in prefixes
411409
// defined in import declarations, because prefixes shouldn't shadow
412410
// exports.
413-
List<PrelinkedExportNameBuilder> exportNames =
414-
<PrelinkedExportNameBuilder>[];
411+
List<LinkedExportNameBuilder> exportNames = <LinkedExportNameBuilder>[];
415412
computeExportNamespace(null).forEach((String name, _Meaning meaning) {
416413
if (!privateNamespace.containsKey(name)) {
417414
exportNames.add(meaning.encodeExportName(name));
@@ -432,9 +429,9 @@ class _Prelinker {
432429
definingUnit.imports.map(handleImport).toList();
433430

434431
// Link each compilation unit.
435-
List<PrelinkedUnitBuilder> linkedUnits = units.map(linkUnit).toList();
432+
List<LinkedUnitBuilder> linkedUnits = units.map(linkUnit).toList();
436433

437-
return new PrelinkedLibraryBuilder(
434+
return new LinkedLibraryBuilder(
438435
units: linkedUnits,
439436
dependencies: dependencies,
440437
importDependencies: importDependencies,

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class _PublicNamespaceVisitor extends RecursiveAstVisitor {
4343

4444
_PublicNamespaceVisitor();
4545

46-
void addNameIfPublic(
47-
String name, PrelinkedReferenceKind kind, int numTypeParameters) {
46+
void addNameIfPublic(String name, ReferenceKind kind, int numTypeParameters) {
4847
if (isPublic(name)) {
4948
names.add(new UnlinkedPublicNameBuilder(
5049
name: name, kind: kind, numTypeParameters: numTypeParameters));
@@ -55,19 +54,19 @@ class _PublicNamespaceVisitor extends RecursiveAstVisitor {
5554

5655
@override
5756
visitClassDeclaration(ClassDeclaration node) {
58-
addNameIfPublic(node.name.name, PrelinkedReferenceKind.classOrEnum,
57+
addNameIfPublic(node.name.name, ReferenceKind.classOrEnum,
5958
node.typeParameters?.typeParameters?.length ?? 0);
6059
}
6160

6261
@override
6362
visitClassTypeAlias(ClassTypeAlias node) {
64-
addNameIfPublic(node.name.name, PrelinkedReferenceKind.classOrEnum,
63+
addNameIfPublic(node.name.name, ReferenceKind.classOrEnum,
6564
node.typeParameters?.typeParameters?.length ?? 0);
6665
}
6766

6867
@override
6968
visitEnumDeclaration(EnumDeclaration node) {
70-
addNameIfPublic(node.name.name, PrelinkedReferenceKind.classOrEnum, 0);
69+
addNameIfPublic(node.name.name, ReferenceKind.classOrEnum, 0);
7170
}
7271

7372
@override
@@ -88,14 +87,14 @@ class _PublicNamespaceVisitor extends RecursiveAstVisitor {
8887
addNameIfPublic(
8988
name,
9089
node.isGetter || node.isSetter
91-
? PrelinkedReferenceKind.topLevelPropertyAccessor
92-
: PrelinkedReferenceKind.topLevelFunction,
90+
? ReferenceKind.topLevelPropertyAccessor
91+
: ReferenceKind.topLevelFunction,
9392
node.functionExpression.typeParameters?.typeParameters?.length ?? 0);
9493
}
9594

9695
@override
9796
visitFunctionTypeAlias(FunctionTypeAlias node) {
98-
addNameIfPublic(node.name.name, PrelinkedReferenceKind.typedef,
97+
addNameIfPublic(node.name.name, ReferenceKind.typedef,
9998
node.typeParameters?.typeParameters?.length ?? 0);
10099
}
101100

@@ -107,10 +106,9 @@ class _PublicNamespaceVisitor extends RecursiveAstVisitor {
107106
@override
108107
visitVariableDeclaration(VariableDeclaration node) {
109108
String name = node.name.name;
110-
addNameIfPublic(name, PrelinkedReferenceKind.topLevelPropertyAccessor, 0);
109+
addNameIfPublic(name, ReferenceKind.topLevelPropertyAccessor, 0);
111110
if (!node.isFinal && !node.isConst) {
112-
addNameIfPublic(
113-
'$name=', PrelinkedReferenceKind.topLevelPropertyAccessor, 0);
111+
addNameIfPublic('$name=', ReferenceKind.topLevelPropertyAccessor, 0);
114112
}
115113
}
116114
}

0 commit comments

Comments
 (0)