Revision: 6446 Author: [email protected] Date: Thu Oct 22 12:08:44 2009 Log: Check for @GwtTransient annotation when checking for transient fields in the RPC subsystem.
Review by: spoon http://code.google.com/p/google-web-toolkit/source/detail?r=6446 Modified: /trunk/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java /trunk/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java ======================================= --- /trunk/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java Thu Aug 13 14:05:30 2009 +++ /trunk/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java Thu Oct 22 12:08:44 2009 @@ -15,6 +15,7 @@ */ package com.google.gwt.user.server.rpc.impl; +import com.google.gwt.user.client.rpc.GwtTransient; import com.google.gwt.user.server.rpc.SerializationPolicy; import java.io.UnsupportedEncodingException; @@ -219,6 +220,17 @@ } return (result == instanceType) ? null : result; } + + static boolean isNotStaticTransientOrFinal(Field field) { + /* + * Only serialize fields that are not static, transient (including @GwtTransient), or final. + */ + int fieldModifiers = field.getModifiers(); + return !Modifier.isStatic(fieldModifiers) + && !Modifier.isTransient(fieldModifiers) + && !field.isAnnotationPresent(GwtTransient.class) + && !Modifier.isFinal(fieldModifiers); + } /** * This method treats arrays in a special way. @@ -317,14 +329,4 @@ return null; } } - - private static boolean isNotStaticTransientOrFinal(Field field) { - /* - * Only serialize fields that are not static, transient or final. - */ - int fieldModifiers = field.getModifiers(); - return !Modifier.isStatic(fieldModifiers) - && !Modifier.isTransient(fieldModifiers) - && !Modifier.isFinal(fieldModifiers); - } -} +} ======================================= --- /trunk/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java Thu Aug 13 14:05:30 2009 +++ /trunk/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializationStreamReader.java Thu Oct 22 12:08:44 2009 @@ -790,22 +790,18 @@ // Iterate over each field and locate a suitable setter method Field[] fields = instanceClass.getDeclaredFields(); for (Field field : fields) { - // Consider non-final, non-static, non-transient fields only - int mod = field.getModifiers(); - if (Modifier.isFinal(mod) || Modifier.isStatic(mod) - || Modifier.isTransient(mod)) { - continue; - } - - String fieldName = field.getName(); - String setterName = "set" + // Consider non-final, non-static, non-transient (or @GwtTransient) fields only + if (SerializabilityUtil.isNotStaticTransientOrFinal(field)) { + String fieldName = field.getName(); + String setterName = "set" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); - try { - Method setter = instanceClass.getMethod(setterName, field.getType()); - setters.put(fieldName, setter); - } catch (NoSuchMethodException e) { - // Just leave this field out of the map + try { + Method setter = instanceClass.getMethod(setterName, field.getType()); + setters.put(fieldName, setter); + } catch (NoSuchMethodException e) { + // Just leave this field out of the map + } } } --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
