Kapt: Handle exceptions during annotation processing gracefully

(cherry picked from commit ee26c19)
This commit is contained in:
Yan Zhulanow
2016-10-04 21:18:17 +03:00
committed by Yan Zhulanow
parent 82160bc86d
commit 2f933cfcf2
3 changed files with 50 additions and 2 deletions
@@ -16,12 +16,15 @@
package org.jetbrains.kotlin.annotation.processing.test.processor
import com.intellij.openapi.extensions.Extensions
import com.intellij.testFramework.registerServiceInstance
import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessingExtension
import org.jetbrains.kotlin.annotation.processing.diagnostic.DefaultErrorMessagesAnnotationProcessing
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.AbstractBytecodeTextTest
import org.jetbrains.kotlin.codegen.CodegenTestUtil
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
import org.jetbrains.kotlin.incremental.SourceRetentionAnnotationHandlerImpl
import org.jetbrains.kotlin.java.model.elements.JeAnnotationMirror
import org.jetbrains.kotlin.java.model.elements.JeMethodExecutableElement
@@ -74,6 +77,9 @@ abstract class AbstractProcessorTest : AbstractBytecodeTextTest() {
project.registerServiceInstance(JeElementRegistry::class.java, JeElementRegistry())
Extensions.getRootArea().getExtensionPoint(DefaultErrorMessages.Extension.EP_NAME)
.registerExtension(DefaultErrorMessagesAnnotationProcessing())
return environment
}
@@ -362,4 +362,22 @@ class ProcessorTests : AbstractProcessorTest() {
test("c", "java.util.Map<java.lang.Integer,Test>")
test("d", "java.util.Map<java.lang.Integer,Test>")
}
fun testExceptionDuringAp() {
class HiThere : RuntimeException()
var kotlinEnv: KotlinProcessingEnvironment? = null
try {
test("MapMutableMap", "*") { set, roundEnv, env ->
kotlinEnv = env as KotlinProcessingEnvironment
throw HiThere()
}
} catch (e: IllegalStateException) {
assertTrue(e.message!!.startsWith("ANNOTATION_PROCESSING_ERROR"))
}
val env = kotlinEnv!!
assertEquals(1, env.messager.errorCount)
assertEquals(0, env.messager.warningCount)
}
}