Skip to content

Commit 6ded593

Browse files
committed
Kapt: Fix javac error reporting in Kotlin daemon, also fix parsing error reporting (KT-15524)
1 parent cde7cb1 commit 6ded593

File tree

4 files changed

+59
-12
lines changed

4 files changed

+59
-12
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class KaptContext(
4242
val options: Options
4343

4444
init {
45-
KaptJavaLog.preRegister(context)
45+
KaptJavaLog.preRegister(context, logger.messageCollector)
4646
JavacFileManager.preRegister(context)
4747
KaptTreeMaker.preRegister(context)
4848
KaptJavaCompiler.preRegister(context)

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.jetbrains.kotlin.kapt3
1818

19-
import com.sun.tools.javac.comp.CompileStates
2019
import com.sun.tools.javac.file.JavacFileManager
2120
import com.sun.tools.javac.main.Option
2221
import com.sun.tools.javac.processing.AnnotationProcessingError
@@ -64,17 +63,10 @@ fun KaptContext.doAnnotationProcessing(
6463
val parsedJavaFiles = compiler.parseFiles(javaFileObjects)
6564

6665
val log = Log.instance(context)
67-
if (compiler.shouldStop(CompileStates.CompileState.PARSE) || log.nerrors > 0) {
68-
log.flush()
69-
throw KaptError(KaptError.Kind.JAVA_FILE_PARSING_ERROR)
70-
}
7166

7267
val warningsBeforeAp: Int
7368
try {
7469
val analyzedFiles = compiler.enterTrees(parsedJavaFiles + additionalSources)
75-
if (log.nerrors > 0) {
76-
throw KaptError(KaptError.Kind.ERROR_WHILE_ANALYSIS)
77-
}
7870

7971
warningsBeforeAp = log.nwarnings
8072

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,18 @@ package org.jetbrains.kotlin.kapt3.javac
1919
import com.sun.tools.javac.util.Context
2020
import com.sun.tools.javac.util.JCDiagnostic
2121
import com.sun.tools.javac.util.Log
22+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
23+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
24+
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
25+
import org.jetbrains.kotlin.kapt3.util.MessageCollectorBackedWriter
26+
import java.io.PrintWriter
2227

23-
class KaptJavaLog(context: Context?) : Log(context) {
28+
class KaptJavaLog(
29+
context: Context?,
30+
errWriter: PrintWriter,
31+
warnWriter: PrintWriter,
32+
noticeWriter: PrintWriter
33+
) : Log(context, errWriter, warnWriter, noticeWriter) {
2434
override fun report(diagnostic: JCDiagnostic) {
2535
if (diagnostic.type == JCDiagnostic.DiagnosticType.ERROR && diagnostic.code in IGNORED_DIAGNOSTICS) {
2636
return
@@ -37,8 +47,14 @@ class KaptJavaLog(context: Context?) : Log(context) {
3747
"compiler.err.name.clash.same.erasure.no.hide",
3848
"compiler.err.already.defined")
3949

40-
internal fun preRegister(context: Context) {
41-
context.put(Log.logKey, Context.Factory<Log>(::KaptJavaLog))
50+
internal fun preRegister(context: Context, messageCollector: MessageCollector) {
51+
context.put(Log.logKey, Context.Factory<Log> {
52+
fun makeWriter(severity: CompilerMessageSeverity) = PrintWriter(MessageCollectorBackedWriter(messageCollector, severity))
53+
val errWriter = makeWriter(ERROR)
54+
val warnWriter = makeWriter(STRONG_WARNING)
55+
val noticeWriter = makeWriter(INFO)
56+
KaptJavaLog(it, errWriter, warnWriter, noticeWriter)
57+
})
4258
}
4359
}
4460
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright 2010-2017 JetBrains s.r.o.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.jetbrains.kotlin.kapt3.util
18+
19+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
20+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
21+
import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector
22+
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
23+
import java.io.Writer
24+
25+
class MessageCollectorBackedWriter(val messageCollector: MessageCollector, val severity: CompilerMessageSeverity) : Writer() {
26+
override fun write(buffer: CharArray, offset: Int, length: Int) {
27+
messageCollector.report(severity, String(buffer, offset, length), CompilerMessageLocation.NO_LOCATION)
28+
}
29+
30+
override fun flush() {
31+
if (messageCollector is GroupingMessageCollector) {
32+
messageCollector.flush()
33+
}
34+
}
35+
36+
override fun close() {
37+
flush()
38+
}
39+
}

0 commit comments

Comments
 (0)