diff --git a/pom.xml b/pom.xml
index 15dfd3acb..a998697a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.mysema.codegen
codegen
- 0.5.2
+ 0.5.3
Codegen
Code generation and compilation for Java
diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java
index bf1a61d1b..47ee0f046 100644
--- a/src/main/java/com/mysema/codegen/model/TypeSuper.java
+++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java
@@ -41,7 +41,12 @@ public class TypeSuper extends TypeAdapter {
@Override
public String getGenericName(boolean asArgType, Set packages, Set classes) {
if (!asArgType) {
- return "? super " + superType.getGenericName(true, packages, classes);
+ if (superType instanceof TypeExtends) {
+ return "?";
+ } else {
+ return "? super " + superType.getGenericName(true, packages, classes);
+ }
+
} else {
return super.getGenericName(asArgType, packages, classes);
}
diff --git a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java
index d5c47caf9..5030a1221 100644
--- a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java
+++ b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java
@@ -20,5 +20,14 @@ public class TypeSuperTest {
public void GetGenericName_As_ArgType() {
assertEquals("java.lang.Object", new TypeSuper(Types.STRING).getGenericName(true));
}
+
+ @Test
+ public void Comparable() {
+ // T extends Comparable super T>
+ Type comparable = new ClassType(Comparable.class);
+ Type type = new TypeExtends("T",
+ new SimpleType(comparable, new TypeSuper(new TypeExtends("T", comparable))));
+ assertEquals("? extends java.lang.Comparable>", type.getGenericName(false));
+ }
}