Uast: type-parameter references resolves to type-parameters

This commit is contained in:
Nicolay Mitropolsky
2019-02-28 14:41:53 +03:00
parent ec26ea4e36
commit 5268cd4663
3 changed files with 13 additions and 12 deletions
@@ -177,6 +177,9 @@ internal fun KotlinType.toPsiType(lightDeclaration: PsiModifierListOwner?, conte
}
(constructor.declarationDescriptor as? TypeParameterDescriptor)?.let { typeParameter ->
(typeParameter.containingDeclaration.toSource()?.getMaybeLightElement() as? PsiTypeParameterListOwner)
?.typeParameterList?.typeParameters?.getOrNull(typeParameter.index)
?.let { return PsiTypesUtil.getClassType(it) }
return CommonSupertypes.commonSupertype(typeParameter.upperBounds).toPsiType(lightDeclaration, context, boxed)
}
@@ -249,15 +252,13 @@ internal fun KtClassOrObject.toPsiType(): PsiType {
return PsiTypesUtil.getClassType(lightClass)
}
internal fun PsiElement.getMaybeLightElement(context: UElement): PsiElement? {
internal fun PsiElement.getMaybeLightElement(context: UElement? = null /* TODO: remove */): PsiElement? {
return when (this) {
is KtDeclaration -> {
val lightElement = toLightElements().firstOrNull()
if (lightElement != null) return lightElement
val languagePlugin = context.getLanguagePlugin()
val uElement = languagePlugin.convertElementWithParent(this, null)
when (uElement) {
when (val uElement = this.toUElement()) {
is UDeclaration -> uElement.javaPsi
is UDeclarationsExpression -> uElement.declarations.firstOrNull()?.javaPsi
is ULambdaExpression -> (uElement.uastParent as? KotlinLocalFunctionUVariable)?.javaPsi
+4 -4
View File
@@ -6,13 +6,13 @@ public final class TypeReferencesKt {
return result
}
public static final fun parameterizedFoo(@org.jetbrains.annotations.Nullable arg: T) : void {
var a: java.lang.Object = arg
var at: java.lang.Object = elvis {
@org.jetbrains.annotations.Nullable var var708e1d08: java.lang.Object = arg
var a: T = arg
var at: T = elvis {
@org.jetbrains.annotations.Nullable var var708e1d08: T = arg
if (var708e1d08 != null) var708e1d08 else return
}
var tl: java.util.List<? extends T> = listOf(at)
var tsl: java.util.List<? extends java.lang.String> = tl.map({
var tsl: java.util.List<? extends java.lang.String> = tl.map({
it.toString()
})
var lls: java.util.List<? extends java.util.List<? extends java.lang.String>>
+4 -4
View File
@@ -5,13 +5,13 @@ UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpres
UBinaryExpression (operator = +) -> USimpleNameReferenceExpression (identifier = +) -> null: null
UBinaryExpression (operator = +) -> USimpleNameReferenceExpression (identifier = varWithoutType) -> LightVariableBuilder:varWithoutType: varWithoutType
UReturnExpression -> USimpleNameReferenceExpression (identifier = result) -> LightVariableBuilder:result: result
UTypeReferenceExpression (name = java.lang.Object) -> USimpleNameReferenceExpression (identifier = T) -> PsiClass:Object: Object
UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T
ULocalVariable (name = a) -> USimpleNameReferenceExpression (identifier = arg) -> Light Parameter: arg
UTypeReferenceExpression (name = java.lang.Object) -> USimpleNameReferenceExpression (identifier = T) -> PsiClass:Object: Object
UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T
ULocalVariable (name = var708e1d08) -> USimpleNameReferenceExpression (identifier = arg) -> Light Parameter: arg
UExpressionList (elvis) -> USimpleNameReferenceExpression (identifier = ?:) -> null: null
UTypeReferenceExpression (name = java.util.List<? extends T>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
UTypeReferenceExpression (name = java.lang.Object) -> USimpleNameReferenceExpression (identifier = T) -> PsiClass:Object: Object
UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> null: null
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = at) -> LightVariableBuilder:at: at
UTypeReferenceExpression (name = java.util.List<? extends java.lang.String>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
@@ -27,7 +27,7 @@ UTypeReferenceExpression (name = java.lang.Object) -> USimpleNameReferenceExpres
UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String
UTypeReferenceExpression (name = java.util.List<? extends java.util.List<? extends T>>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
UTypeReferenceExpression (name = java.util.List<? extends T>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
UTypeReferenceExpression (name = java.lang.Object) -> USimpleNameReferenceExpression (identifier = T) -> PsiClass:Object: Object
UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = parameterizedFoo) -> KtLightMethodImpl:parameterizedFoo: parameterizedFoo
UTypeReferenceExpression (name = java.util.List<? extends java.lang.String>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String