Revision: 10199
Author:   [email protected]
Date:     Fri May 20 08:32:00 2011
Log:      Add baseInterface support to UiBinder.

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=10199

Added:
 /trunk/user/test/com/google/gwt/uibinder/test/client/MyMessages.java
Modified:
 /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
 /trunk/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java
/trunk/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
 /trunk/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml

=======================================
--- /dev/null
+++ /trunk/user/test/com/google/gwt/uibinder/test/client/MyMessages.java Fri May 20 08:32:00 2011
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.uibinder.test.client;
+
+import com.google.gwt.i18n.client.Messages;
+import com.google.gwt.i18n.client.LocalizableResource.DefaultLocale;
+
+/**
+ * Base messages to prove we can override the default.
+ */
+@DefaultLocale("en_US")
+public interface MyMessages extends Messages {
+}
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java Thu May 5 09:42:56 2011 +++ /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java Fri May 20 05:12:05 2011
@@ -158,7 +158,7 @@

     MortalLogger logger = new MortalLogger(treeLogger);
     String templatePath = deduceTemplateFile(logger, interfaceType);
-    MessagesWriter messages = new MessagesWriter(BINDER_URI, logger,
+ MessagesWriter messages = new MessagesWriter(oracle, BINDER_URI, logger,
         templatePath, interfaceType.getPackage().getName(), implName);

boolean useLazyWidgetBuilders = useLazyWidgetBuilders(logger, propertyOracle);
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java Fri Oct 8 06:15:38 2010 +++ /trunk/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java Fri May 20 05:12:05 2011
@@ -16,6 +16,9 @@
 package com.google.gwt.uibinder.rebind.messages;

 import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.i18n.client.Messages;
 import com.google.gwt.uibinder.rebind.IndentedWriter;
 import com.google.gwt.uibinder.rebind.MortalLogger;
 import com.google.gwt.uibinder.rebind.UiBinderWriter;
@@ -49,6 +52,7 @@
private final List<MessageWriter> messages = new ArrayList<MessageWriter>();
   private final String generatedFrom;

+  private String baseInterface;
   private String defaultLocale;
   private String messagesPrefix;
   private String generateKeys;
@@ -57,7 +61,9 @@
private Map<XMLElement, Collection<AttributeMessage>> elemToAttributeMessages =
       new HashMap<XMLElement, Collection<AttributeMessage>>();

- public MessagesWriter(String nameSpaceUri, MortalLogger mortalLogger, String generatedFrom,
+  private TypeOracle oracle;
+
+ public MessagesWriter(TypeOracle oracle, String nameSpaceUri, MortalLogger mortalLogger, String generatedFrom,
       String packageName, String uiBinderImplClassName) {
     this.messagesNamespaceURI = nameSpaceUri;
     this.generatedFrom = generatedFrom;
@@ -67,6 +73,9 @@
this.messagesClassName = uiBinderImplClassName.replaceAll("_", "") + "GenMessages";

     this.logger = mortalLogger;
+    this.oracle = oracle;
+
+    baseInterface = Messages.class.getCanonicalName();
   }

   /**
@@ -150,11 +159,31 @@
   /**
* Expected to be called with the root element, to allow configuration from
    * various messages related attributes.
+   *
+   * @throws UnableToCompleteException
    */
-  public void findMessagesConfig(XMLElement elem) {
+ public void findMessagesConfig(XMLElement elem) throws UnableToCompleteException {
     String prefix = elem.lookupPrefix(getMessagesUri());
     if (prefix != null) {
       messagesPrefix = prefix;
+ String baseInterfaceAttr = elem.consumeRawAttribute(getMessagesPrefix() + ":baseInterface");
+      if (baseInterfaceAttr != null) {
+        JClassType baseInterfaceType = oracle.findType(baseInterfaceAttr);
+        if (baseInterfaceType == null) {
+          logger.die(elem, "Could not find class %s", baseInterfaceAttr);
+        }
+        if (baseInterfaceType.isInterface() == null) {
+          logger.die(elem, "%s must be an interface", baseInterfaceAttr);
+        }
+ JClassType msgType = oracle.findType(Messages.class.getCanonicalName());
+        if (msgType == null) {
+ throw new RuntimeException("Internal Error: Messages interface not found");
+        }
+        if (!msgType.isAssignableFrom(baseInterfaceType)) {
+ logger.die(elem, "Interface %s must extend Messages", baseInterfaceAttr);
+        }
+        baseInterface = baseInterfaceAttr;
+      }
       defaultLocale = consumeMessageAttribute("defaultLocale", elem);
       generateKeys = consumeMessageAttribute("generateKeys", elem);
       generate =
@@ -240,13 +269,12 @@
     }

     // Imports.
-    writer.write("import com.google.gwt.i18n.client.Messages;");
writer.write("import static com.google.gwt.i18n.client.LocalizableResource.*;");
     writer.newline();

     // Open interface.
     genInterfaceAnnotations(writer);
- writer.write("public interface %s extends Messages {", getMessagesClassName()); + writer.write("public interface %s extends %s {", getMessagesClassName(), baseInterface);
     writer.newline();
     writer.indent();

=======================================
--- /trunk/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java Fri Apr 22 11:18:50 2011 +++ /trunk/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java Fri May 20 05:12:05 2011
@@ -110,7 +110,7 @@

     fieldManager = new FieldManager(types, logger, false);
     JClassType baseType = types.findType("my.Ui.BaseClass");
-    MessagesWriter messages = new MessagesWriter(BINDER_URI, logger,
+    MessagesWriter messages = new MessagesWriter(types, BINDER_URI, logger,
         templatePath, baseType.getPackage().getName(), implName);

writer = new MockUiBinderWriter(baseType, implName, templatePath, types,
=======================================
--- /trunk/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml Wed Apr 20 12:03:38 2011 +++ /trunk/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml Fri May 20 05:12:05 2011
@@ -54,6 +54,7 @@
xmlns:legacyValuesForBeans='urn:with:com.google.gwt.uibinder.test.client.WidgetBasedUi.FakeBundle2' xmlns:legacyValuesForHtml='urn:with:com.google.gwt.uibinder.test.client.WidgetBasedUi.FakeBundle3'

+  ui:baseInterface="com.google.gwt.uibinder.test.client.MyMessages"
   ui:defaultLocale="en_US"
   ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
   ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"

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

Reply via email to