diff --git a/plugins/annotation-processing/testData/processors/EnumArray.kt b/plugins/annotation-processing/testData/processors/EnumArray.kt new file mode 100644 index 00000000000..ab6bea58fd4 --- /dev/null +++ b/plugins/annotation-processing/testData/processors/EnumArray.kt @@ -0,0 +1,7 @@ +package org.jetbrains.kotlin.annotation.processing.test.processor + +enum class RGBColors { RED, GREEN, BLUE } +annotation class ColorsAnnotation(val colors: Array) + +@ColorsAnnotation(colors = arrayOf(RGBColors.BLUE, RGBColors.RED)) +class Test \ No newline at end of file diff --git a/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/internal/KotlinAnnotationProxyMaker.kt b/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/internal/KotlinAnnotationProxyMaker.kt index 5b69e6c875f..7c2db985cf6 100644 --- a/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/internal/KotlinAnnotationProxyMaker.kt +++ b/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/internal/KotlinAnnotationProxyMaker.kt @@ -92,8 +92,12 @@ private fun getConstantValue( is PsiArrayInitializerMemberValue -> psiValue.initializers.toList() else -> listOf(psiValue) } - - if (jComponentType.isPrimitive || jComponentType.isAnnotation || jComponentType.canonicalName == JAVA_LANG_STRING) { + + if (jComponentType.isPrimitive + || jComponentType.isAnnotation + || jComponentType.isEnum + || jComponentType.canonicalName == JAVA_LANG_STRING + ) { val arr = Array.newInstance(jComponentType, arrayValues.size) arrayValues.forEachIndexed { i, componentPsiValue -> val componentValue = getConstantValue(componentPsiValue, returnType.componentType, jComponentType, evaluator) diff --git a/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/processing/test/processor/ProcessorTests.kt b/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/processing/test/processor/ProcessorTests.kt index 1c1a8a4d2b2..3392759b165 100644 --- a/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/processing/test/processor/ProcessorTests.kt +++ b/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/processing/test/processor/ProcessorTests.kt @@ -16,9 +16,6 @@ package org.jetbrains.kotlin.annotation.processing.test.processor -import com.intellij.psi.JavaPsiFacade -import com.intellij.psi.impl.PsiSubstitutorImpl -import com.intellij.psi.util.PsiTypesUtil import org.intellij.lang.annotations.Language import org.jetbrains.kotlin.annotation.processing.impl.DisposableRef import org.jetbrains.kotlin.annotation.processing.impl.KotlinProcessingEnvironment @@ -35,6 +32,10 @@ import javax.lang.model.type.DeclaredType import javax.lang.model.type.TypeMirror import javax.lang.model.type.TypeVariable +// See EnumArray.kt +enum class RGBColors { RED, GREEN, BLUE } +annotation class ColorsAnnotation(val colors: Array) + class ProcessorTests : AbstractProcessorTest() { override val testDataDir = "plugins/annotation-processing/testData/processors" @@ -127,6 +128,13 @@ class ProcessorTests : AbstractProcessorTest() { assertTrue((anno2.getParam("e") as JeArrayAnnotationValue).value.first() is JeTypeAnnotationValue) } + fun testEnumArray() = test("EnumArray", "*") { set, roundEnv, env -> + val testClass = env.findClass("org.jetbrains.kotlin.annotation.processing.test.processor.Test") + val enumAnno = testClass.getAnnotation(ColorsAnnotation::class.java) + assertNotNull(enumAnno) + assertEquals(listOf("BLUE", "RED"), enumAnno!!.colors.map { it.name }) + } + fun testStringArray() = test("StringArray", "*") { set, roundEnv, env -> val testClass = env.findClass("Test") val suppress = testClass.getAnnotation(Suppress::class.java)