diff options
author | Jake Wharton <jakewharton@gmail.com> | 2016-11-09 21:08:51 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-09 21:08:51 -0500 |
commit | 8e358310a135ba4e82def404dcddabb2346bbc12 (patch) | |
tree | b7eea1808990518baa552057e17fb2b03ff46079 /src | |
parent | bd786800328b47b8bb0b676b4afa1afb54a49211 (diff) | |
parent | bc65a0b33398eac6e0f80d480ccb16fa13f33b9a (diff) | |
download | javapoet-8e358310a135ba4e82def404dcddabb2346bbc12.tar.gz |
Merge pull request #527 from square/jwilson.1108.fix_nested_imports
Fix imports of nested types.
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/squareup/javapoet/TypeSpec.java | 4 | ||||
-rw-r--r-- | src/test/java/com/squareup/javapoet/TypeSpecTest.java | 56 |
2 files changed, 42 insertions, 18 deletions
diff --git a/src/main/java/com/squareup/javapoet/TypeSpec.java b/src/main/java/com/squareup/javapoet/TypeSpec.java index 7ecd910..be48c80 100644 --- a/src/main/java/com/squareup/javapoet/TypeSpec.java +++ b/src/main/java/com/squareup/javapoet/TypeSpec.java @@ -149,7 +149,6 @@ public final class TypeSpec { codeWriter.statementLine = -1; try { - codeWriter.pushType(this); if (enumName != null) { codeWriter.emitJavadoc(javadoc); codeWriter.emitAnnotations(annotations, false); @@ -214,6 +213,7 @@ public final class TypeSpec { codeWriter.emit(" {\n"); } + codeWriter.pushType(this); codeWriter.indent(); boolean firstMember = true; for (Iterator<Map.Entry<String, TypeSpec>> i = enumConstants.entrySet().iterator(); @@ -285,13 +285,13 @@ public final class TypeSpec { } codeWriter.unindent(); + codeWriter.popType(); codeWriter.emit("}"); if (enumName == null && anonymousTypeArguments == null) { codeWriter.emit("\n"); // If this type isn't also a value, include a trailing newline. } } finally { - codeWriter.popType(); codeWriter.statementLine = previousStatementLine; } } diff --git a/src/test/java/com/squareup/javapoet/TypeSpecTest.java b/src/test/java/com/squareup/javapoet/TypeSpecTest.java index d030958..01132b1 100644 --- a/src/test/java/com/squareup/javapoet/TypeSpecTest.java +++ b/src/test/java/com/squareup/javapoet/TypeSpecTest.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Random; +import java.util.concurrent.Callable; import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; @@ -629,18 +630,41 @@ public final class TypeSpecTest { ClassName tacoBellTaco = ClassName.get("com.taco.bell", "Taco"); ClassName fishTaco = ClassName.get("org.fish.taco", "Taco"); TypeSpec typeSpec = TypeSpec.classBuilder("Taco") - .superclass(fishTaco) - .addSuperinterface(ParameterizedTypeName.get(ClassName.get(Comparable.class), javapoetTaco)) - .addSuperinterface(tacoBellTaco) - .build(); + .superclass(fishTaco) + .addSuperinterface(ParameterizedTypeName.get(ClassName.get(Comparable.class), javapoetTaco)) + .addSuperinterface(tacoBellTaco) + .build(); + assertThat(toString(typeSpec)).isEqualTo("" + + "package com.squareup.tacos;\n" + + "\n" + + "import java.lang.Comparable;\n" + + "\n" + + "class Taco extends org.fish.taco.Taco " + + "implements Comparable<Taco>, com.taco.bell.Taco {\n" + + "}\n"); + } + + @Test public void classImplementsNestedClass() throws Exception { + ClassName outer = ClassName.get(tacosPackage, "Outer"); + ClassName inner = outer.nestedClass("Inner"); + ClassName callable = ClassName.get(Callable.class); + TypeSpec typeSpec = TypeSpec.classBuilder("Outer") + .superclass(ParameterizedTypeName.get(callable, + inner)) + .addType(TypeSpec.classBuilder("Inner") + .addModifiers(Modifier.STATIC) + .build()) + .build(); + assertThat(toString(typeSpec)).isEqualTo("" - + "package com.squareup.tacos;\n" - + "\n" - + "import java.lang.Comparable;\n" - + "\n" - + "class Taco extends org.fish.taco.Taco " - + "implements Comparable<Taco>, com.taco.bell.Taco {\n" - + "}\n"); + + "package com.squareup.tacos;\n" + + "\n" + + "import java.util.concurrent.Callable;\n" + + "\n" + + "class Outer extends Callable<Outer.Inner> {\n" + + " static class Inner {\n" + + " }\n" + + "}\n"); } @Test public void enumImplements() throws Exception { @@ -793,13 +817,13 @@ public final class TypeSpecTest { @Test public void annotationWithFields() { FieldSpec field = FieldSpec.builder(int.class, "FOO") - .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) - .initializer("$L", 101) - .build(); + .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) + .initializer("$L", 101) + .build(); TypeSpec anno = TypeSpec.annotationBuilder("Anno") - .addField(field) - .build(); + .addField(field) + .build(); assertThat(toString(anno)).isEqualTo("" + "package com.squareup.tacos;\n" |