Kapt: add some JeElement tests

(cherry picked from commit 948a4b6)
This commit is contained in:
Yan Zhulanow
2016-08-02 22:47:18 +03:00
committed by Yan Zhulanow
parent 0fc92c784b
commit 927280f7ce
51 changed files with 1154 additions and 14 deletions
@@ -35,10 +35,21 @@ import java.net.URLClassLoader
import java.util.*
import javax.annotation.processing.Processor
class AnnotationProcessingExtension(
class ClasspathBasedAnnotationProcessingExtension(
val annotationProcessingClasspath: List<String>,
generatedSourcesOutputDir: File,
classesOutputDir: File,
javaSourceRoots: List<File>
) : AbstractAnnotationProcessingExtension(generatedSourcesOutputDir, classesOutputDir, javaSourceRoots) {
override fun loadAnnotationProcessors(): List<Processor> {
val classLoader = URLClassLoader(annotationProcessingClasspath.map { File(it).toURI().toURL() }.toTypedArray())
return ServiceLoader.load(Processor::class.java, classLoader).toList()
}
}
abstract class AbstractAnnotationProcessingExtension(
val generatedSourcesOutputDir: File,
val classesOutputDir: File,
val annotationProcessingClasspath: List<String>,
val javaSourceRoots: List<File>
) : AnalysisCompletedHandlerExtension {
private var annotationProcessingComplete = false
@@ -53,7 +64,7 @@ class AnnotationProcessingExtension(
return null
}
val processors = loadAnnotationProcessors(annotationProcessingClasspath)
val processors = loadAnnotationProcessors()
if (processors.isEmpty()) return null
val analysisContext = AnalysisContext(hashMapOf())
@@ -114,11 +125,8 @@ class AnnotationProcessingExtension(
annotationProcessingComplete = true
return AnalysisResult.RetryWithAdditionalJavaRoots(bindingContext, module, listOf(generatedSourcesOutputDir))
}
private fun loadAnnotationProcessors(classpath: List<String>): List<Processor> {
val classLoader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray())
return ServiceLoader.load(Processor::class.java, classLoader).toList()
}
protected abstract fun loadAnnotationProcessors(): List<Processor>
}
internal class AnalysisContext(annotationsMap: MutableMap<String, MutableList<PsiModifierListOwner>>) {
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.annotation.processing
import com.intellij.mock.MockProject
import org.jetbrains.kotlin.annotation.AnnotationProcessingExtension
import org.jetbrains.kotlin.annotation.ClasspathBasedAnnotationProcessingExtension
import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
@@ -88,7 +88,8 @@ class AnnotationProcessingComponentRegistrar : ComponentRegistrar {
val classesOutputDir = File(configuration.get(AnnotationProcessingConfigurationKeys.CLASS_FILES_OUTPUT_DIR)
?: configuration[JVMConfigurationKeys.MODULES]!!.first().getOutputDirectory())
val annotationProcessingExtension = AnnotationProcessingExtension(generatedOutputDirFile, classesOutputDir, classpath, javaRoots)
val annotationProcessingExtension = ClasspathBasedAnnotationProcessingExtension(
classpath, generatedOutputDirFile, classesOutputDir, javaRoots)
AnalysisCompletedHandlerExtension.registerExtension(project, annotationProcessingExtension)
}
}