Revision: 10667
Author:   unn...@google.com
Date:     Thu Sep 22 13:53:31 2011
Log:      Allow @defs with multiple values

Review at http://gwt-code-reviews.appspot.com/1557803

Review by: rj...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=10667

Modified:
 /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
 /trunk/user/test/com/google/gwt/resources/client/CSSResourceTest.java
 /trunk/user/test/com/google/gwt/resources/client/deftest.css

=======================================
--- /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java Wed Jun 8 16:12:42 2011 +++ /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java Thu Sep 22 13:53:31 2011
@@ -70,6 +70,7 @@
 import com.google.gwt.resources.ext.ResourceContext;
 import com.google.gwt.resources.ext.ResourceGeneratorUtil;
 import com.google.gwt.resources.ext.SupportsGeneratorResultCaching;
+import com.google.gwt.thirdparty.guava.common.base.Joiner;
 import com.google.gwt.user.rebind.SourceWriter;
 import com.google.gwt.user.rebind.StringSourceWriter;

@@ -895,6 +896,11 @@
     computeObfuscatedNames(logger, classPrefix, reservedPrefixes,
         operableTypes);
   }
+
+  private boolean isReturnTypeString(JClassType classReturnType) {
+    return (classReturnType != null
+ && String.class.getName().equals(classReturnType.getQualifiedSourceName()));
+  }

   /**
* Check for the presence of the NotStrict annotation on the method. This will
@@ -1079,21 +1085,21 @@
       throw new UnableToCompleteException();
     }

-    // TODO: Allow returning an array of values
-    if (def.getValues().size() != 1) {
+    JClassType classReturnType = toImplement.getReturnType().isClass();
+
+ if (def.getValues().size() != 1 && !isReturnTypeString(classReturnType)) {
       logger.log(TreeLogger.ERROR, "@def rule " + name
-          + " must define exactly one value");
+ + " must define exactly one value or return type must be String");
       throw new UnableToCompleteException();
     }
-
-    NumberValue numberValue = def.getValues().get(0).isNumberValue();

     String returnExpr = "";
-    JClassType classReturnType = toImplement.getReturnType().isClass();
-    if (classReturnType != null
- && "java.lang.String".equals(classReturnType.getQualifiedSourceName())) { - returnExpr = "\"" + Generator.escape(def.getValues().get(0).toString())
-          + "\"";
+    if (isReturnTypeString(classReturnType)) {
+      List<String> returnValues = new ArrayList<String>();
+      for (Value val : def.getValues()) {
+        returnValues.add(Generator.escape(val.toString()));
+      }
+      returnExpr = "\"" + Joiner.on(" ").join(returnValues) + "\"";
     } else {
JPrimitiveType returnType = toImplement.getReturnType().isPrimitive();
       if (returnType == null) {
@@ -1102,6 +1108,7 @@
             + "@def accessors");
         throw new UnableToCompleteException();
       }
+      NumberValue numberValue = def.getValues().get(0).isNumberValue();
if (returnType == JPrimitiveType.INT || returnType == JPrimitiveType.LONG) {
         returnExpr = "" + Math.round(numberValue.getValue());
       } else if (returnType == JPrimitiveType.FLOAT) {
=======================================
--- /trunk/user/test/com/google/gwt/resources/client/CSSResourceTest.java Thu May 5 08:11:08 2011 +++ /trunk/user/test/com/google/gwt/resources/client/CSSResourceTest.java Thu Sep 22 13:53:31 2011
@@ -60,6 +60,8 @@
     float rawFloat();

     int rawInt();
+
+    String multiValueBorderDef();
   }

   /**
@@ -362,6 +364,8 @@
     assertNotNull(defines.overrideIntClass());
     assertFalse("10px".equals(defines.overrideIntClass()));
     assertFalse("10".equals(defines.overrideIntClass()));
+
+ assertEquals("1px solid rgba(0,0,0,0.2)", defines.multiValueBorderDef());
   }

   public void testEnsureInjected() {
=======================================
--- /trunk/user/test/com/google/gwt/resources/client/deftest.css Fri Jul 3 08:33:45 2009 +++ /trunk/user/test/com/google/gwt/resources/client/deftest.css Thu Sep 22 13:53:31 2011
@@ -27,6 +27,8 @@
  @def lengthString 100px;
  @def colorString #f00;

+ @def multiValueBorderDef 1px solid rgba(0,0,0,0.2);
+
/* Uncomment this, and you should get an error about a @def shadowing a name */
  /*
  .colorString {
@@ -41,5 +43,3 @@
  .overrideInt {
    width: 10px;
  }
-
-

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to