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); |
} |