1 16 package com.google.gwt.user.rebind.rpc; 17 18 import com.google.gwt.core.ext.typeinfo.JClassType; 19 import com.google.gwt.core.ext.typeinfo.JMethod; 20 import com.google.gwt.core.ext.typeinfo.JPrimitiveType; 21 import com.google.gwt.core.ext.typeinfo.JType; 22 23 import java.text.MessageFormat ; 24 import java.util.ArrayList ; 25 import java.util.List ; 26 27 30 class CustomFieldSerializerValidator { 31 private static final String NO_DESERIALIZE_METHOD = "Custom Field Serializer ''{0}'' does not define a deserialize method: ''public static void deserialize({1} reader,{2} instance)''"; 32 private static final String NO_INSTANTIATE_METHOD = "Custom Field Serializer ''{0}'' does not define an instantiate method: ''public static {1} instantiate({2} reader)''; but ''{1}'' is not default instantiable"; 33 private static final String NO_SERIALIZE_METHOD = "Custom Field Serializer ''{0}'' does not define a serialize method: ''public static void serialize({1} writer,{2} instance)''"; 34 35 48 public static List validate(JClassType streamReaderClass, 49 JClassType streamWriterClass, JClassType serializer, JClassType serializee) { 50 List reasons = new ArrayList (); 51 52 JMethod deserialize = serializer.findMethod("deserialize", new JType[] { 53 streamReaderClass, serializee}); 54 if (!isValidCustomFieldSerializerMethod(deserialize, JPrimitiveType.VOID)) { 55 reasons.add(MessageFormat.format(NO_DESERIALIZE_METHOD, new String [] { 56 serializer.getQualifiedSourceName(), 57 streamReaderClass.getQualifiedSourceName(), 58 serializee.getQualifiedSourceName()})); 59 } 60 61 JMethod serialize = serializer.findMethod("serialize", new JType[] { 62 streamWriterClass, serializee}); 63 if (!isValidCustomFieldSerializerMethod(serialize, JPrimitiveType.VOID)) { 64 reasons.add(MessageFormat.format(NO_SERIALIZE_METHOD, new String [] { 65 serializer.getQualifiedSourceName(), 66 streamWriterClass.getQualifiedSourceName(), 67 serializee.getQualifiedSourceName()})); 68 } 69 70 if (!serializee.isDefaultInstantiable()) { 71 JMethod instantiate = serializer.findMethod("instantiate", 72 new JType[] {streamReaderClass}); 73 if (!isValidCustomFieldSerializerMethod(instantiate, serializee)) { 74 reasons.add(MessageFormat.format(NO_INSTANTIATE_METHOD, new String [] { 75 serializer.getQualifiedSourceName(), 76 serializee.getQualifiedSourceName(), 77 streamReaderClass.getQualifiedSourceName()})); 78 } 79 } 80 81 return reasons; 82 } 83 84 private static boolean isValidCustomFieldSerializerMethod(JMethod method, 85 JType returnType) { 86 if (method == null || method.getReturnType() != returnType 87 || !method.isPublic() || !method.isStatic()) { 88 return false; 89 } 90 91 return true; 92 } 93 94 private CustomFieldSerializerValidator() { 95 } 96 } 97 | Popular Tags |