From 297f8d4161bdb8bae3f907e43fdec25aa3ef826c Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Mon, 6 Feb 2017 15:15:15 +0300 Subject: [PATCH] Kapt3: Use the javac's finalCompiler log to determine if there were any annotation processing errors (KT-16176) --- .../kotlin/kapt3/annotationProcessing.kt | 19 +++++++++---------- .../kotlin/kapt3/javac/KaptJavaCompiler.kt | 5 +++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt index f8df502711b..5579584bd5b 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt @@ -16,13 +16,14 @@ package org.jetbrains.kotlin.kapt3 +import com.sun.tools.javac.comp.CompileStates import com.sun.tools.javac.file.JavacFileManager +import com.sun.tools.javac.main.JavaCompiler import com.sun.tools.javac.main.Option import com.sun.tools.javac.processing.AnnotationProcessingError import com.sun.tools.javac.processing.JavacFiler import com.sun.tools.javac.processing.JavacProcessingEnvironment import com.sun.tools.javac.tree.JCTree -import com.sun.tools.javac.util.Log import org.jetbrains.kotlin.kapt3.diagnostic.KaptError import java.io.File import javax.annotation.processing.Processor @@ -56,28 +57,26 @@ fun KaptContext.doAnnotationProcessing( val fileManager = context.get(JavaFileManager::class.java) as JavacFileManager val processingEnvironment = JavacProcessingEnvironment.instance(context) + val compilerAfterAP: JavaCompiler try { compiler.initProcessAnnotations(processors) val javaFileObjects = fileManager.getJavaFileObjectsFromFiles(javaSourceFiles) val parsedJavaFiles = compiler.parseFiles(javaFileObjects) - val log = Log.instance(context) - - val warningsBeforeAp: Int - try { - val analyzedFiles = compiler.enterTrees(parsedJavaFiles + additionalSources) - - warningsBeforeAp = log.nwarnings - + compilerAfterAP = try { + val analyzedFiles = compiler.stopIfErrorOccurred( + CompileStates.CompileState.PARSE, compiler.enterTrees(parsedJavaFiles + additionalSources)) compiler.processAnnotations(analyzedFiles) } catch (e: AnnotationProcessingError) { throw KaptError(KaptError.Kind.EXCEPTION, e.cause ?: e) } + val log = compilerAfterAP.log + val filer = processingEnvironment.filer as JavacFiler val errorCount = log.nerrors - val warningCount = log.nwarnings - warningsBeforeAp + val warningCount = log.nwarnings logger.info { "Annotation processing complete, errors: $errorCount, warnings: $warningCount" } if (logger.isVerbose) { diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaCompiler.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaCompiler.kt index 4d226cede67..395b2a45bec 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaCompiler.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaCompiler.kt @@ -19,10 +19,15 @@ package org.jetbrains.kotlin.kapt3.javac import com.sun.tools.javac.comp.CompileStates import com.sun.tools.javac.main.JavaCompiler import com.sun.tools.javac.util.Context +import com.sun.tools.javac.util.List as JavacList class KaptJavaCompiler(context: Context) : JavaCompiler(context) { public override fun shouldStop(cs: CompileStates.CompileState) = super.shouldStop(cs) + fun stopIfErrorOccurred(cs: CompileStates.CompileState, list: JavacList): JavacList { + return if (shouldStop(cs)) JavacList.nil() else list + } + companion object { internal fun preRegister(context: Context) { context.put(compilerKey, Context.Factory(::KaptJavaCompiler))