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

Reply via email to