Kapt: JeTypeElement getInterfaces() and getSuperClass() should provide reference type mirrors

(cherry picked from commit 5f50ab6)
This commit is contained in:
Yan Zhulanow
2016-08-23 19:50:08 +03:00
committed by Yan Zhulanow
parent cd44540965
commit ebcc762ae9
3 changed files with 34 additions and 2 deletions
@@ -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) }