diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/KaptContext.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/KaptContext.kt index 1581a1b09e4..071baa94779 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/KaptContext.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/KaptContext.kt @@ -42,7 +42,7 @@ class KaptContext( val options: Options init { - KaptJavaLog.preRegister(context) + KaptJavaLog.preRegister(context, logger.messageCollector) JavacFileManager.preRegister(context) KaptTreeMaker.preRegister(context) KaptJavaCompiler.preRegister(context) diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt index 4bc3e8071e2..f8df502711b 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt @@ -16,7 +16,6 @@ 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.Option import com.sun.tools.javac.processing.AnnotationProcessingError @@ -64,17 +63,10 @@ fun KaptContext.doAnnotationProcessing( val parsedJavaFiles = compiler.parseFiles(javaFileObjects) val log = Log.instance(context) - if (compiler.shouldStop(CompileStates.CompileState.PARSE) || log.nerrors > 0) { - log.flush() - throw KaptError(KaptError.Kind.JAVA_FILE_PARSING_ERROR) - } val warningsBeforeAp: Int try { val analyzedFiles = compiler.enterTrees(parsedJavaFiles + additionalSources) - if (log.nerrors > 0) { - throw KaptError(KaptError.Kind.ERROR_WHILE_ANALYSIS) - } warningsBeforeAp = log.nwarnings diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaLog.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaLog.kt index 93f8736402c..08c070c1ec7 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaLog.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/javac/KaptJavaLog.kt @@ -19,8 +19,18 @@ package org.jetbrains.kotlin.kapt3.javac import com.sun.tools.javac.util.Context import com.sun.tools.javac.util.JCDiagnostic import com.sun.tools.javac.util.Log +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* +import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.kapt3.util.MessageCollectorBackedWriter +import java.io.PrintWriter -class KaptJavaLog(context: Context?) : Log(context) { +class KaptJavaLog( + context: Context?, + errWriter: PrintWriter, + warnWriter: PrintWriter, + noticeWriter: PrintWriter +) : Log(context, errWriter, warnWriter, noticeWriter) { override fun report(diagnostic: JCDiagnostic) { if (diagnostic.type == JCDiagnostic.DiagnosticType.ERROR && diagnostic.code in IGNORED_DIAGNOSTICS) { return @@ -37,8 +47,14 @@ class KaptJavaLog(context: Context?) : Log(context) { "compiler.err.name.clash.same.erasure.no.hide", "compiler.err.already.defined") - internal fun preRegister(context: Context) { - context.put(Log.logKey, Context.Factory(::KaptJavaLog)) + internal fun preRegister(context: Context, messageCollector: MessageCollector) { + context.put(Log.logKey, Context.Factory { + fun makeWriter(severity: CompilerMessageSeverity) = PrintWriter(MessageCollectorBackedWriter(messageCollector, severity)) + val errWriter = makeWriter(ERROR) + val warnWriter = makeWriter(STRONG_WARNING) + val noticeWriter = makeWriter(INFO) + KaptJavaLog(it, errWriter, warnWriter, noticeWriter) + }) } } } \ No newline at end of file diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/util/MessageCollectorBackedWriter.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/util/MessageCollectorBackedWriter.kt new file mode 100644 index 00000000000..483a447a45d --- /dev/null +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/util/MessageCollectorBackedWriter.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.kapt3.util + +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector +import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import java.io.Writer + +class MessageCollectorBackedWriter(val messageCollector: MessageCollector, val severity: CompilerMessageSeverity) : Writer() { + override fun write(buffer: CharArray, offset: Int, length: Int) { + messageCollector.report(severity, String(buffer, offset, length), CompilerMessageLocation.NO_LOCATION) + } + + override fun flush() { + if (messageCollector is GroupingMessageCollector) { + messageCollector.flush() + } + } + + override fun close() { + flush() + } +} \ No newline at end of file