diff options
author | Artur Signell <artur@vaadin.com> | 2013-02-06 09:30:10 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2013-02-06 09:30:10 +0000 |
commit | 2d9e28e19c27554ba84ba935271bbbfe101459d5 (patch) | |
tree | aac8937a49aef0ffe69dc1c08e96042445ac1748 | |
parent | baaa864158d052af19e60f593c94309f98cc2aec (diff) | |
parent | 28b7703d29d93f0fefc7e020d9f7cf14c0349aa7 (diff) | |
download | vaadin-framework-2d9e28e19c27554ba84ba935271bbbfe101459d5.tar.gz vaadin-framework-2d9e28e19c27554ba84ba935271bbbfe101459d5.zip |
Merge "Don't fetch old bean property value if it is not needed (#10940)" into 7.0
-rw-r--r-- | client/src/com/vaadin/client/communication/JsonDecoder.java | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/client/src/com/vaadin/client/communication/JsonDecoder.java b/client/src/com/vaadin/client/communication/JsonDecoder.java index 75af42fc1e..d32cdd92aa 100644 --- a/client/src/com/vaadin/client/communication/JsonDecoder.java +++ b/client/src/com/vaadin/client/communication/JsonDecoder.java @@ -30,6 +30,7 @@ import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.ConnectorMap; +import com.vaadin.client.FastStringSet; import com.vaadin.client.metadata.NoDataException; import com.vaadin.client.metadata.Property; import com.vaadin.client.metadata.Type; @@ -48,6 +49,24 @@ import com.vaadin.shared.Connector; */ public class JsonDecoder { + private static final FastStringSet decodedWithoutReference = FastStringSet + .create(); + static { + decodedWithoutReference.add(String.class.getName()); + decodedWithoutReference.add(Boolean.class.getName()); + decodedWithoutReference.add(Byte.class.getName()); + decodedWithoutReference.add(Character.class.getName()); + decodedWithoutReference.add(Short.class.getName()); + decodedWithoutReference.add(Integer.class.getName()); + decodedWithoutReference.add(Long.class.getName()); + decodedWithoutReference.add(Float.class.getName()); + decodedWithoutReference.add(Double.class.getName()); + decodedWithoutReference.add(Connector.class.getName()); + decodedWithoutReference.add(Map.class.getName()); + decodedWithoutReference.add(List.class.getName()); + decodedWithoutReference.add(Set.class.getName()); + } + /** * Decode a JSON array with two elements (type and value) into a client-side * type, recursively if necessary. @@ -134,8 +153,17 @@ public class JsonDecoder { if (encodedPropertyValue == null) { continue; } - Object propertyReference = property.getValue(target); - Object decodedValue = decodeValue(property.getType(), + + Type propertyType = property.getType(); + + Object propertyReference; + if (needsReferenceValue(propertyType)) { + propertyReference = property.getValue(target); + } else { + propertyReference = null; + } + + Object decodedValue = decodeValue(propertyType, encodedPropertyValue, propertyReference, connection); property.setValue(target, decodedValue); } @@ -147,6 +175,10 @@ public class JsonDecoder { } } + private static boolean needsReferenceValue(Type type) { + return !decodedWithoutReference.contains(type.getBaseTypeName()); + } + private static Map<Object, Object> decodeMap(Type type, JSONValue jsonMap, ApplicationConnection connection) { // Client -> server encodes empty map as an empty array because of |