Revision: 6547
Author: [email protected]
Date: Thu Oct 29 14:57:19 2009
Log: Fix various error reporting issues:
Strict root element requirements
CellPanelParser NPE on bad child
http://code.google.com/p/google-web-toolkit/source/detail?r=6547
Modified:
/trunk/user/src/com/google/gwt/uibinder/parsers/CellPanelParser.java
/trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java
/trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
/trunk/user/src/com/google/gwt/uibinder/rebind/XMLElement.java
/trunk/user/src/com/google/gwt/uibinder/sample/client/HandlerDemo.ui.xml
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/parsers/CellPanelParser.java
Wed Oct 28 14:01:38 2009
+++ /trunk/user/src/com/google/gwt/uibinder/parsers/CellPanelParser.java
Thu Oct 29 14:57:19 2009
@@ -84,7 +84,8 @@
String ns = child.getNamespaceUri();
String tagName = child.getLocalName();
- if (ns.equals(elem.getNamespaceUri()) &&
localTagNameIsCell(tagName)) {
+ if (ns != null && ns.equals(elem.getNamespaceUri())
+ && localTagNameIsCell(tagName)) {
// It's a cell element, so parse its single child as a widget.
XMLElement widget = child.consumeSingleChildElement();
String childFieldName = writer.parseElementToField(widget);
@@ -93,6 +94,10 @@
// Parse the cell tag's alignment & size attributes.
parseCellAttributes(child, fieldName, childFieldName, writer);
} else {
+ if (!writer.isWidgetElement(child)) {
+ writer.die("In %s, expected a widget or <%s:%s>, found %s", elem,
+ elem.getPrefix(), CELL_TAG.toLowerCase(), child);
+ }
// It's just a normal child, so parse it as a widget.
String childFieldName = writer.parseElementToField(child);
writer.addStatement("%1$s.add(%2$s);", fieldName, childFieldName);
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java Wed
Oct 28 09:10:53 2009
+++ /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java Thu
Oct 29 14:57:19 2009
@@ -77,6 +77,7 @@
// guice!!!
private static final String IMPORT_ATTRIBUTE = "import";
+ private static final String TAG = "UiBinder";
private final UiBinderWriter writer;
private final TypeOracle oracle;
private final MessagesWriter messagesWriter;
@@ -105,6 +106,18 @@
* the document.
*/
public String parse(XMLElement elem) throws UnableToCompleteException {
+ if (!writer.isBinderElement(elem)) {
+ writer.die("Bad prefix on <%s:%s>? The root element must be in "
+ + "xml namespace \"%s\" (usually with prefix \"ui:\"), "
+ + "but this has prefix \"%s\"", elem.getPrefix(),
+ elem.getLocalName(), UiBinderWriter.BINDER_URI,
elem.getPrefix());
+ }
+
+ if (!TAG.equals(elem.getLocalName())) {
+ writer.die("Root element must be %s:%s, but found %s",
elem.getPrefix(),
+ TAG, elem);
+ }
+
findResources(elem);
messagesWriter.findMessagesConfig(elem);
XMLElement uiRoot = elem.consumeSingleChildElement();
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java Wed
Oct 28 09:10:53 2009
+++ /trunk/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java Thu
Oct 29 14:57:19 2009
@@ -69,7 +69,7 @@
*/
@SuppressWarnings("deprecation")
public class UiBinderWriter {
- private static final String BINDER_URI
= "urn:ui:com.google.gwt.uibinder";
+ static final String BINDER_URI = "urn:ui:com.google.gwt.uibinder";
private static final String BUNDLE_URI_SCHEME = "urn:with:";
private static final String PACKAGE_URI_SCHEME = "urn:import:";
@@ -644,7 +644,7 @@
public String getUiFieldAttributeName() {
return gwtPrefix + ":field";
}
-
+
public boolean isBinderElement(XMLElement elem) {
String uri = elem.getNamespaceUri();
return uri != null && BINDER_URI.equals(uri);
=======================================
--- /trunk/user/src/com/google/gwt/uibinder/rebind/XMLElement.java Wed Oct
28 09:10:53 2009
+++ /trunk/user/src/com/google/gwt/uibinder/rebind/XMLElement.java Thu Oct
29 14:57:19 2009
@@ -391,8 +391,8 @@
XMLElement ret = null;
for (XMLElement child : consumeChildElements()) {
if (ret != null) {
- writer.die("%s may only contain a single child element, but found"
- + "%s and %s.", getLocalName(), ret, child);
+ writer.die("%s may only contain a single child element, but found "
+ + "%s and %s.", this, ret, child);
}
ret = child;
=======================================
---
/trunk/user/src/com/google/gwt/uibinder/sample/client/HandlerDemo.ui.xml
Wed Aug 5 20:27:52 2009
+++
/trunk/user/src/com/google/gwt/uibinder/sample/client/HandlerDemo.ui.xml
Thu Oct 29 14:57:19 2009
@@ -1,4 +1,4 @@
-<gwt:UiBinder
+<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:gwt='urn:import:com.google.gwt.user.client.ui'>
@@ -16,4 +16,4 @@
<gwt:TextBox ui:field="textBoxValueChange"/>
</gwt:FlowPanel>
-</gwt:UiBinder>
+</ui:UiBinder>
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---