Kapt3: Separate classpaths for compilation and for annotation processing
This commit is contained in:
committed by
Yan Zhulanow
parent
3c77242da2
commit
ada8bb63a4
@@ -40,7 +40,8 @@ import javax.annotation.processing.Processor
|
||||
import com.sun.tools.javac.util.List as JavacList
|
||||
|
||||
class ClasspathBasedKapt3Extension(
|
||||
val annotationProcessingClasspath: List<File>,
|
||||
compileClasspath: List<File>,
|
||||
annotationProcessingClasspath: List<File>,
|
||||
javaSourceRoots: List<File>,
|
||||
sourcesOutputDir: File,
|
||||
classFilesOutputDir: File,
|
||||
@@ -50,7 +51,7 @@ class ClasspathBasedKapt3Extension(
|
||||
val useLightAnalysis: Boolean,
|
||||
pluginInitializedTime: Long,
|
||||
logger: KaptLogger
|
||||
) : AbstractKapt3Extension(annotationProcessingClasspath, javaSourceRoots, sourcesOutputDir,
|
||||
) : AbstractKapt3Extension(compileClasspath, annotationProcessingClasspath, javaSourceRoots, sourcesOutputDir,
|
||||
classFilesOutputDir, options, aptOnly, pluginInitializedTime, logger) {
|
||||
override val analyzePartially: Boolean
|
||||
get() = useLightAnalysis
|
||||
@@ -71,7 +72,8 @@ class ClasspathBasedKapt3Extension(
|
||||
}
|
||||
|
||||
override fun loadProcessors(): List<Processor> {
|
||||
val classLoader = URLClassLoader(annotationProcessingClasspath.map { it.toURI().toURL() }.toTypedArray())
|
||||
val classpath = annotationProcessingClasspath + compileClasspath
|
||||
val classLoader = URLClassLoader(classpath.map { it.toURI().toURL() }.toTypedArray())
|
||||
this.annotationProcessingClassLoader = classLoader
|
||||
val processors = ServiceLoader.load(Processor::class.java, classLoader).toList()
|
||||
|
||||
@@ -98,7 +100,8 @@ class ClasspathBasedKapt3Extension(
|
||||
}
|
||||
|
||||
abstract class AbstractKapt3Extension(
|
||||
val classpath: List<File>,
|
||||
val compileClasspath: List<File>,
|
||||
val annotationProcessingClasspath: List<File>,
|
||||
val javaSourceRoots: List<File>,
|
||||
val sourcesOutputDir: File,
|
||||
val classFilesOutputDir: File,
|
||||
@@ -145,8 +148,8 @@ abstract class AbstractKapt3Extension(
|
||||
|
||||
val (annotationProcessingTime) = measureTimeMillis {
|
||||
kaptContext.doAnnotationProcessing(
|
||||
javaSourceFiles, processors,
|
||||
classpath, sourcesOutputDir, classFilesOutputDir, kotlinSourceStubs)
|
||||
javaSourceFiles, processors, compileClasspath, annotationProcessingClasspath,
|
||||
sourcesOutputDir, classFilesOutputDir, kotlinSourceStubs)
|
||||
}
|
||||
|
||||
logger.info { "Annotation processing took $annotationProcessingTime ms" }
|
||||
|
||||
@@ -138,7 +138,6 @@ class Kapt3ComponentRegistrar : ComponentRegistrar {
|
||||
val contentRoots = configuration[JVMConfigurationKeys.CONTENT_ROOTS] ?: emptyList()
|
||||
|
||||
val compileClasspath = contentRoots.filterIsInstance<JvmContentRoot>().map { it.file }
|
||||
val classpath = apClasspath + compileClasspath
|
||||
|
||||
val javaSourceRoots = contentRoots.filterIsInstance<JavaSourceRoot>().map { it.file }
|
||||
|
||||
@@ -155,13 +154,14 @@ class Kapt3ComponentRegistrar : ComponentRegistrar {
|
||||
logger.info("Source output directory: $sourcesOutputDir")
|
||||
logger.info("Classes output directory: $classFilesOutputDir")
|
||||
logger.info("Stubs output directory: $stubsOutputDir")
|
||||
logger.info("Annotation processing classpath: " + classpath.joinToString())
|
||||
logger.info("Compile classpath: " + compileClasspath.joinToString())
|
||||
logger.info("Annotation processing classpath: " + apClasspath.joinToString())
|
||||
logger.info("Java source roots: " + javaSourceRoots.joinToString())
|
||||
logger.info("Options: $apOptions")
|
||||
}
|
||||
|
||||
val kapt3AnalysisCompletedHandlerExtension = ClasspathBasedKapt3Extension(
|
||||
classpath, javaSourceRoots, sourcesOutputDir, classFilesOutputDir, stubsOutputDir, apOptions,
|
||||
compileClasspath, apClasspath, javaSourceRoots, sourcesOutputDir, classFilesOutputDir, stubsOutputDir, apOptions,
|
||||
isAptOnly, useLightAnalysis, System.currentTimeMillis(), logger)
|
||||
AnalysisHandlerExtension.registerExtension(project, kapt3AnalysisCompletedHandlerExtension)
|
||||
}
|
||||
|
||||
@@ -33,14 +33,16 @@ import com.sun.tools.javac.util.List as JavacList
|
||||
fun KaptContext.doAnnotationProcessing(
|
||||
javaSourceFiles: List<File>,
|
||||
processors: List<Processor>,
|
||||
classpath: List<File>,
|
||||
compileClasspath: List<File>,
|
||||
annotationProcessingClasspath: List<File>,
|
||||
sourcesOutputDir: File,
|
||||
classesOutputDir: File,
|
||||
additionalSources: JavacList<JCTree.JCCompilationUnit> = JavacList.nil()
|
||||
) {
|
||||
with (options) {
|
||||
put(Option.PROC, "only") // Only process annotations
|
||||
put(Option.CLASSPATH, classpath.joinToString(File.pathSeparator) { it.canonicalPath })
|
||||
put(Option.CLASSPATH, compileClasspath.joinToString(File.pathSeparator) { it.canonicalPath })
|
||||
put(Option.PROCESSORPATH, annotationProcessingClasspath.joinToString(File.pathSeparator) { it.canonicalPath })
|
||||
put(Option.S, sourcesOutputDir.canonicalPath)
|
||||
put(Option.D, classesOutputDir.canonicalPath)
|
||||
}
|
||||
|
||||
+1
-1
@@ -139,7 +139,7 @@ abstract class AbstractKotlinKapt3IntegrationTest : CodegenTestCase() {
|
||||
javaSourceRoots: List<File>,
|
||||
outputDir: File,
|
||||
options: Map<String, String>
|
||||
) : AbstractKapt3Extension(emptyList(), javaSourceRoots, outputDir, outputDir,
|
||||
) : AbstractKapt3Extension(emptyList(), emptyList(), javaSourceRoots, outputDir, outputDir,
|
||||
options, true, System.currentTimeMillis(), KaptLogger(true)
|
||||
) {
|
||||
internal var savedStubs: String? = null
|
||||
|
||||
@@ -100,7 +100,8 @@ abstract class AbstractKotlinKaptContextTest : AbstractKotlinKapt3Test() {
|
||||
val sourceOutputDir = Files.createTempDirectory("kaptRunner").toFile()
|
||||
try {
|
||||
kaptRunner.doAnnotationProcessing(emptyList(), listOf(JavaKaptContextTest.simpleProcessor()),
|
||||
classpath = listOf(), sourcesOutputDir = sourceOutputDir, classesOutputDir = sourceOutputDir,
|
||||
compileClasspath = emptyList(), annotationProcessingClasspath = emptyList(),
|
||||
sourcesOutputDir = sourceOutputDir, classesOutputDir = sourceOutputDir,
|
||||
additionalSources = compilationUnits)
|
||||
|
||||
val javaFiles = sourceOutputDir.walkTopDown().filter { it.isFile && it.extension == "java" }
|
||||
|
||||
@@ -82,7 +82,8 @@ class JavaKaptContextTest {
|
||||
).doAnnotationProcessing(
|
||||
listOf(javaSourceFile),
|
||||
listOf(processor),
|
||||
emptyList(), // classpath
|
||||
emptyList(), // compile classpath
|
||||
emptyList(), // annotation processing classpath
|
||||
outputDir,
|
||||
outputDir)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user