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

Unified Diff: compiler/java/com/google/dart/compiler/ast/LibraryUnit.java

Issue 8898001: Convert "library unit" File path into "absolute unit path", issue 590. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix URI for diet source Created 8 years, 12 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: compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
index 00c24c92ae583852c8b12e97491072aecc76d115..263e01b338b1a8ae47b684e575e435e85c53e9dc 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListMap;
@@ -39,7 +40,8 @@ import java.util.concurrent.ConcurrentSkipListMap;
public class LibraryUnit {
// This is intentionally unparseable as Dart.
- private static final String UNIT_SEPARATOR = "--- unit: ";
+ private static final String UNIT_SEPARATOR_NAME = "--- unit-name: ";
+ private static final String UNIT_SEPARATOR_URI = "--- unit-uri: ";
private final LibrarySource libSource;
private final LibraryNode selfSourcePath;
@@ -255,19 +257,33 @@ public class LibraryUnit {
r.close();
// Split it up by unit.
- int idx = srcCode.indexOf(UNIT_SEPARATOR);
+ int idx = srcCode.indexOf(UNIT_SEPARATOR_NAME);
+ int endIdx;
while (idx != -1) {
- idx += UNIT_SEPARATOR.length();
- int endIdx = srcCode.indexOf('\n', idx);
+ // Prepare unit name.
+ idx += UNIT_SEPARATOR_NAME.length();
+ endIdx = srcCode.indexOf('\n', idx);
String unitName = srcCode.substring(idx, endIdx);
idx = endIdx;
- endIdx = srcCode.indexOf(UNIT_SEPARATOR, idx);
- if (endIdx != -1) {
- parseApiUnit(unitName, srcCode.substring(idx, endIdx), libSource, listener);
- } else {
- parseApiUnit(unitName, srcCode.substring(idx, srcCode.length()), libSource, listener);
+ // Prepare unit URI.
+ String unitUri = unitName;
+ idx = srcCode.indexOf(UNIT_SEPARATOR_URI, endIdx);
+ if (idx != -1) {
+ idx += UNIT_SEPARATOR_URI.length();
+ endIdx = srcCode.indexOf('\n', idx);
+ unitUri = srcCode.substring(idx, endIdx);
+ idx = endIdx;
}
+
+ // Find next unit, may be end string.
+ endIdx = srcCode.indexOf(UNIT_SEPARATOR_NAME, idx);
+
+ // Parse diet source unit.
+ String code = endIdx != -1 ? srcCode.substring(idx, endIdx) : srcCode.substring(idx);
+ parseApiUnit(unitName, unitUri, code, libSource, listener);
+
+ // Process next unit.
idx = endIdx;
}
@@ -282,9 +298,12 @@ public class LibraryUnit {
*/
public void saveApi(DartCompilerContext context) throws IOException {
Writer w = context.getArtifactWriter(libSource, "", DartCompiler.EXTENSION_API);
- for (String unitName : units.keySet()) {
- w.write(UNIT_SEPARATOR + unitName + "\n");
- w.write(units.get(unitName).toDietSource());
+ for (Entry<String, DartUnit> entry : units.entrySet()) {
+ String unitName = entry.getKey();
+ DartUnit unit = entry.getValue();
+ w.write(UNIT_SEPARATOR_NAME + unitName + "\n");
+ w.write(UNIT_SEPARATOR_URI + unit.getSource().getUri() + "\n");
+ w.write(unit.toDietSource());
}
w.close();
}
@@ -395,7 +414,10 @@ public class LibraryUnit {
writer.close();
}
- private void parseApiUnit(final String unitName, String srcCode, final LibrarySource libSrc,
+ private void parseApiUnit(final String unitName,
+ final String unitUri,
+ String srcCode,
+ final LibrarySource libSrc,
DartCompilerListener listener) {
// Dummy source for the api unit.
DartSource src = new DartSource() {
@@ -416,7 +438,7 @@ public class LibraryUnit {
@Override
public URI getUri() {
- return URI.create(unitName);
+ return URI.create(unitUri);
}
@Override
« 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