Revision: 10678
Author: gwt.mirror...@gmail.com
Date: Mon Oct 3 12:47:54 2011
Log: Fixed issue that was causing ERROR log messages due to duplicate
cssmap file names.
Since there may be multiple css resources with the same base subtype (e.g.
CssResource), the subtype class is not
guaranteed to be unique. Instead, the qualified resource getter method name
is used which is unique.
Review by: unn...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=10678
Modified:
/trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
/trunk/user/test/com/google/gwt/resources/rg/CssOutputTestCase.java
=======================================
--- /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
Fri Sep 30 10:03:13 2011
+++ /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
Mon Oct 3 12:47:54 2011
@@ -445,9 +445,8 @@
// Optimize the stylesheet, recording the class selector obfuscations
Map<JMethod, String> actualReplacements = optimize(logger, context,
method);
-
- outputCssMapArtifact(logger, context, actualReplacements,
- cssResourceSubtype.getQualifiedSourceName());
+
+ outputCssMapArtifact(logger, context, method, actualReplacements);
outputAdditionalArtifacts(logger, context, method, actualReplacements,
cssResourceSubtype, stylesheet);
@@ -595,20 +594,26 @@
* Builds a CSV file mapping obfuscated CSS class names to their
qualified source name and
* outputs it as a private build artifact.
*/
- protected void outputCssMapArtifact(TreeLogger logger, ResourceContext
context,
- Map<JMethod, String> actualReplacements, String outputFileName) {
- String mappingFileName = "cssResource/" + outputFileName + ".cssmap";
+ protected void outputCssMapArtifact(TreeLogger logger, ResourceContext
context, JMethod method,
+ Map<JMethod, String> actualReplacements) {
+ // There may be several css resources that have the same css resource
subtype (e.g. CssResource)
+ // so the qualified accessor method name is used for the unique output
file name.
+ JClassType bundleType = method.getEnclosingType();
+
+ String qualifiedMethodName = bundleType.getQualifiedSourceName() + "."
+ method.getName();
+
+ String mappingFileName = "cssResource/" + qualifiedMethodName
+ ".cssmap";
OutputStream os = null;
try {
os = context.getGeneratorContext().tryCreateResource(logger,
mappingFileName);
} catch (UnableToCompleteException e) {
- logger.log(TreeLogger.ERROR, "Could not create resource: " +
mappingFileName);
+ logger.log(TreeLogger.WARN, "Could not create resource: " +
mappingFileName);
return;
}
if (os == null) {
- logger.log(TreeLogger.ERROR, "Created resource is null: " +
mappingFileName);
+ logger.log(TreeLogger.WARN, "Created resource is null: " +
mappingFileName);
return;
}
@@ -625,13 +630,13 @@
writer.flush();
writer.close();
} catch (IOException e) {
- logger.log(TreeLogger.ERROR, "Error writing artifact: " +
mappingFileName);
+ logger.log(TreeLogger.WARN, "Error writing artifact: " +
mappingFileName);
}
try {
context.getGeneratorContext().commitResource(logger,
os).setVisibility(Visibility.Private);
} catch (UnableToCompleteException e) {
- logger.log(TreeLogger.ERROR, "Error trying to commit artifact: " +
mappingFileName);
+ logger.log(TreeLogger.WARN, "Error trying to commit artifact: " +
mappingFileName);
}
}
=======================================
--- /trunk/user/test/com/google/gwt/resources/rg/CssOutputTestCase.java Fri
Sep 30 10:03:13 2011
+++ /trunk/user/test/com/google/gwt/resources/rg/CssOutputTestCase.java Mon
Oct 3 12:47:54 2011
@@ -49,23 +49,35 @@
EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext);
EasyMock.expectLastCall().times(2);
EasyMock.expect(mockGeneratorContext.tryCreateResource(
-
testLogger, "cssResource/test-file-name.cssmap")).andReturn(mockOutputStream);
+
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(mockOutputStream);
EasyMock.expect(mockGeneratorContext.commitResource(testLogger,
mockOutputStream)).andReturn(
mockGeneratedResource);
+
+ JMethod method = EasyMock.createMock(JMethod.class);
+ JClassType bundleType = EasyMock.createMock(JClassType.class);
+ EasyMock.expect(method.getEnclosingType()).andReturn(bundleType);
+
EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle");
+ EasyMock.expect(method.getName()).andReturn("cssMethod");
+
EasyMock.replay(mockResourceContext);
EasyMock.replay(mockGeneratorContext);
+ EasyMock.replay(method);
+ EasyMock.replay(bundleType);
CssResourceGenerator crg = new CssResourceGenerator();
- crg.outputCssMapArtifact(testLogger, mockResourceContext,
testMap, "test-file-name");
+ crg.outputCssMapArtifact(testLogger, mockResourceContext, method,
testMap);
testLogger.assertCorrectLogEntries();
EasyMock.verify(mockResourceContext);
EasyMock.verify(mockGeneratorContext);
+ EasyMock.verify(method);
+ EasyMock.verify(bundleType);
}
public void testOutputCssMapArtifactThrowOnTryCreateResource() throws
UnableToCompleteException {
UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder();
- builder.expectError("Could not create resource:
cssResource/test-file2.cssmap", null);
+ builder.expectWarn(
+ "Could not create resource:
cssResource/com.test.Bundle.cssMethod.cssmap", null);
UnitTestTreeLogger testLogger = builder.createLogger();
ResourceContext mockResourceContext =
EasyMock.createMock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
@@ -74,22 +86,34 @@
GeneratedResource mockGeneratedResource =
EasyMock.createMock(GeneratedResource.class);
EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext);
- EasyMock.expect(mockGeneratorContext.tryCreateResource(
- testLogger, "cssResource/test-file2.cssmap")).andThrow(new
UnableToCompleteException());
+ EasyMock.expect(mockGeneratorContext.tryCreateResource(testLogger,
+ "cssResource/com.test.Bundle.cssMethod.cssmap")).andThrow(new
UnableToCompleteException());
+
+ JMethod method = EasyMock.createMock(JMethod.class);
+ JClassType bundleType = EasyMock.createMock(JClassType.class);
+ EasyMock.expect(method.getEnclosingType()).andReturn(bundleType);
+
EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle");
+ EasyMock.expect(method.getName()).andReturn("cssMethod");
+
EasyMock.replay(mockResourceContext);
EasyMock.replay(mockGeneratorContext);
+ EasyMock.replay(method);
+ EasyMock.replay(bundleType);
CssResourceGenerator crg = new CssResourceGenerator();
- crg.outputCssMapArtifact(testLogger, mockResourceContext,
testMap, "test-file2");
+ crg.outputCssMapArtifact(testLogger, mockResourceContext, method,
testMap);
testLogger.assertCorrectLogEntries();
EasyMock.verify(mockResourceContext);
EasyMock.verify(mockGeneratorContext);
+ EasyMock.verify(method);
+ EasyMock.verify(bundleType);
}
public void testOutputCssMapArtifactReturnNullOutputString() throws
UnableToCompleteException {
UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder();
- builder.expectError("Created resource is null:
cssResource/test-file3.cssmap", null);
+ builder.expectWarn(
+ "Created resource is null:
cssResource/com.test.Bundle.cssMethod.cssmap", null);
UnitTestTreeLogger testLogger = builder.createLogger();
ResourceContext mockResourceContext =
EasyMock.createMock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
@@ -99,21 +123,33 @@
EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext);
EasyMock.expect(mockGeneratorContext.tryCreateResource(
- testLogger, "cssResource/test-file3.cssmap")).andReturn(null);
+
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(null);
+
+ JMethod method = EasyMock.createMock(JMethod.class);
+ JClassType bundleType = EasyMock.createMock(JClassType.class);
+ EasyMock.expect(method.getEnclosingType()).andReturn(bundleType);
+
EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle");
+ EasyMock.expect(method.getName()).andReturn("cssMethod");
+
EasyMock.replay(mockResourceContext);
EasyMock.replay(mockGeneratorContext);
+ EasyMock.replay(method);
+ EasyMock.replay(bundleType);
CssResourceGenerator crg = new CssResourceGenerator();
- crg.outputCssMapArtifact(testLogger, mockResourceContext,
testMap, "test-file3");
+ crg.outputCssMapArtifact(testLogger, mockResourceContext, method,
testMap);
testLogger.assertCorrectLogEntries();
EasyMock.verify(mockResourceContext);
EasyMock.verify(mockGeneratorContext);
+ EasyMock.verify(method);
+ EasyMock.verify(bundleType);
}
public void testOutputCssMapArtifactThrowOnCommitResource() throws
UnableToCompleteException {
UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder();
- builder.expectError("Error trying to commit artifact:
cssResource/test-file4.cssmap", null);
+ builder.expectWarn(
+ "Error trying to commit artifact:
cssResource/com.test.Bundle.cssMethod.cssmap", null);
UnitTestTreeLogger testLogger = builder.createLogger();
ResourceContext mockResourceContext =
EasyMock.createMock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
@@ -124,18 +160,29 @@
EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext);
EasyMock.expectLastCall().times(2);
EasyMock.expect(mockGeneratorContext.tryCreateResource(
-
testLogger, "cssResource/test-file4.cssmap")).andReturn(mockOutputStream);
+
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(mockOutputStream);
EasyMock.expect(mockGeneratorContext.commitResource(testLogger,
mockOutputStream)).andThrow(
new UnableToCompleteException());
+
+ JMethod method = EasyMock.createMock(JMethod.class);
+ JClassType bundleType = EasyMock.createMock(JClassType.class);
+ EasyMock.expect(method.getEnclosingType()).andReturn(bundleType);
+
EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle");
+ EasyMock.expect(method.getName()).andReturn("cssMethod");
+
EasyMock.replay(mockResourceContext);
EasyMock.replay(mockGeneratorContext);
+ EasyMock.replay(method);
+ EasyMock.replay(bundleType);
CssResourceGenerator crg = new CssResourceGenerator();
- crg.outputCssMapArtifact(testLogger, mockResourceContext,
testMap, "test-file4");
+ crg.outputCssMapArtifact(testLogger, mockResourceContext, method,
testMap);
testLogger.assertCorrectLogEntries();
EasyMock.verify(mockResourceContext);
EasyMock.verify(mockGeneratorContext);
+ EasyMock.verify(method);
+ EasyMock.verify(bundleType);
}
public void testOutputCssMapArtifactWithTestData() throws
UnableToCompleteException {
@@ -158,7 +205,7 @@
EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext);
EasyMock.expectLastCall().times(2);
EasyMock.expect(mockGeneratorContext.tryCreateResource(
-
testLogger, "cssResource/test-file5.cssmap")).andReturn(testOutputStream);
+
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(testOutputStream);
EasyMock.expect(mockJMethod1.getEnclosingType()).andReturn(mockJClassType1);
EasyMock.expect(mockJClassType1.getQualifiedSourceName()).andReturn("test.class.type.1");
EasyMock.expect(mockJMethod1.getName()).andReturn("basename1");
@@ -170,6 +217,13 @@
EasyMock.expect(mockJMethod3.getName()).andReturn("basename3");
EasyMock.expect(mockGeneratorContext.commitResource(testLogger,
testOutputStream)).andReturn(
mockGeneratedResource);
+
+ JMethod method = EasyMock.createMock(JMethod.class);
+ JClassType bundleType = EasyMock.createMock(JClassType.class);
+ EasyMock.expect(method.getEnclosingType()).andReturn(bundleType);
+
EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle");
+ EasyMock.expect(method.getName()).andReturn("cssMethod");
+
EasyMock.replay(mockResourceContext);
EasyMock.replay(mockGeneratorContext);
EasyMock.replay(mockJMethod1);
@@ -178,9 +232,11 @@
EasyMock.replay(mockJClassType1);
EasyMock.replay(mockJClassType2);
EasyMock.replay(mockJClassType3);
+ EasyMock.replay(method);
+ EasyMock.replay(bundleType);
CssResourceGenerator crg = new CssResourceGenerator();
- crg.outputCssMapArtifact(testLogger, mockResourceContext,
testMap, "test-file5");
+ crg.outputCssMapArtifact(testLogger, mockResourceContext, method,
testMap);
String expectedOutput = "test-class-type-1-basename1,TESTCSSNAME1\n" +
"test-class-type-2-basename2,TESTCSSNAME2\n" +
"test-class-type-3-basename3,TESTCSSNAME3\n";
@@ -195,6 +251,8 @@
EasyMock.verify(mockJClassType1);
EasyMock.verify(mockJClassType2);
EasyMock.verify(mockJClassType3);
+ EasyMock.verify(method);
+ EasyMock.verify(bundleType);
}
}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors