Delete partially implemented HtmlElementFactory feature.

Review at http://gwt-code-reviews.appspot.com/1412802

Review by: rchandia@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9980 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/uibinder/UiBinder.gwt.xml b/user/src/com/google/gwt/uibinder/UiBinder.gwt.xml
index b9f2731..9a57445 100644
--- a/user/src/com/google/gwt/uibinder/UiBinder.gwt.xml
+++ b/user/src/com/google/gwt/uibinder/UiBinder.gwt.xml
@@ -19,10 +19,6 @@
   <source path="client"/>
   <source path="resources"/>
   
-  <!-- Pluggable factory for creating field types for HTML elements -->
-  <define-configuration-property name="uibinder.html.elementfactory" is-multi-valued="false"/>
-  <set-configuration-property name="uibinder.html.elementfactory" value="com.google.gwt.uibinder.rebind.GwtDomHtmlElementFactory"/>
-
   <!-- By default UiBinder implementations are generated to use SafeHtmlTemplates 
     to help protect against the introduction of cross-site scripting (XSS) attacks. 
     This deprecated property can be used to disable that integration while the 
diff --git a/user/src/com/google/gwt/uibinder/rebind/GwtDomHtmlElementFactory.java b/user/src/com/google/gwt/uibinder/rebind/GwtDomHtmlElementFactory.java
deleted file mode 100644
index a0a4395..0000000
--- a/user/src/com/google/gwt/uibinder/rebind/GwtDomHtmlElementFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.rebind;
-
-import com.google.gwt.core.ext.typeinfo.JClassType;
-import com.google.gwt.core.ext.typeinfo.TypeOracle;
-import com.google.gwt.dom.client.TagName;
-
-/**
- * Looks up implementation of DOM elements via @TagName interface in GWT DOM
- * package.
- */
-public class GwtDomHtmlElementFactory implements HtmlElementFactory {
-
-  public JClassType findElementTypeForTag(String htmlTag, TypeOracle oracle) {
-    JClassType elementClass = oracle.findType("com.google.gwt.dom.client.Element");
-    JClassType[] types = elementClass.getSubtypes();
-    for (JClassType type : types) {
-      TagName annotation = type.getAnnotation(TagName.class);
-      if (annotation != null) {
-        for (String annotationTag : annotation.value()) {
-          if (annotationTag.equals(htmlTag)) {
-            return type;
-          }
-        }
-      }
-    }
-    return elementClass;
-  }
-}
diff --git a/user/src/com/google/gwt/uibinder/rebind/HtmlElementFactory.java b/user/src/com/google/gwt/uibinder/rebind/HtmlElementFactory.java
deleted file mode 100644
index 84f05ae..0000000
--- a/user/src/com/google/gwt/uibinder/rebind/HtmlElementFactory.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.rebind;
-
-import com.google.gwt.core.ext.typeinfo.JClassType;
-import com.google.gwt.core.ext.typeinfo.TypeOracle;
-
-/**
- * Looks up html tag names and returns corresponding type used to represent
- * its bindings.
- */
-public interface HtmlElementFactory {
-   JClassType findElementTypeForTag(String htmlTag, TypeOracle oracle);
-}
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
index e459922..79f405c 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
@@ -16,7 +16,6 @@
 package com.google.gwt.uibinder.rebind;
 
 import com.google.gwt.core.ext.BadPropertyValueException;
-import com.google.gwt.core.ext.ConfigurationProperty;
 import com.google.gwt.core.ext.Generator;
 import com.google.gwt.core.ext.GeneratorContext;
 import com.google.gwt.core.ext.PropertyOracle;
@@ -143,7 +142,7 @@
 
     UiBinderWriter uiBinderWriter = new UiBinderWriter(interfaceType, implName,
         templatePath, oracle, logger, new FieldManager(oracle, logger),
-        messages, designTime, uiBinderCtx, getElementFactory(propertyOracle), 
+        messages, designTime, uiBinderCtx, 
         useSafeHtmlTemplates(logger, propertyOracle));
 
     Document doc = getW3cDoc(logger, designTime, resourceOracle, templatePath);
@@ -161,20 +160,6 @@
     writerManager.commit();
   }
 
-  private HtmlElementFactory getElementFactory(PropertyOracle propertyOracle) {
-    Class<?> elementFactoryClass;
-
-    try {
-      // TODO(cromwellian) finish this or get it out of here
-      ConfigurationProperty factoryProperty = propertyOracle
-          .getConfigurationProperty(ELEMENT_FACTORY_PROPERTY);
-      elementFactoryClass = Class.forName(factoryProperty.getValues().get(0));
-      return (HtmlElementFactory) elementFactoryClass.newInstance();
-    } catch (Exception e) {
-      throw new RuntimeException(e);
-    }
-  }
-
   private Document getW3cDoc(MortalLogger logger, DesignTimeUtils designTime,
       ResourceOracle resourceOracle, String templatePath)
       throws UnableToCompleteException {
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
index 95fb765..528a024 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
@@ -19,6 +19,7 @@
 import com.google.gwt.core.ext.typeinfo.JClassType;
 import com.google.gwt.core.ext.typeinfo.JPackage;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.dom.client.TagName;
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.uibinder.attributeparsers.AttributeParser;
 import com.google.gwt.uibinder.attributeparsers.AttributeParsers;
@@ -183,8 +184,6 @@
    */
   private final JClassType baseClass;
 
-  private final HtmlElementFactory elementFactory;
-
   /**
    * The name of the class we're creating, e.g. MyUiBinderImpl
    */
@@ -234,7 +233,7 @@
       String templatePath, TypeOracle oracle, MortalLogger logger,
       FieldManager fieldManager, MessagesWriter messagesWriter,
       DesignTimeUtils designTime, UiBinderContext uiBinderCtx,
-      HtmlElementFactory elementFactory, boolean useSafeHtmlTemplates)
+      boolean useSafeHtmlTemplates)
       throws UnableToCompleteException {
     this.baseClass = baseClass;
     this.implClassName = implClassName;
@@ -245,7 +244,6 @@
     this.messages = messagesWriter;
     this.designTime = designTime;
     this.uiBinderCtx = uiBinderCtx;
-    this.elementFactory = elementFactory;
     this.useSafeHtmlTemplates = useSafeHtmlTemplates;
 
     // Check for possible misuse 'GWT.create(UiBinder.class)'
@@ -827,7 +825,19 @@
    * Given a DOM tag name, return the corresponding JSO subclass.
    */
   private JClassType findDomElementTypeForTag(String tag) {
-    return elementFactory.findElementTypeForTag(tag, oracle);
+    JClassType elementClass = oracle.findType("com.google.gwt.dom.client.Element");
+    JClassType[] types = elementClass.getSubtypes();
+    for (JClassType type : types) {
+      TagName annotation = type.getAnnotation(TagName.class);
+      if (annotation != null) {
+        for (String annotationTag : annotation.value()) {
+          if (annotationTag.equals(tag)) {
+            return type;
+          }
+        }
+      }
+    }
+    return elementClass;
   }
 
   /**
diff --git a/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java b/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
index 14dbbff..3d9f200 100644
--- a/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
+++ b/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
@@ -30,8 +30,6 @@
 import com.google.gwt.uibinder.rebind.FieldManager;
 import com.google.gwt.uibinder.rebind.FieldWriter;
 import com.google.gwt.uibinder.rebind.MockMortalLogger;
-import com.google.gwt.uibinder.rebind.HtmlElementFactory;
-import com.google.gwt.uibinder.rebind.GwtDomHtmlElementFactory;
 import com.google.gwt.uibinder.rebind.W3cDomHelper;
 import com.google.gwt.uibinder.rebind.XMLElement;
 import com.google.gwt.uibinder.rebind.XMLElementProvider;
@@ -115,9 +113,8 @@
     MessagesWriter messages = new MessagesWriter(BINDER_URI, logger,
         templatePath, baseType.getPackage().getName(), implName);
 
-    HtmlElementFactory elementFactory = new GwtDomHtmlElementFactory();
     writer = new MockUiBinderWriter(baseType, implName, templatePath, types,
-        logger, fieldManager, messages, elementFactory);
+        logger, fieldManager, messages);
     fieldManager.registerField(types.findType(parsedTypeName), FIELD_NAME);
     parsedType = types.findType(parsedTypeName);
   }
diff --git a/user/test/com/google/gwt/uibinder/elementparsers/MockUiBinderWriter.java b/user/test/com/google/gwt/uibinder/elementparsers/MockUiBinderWriter.java
index 03dcf98..7264f1a 100644
--- a/user/test/com/google/gwt/uibinder/elementparsers/MockUiBinderWriter.java
+++ b/user/test/com/google/gwt/uibinder/elementparsers/MockUiBinderWriter.java
@@ -21,7 +21,6 @@
 import com.google.gwt.uibinder.rebind.DesignTimeUtilsStub;
 import com.google.gwt.uibinder.rebind.FieldManager;
 import com.google.gwt.uibinder.rebind.MortalLogger;
-import com.google.gwt.uibinder.rebind.HtmlElementFactory;
 import com.google.gwt.uibinder.rebind.UiBinderContext;
 import com.google.gwt.uibinder.rebind.UiBinderWriter;
 import com.google.gwt.uibinder.rebind.XMLElement;
@@ -32,31 +31,29 @@
 
 class MockUiBinderWriter extends UiBinderWriter {
   final List<String> statements = new ArrayList<String>();
-  
-  public MockUiBinderWriter(JClassType baseClass, String implClassName,
-      String templatePath, TypeOracle oracle, MortalLogger logger,
-      FieldManager fieldManager, MessagesWriter messagesWriter, 
-      HtmlElementFactory factory) throws UnableToCompleteException {
-    super(baseClass, implClassName, templatePath, oracle, logger, fieldManager,
-          messagesWriter, DesignTimeUtilsStub.EMPTY, new UiBinderContext(),
-          factory, true);
+
+  public MockUiBinderWriter(JClassType baseClass, String implClassName, String templatePath,
+      TypeOracle oracle, MortalLogger logger, FieldManager fieldManager,
+      MessagesWriter messagesWriter) throws UnableToCompleteException {
+    super(baseClass, implClassName, templatePath, oracle, logger, fieldManager, messagesWriter,
+        DesignTimeUtilsStub.EMPTY, new UiBinderContext(), true);
   }
 
   @Override
   public void addStatement(String format, Object... args) {
     statements.add(String.format(format, args));
   }
-  
+
   /**
-   * Mocked out version of the template declaration. Returns
-   * the template prefixed with "@mockToken-"
+   * Mocked out version of the template declaration. Returns the template
+   * prefixed with "@mockToken-"
    */
   public String declareTemplateCall(String html) {
     return "\"@mockToken-" + html + "\"";
   }
-  
+
   @Override
   public String parseElementToField(XMLElement elem) {
     return elem.consumeOpeningTag();
-  }  
+  }
 }