Discards the jar file name in the resource location. It isn't necessary, and
will cause detritus to build up in the cache if a resource changes from being
in one jar to another or moves in/out of a .jar file.
Review at http://gwt-code-reviews.appspot.com/1428805
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10130 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/javac/CachedCompilationUnit.java b/dev/core/src/com/google/gwt/dev/javac/CachedCompilationUnit.java
index cd301ad..1b27534 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CachedCompilationUnit.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CachedCompilationUnit.java
@@ -31,6 +31,7 @@
private final ContentId contentId;
private final Dependencies dependencies;
private final String resourceLocation;
+ private final String resourcePath;
private final List<JsniMethod> jsniMethods;
private final long lastModified;
private final MethodArgNamesLookup methodArgNamesLookup;
@@ -55,6 +56,7 @@
this.contentId = unit.getContentId();
this.dependencies = unit.getDependencies();
this.resourceLocation = unit.getResourceLocation();
+ this.resourcePath = unit.getResourcePath();
this.jsniMethods = unit.getJsniMethods();
this.lastModified = unit.getLastModified();
this.methodArgNamesLookup = unit.getMethodArgs();
@@ -101,6 +103,11 @@
}
@Override
+ public String getResourcePath() {
+ return resourcePath;
+ }
+
+ @Override
@Deprecated
public String getSource() {
return sourceToken.readString();
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
index ce7f5b9..2605eef 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
@@ -393,7 +393,7 @@
ResourceCompilationUnitBuilder builder =
new ResourceCompilationUnitBuilder(typeName, resource);
- CompilationUnit cachedUnit = unitCache.find(resource.getLocation());
+ CompilationUnit cachedUnit = unitCache.find(resource.getPath());
if (cachedUnit != null) {
if (cachedUnit.getLastModified() == resource.getLastModified()) {
cachedUnits.put(builder, cachedUnit);
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationUnit.java b/dev/core/src/com/google/gwt/dev/javac/CompilationUnit.java
index c7f162d..1d28d64 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationUnit.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationUnit.java
@@ -286,10 +286,19 @@
* virtual location (in the case of generators or mock data) where the source
* for this unit originated. This should be unique for each unit compiled to
* create a module.
+ *
+ * @see {@link com.google.gwt.dev.resource.Resource#getLocation()}
*/
public abstract String getResourceLocation();
/**
+ * Returns the full abstract path of the resource.
+ *
+ * @see {@link com.google.gwt.dev.resource.Resource#getPath()}
+ */
+ public abstract String getResourcePath();
+
+ /**
* Returns the source code for this unit.
*/
@Deprecated
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationUnitBuilder.java b/dev/core/src/com/google/gwt/dev/javac/CompilationUnitBuilder.java
index e8e965c..80bf41d 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationUnitBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationUnitBuilder.java
@@ -182,6 +182,11 @@
return getLocationFor(generatedUnit);
}
+ @Override
+ public String getResourcePath() {
+ return Shared.toPath(generatedUnit.getTypeName());
+ }
+
@Deprecated
@Override
public String getSource() {
diff --git a/dev/core/src/com/google/gwt/dev/javac/MemoryUnitCache.java b/dev/core/src/com/google/gwt/dev/javac/MemoryUnitCache.java
index aa2f8c7..f7c4bbf 100644
--- a/dev/core/src/com/google/gwt/dev/javac/MemoryUnitCache.java
+++ b/dev/core/src/com/google/gwt/dev/javac/MemoryUnitCache.java
@@ -26,7 +26,7 @@
/**
* This cache stores {@link CompilationUnit} instances in a Map.
*
- * Only one unit is cached per resource location. If the contentId of the unit
+ * Only one unit is cached per resource path. If the contentId of the unit
* changes, the old unit is discarded and replaced with the new unit.
*/
class MemoryUnitCache implements UnitCache {
@@ -72,7 +72,7 @@
* References to all {@link CompilationUnit} objects loaded from the
* persistent store, and any new ones added to the store as well.
*
- * The key is resource location.
+ * The key is resource path.
*/
@SuppressWarnings("unchecked")
protected final Map<String, UnitCacheEntry> unitMap = Collections
@@ -91,12 +91,12 @@
*/
public void add(CompilationUnit newUnit) {
UnitCacheEntry newEntry = new UnitCacheEntry(newUnit, UnitOrigin.RUN_TIME);
- String resourceLocation = newUnit.getResourceLocation();
- UnitCacheEntry oldEntry = unitMap.get(resourceLocation);
+ String resourcePath = newUnit.getResourcePath();
+ UnitCacheEntry oldEntry = unitMap.get(resourcePath);
if (oldEntry != null) {
remove(oldEntry.getUnit());
}
- unitMap.put(resourceLocation, newEntry);
+ unitMap.put(resourcePath, newEntry);
unitMapByContentId.put(newUnit.getContentId(), newEntry);
}
@@ -115,8 +115,8 @@
return null;
}
- public CompilationUnit find(String resourceLocation) {
- UnitCacheEntry entry = unitMap.get(resourceLocation);
+ public CompilationUnit find(String resourcePath) {
+ UnitCacheEntry entry = unitMap.get(resourcePath);
if (entry != null) {
return entry.getUnit();
}
@@ -124,7 +124,7 @@
}
public void remove(CompilationUnit unit) {
- unitMap.remove(unit.getResourceLocation());
+ unitMap.remove(unit.getResourcePath());
unitMapByContentId.remove(unit.getContentId());
}
}
diff --git a/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java b/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
index 543bce3..1277409 100644
--- a/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
+++ b/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
@@ -78,7 +78,7 @@
* uses lots of heap and takes 5-10 seconds. Once the PersistentUnitCache is
* created, it starts eagerly loading the cache in a background thread).</li>
*
- * <li>Although units logged to disk with the same resource Location are
+ * <li>Although units logged to disk with the same resource path are
* eventually cleaned up, the most recently compiled unit stays in the cache
* forever. This means that stale units that are no longer referenced will never
* be purged, unless by some external action (e.g. ant clean).</li>
@@ -346,7 +346,7 @@
unitCacheMapLoader.await();
super.add(newUnit);
addCount.getAndIncrement();
- unitWriteQueue.add(new UnitWriteMessage(unitMap.get(newUnit.getResourceLocation())));
+ unitWriteQueue.add(new UnitWriteMessage(unitMap.get(newUnit.getResourcePath())));
}
/**
@@ -397,9 +397,9 @@
}
@Override
- public CompilationUnit find(String resourceLocation) {
+ public CompilationUnit find(String resourcePath) {
unitCacheMapLoader.await();
- return super.find(resourceLocation);
+ return super.find(resourcePath);
}
/**
@@ -491,13 +491,13 @@
break;
}
UnitCacheEntry entry = new UnitCacheEntry(unit, UnitOrigin.PERSISTENT);
- UnitCacheEntry oldEntry = unitMap.get(unit.getResourceLocation());
+ UnitCacheEntry oldEntry = unitMap.get(unit.getResourcePath());
if (oldEntry != null && unit.getLastModified() > oldEntry.getUnit().getLastModified()) {
super.remove(oldEntry.getUnit());
- unitMap.put(unit.getResourceLocation(), entry);
+ unitMap.put(unit.getResourcePath(), entry);
unitMapByContentId.put(unit.getContentId(), entry);
} else if (oldEntry == null) {
- unitMap.put(unit.getResourceLocation(), entry);
+ unitMap.put(unit.getResourcePath(), entry);
unitMapByContentId.put(unit.getContentId(), entry);
}
}
diff --git a/dev/core/src/com/google/gwt/dev/javac/SourceFileCompilationUnit.java b/dev/core/src/com/google/gwt/dev/javac/SourceFileCompilationUnit.java
index e7a7833..7866424 100644
--- a/dev/core/src/com/google/gwt/dev/javac/SourceFileCompilationUnit.java
+++ b/dev/core/src/com/google/gwt/dev/javac/SourceFileCompilationUnit.java
@@ -63,6 +63,11 @@
return sourceFile.getLocation();
}
+ @Override
+ public String getResourcePath() {
+ return sourceFile.getPath();
+ }
+
@Deprecated
@Override
public String getSource() {
diff --git a/dev/core/src/com/google/gwt/dev/javac/UnitCache.java b/dev/core/src/com/google/gwt/dev/javac/UnitCache.java
index f368ab5..6b1c654 100644
--- a/dev/core/src/com/google/gwt/dev/javac/UnitCache.java
+++ b/dev/core/src/com/google/gwt/dev/javac/UnitCache.java
@@ -40,11 +40,11 @@
CompilationUnit find(ContentId contentId);
/**
- * Lookup a {@link CompilationUnit} by resource location.
+ * Lookup a {@link CompilationUnit} by resource path.
*
- * @see {@link CompilationUnit#getResourceLocation()}
+ * @see {@link CompilationUnit#getResourcePath()}
*/
- CompilationUnit find(String resourceLocation);
+ CompilationUnit find(String resourcePath);
/**
* Remove a {@link CompilationUnit} from the cache.
diff --git a/dev/core/test/com/google/gwt/dev/javac/MemoryUnitCacheTest.java b/dev/core/test/com/google/gwt/dev/javac/MemoryUnitCacheTest.java
index 485749b..702a7a2 100644
--- a/dev/core/test/com/google/gwt/dev/javac/MemoryUnitCacheTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/MemoryUnitCacheTest.java
@@ -42,10 +42,10 @@
assertEquals("com.example.Bar", result.getTypeName());
// Find by type name
- result = cache.find("/mock/com/example/Foo.java");
+ result = cache.find("com/example/Foo.java");
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
- result = cache.find("/mock/com/example/Bar.java");
+ result = cache.find("com/example/Bar.java");
assertNotNull(result);
assertEquals("com.example.Bar", result.getTypeName());
cache.cleanup(logger); // should be a no-op
@@ -58,7 +58,7 @@
result = cache.find(foo2.getContentId());
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
- result = cache.find("/mock/com/example/Foo.java");
+ result = cache.find("com/example/Foo.java");
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
assertEquals(foo2.getContentId(), result.getContentId());
@@ -67,23 +67,7 @@
cache.remove(bar1);
result = cache.find(bar1.getContentId());
assertNull(result);
- result = cache.find("/mock/com/example.Bar");
+ result = cache.find("com/example.Bar");
assertNull(result);
}
-
- public void testUnitsWithSameTypeName() {
- MemoryUnitCache cache = new MemoryUnitCache();
- CompilationUnit result;
-
- MockCompilationUnit foo1 = new MockCompilationUnit("com.example.Foo", "source1", "location1");
- cache.add(foo1);
- MockCompilationUnit foo2 = new MockCompilationUnit("com.example.Foo", "source2", "location2");
- cache.add(foo2);
- result = cache.find("location1");
- assertEquals("com.example.Foo", result.getTypeName());
- assertEquals(foo1.getContentId(), result.getContentId());
- result = cache.find("location2");
- assertEquals("com.example.Foo", result.getTypeName());
- assertEquals(foo2.getContentId(), result.getContentId());
- }
}
diff --git a/dev/core/test/com/google/gwt/dev/javac/MockCompilationUnit.java b/dev/core/test/com/google/gwt/dev/javac/MockCompilationUnit.java
index 7ae24fe..eff8fa9 100644
--- a/dev/core/test/com/google/gwt/dev/javac/MockCompilationUnit.java
+++ b/dev/core/test/com/google/gwt/dev/javac/MockCompilationUnit.java
@@ -71,6 +71,11 @@
}
@Override
+ public String getResourcePath() {
+ return Shared.toPath(typeName);
+ }
+
+ @Override
public String getSource() {
return source;
}
diff --git a/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java b/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
index 27908ed..0f032d8 100644
--- a/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
@@ -130,10 +130,10 @@
assertEquals("com.example.Bar", result.getTypeName());
// Find by type name
- result = cache.find("/mock/com/example/Foo.java");
+ result = cache.find("com/example/Foo.java");
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
- result = cache.find("/mock/com/example/Bar.java");
+ result = cache.find("com/example/Bar.java");
assertNotNull(result);
assertEquals("com.example.Bar", result.getTypeName());
@@ -145,7 +145,7 @@
result = cache.find(foo2.getContentId());
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
- result = cache.find("/mock/com/example/Foo.java");
+ result = cache.find("com/example/Foo.java");
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
assertEquals(foo2.getContentId(), result.getContentId());
@@ -160,11 +160,11 @@
// Fire up the cache again. It be pre-populated.
// Search by type name
cache = new PersistentUnitCache(logger, cacheDir);
- result = cache.find("/mock/com/example/Foo.java");
+ result = cache.find("com/example/Foo.java");
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
assertEquals(foo2.getContentId(), result.getContentId());
- result = cache.find("/mock/com/example/Bar.java");
+ result = cache.find("com/example/Bar.java");
assertNotNull(result);
assertEquals("com.example.Bar", result.getTypeName());
assertEquals(bar1.getContentId(), result.getContentId());
@@ -211,12 +211,12 @@
assertEquals("com.example.Bar", result.getTypeName());
assertEquals(bar1.getContentId(), result.getContentId());
- result = cache.find("/mock/com/example/Foo.java");
+ result = cache.find("com/example/Foo.java");
assertNotNull(result);
assertEquals("com.example.Foo", result.getTypeName());
assertEquals(lastUnit.getContentId(), result.getContentId());
- result = cache.find("/mock/com/example/Bar.java");
+ result = cache.find("com/example/Bar.java");
assertNotNull(result);
assertEquals("com.example.Bar", result.getTypeName());
assertEquals(bar1.getContentId(), result.getContentId());