Created
December 24, 2018 04:47
-
-
Save navi25/8ea8fcecedea6902aa9fe2ca295bf186 to your computer and use it in GitHub Desktop.
A simple abstract processor class to generate Greeting Class based on GreetingGenerator Annotation.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.navendra.codegen | |
import com.google.auto.service.AutoService | |
import io.navendra.annotation.GreetingGenerator | |
import io.navendra.codegen.simplePoet.KotlinClassBuilder | |
import java.io.File | |
import javax.annotation.processing.* | |
import javax.lang.model.SourceVersion | |
import javax.lang.model.element.TypeElement | |
@AutoService(Processor::class) // For registering the service | |
@SupportedSourceVersion(SourceVersion.RELEASE_8) // to support Java 8 | |
@SupportedOptions(FileGenerator.KAPT_KOTLIN_GENERATED_OPTION_NAME) | |
class FileGenerator : AbstractProcessor(){ | |
override fun getSupportedAnnotationTypes(): MutableSet<String> { | |
return mutableSetOf(GreetingGenerator::class.java.name) | |
} | |
override fun getSupportedSourceVersion(): SourceVersion { | |
return SourceVersion.latest() | |
} | |
override fun process(set: MutableSet<out TypeElement>?, roundEnvironment: RoundEnvironment?): Boolean { | |
roundEnvironment?.getElementsAnnotatedWith(GreetingGenerator::class.java) | |
?.forEach { | |
val className = it.simpleName.toString() | |
val pack = processingEnv.elementUtils.getPackageOf(it).toString() | |
generateClass(className, pack) | |
} | |
return true | |
} | |
private fun generateClass(className: String, pack: String){ | |
val fileName = "Generated_$className" | |
val fileContent = KotlinClassBuilder(fileName,pack).getContent() | |
val kaptKotlinGeneratedDir = processingEnv.options[KAPT_KOTLIN_GENERATED_OPTION_NAME] | |
val file = File(kaptKotlinGeneratedDir, "$fileName.kt") | |
file.writeText(fileContent) | |
} | |
companion object { | |
const val KAPT_KOTLIN_GENERATED_OPTION_NAME = "kapt.kotlin.generated" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment