diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 51ee2e524..e2092c57e 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -230,7 +230,9 @@ public class SimpleType implements Type { public String getRawName(Set packages, Set classes) { if (classes.contains(fullName)) { return simpleName; - } else if (packages.contains(packageName) || classes.contains(outerClassName)) { + } else if (classes.contains(outerClassName)) { + return fullName.substring(outerClassName.lastIndexOf('.') + 1); + } else if (packages.contains(packageName)) { return localName; } else { return fullName; diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 70c0aab41..b719a6884 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -55,21 +55,19 @@ public final class ClassUtils { public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; - } - if (cl.getName().indexOf('$') > 0) { - return getName(cl.getDeclaringClass(), packages, classes) + "." + cl.getSimpleName(); } - final String canonicalName = cl.getName(); - final int i = canonicalName.lastIndexOf('.'); - if (i == -1) { - return canonicalName; - } else { - final String packageName = canonicalName.substring(0, i); - if (packages.contains(packageName) || classes.contains(canonicalName)) { - return cl.getSimpleName(); - } else { - return canonicalName; - } + final String canonicalName = cl.getName().replace('$', '.'); + final int i = cl.getName().lastIndexOf('.'); + if (classes.contains(canonicalName)) { + return cl.getSimpleName(); + } else if (cl.getEnclosingClass() != null) { + return getName(cl.getEnclosingClass(), packages, classes) + "." + cl.getSimpleName(); + } else if (i == -1) { + return canonicalName; + } else if (packages.contains(canonicalName.substring(0, i))) { + return canonicalName.substring(i + 1); + } else { + return canonicalName; } } diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 944e815d2..90bb21acf 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -12,10 +12,15 @@ import java.util.Map; import org.junit.Test; +import com.google.common.collect.ImmutableSet; + public class ClassTypeTest { public class Inner { - + public class Inner2 { + public class Inner3 { + } + } } private final ClassType stringType = new ClassType(TypeCategory.STRING, String.class); @@ -110,8 +115,22 @@ public class ClassTypeTest { // } @Test - public void getEnclosingType() { - assertEquals(new ClassType(ClassTypeTest.class), new ClassType(Inner.class).getEnclosingType()); - assertNull(new ClassType(ClassTypeTest.class).getEnclosingType()); + public void GetEnclosingType() { + Type outer = new ClassType(ClassTypeTest.class); + Type inner = new ClassType(ClassTypeTest.Inner.class); + Type inner2 = new ClassType(ClassTypeTest.Inner.Inner2.class); + Type inner3 = new ClassType(ClassTypeTest.Inner.Inner2.Inner3.class); + + assertEquals(inner2, inner3.getEnclosingType()); + assertEquals(inner, inner2.getEnclosingType()); + assertEquals(outer, inner.getEnclosingType()); + assertNull(outer.getEnclosingType()); + + assertEquals("ClassTypeTest.Inner.Inner2.Inner3", + inner3.getRawName(ImmutableSet.of(outer.getPackageName()), ImmutableSet.of())); + assertEquals("Inner2.Inner3", + inner3.getRawName(ImmutableSet.of(), ImmutableSet.of(inner2.getFullName()))); + assertEquals("Inner3", + inner3.getRawName(ImmutableSet.of(), ImmutableSet.of(inner3.getFullName()))); } } diff --git a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java index af8df62b0..e07159220 100644 --- a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java @@ -6,10 +6,15 @@ import java.util.Collections; import org.junit.Test; +import com.google.common.collect.ImmutableSet; + public class SimpleTypeTest { public static class Inner { - + public class Inner2 { + public class Inner3 { + } + } } @Test @@ -68,11 +73,23 @@ public class SimpleTypeTest { @Test public void GetEnclosingType() { - assertEquals(new SimpleType(new ClassType(SimpleTypeTest.class)), - new SimpleType(new ClassType(Inner.class)).getEnclosingType()); - assertNull(new SimpleType(new ClassType(SimpleTypeTest.class)).getEnclosingType()); - } + Type outer = new SimpleType(new ClassType(SimpleTypeTest.class)); + Type inner = new SimpleType(new ClassType(SimpleTypeTest.Inner.class)); + Type inner2 = new SimpleType(new ClassType(SimpleTypeTest.Inner.Inner2.class)); + Type inner3 = new SimpleType(new ClassType(SimpleTypeTest.Inner.Inner2.Inner3.class)); + assertEquals(inner2, inner3.getEnclosingType()); + assertEquals(inner, inner2.getEnclosingType()); + assertEquals(outer, inner.getEnclosingType()); + assertNull(outer.getEnclosingType()); + + assertEquals("SimpleTypeTest.Inner.Inner2.Inner3", + inner3.getRawName(ImmutableSet.of(outer.getPackageName()), ImmutableSet.of())); + assertEquals("Inner2.Inner3", + inner3.getRawName(ImmutableSet.of(), ImmutableSet.of(inner2.getFullName()))); + assertEquals("Inner3", + inner3.getRawName(ImmutableSet.of(), ImmutableSet.of(inner3.getFullName()))); + } @Test public void IsMember() { assertTrue(new SimpleType(new ClassType(SimpleTypeTest.Inner.class)).isMember()); diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index f59355249..5a5bf975b 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -19,9 +19,7 @@ public class ClassUtilsTest { @Test public void GetName() { assertEquals("int", ClassUtils.getName(int.class)); - assertEquals( - "int", - ClassUtils.getName(int.class, Collections. emptySet(), + assertEquals("int", ClassUtils.getName(int.class, Collections. emptySet(), Collections. emptySet())); assertEquals("Object", ClassUtils.getName(Object.class)); assertEquals("Object[]", ClassUtils.getName(Object[].class));