diff options
author | Artur Signell <artur@vaadin.com> | 2012-04-04 18:01:16 +0300 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2012-04-04 18:18:42 +0300 |
commit | c70ece28ea44c9e45b6ed8eff0c9c2fe8e0a797b (patch) | |
tree | b32780dfc246279f917d8d40136f2768c88e502e /src | |
parent | 87e5022ca881154f7e4cba9b2c014b344646fa8f (diff) | |
download | vaadin-framework-c70ece28ea44c9e45b6ed8eff0c9c2fe8e0a797b.tar.gz vaadin-framework-c70ece28ea44c9e45b6ed8eff0c9c2fe8e0a797b.zip |
Fixed problem with anonymous classes and with AbstractComponent mapping
Diffstat (limited to 'src')
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<? 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); 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<? 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(); } /** 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<? 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() { |