From 7633829702af78745789d88a8fdd35c1a8a69eb0 Mon Sep 17 00:00:00 2001 From: Bastian Wilhelm Date: Mon, 12 Sep 2022 12:50:24 +0200 Subject: [PATCH] Implement prototype for annotation processing --- .../core/converter/ApiOptions.kt | 6 +-- .../core/converter/OptionsConverter.kt | 10 ++--- .../core/writer/java/ApiWriter.kt | 42 ++++--------------- .../core/writer/java/FileHandler.kt | 9 ++++ 4 files changed, 24 insertions(+), 43 deletions(-) create mode 100644 src/main/kotlin/io/openapiprocessor/core/writer/java/FileHandler.kt diff --git a/src/main/kotlin/io/openapiprocessor/core/converter/ApiOptions.kt b/src/main/kotlin/io/openapiprocessor/core/converter/ApiOptions.kt index 2f699264..98b74052 100644 --- a/src/main/kotlin/io/openapiprocessor/core/converter/ApiOptions.kt +++ b/src/main/kotlin/io/openapiprocessor/core/converter/ApiOptions.kt @@ -76,9 +76,9 @@ class ApiOptions { * validate that targetDir is set, throws if not. */ fun validate() { - if (targetDir == null) { - throw InvalidOptionException("targetDir") - } +// if (targetDir == null) { +// throw InvalidOptionException("targetDir") +// } } } diff --git a/src/main/kotlin/io/openapiprocessor/core/converter/OptionsConverter.kt b/src/main/kotlin/io/openapiprocessor/core/converter/OptionsConverter.kt index a20a18d5..536cb760 100644 --- a/src/main/kotlin/io/openapiprocessor/core/converter/OptionsConverter.kt +++ b/src/main/kotlin/io/openapiprocessor/core/converter/OptionsConverter.kt @@ -24,11 +24,11 @@ class OptionsConverter(private val checkObsoleteProcessorOptions: Boolean = fals checkDeprecatedMapOptions(processorOptions, options) - if (processorOptions.containsKey("targetDir")) { - options.targetDir = processorOptions["targetDir"].toString() - } else { - log.warn("required option 'targetDir' is missing!") - } +// if (processorOptions.containsKey("targetDir")) { +// options.targetDir = processorOptions["targetDir"].toString() +// } else { +// log.warn("required option 'targetDir' is missing!") +// } if (processorOptions.containsKey("mapping")) { readMapping(processorOptions["mapping"].toString(), options) diff --git a/src/main/kotlin/io/openapiprocessor/core/writer/java/ApiWriter.kt b/src/main/kotlin/io/openapiprocessor/core/writer/java/ApiWriter.kt index 7a7bd8a5..4c5b689f 100644 --- a/src/main/kotlin/io/openapiprocessor/core/writer/java/ApiWriter.kt +++ b/src/main/kotlin/io/openapiprocessor/core/writer/java/ApiWriter.kt @@ -31,13 +31,11 @@ class ApiWriter( private val interfaceWriter: InterfaceWriter, private val dataTypeWriter: DataTypeWriter, private val enumWriter: StringEnumWriter, - private val interfaceDataTypeWriter: InterfaceDataTypeWriter + private val interfaceDataTypeWriter: InterfaceDataTypeWriter, + private val fileHandler: FileHandler ) { private var log: Logger = LoggerFactory.getLogger(this.javaClass.name) - private lateinit var apiFolder: Path - private lateinit var modelFolder: Path - private var formatter: Formatter? = null init { @@ -45,7 +43,7 @@ class ApiWriter( } fun write(api: Api) { - createTargetFolders() + fileHandler.createTargetFolders() writeInterfaces(api) writeObjectDataTypes(api) writeInterfaceDataTypes(api) @@ -54,8 +52,7 @@ class ApiWriter( private fun writeInterfaces(api: Api) { api.forEachInterface { - val target = apiFolder.resolve("${it.getInterfaceName()}.java") - val writer = BufferedWriter(PathWriter(target)) + val writer = fileHandler.createApiWriter(it.getPackageName(), it.getInterfaceName()) writeInterface(writer, it) writer.close() } @@ -63,8 +60,7 @@ class ApiWriter( private fun writeObjectDataTypes(api: Api) { api.forEachModelDataType { - val target = modelFolder.resolve ("${it.getTypeName()}.java") - val writer = BufferedWriter(PathWriter(target)) + val writer = fileHandler.createModelWriter(it.getPackageName(), it.getTypeName()) writeDataType(writer, it) writer.close() } @@ -72,8 +68,7 @@ class ApiWriter( private fun writeInterfaceDataTypes(api: Api) { api.forEachInterfaceDataType() { - val target = modelFolder.resolve ("${it.getTypeName()}.java") - val writer = BufferedWriter(PathWriter(target)) + val writer = fileHandler.createModelWriter(it.getPackageName(), it.getTypeName()) writeDataType(writer, it) writer.close() } @@ -81,8 +76,7 @@ class ApiWriter( private fun writeEnumDataTypes(api: Api) { api.forEachEnumDataType { - val target = modelFolder.resolve("${it.getTypeName()}.java") - val writer = BufferedWriter(PathWriter(target)) + val writer = fileHandler.createModelWriter(it.getPackageName(), it.getTypeName()) writeEnumDataType(writer, it) writer.close() } @@ -134,28 +128,6 @@ class ApiWriter( .toString() } - private fun createTargetFolders() { - val rootPkg = options.packageName.replace(".", "/") - val apiPkg = listOf(rootPkg, "api").joinToString("/") - val modelPkg = listOf(rootPkg, "model").joinToString("/") - log.debug ("creating target folders: {}", rootPkg) - - apiFolder = createTargetPackage(apiPkg) - log.debug ("created target folder: {}", apiFolder.toAbsolutePath ().toString ()) - - modelFolder = createTargetPackage(modelPkg) - log.debug ("created target folder: {}", modelFolder.toAbsolutePath ().toString ()) - } - - private fun createTargetPackage(apiPkg: String): Path { - val root = options.targetDir - val pkg = listOf(root, apiPkg).joinToString("/") - - val target = Paths.get (toURI(pkg)) - Files.createDirectories(target) - return target - } - private fun initFormatter() { if (options.formatCode) { formatter = Formatter( diff --git a/src/main/kotlin/io/openapiprocessor/core/writer/java/FileHandler.kt b/src/main/kotlin/io/openapiprocessor/core/writer/java/FileHandler.kt new file mode 100644 index 00000000..d81d2450 --- /dev/null +++ b/src/main/kotlin/io/openapiprocessor/core/writer/java/FileHandler.kt @@ -0,0 +1,9 @@ +package io.openapiprocessor.core.writer.java + +import java.io.Writer + +interface FileHandler { + fun createApiWriter(packageName: String, className: String): Writer + fun createModelWriter(packageName: String, className: String): Writer + fun createTargetFolders() +} \ No newline at end of file