aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJake Wharton <jakewharton@gmail.com>2016-11-09 21:08:51 -0500
committerGitHub <noreply@github.com>2016-11-09 21:08:51 -0500
commit8e358310a135ba4e82def404dcddabb2346bbc12 (patch)
treeb7eea1808990518baa552057e17fb2b03ff46079 /src
parentbd786800328b47b8bb0b676b4afa1afb54a49211 (diff)
parentbc65a0b33398eac6e0f80d480ccb16fa13f33b9a (diff)
downloadjavapoet-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.java4
-rw-r--r--src/test/java/com/squareup/javapoet/TypeSpecTest.java56
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"