From 1c6faf2ede9f7f3b12a8c30a4b0c158c79f46bd8 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Tue, 12 Jan 2010 11:18:09 +0000 Subject: [PATCH] fixes #3969, paintable coding now instance wide. eats more memory but safer on context reloads. Also fix on client side, so that Window is not hardcoded to "0" (does not resolve issue in all cases though) svn changeset:10689/svn branch:6.2 --- .../gwt/client/ApplicationConfiguration.java | 14 ++++++++++++- .../gwt/client/ApplicationConnection.java | 3 ++- .../server/AbstractCommunicationManager.java | 20 +++++++++---------- .../terminal/gwt/server/JsonPaintTarget.java | 2 +- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java index 4ea806e29e..39f4e845f7 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java @@ -32,6 +32,8 @@ public class ApplicationConfiguration { private Class[] classes = new Class[1024]; + private String windowId; + private static ArrayList unstartedApplications = new ArrayList(); private static ArrayList runningApplications = new ArrayList(); @@ -239,7 +241,7 @@ public class ApplicationConfiguration { public void addComponentMappings(ValueMap valueMap, WidgetSet widgetSet) { JsArrayString keyArray = valueMap.getKeyArray(); for (int i = 0; i < keyArray.length(); i++) { - String key = keyArray.get(i); + String key = keyArray.get(i).intern(); int value = valueMap.getInt(key); classes[value] = widgetSet.getImplementationByClassName(key); if (classes[value] == VUnknownComponent.class) { @@ -247,10 +249,20 @@ public class ApplicationConfiguration { unknownComponents = new HashMap(); } unknownComponents.put("" + value, key); + } else if (key == "com.vaadin.ui.Window") { + windowId = "" + value; } } } + /** + * @return the integer value that is used to code top level windows + * "com.vaadin.ui.Window" + */ + String getEncodedWindowTag() { + return windowId; + } + String getUnknownServerClassNameByEncodedTagName(String tag) { if (unknownComponents != null) { return unknownComponents.get(tag); diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java index a523e8b00e..70cb99bc23 100755 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java @@ -789,7 +789,8 @@ public class ApplicationConnection { updatedWidgets.add(idToPaintableDetail.get(uidl.getId()) .getComponent()); } else { - if (!uidl.getTag().equals("0")) { + if (!uidl.getTag().equals( + configuration.getEncodedWindowTag())) { ClientExceptionHandler .displayError("Received update for " + uidl.getTag() diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java index dc2973ebe5..63991b8b5b 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java @@ -1841,18 +1841,16 @@ public abstract class AbstractCommunicationManager implements } } - private static HashMap, Integer> typeToKey = new HashMap, Integer>(); - private static int nextTypeKey = 0; - - static String getTagForType(Class class1) { - synchronized (typeToKey) { - Integer object = typeToKey.get(class1); - if (object == null) { - object = nextTypeKey++; - typeToKey.put(class1, object); - } - return object.toString(); + private HashMap, Integer> typeToKey = new HashMap, Integer>(); + private int nextTypeKey = 0; + + String getTagForType(Class class1) { + Integer object = typeToKey.get(class1); + if (object == null) { + object = nextTypeKey++; + typeToKey.put(class1, object); } + return object.toString(); } /** diff --git a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java index 649a5e129d..54695fd3db 100644 --- a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java +++ b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java @@ -1041,7 +1041,7 @@ public class JsonPaintTarget implements PaintTarget { } usedPaintableTypes.add(class1); - return AbstractCommunicationManager.getTagForType(class1); + return manager.getTagForType(class1); } -- 2.39.5