diff --git a/plugins/annotation-processing/src/org/jetbrains/kotlin/annotation/processing/impl/KotlinTypes.kt b/plugins/annotation-processing/src/org/jetbrains/kotlin/annotation/processing/impl/KotlinTypes.kt index 48ef1ea1efd..2725e9730e1 100644 --- a/plugins/annotation-processing/src/org/jetbrains/kotlin/annotation/processing/impl/KotlinTypes.kt +++ b/plugins/annotation-processing/src/org/jetbrains/kotlin/annotation/processing/impl/KotlinTypes.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.annotation.processing.impl import com.intellij.psi.* +import com.intellij.psi.impl.source.PsiImmediateClassType import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.* import org.jetbrains.kotlin.java.model.JeElement @@ -124,7 +125,12 @@ class KotlinTypes(val javaPsiFacade: JavaPsiFacade, val psiManager: PsiManager, } override fun directSupertypes(t: TypeMirror): List { - if (t is NoType) throw IllegalArgumentException("Invalid type: $t") + if (t is NoType || t is ExecutableType) throw IllegalArgumentException("Invalid type: $t") + + if (t is JeDeclaredType && t.psiType is PsiImmediateClassType) { + return t.psiClass.superTypes.map { it.toJeType(psiManager) } + } + val psiType = (t as? JePsiType)?.psiType as? PsiClassType ?: return emptyList() return psiType.superTypes.map { it.toJeType(psiManager) } } diff --git a/plugins/annotation-processing/testData/processors/TypeArguments2.kt b/plugins/annotation-processing/testData/processors/TypeArguments2.kt index d8a08aab9d1..cf04e58650d 100644 --- a/plugins/annotation-processing/testData/processors/TypeArguments2.kt +++ b/plugins/annotation-processing/testData/processors/TypeArguments2.kt @@ -7,4 +7,8 @@ annotation class Anno @Anno class B : A() -class C : A() \ No newline at end of file +class C : A() + +interface I2 +open class B2 +class A2 : B2(), I2 \ No newline at end of file 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 499952b1abb..d85a20a3701 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 @@ -157,6 +157,10 @@ class ProcessorTests : AbstractProcessorTest() { assertEquals(1, cai.typeArguments.size) val typeArg = cai.typeArguments.first() assertTrue(typeArg is TypeVariable) + + val a2 = env.findClass("A2") + val i2 = env.typeUtils.directSupertypes(a2.asType()).first { it.toString().matches("I2(<.*>)?".toRegex()) } as JeDeclaredType + assertEquals("I2", i2.toString()) } fun testErasureSimple() = test("ErasureSimple", "*") { set, roundEnv, env ->