Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: pkg/analyzer/lib/src/summary/summarize_elements.dart

Issue 1681353002: Refactor code that populates the references table. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/summary/summarize_elements.dart
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
index 5f4dbca910344fe99c2c1a65b11e73a137cb55f9..a5f6714799aa1a101843181d47566af0451b435d 100644
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
@@ -431,8 +431,7 @@ class _CompilationUnitSerializer {
}
}
for (ConstructorElement constructor in cls.constructors) {
- if (constructor.isPublic &&
- constructor.name.isNotEmpty) {
+ if (constructor.isPublic && constructor.name.isNotEmpty) {
// TODO(paulberry): should numTypeParameters include class params?
bs.add(new UnlinkedPublicNameBuilder(
name: constructor.name,
@@ -667,14 +666,8 @@ class _CompilationUnitSerializer {
* Serialize the given [prefix] into an index into the references table.
*/
int serializePrefix(PrefixElement element) {
- return referenceMap.putIfAbsent(element, () {
- assert(unlinkedReferences.length == linkedReferences.length);
- int index = unlinkedReferences.length;
- unlinkedReferences.add(new UnlinkedReferenceBuilder(name: element.name));
- linkedReferences
- .add(new LinkedReferenceBuilder(kind: ReferenceKind.prefix));
- return index;
- });
+ return referenceMap.putIfAbsent(element,
+ () => serializeUnlinkedReference(element.name, ReferenceKind.prefix));
}
/**
@@ -796,6 +789,23 @@ class _CompilationUnitSerializer {
}
/**
+ * Create a new entry in the references table ([UnlinkedLibrary.references]
+ * and [LinkedLibrary.references]) representing an entity having the given
+ * [name] and [kind]. If [unit] is given, it is the index of the compilation
+ * unit containing the entity being referred to. If [prefixReference] is
+ * given, it indicates the entry in the references table for the prefix.
+ */
+ int serializeUnlinkedReference(String name, ReferenceKind kind,
+ {int unit: 0, int prefixReference: 0}) {
+ assert(unlinkedReferences.length == linkedReferences.length);
+ int index = unlinkedReferences.length;
+ unlinkedReferences.add(new UnlinkedReferenceBuilder(
+ name: name, prefixReference: prefixReference));
+ linkedReferences.add(new LinkedReferenceBuilder(kind: kind, unit: unit));
+ return index;
+ }
+
+ /**
* Return the index of the entry in the references table
* ([UnlinkedLibrary.references] and [LinkedLibrary.references]) used for
* unresolved references. A new entry is added to the table if necessary to
@@ -807,12 +817,8 @@ class _CompilationUnitSerializer {
// the element model. For the moment we use a name that can't possibly
// ever exist.
if (unresolvedReferenceIndex == null) {
- assert(unlinkedReferences.length == linkedReferences.length);
- unresolvedReferenceIndex = unlinkedReferences.length;
- unlinkedReferences
- .add(new UnlinkedReferenceBuilder(name: '*unresolved*'));
- linkedReferences
- .add(new LinkedReferenceBuilder(kind: ReferenceKind.unresolved));
+ return serializeUnlinkedReference(
+ '*unresolved*', ReferenceKind.unresolved);
}
return unresolvedReferenceIndex;
}
@@ -903,22 +909,21 @@ class _CompilationUnitSerializer {
unit = dependentLibrary.units.indexOf(unitElement);
assert(unit != -1);
}
- LinkedReferenceBuilder linkedReference = new LinkedReferenceBuilder(
- dependency: librarySerializer.serializeDependency(dependentLibrary),
- kind: _getReferenceKind(element),
- unit: unit);
- if (element is TypeParameterizedElement) {
- linkedReference.numTypeParameters = element.typeParameters.length;
- }
+ ReferenceKind kind = _getReferenceKind(element);
String name = element == null ? 'void' : element.name;
+ int index;
+ LinkedReferenceBuilder linkedReference;
if (linked) {
- linkedReference.name = name;
+ linkedReference =
+ new LinkedReferenceBuilder(kind: kind, unit: unit, name: name);
Element enclosing = element?.enclosingElement;
if (enclosing is ClassElement) {
linkedReference.containingReference =
_getElementReferenceId(enclosing, linked: linked);
- linkedReference.numTypeParameters += enclosing.typeParameters.length;
+ linkedReference.numTypeParameters = enclosing.typeParameters.length;
}
+ index = linkedReferences.length;
+ linkedReferences.add(linkedReference);
} else {
assert(unlinkedReferences.length == linkedReferences.length);
int prefixReference = 0;
@@ -936,24 +941,22 @@ class _CompilationUnitSerializer {
} else {
prefixReference = _getElementReferenceId(enclosing, linked: linked);
}
- unlinkedReferences.add(new UnlinkedReferenceBuilder(
- name: name, prefixReference: prefixReference));
+ index = serializeUnlinkedReference(name, kind,
+ prefixReference: prefixReference, unit: unit);
+ linkedReference = linkedReferences[index];
+ }
+ linkedReference.dependency =
+ librarySerializer.serializeDependency(dependentLibrary);
+ if (element is TypeParameterizedElement) {
+ linkedReference.numTypeParameters += element.typeParameters.length;
}
- int index = linkedReferences.length;
- linkedReferences.add(linkedReference);
return index;
});
}
int _getLengthPropertyReference(int prefix) {
- assert(unlinkedReferences.length == linkedReferences.length);
- int index = linkedReferences.length;
- unlinkedReferences.add(
- new UnlinkedReferenceBuilder(name: 'length', prefixReference: prefix));
- LinkedReferenceBuilder linkedReference =
- new LinkedReferenceBuilder(kind: ReferenceKind.length);
- linkedReferences.add(linkedReference);
- return index;
+ return serializeUnlinkedReference('length', ReferenceKind.length,
+ prefixReference: prefix);
}
}
@@ -1010,13 +1013,11 @@ class _ConstExprSerializer extends AbstractConstExprSerializer {
if (name == null) {
return typeRef;
} else {
- int typeId = typeRef.reference;
- LinkedReference typeLinkedRef = serializer.linkedReferences[typeId];
- serializer.unlinkedReferences.add(new UnlinkedReferenceBuilder(
- name: name.name, prefixReference: typeId));
- int refId = serializer.linkedReferences.length;
- serializer.linkedReferences.add(new LinkedReferenceBuilder(
- kind: ReferenceKind.constructor, unit: typeLinkedRef.unit));
+ LinkedReference typeLinkedRef =
+ serializer.linkedReferences[typeRef.reference];
+ int refId = serializer.serializeUnlinkedReference(
+ name.name, ReferenceKind.constructor,
+ prefixReference: typeRef.reference, unit: typeLinkedRef.unit);
return new EntityRefBuilder(
reference: refId, typeArguments: typeRef.typeArguments);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698