From b821084d39a078f6c35ca08e80d21255aaab31b6 Mon Sep 17 00:00:00 2001 From: mdb Date: Wed, 30 Jul 2008 14:33:54 +0000 Subject: [PATCH] Handle uncomplicated wildcard types. git-svn-id: https://samskivert.googlecode.com/svn/trunk@2351 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- src/java/com/samskivert/util/GenUtil.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/java/com/samskivert/util/GenUtil.java b/src/java/com/samskivert/util/GenUtil.java index c8eacbcb..d2925213 100644 --- a/src/java/com/samskivert/util/GenUtil.java +++ b/src/java/com/samskivert/util/GenUtil.java @@ -24,6 +24,7 @@ import java.lang.reflect.Field; import java.lang.reflect.GenericArrayType; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.lang.reflect.WildcardType; /** * Utility methods for code that generates code. @@ -67,6 +68,27 @@ public class GenUtil buf.append(simpleName(arg)); } return simpleName(pt.getRawType()) + "<" + buf + ">"; + + } else if (type instanceof WildcardType) { + WildcardType wt = (WildcardType)type; + if (wt.getLowerBounds().length > 0) { + String errmsg = "Generation of simple name for wildcard type with lower bounds " + + "not implemented [type=" + type + + ", lbounds=" + StringUtil.toString(wt.getLowerBounds()) + "]"; + throw new IllegalArgumentException(errmsg); + } + if (wt.getUpperBounds().length > 1) { + String errmsg = "Generation of simple name for wildcard type with multiple upper " + + "bounds not implemented [type=" + type + + ", ubounds=" + StringUtil.toString(wt.getUpperBounds()) + "]"; + throw new IllegalArgumentException(errmsg); + } + StringBuilder buf = new StringBuilder("?"); + if (!Object.class.equals(wt.getUpperBounds()[0])) { + buf.append(" extends ").append(simpleName(wt.getUpperBounds()[0])); + } + return buf.toString(); + } else { throw new IllegalArgumentException("Can't generate simple name [type=" + type + ", tclass=" + StringUtil.shortClassName(type) + "]");