Skip to content

Commit 297f8d4

Browse files
committed
Kapt3: Use the javac's finalCompiler log to determine if there were any annotation processing errors (KT-16176)
1 parent 62092f3 commit 297f8d4

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616

1717
package org.jetbrains.kotlin.kapt3
1818

19+
import com.sun.tools.javac.comp.CompileStates
1920
import com.sun.tools.javac.file.JavacFileManager
21+
import com.sun.tools.javac.main.JavaCompiler
2022
import com.sun.tools.javac.main.Option
2123
import com.sun.tools.javac.processing.AnnotationProcessingError
2224
import com.sun.tools.javac.processing.JavacFiler
2325
import com.sun.tools.javac.processing.JavacProcessingEnvironment
2426
import com.sun.tools.javac.tree.JCTree
25-
import com.sun.tools.javac.util.Log
2627
import org.jetbrains.kotlin.kapt3.diagnostic.KaptError
2728
import java.io.File
2829
import javax.annotation.processing.Processor
@@ -56,28 +57,26 @@ fun KaptContext.doAnnotationProcessing(
5657
val fileManager = context.get(JavaFileManager::class.java) as JavacFileManager
5758
val processingEnvironment = JavacProcessingEnvironment.instance(context)
5859

60+
val compilerAfterAP: JavaCompiler
5961
try {
6062
compiler.initProcessAnnotations(processors)
6163

6264
val javaFileObjects = fileManager.getJavaFileObjectsFromFiles(javaSourceFiles)
6365
val parsedJavaFiles = compiler.parseFiles(javaFileObjects)
6466

65-
val log = Log.instance(context)
66-
67-
val warningsBeforeAp: Int
68-
try {
69-
val analyzedFiles = compiler.enterTrees(parsedJavaFiles + additionalSources)
70-
71-
warningsBeforeAp = log.nwarnings
72-
67+
compilerAfterAP = try {
68+
val analyzedFiles = compiler.stopIfErrorOccurred(
69+
CompileStates.CompileState.PARSE, compiler.enterTrees(parsedJavaFiles + additionalSources))
7370
compiler.processAnnotations(analyzedFiles)
7471
} catch (e: AnnotationProcessingError) {
7572
throw KaptError(KaptError.Kind.EXCEPTION, e.cause ?: e)
7673
}
7774

75+
val log = compilerAfterAP.log
76+
7877
val filer = processingEnvironment.filer as JavacFiler
7978
val errorCount = log.nerrors
80-
val warningCount = log.nwarnings - warningsBeforeAp
79+
val warningCount = log.nwarnings
8180

8281
logger.info { "Annotation processing complete, errors: $errorCount, warnings: $warningCount" }
8382
if (logger.isVerbose) {

plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaCompiler.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@ package org.jetbrains.kotlin.kapt3.javac
1919
import com.sun.tools.javac.comp.CompileStates
2020
import com.sun.tools.javac.main.JavaCompiler
2121
import com.sun.tools.javac.util.Context
22+
import com.sun.tools.javac.util.List as JavacList
2223

2324
class KaptJavaCompiler(context: Context) : JavaCompiler(context) {
2425
public override fun shouldStop(cs: CompileStates.CompileState) = super.shouldStop(cs)
2526

27+
fun <T> stopIfErrorOccurred(cs: CompileStates.CompileState, list: JavacList<T>): JavacList<T> {
28+
return if (shouldStop(cs)) JavacList.nil<T>() else list
29+
}
30+
2631
companion object {
2732
internal fun preRegister(context: Context) {
2833
context.put(compilerKey, Context.Factory<JavaCompiler>(::KaptJavaCompiler))

0 commit comments

Comments
 (0)