aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGert Scholten <gscholt@gmail.com>2009-09-23 16:03:52 +0200
committerShawn O. Pearce <sop@google.com>2009-10-05 07:05:03 -0700
commit18edfa13362d089fb6c80f501ae3b2c7b94df323 (patch)
treef2ce53a49a5c2fdec3b73f8bfe4e242129eee411
parent488eb42b267f0abb55736f8b93fb972b33d15b55 (diff)
downloadgwtjsonrpc-18edfa13362d089fb6c80f501ae3b2c7b94df323.tar.gz
Generate errors when using abstract types as parameters or fields
Abstract types themselves can not be (de)serialized. Change-Id: Id8c327659eb4e4aa8686bed447d82134ddb9c288 Signed-off-by: Gert Scholten <gscholt@gmail.com>
-rw-r--r--src/main/java/com/google/gwtjsonrpc/rebind/SerializerCreator.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/main/java/com/google/gwtjsonrpc/rebind/SerializerCreator.java b/src/main/java/com/google/gwtjsonrpc/rebind/SerializerCreator.java
index 7d16fdb..5781994 100644
--- a/src/main/java/com/google/gwtjsonrpc/rebind/SerializerCreator.java
+++ b/src/main/java/com/google/gwtjsonrpc/rebind/SerializerCreator.java
@@ -97,7 +97,7 @@ class SerializerCreator {
return sClassName;
}
- checkCanSerialize(logger, targetType);
+ checkCanSerialize(logger, targetType, true);
recursivelyCreateSerializers(logger, targetType);
this.targetType = targetType;
@@ -179,6 +179,11 @@ class SerializerCreator {
void checkCanSerialize(final TreeLogger logger, final JType type)
throws UnableToCompleteException {
+ checkCanSerialize(logger, type, false);
+ }
+
+ void checkCanSerialize(final TreeLogger logger, final JType type,
+ boolean allowAbstractType) throws UnableToCompleteException {
if (type.isPrimitive() == JPrimitiveType.LONG) {
logger.log(TreeLogger.ERROR,
"Type 'long' not supported in JSON encoding", null);
@@ -247,8 +252,15 @@ class SerializerCreator {
}
final JClassType ct = (JClassType) type;
- final TreeLogger branch = logger.branch(TreeLogger.DEBUG, "In type " + qsn);
+ if (ct.isAbstract() && !allowAbstractType) {
+ logger.log(TreeLogger.ERROR, "Abstract type " + qsn
+ + " not supported here", null);
+ throw new UnableToCompleteException();
+ }
for (final JField f : sortFields(ct)) {
+ final TreeLogger branch =
+ logger.branch(TreeLogger.DEBUG, "In type " + qsn + ", field "
+ + f.getName());
checkCanSerialize(branch, f.getType());
}
}