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 &&
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
fun foo() {
|
||||
fun foo(data: Any) {
|
||||
val (a, b) = "foo" to 1
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val (k, v) = data as Pair<String, String>
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
UFile (package = )
|
||||
UClass (name = DestructuringDeclarationKt)
|
||||
UMethod (name = foo)
|
||||
UParameter (name = data)
|
||||
UAnnotation (fqName = org.jetbrains.annotations.NotNull)
|
||||
UBlockExpression
|
||||
UDeclarationsExpression
|
||||
ULocalVariable (name = var268d4034)
|
||||
ULocalVariable (name = var268d41a5)
|
||||
UAnnotation (fqName = null)
|
||||
UBinaryExpression (operator = <other>)
|
||||
ULiteralExpression (value = "foo")
|
||||
@@ -11,14 +13,37 @@ UFile (package = )
|
||||
ULocalVariable (name = a)
|
||||
UAnnotation (fqName = null)
|
||||
UQualifiedReferenceExpression
|
||||
USimpleNameReferenceExpression (identifier = var268d4034)
|
||||
USimpleNameReferenceExpression (identifier = var268d41a5)
|
||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))
|
||||
UIdentifier (Identifier (component1))
|
||||
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
||||
ULocalVariable (name = b)
|
||||
UAnnotation (fqName = null)
|
||||
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))
|
||||
UIdentifier (Identifier (component2))
|
||||
USimpleNameReferenceExpression (identifier = <anonymous class>, resolvesTo = null)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
public final class DestructuringDeclarationKt {
|
||||
public static final fun foo() : void {
|
||||
@null var var268d4034: <ErrorType> = "foo" <other> 1
|
||||
@null var a: java.lang.String = var268d4034.<anonymous class>()
|
||||
@null var b: int = var268d4034.<anonymous class>()
|
||||
public static final fun foo(@org.jetbrains.annotations.NotNull data: java.lang.Object) : void {
|
||||
@null var var268d41a5: <ErrorType> = "foo" <other> 1
|
||||
@null var a: java.lang.String = var268d41a5.<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