You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

340 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Change Log
==========
JavaPoet 1.13.0 *(2020-06-18)*
-----------------------------
* New: Add support for explicit receiver parameters.
* Fix: Don't copy parameter annotations when creating a `ParameterSpec`.
JavaPoet 1.12.1 *(2020-01-20)*
-----------------------------
* Fix: Ignore parameter annotations in `MethodSpec.overriding()`.
JavaPoet 1.12.0 *(2020-01-09)*
-----------------------------
* New: Add `JavaFile.writeToPath()` and `JavaFile.writeToFile()` methods that return paths to the
generated file as `Path` and `File` respectively.
* New: Add `TypeSpec.alwaysQualify()` API to avoid clashes involving nested type names.
* New: Add overloads accepting `CodeBlock`s to `MethodSpec`'s control flow methods.
* New: Make list fields of all `Builder` types mutable.
* New: Add `CodeBlock.clear()`.
* New: Allow passing a custom `Charset` to `JavaFile.writeTo()`.
* New: Improved performance of `ClassName.simpleNames()` by memoizing results.
* New: Significant performance improvements for `CodeWriter.resolve()` as all nested simple names
of a `TypeSpec` get pre-computed.
* New: Add `TypeName.Builder.setName()` to allow overriding names passed in the constructor.
* New: Add `TypeName.canonicalName()`.
* Fix: Use `\\R` instead of `\n` as line separator in `CodeWriter.emitAndIndent()`.
* Fix: Copy originating elements in `TypeSpec.toBuilder()`.
* Fix: Ensure trailing newlines in Javadocs and method bodies.
* Fix: Copy annotations when creating a `ParameterSpec` from a `VariableElement`.
* Fix: Properly handle classes located in empty packages in `ClassName`.
* Fix: Only allow `final` modifier on a `ParameterSpec`.
* Fix: Use fully-qualified names for type names that are masked by type variable names.
JavaPoet 1.11.1 *(2018-05-16)*
-----------------------------
* Fix: JavaPoet 1.11 had a regression where `TypeName.get()` would throw on error types, masking
other errors in an annotation processing round. This is fixed with a test to prevent future
regressions!
JavaPoet 1.11.0 *(2018-04-29)*
-----------------------------
* New: Support `TYPE_USE` annotations on each enclosing `ClassName`.
* New: Work around a compiler bug in `TypeName.get(TypeElement)`. There was a problem getting an
element's kind when building from source ABIs.
JavaPoet 1.10.0 *(2018-01-27)*
-----------------------------
* **JavaPoet now requires Java 8 or newer.**
* New: `$Z` as an optional newline (zero-width space) if a line may exceed 100 chars.
* New: `CodeBlock.join()` and `CodeBlock.joining()` let you join codeblocks by delimiters.
* New: Add `CodeBlock.Builder.isEmpty()`.
* New: `addStatement(CodeBlock)` overloads for `CodeBlock` and `MethodSpec`.
* Fix: Include annotations when emitting type variables.
* Fix: Use the right imports for annotated type parameters.
* Fix: Don't incorrectly escape classnames that start with `$`.
JavaPoet 1.9.0 *(2017-05-13)*
-----------------------------
* Fix: Don't emit incorrect code when the declared type's signature references another type with
the same simple name.
* Fix: Support anonymous inner classes in `ClassName.get()`.
* New: `MethodSpec.Builder.addNamedCode()` and `TypeSpec.anonymousClassBuilder(CodeBlock)`.
JavaPoet 1.8.0 *(2016-11-09)*
-----------------------------
* New: Basic support for line wrapping. Use `$W` to insert a Wrappable Whitespace character. It'll
emit either a single space or a newline with appropriate indentation.
* New: Named arguments in `CodeBlock`. These are intended to make larger code snippets easier to
read:
```
Map<String, Object> map = new LinkedHashMap<>();
map.put("count", 3);
map.put("greeting", "Hello, ");
map.put("system", System.class);
String template = ""
+ "for (int i = 0; i < $count:L; i++) {\n"
+ " $system:T.out.println($greeting:S + list.get(i));\n"
+ "}\n";
CodeBlock.Builder builder = CodeBlock.builder();
builder.addNamed(template, map);
```
* New: `addJavadoc(CodeBlock)` overloads for TypeSpec, MethodSpec, and FieldSpec.
* New: `MethodSpec.addComment()` makes it easy to add a `// single-line comment.`
* New: `ClassName.getReflectionName()` returns a string like `java.util.Map$Entry`.
* Fix: Always write UTF-8. Previously JavaPoet would use the system default charset which was
potentially inconsistent across environments.
* Fix: Permit (constant) fields to be defined in annotation types.
JavaPoet 1.7.0 *(2016-04-26)*
-----------------------------
* New: Support parameterized types that enclose other types, like `Outer<String>.Inner`.
* New: `TypeName.isBoxedPrimitive()`.
JavaPoet 1.6.1 *(2016-03-21)*
-----------------------------
* Fix: Double quotes and backslashes in string literals were not properly quoted in 1.6.0. This is
now fixed.
JavaPoet 1.6.0 *(2016-03-19)*
-----------------------------
* New: Revive `CodeBlock.of()`, a handy factory method for building code blocks.
* New: Add `TypeSpec` factory methods that take a `ClassName`.
* New: `TypeName.annotated()` adds an annotation to a type.
* New: `TypeVariableName.withBounds()` adds bounds to a type variable.
* New: `TypeSpec.Builder.addInitializerBlock()` adds an instance initializer.
* Fix: Make `TypeSpec.Kind` enum public. This can be used to check if a `TypeSpec` is a class,
interface, enum, or annotation.
* Fix: Dont break import resolution on annotated types.
* Fix: Forbid unexpected modifiers like `private` on annotation members.
* Fix: Deduplicate exceptions in `MethodSpec.Builder`.
* Fix: Treat `ErrorType` like a regular `DeclaredType` in `TypeName.get()`. This should make it
easier to write annotation processors.
JavaPoet 1.5.1 *(2016-01-10)*
-----------------------------
* Fix: Annotated `TypeName` instances are only equal if their annotations are equal.
JavaPoet 1.5.0 *(2016-01-10)*
-----------------------------
* New: `import static`! See `JavaFile.Builder.addStaticImport()` variants.
* New: Overload `NameAllocator.newName(String)` for creating a one-off name without a tag.
* Fix: AnnotationSpec escapes character literals properly.
* Fix: Don't stack overflow when `TypeVariableName` is part of `ParameterizedTypeName`.
* Fix: Reporting not used indexed arguments in like `add("$1S", "a", "b")`.
* Fix: Prevent import of types located in the default package, i.e. have no package name.
JavaPoet 1.4.0 *(2015-11-13)*
-----------------------------
* New: `AnnotationSpec.get(Annotation)`.
* New: Type annotations! `TypeName.annotated()` can attach annotations like `@Nullable` directly to
types. This works for both top-level types and type parameters as in `List<@Nullable String>`.
* New: `equals()` and `hashCode()` on `AnnotationSpec`, `CodeBlock`, `FieldSpec`, `JavaFile`,
`MethodSpec`, `ParameterSpec`, `TypeName`, and `TypeSpec`.
* New: `NameAllocator.clone()` to refine a NameAllocator for use in an inner scope code block.
* Fix: Don't stack overflow when `TypeVariableName` gets a self-referential type.
* Fix: Better handling of name collisions on imports. Previously JavaPoet did the wrong thing when
a referenced type and a nested types had the same name.
JavaPoet 1.3.0 *(2015-09-20)*
-----------------------------
* New: `NameAllocator` API makes it easy to declare non-conflicting names.
* New: Support annotations on enum values.
* Fix: Avoid infinite recursion in `TypeName.get(TypeMirror)`.
* Fix: Use qualified name for conflicting simple names in the same file.
* Fix: Better messages for parameter indexing errors.
JavaPoet 1.2.0 *(2015-07-04)*
-----------------------------
* New: Arguments may have positional indexes like `$1T` and `$2N`. Indexes can be used to refer to
the same argument multiple times in a single format string.
* New: Permit Javadoc on enum constants.
* New: Class initializer blocks with `addStaticBlock()`.
* Fix: `MethodSpec.overriding()` retains annotations.
JavaPoet 1.1.0 *(2015-05-25)*
-----------------------------
* New: Eager validation of argument types like `$T` and `$N`.
* New: `MethodSpec.varargs(boolean)` to generate varags methods.
* New: `AnnotationSpec.get()` and `MethodSpec.overriding()` to create annotations and methods from
the `javax.lang.model` API.
* New: `JavaFile.toJavaFileObject()`.
* New: Java 8 `DEFAULT` modifier.
* New: `toBuilder()` methods to build upon objects already constructed.
* New: Generate `@interface` annotation types.
* New: `TypeName.box()` and `TypeName.unbox()` convenience APIs.
* Fix: `nextControlFlow()` accepts arguments.
* Fix: Reject duplicate calls to set the superclass.
* Fix: `WildcardTypeName.get(WildcardType)` no longer throws a `NullPointerException`.
* Fix: Don't allow double field initialization.
JavaPoet 1.0.0 *(2015-01-28)*
-----------------------------
* This update is a complete rewrite. The project name is now `javapoet`. We renamed the it so you
can simultaneously use the old JavaWriter API and our new builder-based APIs in one project.
* Immutable value objects and builders. Instead of streaming the `.java` file from top to bottom,
you now define members in whatever way is convenient.
* We now use our own models for type names.
* Imports are now added automatically.
JavaWriter 2.5.1 *(2014-12-03)*
-------------------------------
* New: `StringLiteral` type which encapsulates the behavior of `stringLiteral`.
* Fix: Use canonical name when emitting a class import.
* Fix: Apply type compression to varargs and array types.
* Fix: Restore binary compatibility with pre-2.5 versions.
JavaWriter 2.5.0 *(2014-04-18)*
-------------------------------
* New: Methods in interfaces will always have no body declaration.
* New: Control flow begin declaration now supports String format arguments.
* Fix: Truncate any generic type when emitting constructors.
* Fix: Do not emit trailing whitespace after '=' at end-of-line.
JavaWriter 2.4.0 *(2014-01-10)*
-------------------------------
* New: Properly indent hanging lines in field initializers.
* New: `emitEnumValue` variant which exposes a boolean of whether the current value is the last.
JavaWriter 2.3.1 *(2013-12-16)*
-------------------------------
* Fix: Properly handle subpackages of `java.lang` in `compressType`.
JavaWriter 2.3.0 *(2013-11-24)*
-------------------------------
* New: Configurable indent level via `setIndent`.
* New: `beginConstructor` method is a semantically clearer alternative for constructors.
* New: `emitEnumValues` method emits a list of values followed by semicolon.
* `emitImports` now supports `Class` arguments directly.
* Previously-deprecated, `int`-based modifier methods have been removed.
JavaWriter 2.2.1 *(2013-10-23)*
-------------------------------
* Fix: Do not emit trailing whitespace for empty Javadoc lines.
JavaWriter 2.2.0 *(2013-09-25)*
-------------------------------
* `setCompressingTypes` controls whether types are emitted as fully-qualified or not.
JavaWriter 2.1.2 *(2013-08-23)*
-------------------------------
* Attempt to keep annotations on a single line.
JavaWriter 2.1.1 *(2013-07-23)*
-------------------------------
* Fix: `stringLiteral` now correctly handles escapes and control characters.
JavaWriter 2.1.0 *(2013-07-15)*
-------------------------------
* New: All methods now take a `Set` of `Modifier`s rather than an `int`. The `int` methods are
now deprecated for removal in JavaPoet 1.0.
* Annotations with a single "value" attribute will now omit the key.
JavaWriter 2.0.1 *(2013-06-17)*
-------------------------------
* Correct casing of `emitSingleLineComment`.
JavaWriter 2.0.0 *(2013-06-06)*
-------------------------------
* Package name is now `com.squareup.javawriter`.
* Support declaring `throws` clause on methods.
JavaWriter 1.0.5 *(2013-05-08)*
-------------------------------
* Fix: Fully qualify types whose simple name matches an import.
JavaWriter 1.0.4 *(2013-03-15)*
-------------------------------
* Fix: Static import emit now properly supports method imports.
JavaWriter 1.0.3 *(2013-02-21)*
-------------------------------
* Add support for emitting static imports.
JavaWriter 1.0.2 *(2013-02-11)*
-------------------------------
* Add `type` API for helping build generic types.
* Minor performance improvements.
JavaWriter 1.0.1 *(2013-02-03)*
-------------------------------
* Expose `compressType` API.
JavaWriter 1.0.0 *(2013-02-01)*
-------------------------------
Initial release.