diff --git a/.gitignore b/.gitignore index f8506e43..91fa34ba 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ .project .settings bin -build \ No newline at end of file +build +target \ No newline at end of file diff --git a/README.md b/README.md index 5cfd9e24..328378e9 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ ## Goal The primary goal of the project is to make it easy to document RESTful services by -combining content that's been hand-written using [AsciiDoctor][1] with auto-generated -examples produced with the [Spring MVC Test][2] framework. The result is intended to -be an easy-to-read user guide, akin to [GitHub's API documentation][3] for example, -rather than the fully automated, dense API documentation produced by tools like -[Swagger][4]. +combining content that's been hand-written with auto-generated examples produced +with the [Spring MVC Test][2] framework. The result is intended to be an easy-to-read +user guide, akin to [GitHub's API documentation][3] for example, rather than the fully +automated, dense API documentation produced by tools like [Swagger][4]. For a broader introduction see the [Documenting RESTful APIs][9] presentation. @@ -18,59 +17,171 @@ $ ./gradlew build install ``` Once the main project's built, take a look at one of the two sample projects. Both -projects implement a RESTful service for creating tagged notes but have different -implementations: `rest-notes-spring-hateoas` is implemented using Spring MVC and Spring -Hateoas while `rest-notes-spring-data-rest` is implemented using Spring Data REST. - -To see the sample project's documentation move into its directory and use Gradle to -build the documentation. For example: - -``` -$ cd rest-notes-spring-data-rest -$ ./gradlew restDocumentation -``` - -Once the build is complete, open one of the following: - -- build/asciidoc/getting-started-guide.html -- build/asciidoc/api-guide.html +projects implement a RESTful service for creating tagged notes and illustrate the use +of Maven or Gradle. The two projects have different implementations: +`rest-notes-spring-hateoas` is implemented using Spring MVC and Spring Hateoas where as +`rest-notes-spring-data-rest` is implemented using Spring Data REST. Every example request and response in the documentation is auto-generated using custom Spring MVC Test result handlers. This ensures that the examples match the service that they are documenting. -## How does it work +### Building a sample with Gradle + +To see the sample project's documentation, move into its directory and use Gradle to +build it. For example: + +``` +$ cd rest-notes-spring-data-rest +$ ./gradlew asciidoctor +``` + +Once the build is complete, open one of the following: + +- build/asciidoc/html5/getting-started-guide.html +- build/asciidoc/html5/api-guide.html + +### Building a sample with Maven + +To see the sample project's documentation, move into its directory and use Maven to build +it. For example: + +``` +$ cd rest-notes-spring-hateoas +$ mvn package +``` + +Once the build is complete, open one of the following: + +- target/generated-docs/getting-started-guide.html +- target/generated-docs/api-guide.html + +## How it works There are three main pieces involved in using this project to document your RESTful service. -### Gradle plugin +### Build configuration -A Gradle plugin is provided. This plugin builds on top of the [AsciiDoctor plugin][5] -and is responsible for producing the documentation during the build. Assuming you've -built and installed the project as described in the quick start, the plugin as -configured in your project as follows: +Both Maven and Gradle are supported. + +#### Gradle configuration + +You can look at either samples' `build.gradle` file to see the required configuration. +The key parts are described below. + +Configure the AsciiDoctor plugin: ```groovy -buildscript { - repositories { - mavenLocal() - jcenter() - } - dependencies { - classpath 'org.springframework.restdocs:spring-restdocs-gradle-plugin:0.1.0.BUILD-SNAPSHOT' - } +plugins { + id "org.asciidoctor.convert" version "1.5.2" +} +``` + +Add a dependency on `spring-restdocs-core` in the `testCompile` configuration: + +```groovy +dependencies { + testCompile 'org.springframework.restdocs:spring-restdocs-core:0.1.0.BUILD-SNAPSHOT' +} +``` + +Configure a property to control the location of the generated snippets: + +```groovy +ext { + generatedDocumentation = file('build/generated-snippets') +} +``` + +Configure the `test` task with a system property to control the location to which the +snippets are generated: + +test { + systemProperty 'org.springframework.restdocs.outputDir', generatedDocumentation + outputs.dir generatedDocumentation } -apply plugin: 'org.springframework.restdocs' +Configure the `asciidoctor` task. The `generated` attribute is used to provide easy +access to the generated snippets: + +```groovy +asciidoctor { + attributes 'generated': generatedDocumentation + inputs.dir generatedDocumentation + dependsOn test +} + +``` + +#### Maven configuration + +You can look at either samples' `pom.xml` file to see the required configuration. The key +parts are described below: + +Add a dependency on `spring-restdocs-core` in the `test` scope: + +```xml + + org.springframework.restdocs + spring-restdocs-core + 0.1.0.BUILD-SNAPSHOT + test + +``` + +Configure the SureFire plugin with a system property to control the location to which +the snippets are generated: + +```xml + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Documentation.java + + + ${project.build.directory}/generated-snippets + + + +``` + +Configure the AsciiDoctor plugin. The `generated` attribute is used to provide easy +access to the generated snippets: + +```xml + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.2 + + + generate-docs + package + + process-asciidoc + + + html + book + + ${project.build.directory}/generated-snippets + + + + + + ``` ### Programatically generated snippets Spring's MVC Test framework is used to make requests to the service that you are -documenting. Any such request wrapped in a call to `RestDocumentation.document` will -produce individual documentation snippets for its request and its response as well as -a snippet that contains both its request and its response. +documenting. A custom `ResultHandler` is used to produce individual documentation +snippets for its request and its response as well as a snippet that contains both its +request and its response. You can configure the scheme, host, and port of any URIs that appear in the documentation snippets: @@ -105,31 +216,50 @@ public void getIndex() { The code above will perform a `GET` request against the index (`/`) of the service with an accept header indicating that a JSON response is required. It will write the cURL command for the request and the resulting response to files in a directory named -`index` in the project's `build/generated-documentation/` directory. Three files will +`index` in the project's `build/generated-snippets/` directory. Three files will be written: - `index/request.asciidoc` - `index/response.asciidoc` - `index/request-response.asciidoc` -### Documentation written in Asciidoc +### Hand-written documentation Producing high-quality, easily readable documentation is difficult and the process is only made harder by trying to write the documentation in an ill-suited format such as Java annotations. This project addresses this by allowing you to write the bulk of -your documentation's text as an Asciidoc document. These files should be placed in -`src/documentation/asciidoc`. +your documentation's text using [Asciidoctor][1]. The default location for source files +depends on whether you're using Maven or Gradle. By default, AsciiDoctor's Maven plugin +looks in `src/main/asciidoc`, whereas the AsciiDoctor Gradle plugin looks in +`src/docs/asciidoc` To include the programmatically generated snippets in your documentation, you use -Asciidoc's [`include` macro][6]. The Gradle plugin provides an attribute, `generated`, -that you can use to reference the directory to which the snippets are written. For -example, to include both the request and response snippets described above: +Asciidoc's [`include` macro][6]. The Maven and Gradle configuration described above +configures an attribute, `generated`, that you can use to reference the directory to +which the snippets are written. For example, to include both the request and response +snippets described above: ``` include::{generated}/index/request.asciidoc[] include::{generated}/index/response.asciidoc[] ``` +## Generating snippets in your IDE + +As described above, a system property is used to configure the location to which the +generated snippets are written. When running documentation tests in your IDE this system +property will not have been set. If the property is not set the snippets will be written +to standard out. + +If you'd prefer that your IDE writes the snippets to disk you can use a file +in `src/test/resources` named `documentation.properties` to configure the property. +For example: + +```properties +org.springframework.restdocs.outputDir: target/generated-snippets + +``` + ## Learning more To learn more, take a look at the accompanying sample projects: diff --git a/build.gradle b/build.gradle index 55117d1a..e61cbffe 100644 --- a/build.gradle +++ b/build.gradle @@ -20,15 +20,6 @@ project(':spring-restdocs-core') { } } -project(':spring-restdocs-gradle-plugin') { - apply plugin: 'groovy' - - dependencies { - compile gradleApi() - runtime 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.0' - } -} - subprojects { repositories { jcenter() diff --git a/rest-notes-spring-data-rest/build.gradle b/rest-notes-spring-data-rest/build.gradle index 95b693ae..386a81d2 100644 --- a/rest-notes-spring-data-rest/build.gradle +++ b/rest-notes-spring-data-rest/build.gradle @@ -1,26 +1,23 @@ buildscript { repositories { - mavenLocal() - maven { - url 'https://repo.spring.io/libs-milestone' - } + mavenCentral() } dependencies { - classpath 'org.springframework.restdocs:spring-restdocs-gradle-plugin:0.1.0.BUILD-SNAPSHOT' - classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.2.0.M2' + classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE' } } +plugins { + id "org.asciidoctor.convert" version "1.5.2" +} + apply plugin: 'java' apply plugin: 'spring-boot' apply plugin: 'eclipse' -apply plugin: 'org.springframework.restdocs' repositories { mavenLocal() - maven { - url 'https://repo.spring.io/libs-milestone' - } + mavenCentral() } group = 'com.example' @@ -31,12 +28,28 @@ dependencies { runtime 'com.h2database:h2' - documentationCompile 'com.jayway.jsonpath:json-path' - documentationCompile 'org.springframework.boot:spring-boot-starter-test' - documentationCompile 'org.springframework.restdocs:spring-restdocs-core:0.1.0.BUILD-SNAPSHOT' + testCompile 'com.jayway.jsonpath:json-path' + testCompile 'org.springframework.boot:spring-boot-starter-test' + testCompile 'org.springframework.restdocs:spring-restdocs-core:0.1.0.BUILD-SNAPSHOT' } +ext { + generatedDocumentation = file('build/generated-snippets') +} + +test { + systemProperty 'org.springframework.restdocs.outputDir', generatedDocumentation + outputs.dir generatedDocumentation +} + +asciidoctor { + sourceDir 'src/main/asciidoc' // Align with Maven's default location + attributes 'generated': generatedDocumentation + inputs.dir generatedDocumentation + dependsOn test +} + task wrapper(type: Wrapper) { gradleVersion = '2.1' } diff --git a/rest-notes-spring-data-rest/pom.xml b/rest-notes-spring-data-rest/pom.xml new file mode 100644 index 00000000..10a33975 --- /dev/null +++ b/rest-notes-spring-data-rest/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + com.example + rest-notes-spring-hateoas + 0.0.1-SNAPSHOT + jar + + + org.springframework.boot + spring-boot-starter-parent + 1.2.1.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-data-rest + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.h2database + h2 + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + com.jayway.jsonpath + json-path + test + + + org.springframework.restdocs + spring-restdocs-core + 0.1.0.BUILD-SNAPSHOT + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Documentation.java + + + ${project.build.directory}/generated-snippets + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.2 + + + generate-docs + package + + process-asciidoc + + + html + book + + ${project.build.directory}/generated-snippets + + + + + + + + + \ No newline at end of file diff --git a/rest-notes-spring-data-rest/src/documentation/resources/documentation.properties b/rest-notes-spring-data-rest/src/documentation/resources/documentation.properties deleted file mode 100644 index 901c0049..00000000 --- a/rest-notes-spring-data-rest/src/documentation/resources/documentation.properties +++ /dev/null @@ -1 +0,0 @@ -org.springframework.restdocs.outputDir = build/generated-documentation \ No newline at end of file diff --git a/rest-notes-spring-data-rest/src/documentation/asciidoc/api-guide.asciidoc b/rest-notes-spring-data-rest/src/main/asciidoc/api-guide.asciidoc similarity index 100% rename from rest-notes-spring-data-rest/src/documentation/asciidoc/api-guide.asciidoc rename to rest-notes-spring-data-rest/src/main/asciidoc/api-guide.asciidoc diff --git a/rest-notes-spring-data-rest/src/documentation/asciidoc/getting-started-guide.asciidoc b/rest-notes-spring-data-rest/src/main/asciidoc/getting-started-guide.asciidoc similarity index 100% rename from rest-notes-spring-data-rest/src/documentation/asciidoc/getting-started-guide.asciidoc rename to rest-notes-spring-data-rest/src/main/asciidoc/getting-started-guide.asciidoc diff --git a/rest-notes-spring-data-rest/src/documentation/java/com/example/notes/ApiDocumentation.java b/rest-notes-spring-data-rest/src/test/java/com/example/notes/ApiDocumentation.java similarity index 100% rename from rest-notes-spring-data-rest/src/documentation/java/com/example/notes/ApiDocumentation.java rename to rest-notes-spring-data-rest/src/test/java/com/example/notes/ApiDocumentation.java diff --git a/rest-notes-spring-data-rest/src/documentation/java/com/example/notes/GettingStartedDocumentation.java b/rest-notes-spring-data-rest/src/test/java/com/example/notes/GettingStartedDocumentation.java similarity index 100% rename from rest-notes-spring-data-rest/src/documentation/java/com/example/notes/GettingStartedDocumentation.java rename to rest-notes-spring-data-rest/src/test/java/com/example/notes/GettingStartedDocumentation.java diff --git a/rest-notes-spring-hateoas/build.gradle b/rest-notes-spring-hateoas/build.gradle index 61ccd7d4..30b85f68 100644 --- a/rest-notes-spring-hateoas/build.gradle +++ b/rest-notes-spring-hateoas/build.gradle @@ -1,26 +1,23 @@ buildscript { repositories { - mavenLocal() - maven { - url "https://repo.spring.io/libs-milestone" - } + mavenCentral() } dependencies { - classpath 'org.springframework.restdocs:spring-restdocs-gradle-plugin:0.1.0.BUILD-SNAPSHOT' - classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.2.0.M2' + classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE' } } +plugins { + id "org.asciidoctor.convert" version "1.5.2" +} + apply plugin: 'java' apply plugin: 'spring-boot' apply plugin: 'eclipse' -apply plugin: 'org.springframework.restdocs' repositories { mavenLocal() - maven { - url "https://repo.spring.io/libs-milestone" - } + mavenCentral() } group = 'com.example' @@ -34,9 +31,25 @@ dependencies { runtime 'org.springframework.plugin:spring-plugin-core:1.1.0.RELEASE' runtime 'org.atteo:evo-inflector:1.2' - documentationCompile 'com.jayway.jsonpath:json-path' - documentationCompile 'org.springframework.boot:spring-boot-starter-test' - documentationCompile 'org.springframework.restdocs:spring-restdocs-core:0.1.0.BUILD-SNAPSHOT' + testCompile 'com.jayway.jsonpath:json-path' + testCompile 'org.springframework.boot:spring-boot-starter-test' + testCompile 'org.springframework.restdocs:spring-restdocs-core:0.1.0.BUILD-SNAPSHOT' +} + +ext { + generatedDocumentation = file('build/generated-snippets') +} + +test { + systemProperty 'org.springframework.restdocs.outputDir', generatedDocumentation + outputs.dir generatedDocumentation +} + +asciidoctor { + sourceDir 'src/main/asciidoc' // Align with Maven's default location + attributes 'generated': generatedDocumentation + inputs.dir generatedDocumentation + dependsOn test } task wrapper(type: Wrapper) { diff --git a/rest-notes-spring-hateoas/pom.xml b/rest-notes-spring-hateoas/pom.xml new file mode 100644 index 00000000..3ed34f89 --- /dev/null +++ b/rest-notes-spring-hateoas/pom.xml @@ -0,0 +1,115 @@ + + + 4.0.0 + + com.example + rest-notes-spring-hateoas + 0.0.1-SNAPSHOT + jar + + + org.springframework.boot + spring-boot-starter-parent + 1.2.1.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.hateoas + spring-hateoas + + + + org.springframework.plugin + spring-plugin-core + 1.1.0.RELEASE + runtime + + + com.h2database + h2 + runtime + + + org.atteo + evo-inflector + 1.2 + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + com.jayway.jsonpath + json-path + test + + + org.springframework.restdocs + spring-restdocs-core + 0.1.0.BUILD-SNAPSHOT + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Documentation.java + + + ${project.build.directory}/generated-snippets + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.2 + + + generate-docs + package + + process-asciidoc + + + html + book + + ${project.build.directory}/generated-snippets + + + + + + + + + \ No newline at end of file diff --git a/rest-notes-spring-hateoas/src/documentation/resources/documentation.properties b/rest-notes-spring-hateoas/src/documentation/resources/documentation.properties deleted file mode 100644 index 901c0049..00000000 --- a/rest-notes-spring-hateoas/src/documentation/resources/documentation.properties +++ /dev/null @@ -1 +0,0 @@ -org.springframework.restdocs.outputDir = build/generated-documentation \ No newline at end of file diff --git a/rest-notes-spring-hateoas/src/documentation/asciidoc/api-guide.asciidoc b/rest-notes-spring-hateoas/src/main/asciidoc/api-guide.asciidoc similarity index 100% rename from rest-notes-spring-hateoas/src/documentation/asciidoc/api-guide.asciidoc rename to rest-notes-spring-hateoas/src/main/asciidoc/api-guide.asciidoc diff --git a/rest-notes-spring-hateoas/src/documentation/asciidoc/getting-started-guide.asciidoc b/rest-notes-spring-hateoas/src/main/asciidoc/getting-started-guide.asciidoc similarity index 100% rename from rest-notes-spring-hateoas/src/documentation/asciidoc/getting-started-guide.asciidoc rename to rest-notes-spring-hateoas/src/main/asciidoc/getting-started-guide.asciidoc diff --git a/rest-notes-spring-hateoas/src/documentation/java/com/example/notes/ApiDocumentation.java b/rest-notes-spring-hateoas/src/test/java/com/example/notes/ApiDocumentation.java similarity index 100% rename from rest-notes-spring-hateoas/src/documentation/java/com/example/notes/ApiDocumentation.java rename to rest-notes-spring-hateoas/src/test/java/com/example/notes/ApiDocumentation.java diff --git a/rest-notes-spring-hateoas/src/documentation/java/com/example/notes/GettingStartedDocumentation.java b/rest-notes-spring-hateoas/src/test/java/com/example/notes/GettingStartedDocumentation.java similarity index 98% rename from rest-notes-spring-hateoas/src/documentation/java/com/example/notes/GettingStartedDocumentation.java rename to rest-notes-spring-hateoas/src/test/java/com/example/notes/GettingStartedDocumentation.java index 9c57ede9..a37e573e 100644 --- a/rest-notes-spring-hateoas/src/documentation/java/com/example/notes/GettingStartedDocumentation.java +++ b/rest-notes-spring-hateoas/src/test/java/com/example/notes/GettingStartedDocumentation.java @@ -23,6 +23,7 @@ import static org.springframework.restdocs.core.RestDocumentation.document; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -172,6 +173,7 @@ public class GettingStartedDocumentation { .andReturn(), "note-tags"); this.mockMvc.perform(get(tagsLocation)) .andExpect(status().isOk()) + .andDo(print()) .andExpect(jsonPath("_embedded.tags", hasSize(1))) .andDo(document("get-tags")); } diff --git a/settings.gradle b/settings.gradle index 5b586ab1..c74ec6c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,3 @@ rootProject.name = 'spring-restdocs' -include 'spring-restdocs-core' -include 'spring-restdocs-gradle-plugin' \ No newline at end of file +include 'spring-restdocs-core' \ No newline at end of file diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/DocumentationProperties.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/DocumentationProperties.java index ba8c5d18..8ecc84b5 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/DocumentationProperties.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/DocumentationProperties.java @@ -21,13 +21,13 @@ import java.io.IOException; import java.io.InputStream; import java.util.Properties; +import org.springframework.util.StringUtils; + class DocumentationProperties { private final Properties properties = new Properties(); DocumentationProperties() { - this.properties.putAll(System.getProperties()); - InputStream stream = getClass().getClassLoader().getResourceAsStream( "documentation.properties"); if (stream != null) { @@ -47,11 +47,14 @@ class DocumentationProperties { } } } + this.properties.putAll(System.getProperties()); } File getOutputDir() { - return new File(this.properties.getProperty( - "org.springframework.restdocs.outputDir", "generated-documentation")) - .getAbsoluteFile(); + String outputDir = this.properties.getProperty("org.springframework.restdocs.outputDir"); + if (StringUtils.hasText(outputDir)) { + return new File(outputDir).getAbsoluteFile(); + } + return null; } } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/RestDocumentationResultHandlers.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/RestDocumentationResultHandlers.java index 2745029a..cd1d7c7c 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/RestDocumentationResultHandlers.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/core/RestDocumentationResultHandlers.java @@ -205,14 +205,21 @@ public abstract class RestDocumentationResultHandlers { if (!outputFile.isAbsolute()) { outputFile = makeAbsolute(outputFile); } - outputFile.getParentFile().mkdirs(); - - return new PrintStream(new FileOutputStream(outputFile)); + + if (outputFile != null) { + outputFile.getParentFile().mkdirs(); + return new PrintStream(new FileOutputStream(outputFile)); + } + + return System.out; } private static File makeAbsolute(File outputFile) { - return new File(new DocumentationProperties().getOutputDir(), - outputFile.getPath()); + File outputDir = new DocumentationProperties().getOutputDir(); + if (outputDir != null) { + return new File(outputDir, outputFile.getPath()); + } + return null; } } diff --git a/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.core.prefs b/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a92f7ab8..00000000 --- a/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,295 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=false -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=false -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=90 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=8 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true -org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=90 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=false -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.groovy.core.prefs b/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.groovy.core.prefs deleted file mode 100644 index a7f72ec6..00000000 --- a/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.groovy.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -groovy.compiler.level=23 diff --git a/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.ui.prefs b/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 0fc7e2d2..00000000 --- a/spring-restdocs-gradle-plugin/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,62 +0,0 @@ -cleanup.add_default_serial_version_id=true -cleanup.add_generated_serial_version_id=false -cleanup.add_missing_annotations=true -cleanup.add_missing_deprecated_annotations=true -cleanup.add_missing_methods=false -cleanup.add_missing_nls_tags=false -cleanup.add_missing_override_annotations=true -cleanup.add_missing_override_annotations_interface_methods=true -cleanup.add_serial_version_id=false -cleanup.always_use_blocks=true -cleanup.always_use_parentheses_in_expressions=false -cleanup.always_use_this_for_non_static_field_access=true -cleanup.always_use_this_for_non_static_method_access=false -cleanup.convert_functional_interfaces=false -cleanup.convert_to_enhanced_for_loop=false -cleanup.correct_indentation=false -cleanup.format_source_code=true -cleanup.format_source_code_changes_only=false -cleanup.insert_inferred_type_arguments=false -cleanup.make_local_variable_final=false -cleanup.make_parameters_final=false -cleanup.make_private_fields_final=false -cleanup.make_type_abstract_if_missing_method=false -cleanup.make_variable_declarations_final=false -cleanup.never_use_blocks=false -cleanup.never_use_parentheses_in_expressions=true -cleanup.organize_imports=true -cleanup.qualify_static_field_accesses_with_declaring_class=false -cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -cleanup.qualify_static_member_accesses_with_declaring_class=true -cleanup.qualify_static_method_accesses_with_declaring_class=false -cleanup.remove_private_constructors=true -cleanup.remove_redundant_type_arguments=true -cleanup.remove_trailing_whitespaces=true -cleanup.remove_trailing_whitespaces_all=true -cleanup.remove_trailing_whitespaces_ignore_empty=false -cleanup.remove_unnecessary_casts=true -cleanup.remove_unnecessary_nls_tags=false -cleanup.remove_unused_imports=true -cleanup.remove_unused_local_variables=false -cleanup.remove_unused_private_fields=true -cleanup.remove_unused_private_members=false -cleanup.remove_unused_private_methods=true -cleanup.remove_unused_private_types=true -cleanup.sort_members=false -cleanup.sort_members_all=false -cleanup.use_anonymous_class_creation=false -cleanup.use_blocks=true -cleanup.use_blocks_only_for_return_and_throw=false -cleanup.use_lambda=true -cleanup.use_parentheses_in_expressions=false -cleanup.use_this_for_non_static_field_access=false -cleanup.use_this_for_non_static_field_access_only_if_necessary=false -cleanup.use_this_for_non_static_method_access=false -cleanup.use_this_for_non_static_method_access_only_if_necessary=true -cleanup.use_type_arguments=false -cleanup_profile=_Spring Rest Docs Cleanup Conventions -cleanup_settings_version=2 -eclipse.preferences.version=1 -formatter_profile=_Spring Rest Docs Java Conventions -formatter_settings_version=12 diff --git a/spring-restdocs-gradle-plugin/src/main/groovy/org/springframework/restdocs/gradle/RestDocumentationPlugin.groovy b/spring-restdocs-gradle-plugin/src/main/groovy/org/springframework/restdocs/gradle/RestDocumentationPlugin.groovy deleted file mode 100644 index abfdd8c2..00000000 --- a/spring-restdocs-gradle-plugin/src/main/groovy/org/springframework/restdocs/gradle/RestDocumentationPlugin.groovy +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.restdocs.gradle - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.plugins.ide.eclipse.GenerateEclipseClasspath - - -class RestDocumentationPlugin implements Plugin { - - void apply(Project project) { - project.sourceSets { - documentation { - java { srcDir 'src/documentation/java' } - - compileClasspath = project.files(project.sourceSets.main.output, - project.configurations.documentationCompile) - runtimeClasspath = project.files(project.sourceSets.main.output, - project.sourceSets.documentation.output, - project.configurations.documentationRuntime) - } - } - - project.configurations.documentationCompile.extendsFrom project.configurations.compile - - project.configurations.documentationRuntime.extendsFrom( - project.configurations.runtime, project.configurations.documentationCompile) - - project.tasks.withType(GenerateEclipseClasspath) { - it.classpath.sourceSets += project.sourceSets.documentation - it.classpath.plusConfigurations += [ - project.configurations.documentationRuntime - ] - } - - def restDocumentationSnippets = project.tasks.create('restDocumentationSnippets', RestDocumentationSnippets) - - - project.apply plugin: 'org.asciidoctor.gradle.asciidoctor' - - project.asciidoctor { - dependsOn restDocumentationSnippets - group '' - sourceDir = project.file 'src/documentation/asciidoc' - options = [ - attributes: [ - generated: new File("$project.buildDir/generated-documentation").toURI().toURL(), - 'allow-uri-read': true - ] - ] - inputs.files restDocumentationSnippets.outputs.files - } - - project.task('restDocumentation') { - dependsOn ':asciidoctor' - description 'Generates RESTful service documentation using AsciiDoctor' - group 'Documentation' - } - } -} \ No newline at end of file diff --git a/spring-restdocs-gradle-plugin/src/main/groovy/org/springframework/restdocs/gradle/RestDocumentationSnippets.groovy b/spring-restdocs-gradle-plugin/src/main/groovy/org/springframework/restdocs/gradle/RestDocumentationSnippets.groovy deleted file mode 100644 index 416d35bd..00000000 --- a/spring-restdocs-gradle-plugin/src/main/groovy/org/springframework/restdocs/gradle/RestDocumentationSnippets.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.restdocs.gradle; - -import org.gradle.api.tasks.testing.Test - -public class RestDocumentationSnippets extends Test { - - RestDocumentationSnippets() { - description 'Generates snippets for inclusion in the documentation' - inputs.source project.sourceSets.documentation.java.srcDirs - testClassesDir = project.sourceSets.documentation.output.classesDir - classpath = project.sourceSets.documentation.runtimeClasspath - systemProperty 'org.springframework.restdocs.outputDir', new File(project.buildDir, 'generated-documentation') - } -} diff --git a/spring-restdocs-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.restdocs.properties b/spring-restdocs-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.restdocs.properties deleted file mode 100644 index 30ca3bcf..00000000 --- a/spring-restdocs-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.restdocs.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=org.springframework.restdocs.gradle.RestDocumentationPlugin \ No newline at end of file