From f5c4f8297133df616c72fde3d2df607a27d50765 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 2 Nov 2015 19:46:53 +0300 Subject: [PATCH] Fix exception from backend in light classes mode for null passed as annotation argument --- .../jetbrains/kotlin/codegen/AnnotationCodegen.java | 10 +++++++++- idea/testData/checker/NullAsAnnotationArgument.kt | 10 ++++++++++ .../kotlin/checkers/PsiCheckerTestGenerated.java | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 idea/testData/checker/NullAsAnnotationArgument.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java index 316daa11035..a5c6bb0c4d0 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java @@ -389,7 +389,15 @@ public abstract class AnnotationCodegen { } private Void visitUnsupportedValue(ConstantValue value) { - throw new IllegalStateException("Don't know how to compile annotation value " + value); + ClassBuilderMode mode = typeMapper.getClassBuilderMode(); + switch (mode) { + case FULL: + throw new IllegalStateException("Don't know how to compile annotation value " + value); + case LIGHT_CLASSES: + return null; + default: + throw new IllegalStateException("Unknown builder mode: " + mode); + } } }; diff --git a/idea/testData/checker/NullAsAnnotationArgument.kt b/idea/testData/checker/NullAsAnnotationArgument.kt new file mode 100644 index 00000000000..590c1b5c072 --- /dev/null +++ b/idea/testData/checker/NullAsAnnotationArgument.kt @@ -0,0 +1,10 @@ +// test for KT-5337 +package test + +annotation class A(val value: String) + +@A(null) +fun foo() {} + +@A(null) +class B \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java index 4ab9fca7ce7..95b62e41b1e 100644 --- a/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java @@ -187,6 +187,12 @@ public class PsiCheckerTestGenerated extends AbstractPsiCheckerTest { doTest(fileName); } + @TestMetadata("NullAsAnnotationArgument.kt") + public void testNullAsAnnotationArgument() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/NullAsAnnotationArgument.kt"); + doTest(fileName); + } + @TestMetadata("Nullability.kt") public void testNullability() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/Nullability.kt");