All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uidsonic.fluid-json-annotation-processor.0.9.15.source-code.AnnotationProcessor.kt Maven / Gradle / Ivy

package com.github.fluidsonic.fluid.json.annotationprocessor

import com.google.auto.service.AutoService
import java.io.File
import javax.annotation.processing.AbstractProcessor
import javax.annotation.processing.Processor
import javax.annotation.processing.RoundEnvironment
import javax.lang.model.SourceVersion
import javax.lang.model.element.TypeElement
import javax.tools.Diagnostic


@AutoService(Processor::class)
class AnnotationProcessor : AbstractProcessor(), ErrorLogger, TypeResolver {

	private val collectionPhase = CollectionPhase(
		errorLogger = this,
		typeResolver = this
	)


	override fun getSupportedAnnotationTypes(): Set =
		collectionPhase.annotationClasses.mapTo(mutableSetOf()) { it.java.canonicalName }


	override fun getSupportedSourceVersion(): SourceVersion =
		SourceVersion.latestSupported()


	override fun logError(message: String) {
		processingEnv.messager.printMessage(Diagnostic.Kind.ERROR, message)
	}


	override fun process(annotations: Set, roundEnvironment: RoundEnvironment): Boolean {
		collectionPhase.collect(roundEnvironment = roundEnvironment)

		if (roundEnvironment.processingOver()) {
			val processingResult = ProcessingPhase(
				collectionResult = collectionPhase.finish(),
				errorLogger = this
			).process()

			GenerationPhase(
				outputDirectory = File(processingEnv.options[Options.generatedKotlinFilePath]),
				processingResult = processingResult
			).generate()
		}

		return true
	}


	override fun resolveType(qualifiedName: String): TypeElement? =
		processingEnv.elementUtils.getTypeElement(qualifiedName)


	private object Options {

		const val generatedKotlinFilePath = "kapt.kotlin.generated"
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy