]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed problem with anonymous classes and with AbstractComponent mapping
authorArtur Signell <artur@vaadin.com>
Wed, 4 Apr 2012 15:01:16 +0000 (18:01 +0300)
committerLeif Åstrand <leif@vaadin.com>
Wed, 4 Apr 2012 15:18:42 +0000 (18:18 +0300)
src/com/vaadin/terminal/gwt/client/WidgetSet.java
src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java

index 5aa4b2476428a46861082f323b63bbbef239523d..e47837296d0a49e43cab3d3ec2df8fd62e98e857 100644 (file)
@@ -44,8 +44,7 @@ public class WidgetSet {
                 conf, tag);
 
         if (classType == null || classType == UnknownComponentConnector.class) {
-            String serverSideName = conf
-                    .getUnknownServerClassNameByTag(tag);
+            String serverSideName = conf.getUnknownServerClassNameByTag(tag);
             UnknownComponentConnector c = GWT
                     .create(UnknownComponentConnector.class);
             c.setServerSideClassName(serverSideName);
@@ -91,9 +90,9 @@ public class WidgetSet {
         Class<? extends ComponentConnector> connectorClass = null;
         Integer t = tag;
         do {
+            String serverSideClassName = conf.getServerSideClassNameForTag(t);
             connectorClass = widgetMap
-                    .getConnectorClassForServerSideClassName(conf
-                            .getServerSideClassNameForTag(t));
+                    .getConnectorClassForServerSideClassName(serverSideClassName);
             t = conf.getParentTag(t);
         } while (connectorClass == UnknownComponentConnector.class && t != null);
 
index 727680bba2c6349ae3a1574d5179726e781c2d7d..1abdcb288f84cb32c4e9f7ec610c842f72201e65 100644 (file)
@@ -1071,6 +1071,10 @@ public abstract class AbstractCommunicationManager implements Serializable {
         if (typeMappingsOpen) {
             // send the whole type inheritance map if any new mappings
             for (Class<? extends ClientConnector> class1 : usedClientConnectors) {
+                if (!ClientConnector.class.isAssignableFrom(class1
+                        .getSuperclass())) {
+                    continue;
+                }
                 if (!typeInheritanceMapOpen) {
                     typeInheritanceMapOpen = true;
                     outWriter.print(", \"typeInheritanceMap\" : { ");
@@ -1080,8 +1084,6 @@ public abstract class AbstractCommunicationManager implements Serializable {
                 outWriter.print("\"");
                 outWriter.print(getTagForType(class1));
                 outWriter.print("\" : ");
-                // note that if the superclass is not in typeMappings, a "dummy"
-                // tag is used
                 outWriter
                         .print(getTagForType((Class<? extends ClientConnector>) class1
                                 .getSuperclass()));
@@ -2026,12 +2028,13 @@ public abstract class AbstractCommunicationManager implements Serializable {
     private BootstrapHandler bootstrapHandler;
 
     String getTagForType(Class<? extends ClientConnector> class1) {
-        Integer object = typeToKey.get(class1);
-        if (object == null) {
-            object = nextTypeKey++;
-            typeToKey.put(class1, object);
+        Integer id = typeToKey.get(class1);
+        if (id == null) {
+            id = nextTypeKey++;
+            typeToKey.put(class1, id);
+            logger.log(Level.FINE, "Mapping " + class1.getName() + " to " + id);
         }
-        return object.toString();
+        return id.toString();
     }
 
     /**
index 1b79f6e5b0b2f13d9e00eb6dd118e0be6ad3bc8b..78fc4d5fba2b2269467fe70d3a4867be9b25a04c 100644 (file)
@@ -984,17 +984,20 @@ public class JsonPaintTarget implements PaintTarget {
             throw new IllegalArgumentException(
                     "Tags are only available for ClientConnectors");
         }
-        Class<?> clazz = paintable.getClass();
+        Class<? extends Paintable> paintableClass = paintable.getClass();
+        while (paintableClass.isAnonymousClass()) {
+            paintableClass = (Class<? extends Paintable>) paintableClass
+                    .getSuperclass();
+        }
+        Class<?> clazz = paintableClass;
         while (!usedClientConnectors.contains(clazz)
                 && clazz.getSuperclass() != null
-                && ClientConnector.class
-                        .isAssignableFrom(clazz.getSuperclass())) {
+                && ClientConnector.class.isAssignableFrom(clazz)) {
             usedClientConnectors.add((Class<? extends ClientConnector>) clazz);
             clazz = clazz.getSuperclass();
         }
         return manager
-                .getTagForType((Class<? extends ClientConnector>) paintable
-                        .getClass());
+                .getTagForType((Class<? extends ClientConnector>) paintableClass);
     }
 
     Collection<Class<? extends ClientConnector>> getUsedClientConnectors() {