diff options
author | Gert Scholten <gscholt@gmail.com> | 2009-09-23 16:03:52 +0200 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2009-10-05 07:05:03 -0700 |
commit | 18edfa13362d089fb6c80f501ae3b2c7b94df323 (patch) | |
tree | f2ce53a49a5c2fdec3b73f8bfe4e242129eee411 | |
parent | 488eb42b267f0abb55736f8b93fb972b33d15b55 (diff) | |
download | gwtjsonrpc-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.java | 16 |
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()); } } |