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
|
package org.jetbrains.kotlin.java.model.elements
|
||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
|
import com.intellij.psi.impl.source.PsiClassReferenceType
|
||||||
import com.intellij.psi.util.ClassUtil
|
import com.intellij.psi.util.ClassUtil
|
||||||
import com.intellij.psi.util.PsiTypesUtil
|
import com.intellij.psi.util.PsiTypesUtil
|
||||||
import org.jetbrains.kotlin.java.model.*
|
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)
|
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 {
|
override fun getSuperclass(): TypeMirror {
|
||||||
val superClass = psi.superClass ?: return JeNoneType
|
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) }
|
override fun getTypeParameters() = psi.typeParameters.map { JeTypeParameterElement(it, this) }
|
||||||
|
|
||||||
|
|||||||
+9
@@ -119,4 +119,13 @@ class ProcessorTests : AbstractProcessorTest() {
|
|||||||
assertNotNull(suppress)
|
assertNotNull(suppress)
|
||||||
assertEquals(listOf("Tom", "Mary"), suppress!!.names.toList())
|
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