Revision: 6547 Author: rj...@google.com 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 -~----------~----~----~----~------~----~------~--~---