diff --git a/plugins/annotation-processing/testData/processors/TypeArguments.kt b/plugins/annotation-processing/testData/processors/TypeArguments.kt new file mode 100644 index 00000000000..99e87f29f5a --- /dev/null +++ b/plugins/annotation-processing/testData/processors/TypeArguments.kt @@ -0,0 +1,6 @@ +@Deprecated("") +class A : B(), C + +open class B + +interface C {} \ No newline at end of file diff --git a/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/elements/JeTypeElement.kt b/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/elements/JeTypeElement.kt index cde73172f0c..9654b5bada5 100644 --- a/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/elements/JeTypeElement.kt +++ b/plugins/java-model-wrappers/src/org/jetbrains/kotlin/java/model/elements/JeTypeElement.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.java.model.elements import com.intellij.psi.* +import com.intellij.psi.impl.source.PsiClassReferenceType import com.intellij.psi.util.ClassUtil import com.intellij.psi.util.PsiTypesUtil import org.jetbrains.kotlin.java.model.* @@ -36,12 +37,28 @@ class JeTypeElement(override val psi: PsiClass) : JeElement, TypeElement, JeAnno override fun getQualifiedName() = JeName(psi.qualifiedName) + private fun getSuperType(superTypes: Array, superClass: PsiClass): PsiClassType { + return superTypes.firstOrNull { it is PsiClassReferenceType && it.resolve() == superClass } + ?: PsiTypesUtil.getClassType(superClass) + } + override fun getSuperclass(): TypeMirror { val superClass = psi.superClass ?: return JeNoneType - return PsiTypesUtil.getClassType(superClass).toJeType(psi.manager) + val psiType = getSuperType(psi.superTypes, superClass) + return psiType.toJeType(psi.manager) } - override fun getInterfaces() = psi.interfaces.map { PsiTypesUtil.getClassType(it).toJeType(psi.manager) } + override fun getInterfaces(): List { + val superTypes = psi.superTypes + val interfaces = mutableListOf() + + for (intf in psi.interfaces) { + val psiType = getSuperType(superTypes, intf) + interfaces += psiType.toJeType(psi.manager) + } + + return interfaces + } override fun getTypeParameters() = psi.typeParameters.map { JeTypeParameterElement(it, this) } 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 de7800bba0d..b5a056827ef 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 @@ -119,4 +119,13 @@ class ProcessorTests : AbstractProcessorTest() { assertNotNull(suppress) assertEquals(listOf("Tom", "Mary"), suppress!!.names.toList()) } + + fun testTypeArguments() = test("TypeArguments", "*") { set, roundEnv, env -> + val classA = env.findClass("A") + val superB = classA.superclass as JeDeclaredType + val interfaceC = classA.interfaces[0] as JeDeclaredType + + assertTrue(superB.typeArguments.size == 1) + assertTrue(interfaceC.typeArguments.size == 1) + } } \ No newline at end of file