From a8d7572208bf3300c504878d8ed8c58f91e2fd8e Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Mon, 26 Jan 2015 23:17:52 -0500 Subject: Option to skip java.lang imports. --- src/main/java/com/squareup/javapoet/JavaFile.java | 28 +++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/main/java/com') diff --git a/src/main/java/com/squareup/javapoet/JavaFile.java b/src/main/java/com/squareup/javapoet/JavaFile.java index e7eebe4..acbcc90 100644 --- a/src/main/java/com/squareup/javapoet/JavaFile.java +++ b/src/main/java/com/squareup/javapoet/JavaFile.java @@ -39,11 +39,13 @@ public final class JavaFile { public final CodeBlock fileComment; public final String packageName; public final TypeSpec typeSpec; + public final boolean skipJavaLangImports; private JavaFile(Builder builder) { this.fileComment = builder.fileComment.build(); this.packageName = builder.packageName; this.typeSpec = builder.typeSpec; + this.skipJavaLangImports = builder.skipJavaLangImports; } public void emit(Appendable out, String indent) throws IOException { @@ -69,10 +71,14 @@ public final class JavaFile { codeWriter.emit("\n"); } - if (!codeWriter.importedTypes().isEmpty()) { - for (ClassName className : codeWriter.importedTypes().keySet()) { - codeWriter.emit("import $L;\n", className); - } + int importedTypesCount = 0; + for (ClassName className : codeWriter.importedTypes().keySet()) { + if (skipJavaLangImports && className.packageName().equals("java.lang")) continue; + codeWriter.emit("import $L;\n", className); + importedTypesCount++; + } + + if (importedTypesCount > 0) { codeWriter.emit("\n"); } @@ -101,6 +107,7 @@ public final class JavaFile { private final String packageName; private final TypeSpec typeSpec; private CodeBlock.Builder fileComment = CodeBlock.builder(); + private boolean skipJavaLangImports; private Builder(String packageName, TypeSpec typeSpec) { this.packageName = packageName; @@ -112,6 +119,19 @@ public final class JavaFile { return this; } + /** + * Call this to omit imports for classes in {@code java.lang}, such as {@code java.lang.String}. + * + *

By default, JavaPoet explicitly imports types in {@code java.lang} to defend against + * naming conflicts. Suppose an (ill-advised) class is named {@code com.example.String}. When + * {@code java.lang} imports are skipped, generated code in {@code com.example} that references + * {@code java.lang.String} will get {@code com.example.String} instead. + */ + public Builder skipJavaLangImports(boolean skipJavaLangImports) { + this.skipJavaLangImports = skipJavaLangImports; + return this; + } + public JavaFile build() { return new JavaFile(this); } -- cgit v1.2.3