Uast: properly handling annotations on destructured variables (KT-35673, EA-220128)
This commit is contained in:
@@ -194,7 +194,12 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (result is KotlinUDestructuringDeclarationExpression &&
|
if (result is KotlinUDestructuringDeclarationExpression &&
|
||||||
element.psi == (parent as KtDestructuringDeclaration).initializer) {
|
when (parent) {
|
||||||
|
is KtDestructuringDeclaration -> parent.initializer?.let { it == element.psi } == true
|
||||||
|
is KtDeclarationModifierList -> parent == element.sourcePsi?.parent
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
) {
|
||||||
return result.tempVarAssignment
|
return result.tempVarAssignment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
fun foo() {
|
fun foo(data: Any) {
|
||||||
val (a, b) = "foo" to 1
|
val (a, b) = "foo" to 1
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
val (k, v) = data as Pair<String, String>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
UFile (package = )
|
UFile (package = )
|
||||||
UClass (name = DestructuringDeclarationKt)
|
UClass (name = DestructuringDeclarationKt)
|
||||||
UMethod (name = foo)
|
UMethod (name = foo)
|
||||||
|
UParameter (name = data)
|
||||||
|
UAnnotation (fqName = org.jetbrains.annotations.NotNull)
|
||||||
UBlockExpression
|
UBlockExpression
|
||||||
UDeclarationsExpression
|
UDeclarationsExpression
|
||||||
ULocalVariable (name = var268d4034)
|
ULocalVariable (name = var268d41a5)
|
||||||
UAnnotation (fqName = null)
|
UAnnotation (fqName = null)
|
||||||
UBinaryExpression (operator = <other>)
|
UBinaryExpression (operator = <other>)
|
||||||
ULiteralExpression (value = "foo")
|
ULiteralExpression (value = "foo")
|
||||||
@@ -11,14 +13,37 @@ UFile (package = )
|
|||||||
ULocalVariable (name = a)
|
ULocalVariable (name = a)
|
||||||
UAnnotation (fqName = null)
|
UAnnotation (fqName = null)
|
||||||
UQualifiedReferenceExpression
|
UQualifiedReferenceExpression
|
||||||
USimpleNameReferenceExpression (identifier = var268d4034)
|
USimpleNameReferenceExpression (identifier = var268d41a5)
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
||||||
UIdentifier (Identifier (component1))
|
UIdentifier (Identifier (component1))
|
||||||
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
||||||
ULocalVariable (name = b)
|
ULocalVariable (name = b)
|
||||||
UAnnotation (fqName = null)
|
UAnnotation (fqName = null)
|
||||||
UQualifiedReferenceExpression
|
UQualifiedReferenceExpression
|
||||||
USimpleNameReferenceExpression (identifier = var268d4034)
|
USimpleNameReferenceExpression (identifier = var268d41a5)
|
||||||
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
||||||
|
UIdentifier (Identifier (component2))
|
||||||
|
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
||||||
|
UDeclarationsExpression
|
||||||
|
ULocalVariable (name = var465978a0)
|
||||||
|
UAnnotation (fqName = null)
|
||||||
|
UAnnotation (fqName = kotlin.Suppress)
|
||||||
|
UNamedExpression (name = names)
|
||||||
|
ULiteralExpression (value = "UNCHECKED_CAST")
|
||||||
|
UBinaryExpressionWithType
|
||||||
|
USimpleNameReferenceExpression (identifier = data)
|
||||||
|
UTypeReferenceExpression (name = kotlin.Pair<? extends java.lang.String,? extends java.lang.String>)
|
||||||
|
ULocalVariable (name = k)
|
||||||
|
UAnnotation (fqName = null)
|
||||||
|
UQualifiedReferenceExpression
|
||||||
|
USimpleNameReferenceExpression (identifier = var465978a0)
|
||||||
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
||||||
|
UIdentifier (Identifier (component1))
|
||||||
|
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
||||||
|
ULocalVariable (name = v)
|
||||||
|
UAnnotation (fqName = null)
|
||||||
|
UQualifiedReferenceExpression
|
||||||
|
USimpleNameReferenceExpression (identifier = var465978a0)
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
||||||
UIdentifier (Identifier (component2))
|
UIdentifier (Identifier (component2))
|
||||||
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
public final class DestructuringDeclarationKt {
|
public final class DestructuringDeclarationKt {
|
||||||
public static final fun foo() : void {
|
public static final fun foo(@org.jetbrains.annotations.NotNull data: java.lang.Object) : void {
|
||||||
@null var var268d4034: <ErrorType> = "foo" <other> 1
|
@null var var268d41a5: <ErrorType> = "foo" <other> 1
|
||||||
@null var a: java.lang.String = var268d4034.<anonymous class>()
|
@null var a: java.lang.String = var268d41a5.<anonymous class>()
|
||||||
@null var b: int = var268d4034.<anonymous class>()
|
@null var b: int = var268d41a5.<anonymous class>()
|
||||||
|
@null @kotlin.Suppress(names = "UNCHECKED_CAST") var var465978a0: <ErrorType> = data as kotlin.Pair<? extends java.lang.String,? extends java.lang.String>
|
||||||
|
@null var k: java.lang.String = var465978a0.<anonymous class>()
|
||||||
|
@null var v: java.lang.String = var465978a0.<anonymous class>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user