Kapt: JeTypeElement getInterfaces() and getSuperClass() should provide reference type mirrors
(cherry picked from commit 5f50ab6)
This commit is contained in:
committed by
Yan Zhulanow
parent
cd44540965
commit
ebcc762ae9
@@ -0,0 +1,6 @@
|
||||
@Deprecated("")
|
||||
class A : B<Int>(), C<Int>
|
||||
|
||||
open class B<T>
|
||||
|
||||
interface C<T> {}
|
||||
+19
-2
@@ -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<PsiClassType>, 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<TypeMirror> {
|
||||
val superTypes = psi.superTypes
|
||||
val interfaces = mutableListOf<TypeMirror>()
|
||||
|
||||
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) }
|
||||
|
||||
|
||||
+9
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user