From c70ece28ea44c9e45b6ed8eff0c9c2fe8e0a797b Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Wed, 4 Apr 2012 18:01:16 +0300 Subject: [PATCH] Fixed problem with anonymous classes and with AbstractComponent mapping --- .../vaadin/terminal/gwt/client/WidgetSet.java | 7 +++---- .../server/AbstractCommunicationManager.java | 17 ++++++++++------- .../terminal/gwt/server/JsonPaintTarget.java | 13 ++++++++----- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/WidgetSet.java b/src/com/vaadin/terminal/gwt/client/WidgetSet.java index 5aa4b24764..e47837296d 100644 --- a/src/com/vaadin/terminal/gwt/client/WidgetSet.java +++ b/src/com/vaadin/terminal/gwt/client/WidgetSet.java @@ -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 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); diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java index 727680bba2..1abdcb288f 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java @@ -1071,6 +1071,10 @@ public abstract class AbstractCommunicationManager implements Serializable { if (typeMappingsOpen) { // send the whole type inheritance map if any new mappings for (Class 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) class1 .getSuperclass())); @@ -2026,12 +2028,13 @@ public abstract class AbstractCommunicationManager implements Serializable { private BootstrapHandler bootstrapHandler; String getTagForType(Class 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(); } /** diff --git a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java index 1b79f6e5b0..78fc4d5fba 100644 --- a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java +++ b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java @@ -984,17 +984,20 @@ public class JsonPaintTarget implements PaintTarget { throw new IllegalArgumentException( "Tags are only available for ClientConnectors"); } - Class clazz = paintable.getClass(); + Class paintableClass = paintable.getClass(); + while (paintableClass.isAnonymousClass()) { + paintableClass = (Class) paintableClass + .getSuperclass(); + } + Class clazz = paintableClass; while (!usedClientConnectors.contains(clazz) && clazz.getSuperclass() != null - && ClientConnector.class - .isAssignableFrom(clazz.getSuperclass())) { + && ClientConnector.class.isAssignableFrom(clazz)) { usedClientConnectors.add((Class) clazz); clazz = clazz.getSuperclass(); } return manager - .getTagForType((Class) paintable - .getClass()); + .getTagForType((Class) paintableClass); } Collection> getUsedClientConnectors() { -- 2.39.5