Uast: type-parameter references resolves to type-parameters
This commit is contained in:
+5
-4
@@ -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
@@ -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>>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user