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