diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/diagnostic/KaptError.kt b/compiler/util/src/org/jetbrains/kotlin/utils/kapt/KaptError.kt similarity index 86% rename from plugins/kapt3/src/org/jetbrains/kotlin/kapt3/diagnostic/KaptError.kt rename to compiler/util/src/org/jetbrains/kotlin/utils/kapt/KaptError.kt index b1c54be1847..4357ae3dc75 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/diagnostic/KaptError.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/kapt/KaptError.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * 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. @@ -20,10 +20,8 @@ class KaptError : RuntimeException { val kind: Kind enum class Kind(val message: String) { - ERROR_WHILE_ANALYSIS("Java file analysis error"), EXCEPTION("Exception while annotation processing"), ERROR_RAISED("Error while annotation processing"), - UNKNOWN("Unknown error while annotation processing") } constructor(kind: Kind) : super(kind.message) { diff --git a/idea/idea-android/idea-android-output-parser/src/org/jetbrains/kotlin/android/KotlinOutputParserHelper.kt b/idea/idea-android/idea-android-output-parser/src/org/jetbrains/kotlin/android/KotlinOutputParserHelper.kt index 0a72e1a7535..df321d097ef 100644 --- a/idea/idea-android/idea-android-output-parser/src/org/jetbrains/kotlin/android/KotlinOutputParserHelper.kt +++ b/idea/idea-android/idea-android-output-parser/src/org/jetbrains/kotlin/android/KotlinOutputParserHelper.kt @@ -24,7 +24,9 @@ import com.google.common.base.Optional import com.google.common.collect.ImmutableList import com.intellij.openapi.util.io.FileUtilRt import com.intellij.openapi.util.text.StringUtil +import org.jetbrains.kotlin.kapt3.diagnostic.KaptError import java.io.File +import java.lang.IllegalStateException import java.util.regex.Pattern fun parse(line: String, reader: OutputLineReader, messages: MutableList): Boolean { @@ -127,7 +129,22 @@ private fun Int.skipDriveOnWin(line: String): Int { return if (this == 1) line.indexOf(COLON, this + 1) else this } +private val KAPT_ERROR_WHILE_ANNOTATION_PROCESSING_MARKER_TEXT = + KaptError::class.java.canonicalName + ": " + KaptError.Kind.ERROR_RAISED.message + +private fun isKaptErrorWhileAnnotationProcessing(message: Message): Boolean { + if (message.kind != Message.Kind.ERROR) return false + if (message.sourceFilePositions.singleOrNull() != SourceFilePosition.UNKNOWN) return false + + val messageText = message.text + return messageText.startsWith(IllegalStateException::class.java.name) + && messageText.contains(KAPT_ERROR_WHILE_ANNOTATION_PROCESSING_MARKER_TEXT) +} + private fun addMessage(message: Message, messages: MutableList): Boolean { + // Ignore KaptError.ERROR_RAISED message from kapt. We already processed all errors from annotation processing + if (isKaptErrorWhileAnnotationProcessing(message)) return true + var duplicatesPrevious = false val messageCount = messages.size if (messageCount > 0) {