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

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

Issue 1774253002: Sort strings in the index. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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 | « pkg/analyzer/lib/src/summary/idl.dart ('k') | 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/index_unit.dart
diff --git a/pkg/analyzer/lib/src/summary/index_unit.dart b/pkg/analyzer/lib/src/summary/index_unit.dart
index 56da1861d424ca6d731531f0edd19b85988c7c2a..ca57e80da588559f9dbd7fe931654864b31ccb36 100644
--- a/pkg/analyzer/lib/src/summary/index_unit.dart
+++ b/pkg/analyzer/lib/src/summary/index_unit.dart
@@ -33,26 +33,20 @@ class PackageIndexAssembler {
/**
* Each item of this list corresponds to the library URI of a unique
- * [CompilationUnitElement]. It is an index into [_strings].
+ * [CompilationUnitElement].
*/
- final List<int> _unitLibraryUris = <int>[];
+ final List<_StringInfo> _unitLibraryUris = <_StringInfo>[];
/**
* Each item of this list corresponds to the unit URI of a unique
- * [CompilationUnitElement]. It is an index into [_strings].
+ * [CompilationUnitElement].
*/
- final List<int> _unitUnitUris = <int>[];
+ final List<_StringInfo> _unitUnitUris = <_StringInfo>[];
/**
- * Map associating strings with their identifiers, which are indices
- * into [_strings].
+ * Map associating strings with their [_StringInfo]s.
*/
- final Map<String, int> _stringMap = <String, int>{};
-
- /**
- * List of unique strings used in this index.
- */
- final List<String> _strings = <String>[];
+ final Map<String, _StringInfo> _stringMap = <String, _StringInfo>{};
/**
* List of information about each unit indexed in this index.
@@ -64,6 +58,15 @@ class PackageIndexAssembler {
* [index].
*/
PackageIndexBuilder assemble() {
+ // sort strings end set IDs
+ List<_StringInfo> stringInfoList = _stringMap.values.toList();
+ stringInfoList.sort((a, b) {
+ return a.value.compareTo(b.value);
+ });
+ for (int i = 0; i < stringInfoList.length; i++) {
+ stringInfoList[i].id = i;
+ }
+ // sort elements and set IDs
List<_ElementInfo> elementInfoList = _elementMap.values.toList();
elementInfoList.sort((a, b) {
return a.offset - b.offset;
@@ -72,12 +75,12 @@ class PackageIndexAssembler {
elementInfoList[i].id = i;
}
return new PackageIndexBuilder(
- unitLibraryUris: _unitLibraryUris,
- unitUnitUris: _unitUnitUris,
+ unitLibraryUris: _unitLibraryUris.map((s) => s.id).toList(),
+ unitUnitUris: _unitUnitUris.map((s) => s.id).toList(),
elementUnits: elementInfoList.map((e) => e.unitId).toList(),
elementOffsets: elementInfoList.map((e) => e.offset).toList(),
elementKinds: elementInfoList.map((e) => e.kind).toList(),
- strings: _strings,
+ strings: stringInfoList.map((s) => s.value).toList(),
units: _units.map((unit) => unit.assemble()).toList());
}
@@ -112,14 +115,12 @@ class PackageIndexAssembler {
}
/**
- * Add information about [str] to [_strings] if necessary, and return the
- * location in this array representing [str].
+ * Return the unique [_StringInfo] corresponding the [str]. The field
+ * [_StringInfo.id] is filled by [assemble] during final sorting.
*/
- int _getStringId(String str) {
+ _StringInfo _getStringInfo(String str) {
return _stringMap.putIfAbsent(str, () {
- int id = _strings.length;
- _strings.add(str);
- return id;
+ return new _StringInfo(str);
});
}
@@ -132,18 +133,19 @@ class PackageIndexAssembler {
return _unitMap.putIfAbsent(unitElement, () {
assert(_unitLibraryUris.length == _unitUnitUris.length);
int id = _unitUnitUris.length;
- _unitLibraryUris.add(_getUriId(unitElement.library.source.uri));
- _unitUnitUris.add(_getUriId(unitElement.source.uri));
+ _unitLibraryUris.add(_getUriInfo(unitElement.library.source.uri));
+ _unitUnitUris.add(_getUriInfo(unitElement.source.uri));
return id;
});
}
/**
- * Return the identifier corresponding to [uri].
+ * Return the unique [_StringInfo] corresponding [uri]. The field
+ * [_StringInfo.id] is filled by [assemble] during final sorting.
*/
- int _getUriId(Uri uri) {
+ _StringInfo _getUriInfo(Uri uri) {
String str = uri.toString();
- return _getStringId(str);
+ return _getStringInfo(str);
}
/**
@@ -187,9 +189,10 @@ class PackageIndexAssembler {
*/
class _DefinedNameInfo {
/**
- * The identifier of the name returned [PackageIndexAssembler._getStringId].
+ * The information about the name returned from
+ * [PackageIndexAssembler._getStringInfo].
*/
- final int nameId;
+ final _StringInfo nameInfo;
/**
* The coarse-grained kind of the defined name.
@@ -201,7 +204,7 @@ class _DefinedNameInfo {
*/
final int offset;
- _DefinedNameInfo(this.nameId, this.kind, this.offset);
+ _DefinedNameInfo(this.nameInfo, this.kind, this.offset);
}
/**
@@ -233,6 +236,24 @@ class _ElementInfo {
}
/**
+ * Information about a string referenced in the index.
+ */
+class _StringInfo {
+ /**
+ * The value of the string.
+ */
+ final String value;
+
+ /**
+ * The unique id of the string. It is set after indexing of the whole
+ * package is done and we are assembling the full package index.
+ */
+ int id;
+
+ _StringInfo(this.value);
+}
+
+/**
* Information about a single relation. Any [_ElementRelationInfo] is always
* part of a [_UnitIndexAssembler], so [offset] and [length] should be
* understood within the context of the compilation unit pointed to by the
@@ -649,13 +670,14 @@ class _IndexContributor extends GeneralizingAstVisitor {
*/
class _NameRelationInfo {
/**
- * The identifier of the name returned [PackageIndexAssembler._getStringId].
+ * The information about the name returned from
+ * [PackageIndexAssembler._getStringInfo].
*/
- final int nameId;
+ final _StringInfo nameInfo;
final IndexRelationKind kind;
final int offset;
- _NameRelationInfo(this.nameId, this.kind, this.offset);
+ _NameRelationInfo(this.nameInfo, this.kind, this.offset);
}
/**
@@ -689,7 +711,7 @@ class _UnitIndexAssembler {
}
void addNameRelation(String name, IndexRelationKind kind, int offset) {
- int nameId = pkg._getStringId(name);
+ _StringInfo nameId = pkg._getStringInfo(name);
nameRelations.add(new _NameRelationInfo(nameId, kind, offset));
}
@@ -699,17 +721,17 @@ class _UnitIndexAssembler {
*/
UnitIndexBuilder assemble() {
definedNames.sort((a, b) {
- return a.nameId - b.nameId;
+ return a.nameInfo.id - b.nameInfo.id;
});
elementRelations.sort((a, b) {
return a.elementInfo.id - b.elementInfo.id;
});
nameRelations.sort((a, b) {
- return a.nameId - b.nameId;
+ return a.nameInfo.id - b.nameInfo.id;
});
return new UnitIndexBuilder(
unit: unitId,
- definedNames: definedNames.map((n) => n.nameId).toList(),
+ definedNames: definedNames.map((n) => n.nameInfo.id).toList(),
definedNameKinds: definedNames.map((n) => n.kind).toList(),
definedNameOffsets: definedNames.map((n) => n.offset).toList(),
usedElements: elementRelations.map((r) => r.elementInfo.id).toList(),
@@ -718,13 +740,13 @@ class _UnitIndexAssembler {
usedElementLengths: elementRelations.map((r) => r.length).toList(),
usedElementIsQualifiedFlags:
elementRelations.map((r) => r.isQualified).toList(),
- usedNames: nameRelations.map((r) => r.nameId).toList(),
+ usedNames: nameRelations.map((r) => r.nameInfo.id).toList(),
usedNameKinds: nameRelations.map((r) => r.kind).toList(),
usedNameOffsets: nameRelations.map((r) => r.offset).toList());
}
void defineName(String name, IndexNameKind kind, int offset) {
- int nameId = pkg._getStringId(name);
- definedNames.add(new _DefinedNameInfo(nameId, kind, offset));
+ _StringInfo nameInfo = pkg._getStringInfo(name);
+ definedNames.add(new _DefinedNameInfo(nameInfo, kind, offset));
}
}
« no previous file with comments | « pkg/analyzer/lib/src/summary/idl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698