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
-~----------~----~----~----~------~----~------~--~---

Reply via email to