From 6803b37d14a1dab471843ecf1f221f7bed334026 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Tue, 31 Mar 2020 20:04:31 +0300 Subject: [PATCH] Uast: Making `AbstractKotlinResolveEverythingTest` test also `UCallExpression` current test data is just frezing the current state which is probable incorrect --- .../testData/Anonymous.resolved.txt | 12 +++-- .../testData/Constructors.resolved.txt | 37 ++++++++------ .../testData/LocalDeclarations.resolved.txt | 8 ++-- .../uast-kotlin/testData/Resolve.resolved.txt | 48 +++++++++---------- .../testData/SimpleAnnotated.resolved.txt | 2 +- .../testData/TypeReferences.resolved.txt | 12 ++--- .../AbstractKotlinResolveEverythingTest.kt | 45 +++++++++++------ .../tests/KotlinUastResolveApiTest.kt | 23 +++++++-- 8 files changed, 115 insertions(+), 72 deletions(-) diff --git a/plugins/uast-kotlin/testData/Anonymous.resolved.txt b/plugins/uast-kotlin/testData/Anonymous.resolved.txt index 68ebecdcc8c..6a1175b4118 100644 --- a/plugins/uast-kotlin/testData/Anonymous.resolved.txt +++ b/plugins/uast-kotlin/testData/Anonymous.resolved.txt @@ -8,17 +8,21 @@ UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = io) -> PsiPackage:java.io: io UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = InputStream) -> PsiClass:InputStream: InputStream + ULocalVariable (name = runnable) -> UObjectLiteralExpression -> null: UTypeReferenceExpression (name = java.lang.Runnable) -> USimpleNameReferenceExpression (identifier = Runnable) -> PsiClass:Runnable: Runnable UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:run: run UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = runnable) -> LightVariableBuilder:runnable: runnable - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = run) -> KtLightMethodImpl:run: run - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = Runnable) -> PsiClass:Runnable: Runnable - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:run) -> USimpleNameReferenceExpression (identifier = run) -> KtLightMethodImpl:run: run + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to null) -> USimpleNameReferenceExpression (identifier = Runnable) -> PsiClass:Runnable: Runnable + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:run: run UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = runnable2) -> LightVariableBuilder:runnable2: runnable2 - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = run) -> PsiMethod:run: run + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:run) -> USimpleNameReferenceExpression (identifier = run) -> PsiMethod:run: run + ULocalVariable (name = closeableRunnable) -> UObjectLiteralExpression -> null: UTypeReferenceExpression (name = java.lang.Runnable) -> USimpleNameReferenceExpression (identifier = Runnable) -> PsiClass:Runnable: Runnable UTypeReferenceExpression (name = java.io.Closeable) -> USimpleNameReferenceExpression (identifier = Closeable) -> PsiClass:Closeable: Closeable + ULocalVariable (name = runnableIs) -> UObjectLiteralExpression -> PsiMethod:InputStream: UTypeReferenceExpression (name = java.io.InputStream) -> USimpleNameReferenceExpression (identifier = InputStream) -> PsiMethod:InputStream: InputStream UTypeReferenceExpression (name = java.lang.Runnable) -> USimpleNameReferenceExpression (identifier = Runnable) -> PsiClass:Runnable: Runnable UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer + ULocalVariable (name = runnable) -> UObjectLiteralExpression -> null: diff --git a/plugins/uast-kotlin/testData/Constructors.resolved.txt b/plugins/uast-kotlin/testData/Constructors.resolved.txt index 3701e3dfc4b..09c3994262d 100644 --- a/plugins/uast-kotlin/testData/Constructors.resolved.txt +++ b/plugins/uast-kotlin/testData/Constructors.resolved.txt @@ -1,43 +1,50 @@ UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer -UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1)) -> UQualifiedReferenceExpression -> null: null +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1)) -> KtLightMethodImpl:A: +UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1))(resolves to KtLightMethodImpl:A) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = i) -> Light Parameter: i -UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> null: null +UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = toString) -> null: null UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer -UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1)) -> UQualifiedReferenceExpression -> null: null +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1)) -> KtLightMethodImpl:AWithInit: +UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1))(resolves to KtLightMethodImpl:AWithInit) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = i) -> Light Parameter: i -UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> null: null +UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = toString) -> null: null UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer -UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1)) -> UQualifiedReferenceExpression -> null: null +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1)) -> KtLightMethodImpl:AWith2Init: +UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 1))(resolves to KtLightMethodImpl:AWith2Init) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = i) -> Light Parameter: i -UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println +UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = toString) -> null: null + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> PsiMethod:Object: UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = a) -> KtLightMethodImpl:getA: getA UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null UBinaryExpression (operator = =) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = i) -> Light Parameter: i - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> null: null + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = toString) -> null: null UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> PsiMethod:Object: UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = a) -> KtLightMethodImpl:getA: getA UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> PsiMethod:Object: UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = a) -> KtLightMethodImpl:getA: getA UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null UBinaryExpression (operator = =) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = i) -> Light Parameter: i - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> null: null + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = toString) -> null: null UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String +UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> PsiMethod:Object: UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = a) -> KtLightMethodImpl:getA: getA UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s @@ -45,4 +52,4 @@ UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpres ULocalVariable (name = local) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s UBlockExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = local) -> LightVariableBuilder:local: local - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> PsiMethod:toString: toString + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:toString) -> USimpleNameReferenceExpression (identifier = toString) -> PsiMethod:toString: toString diff --git a/plugins/uast-kotlin/testData/LocalDeclarations.resolved.txt b/plugins/uast-kotlin/testData/LocalDeclarations.resolved.txt index 7e62130cb2f..ebf63090816 100644 --- a/plugins/uast-kotlin/testData/LocalDeclarations.resolved.txt +++ b/plugins/uast-kotlin/testData/LocalDeclarations.resolved.txt @@ -1,8 +1,8 @@ UTypeReferenceExpression (name = boolean) -> USimpleNameReferenceExpression (identifier = Boolean) -> PsiClass:Boolean: Boolean - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = Local) -> KtLightClassForLocalDeclaration:class Local: Local - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = Local) -> KtLightClassForLocalDeclaration:class Local: Local + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = Local) -> KtLightClassForLocalDeclaration:class Local: Local + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = Local) -> KtLightClassForLocalDeclaration:class Local: Local UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = bar) -> LightVariableBuilder:bar: bar + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = bar) -> LightVariableBuilder:bar: bar UBinaryExpression (operator = ==) -> USimpleNameReferenceExpression (identifier = ==) -> null: null - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = Local) -> KtLightClassForLocalDeclaration:class Local: Local + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = Local) -> KtLightClassForLocalDeclaration:class Local: Local diff --git a/plugins/uast-kotlin/testData/Resolve.resolved.txt b/plugins/uast-kotlin/testData/Resolve.resolved.txt index 6e022cdcb75..973b035d285 100644 --- a/plugins/uast-kotlin/testData/Resolve.resolved.txt +++ b/plugins/uast-kotlin/testData/Resolve.resolved.txt @@ -1,38 +1,38 @@ UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to KtLightMethodImpl:A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { fun foo() {} inline fun inlineFoo() { } }: A - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = foo) -> KtLightMethodImpl:foo: foo + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:foo) -> USimpleNameReferenceExpression (identifier = foo) -> KtLightMethodImpl:foo: foo UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:inlineFoo: inlineFoo - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to KtLightMethodImpl:A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { fun foo() {} inline fun inlineFoo() { } }: A - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = inlineFoo) -> KtLightMethodImpl:inlineFoo: inlineFoo + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:inlineFoo) -> USimpleNameReferenceExpression (identifier = inlineFoo) -> KtLightMethodImpl:inlineFoo: inlineFoo UBlockExpression -> UQualifiedReferenceExpression -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to KtLightMethodImpl:A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { fun foo() {} inline fun inlineFoo() { } }: A - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = forEach) -> PsiMethod:forEach: forEach - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = it) -> null: null + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:forEach) -> USimpleNameReferenceExpression (identifier = forEach) -> PsiMethod:forEach: forEach + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = it) -> null: null UBlockExpression -> UQualifiedReferenceExpression -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = joinToString) -> PsiMethod:joinToString: joinToString + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:joinToString) -> USimpleNameReferenceExpression (identifier = joinToString) -> PsiMethod:joinToString: joinToString UBlockExpression -> UQualifiedReferenceExpression -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = size) -> PsiMethod:size: size UBlockExpression -> UQualifiedReferenceExpression -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = indices) -> PsiMethod:getIndices: getIndices UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = util) -> PsiPackage:java.util: util @@ -41,29 +41,29 @@ UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = util) -> PsiPackage:java.util: util - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = Date) -> PsiMethod:Date: Date + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to PsiMethod:Date) -> USimpleNameReferenceExpression (identifier = Date) -> PsiMethod:Date: Date UBinaryExpression (operator = =) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = date) -> LightVariableBuilder:date: date UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = time) -> PsiMethod:setTime: setTime UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null UBlockExpression -> UQualifiedReferenceExpression -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = last) -> PsiMethod:last: last + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:last) -> USimpleNameReferenceExpression (identifier = last) -> PsiMethod:last: last UBlockExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = mutableMapOf) -> PsiMethod:mutableMapOf: mutableMapOf + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:mutableMapOf) -> USimpleNameReferenceExpression (identifier = mutableMapOf) -> PsiMethod:mutableMapOf: mutableMapOf UBinaryExpression (operator = ) -> USimpleNameReferenceExpression (identifier = to) -> PsiMethod:to: to UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = entries) -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = first) -> PsiMethod:first: first - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = setValue) -> PsiMethod:setValue: setValue + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:first) -> USimpleNameReferenceExpression (identifier = first) -> PsiMethod:first: first + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:setValue) -> USimpleNameReferenceExpression (identifier = setValue) -> PsiMethod:setValue: setValue UBinaryExpression (operator = ..) -> USimpleNameReferenceExpression (identifier = ..) -> null: null UBlockExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = intRange) -> LightVariableBuilder:intRange: intRange - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = contains) -> PsiMethod:longRangeContains: longRangeContains + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:longRangeContains) -> USimpleNameReferenceExpression (identifier = contains) -> PsiMethod:longRangeContains: longRangeContains UBinaryExpressionWithType -> USimpleNameReferenceExpression (identifier = as) -> null: null UTypeReferenceExpression (name = int) -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer - UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 2)) -> USimpleNameReferenceExpression (identifier = IntRange) -> PsiClass:IntRange: IntRange + UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 2))(resolves to PsiMethod:IntRange) -> USimpleNameReferenceExpression (identifier = IntRange) -> PsiClass:IntRange: IntRange UTypeReferenceExpression (name = A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { fun foo() {} inline fun inlineFoo() { @@ -73,7 +73,7 @@ UTypeReferenceExpression (name = A) -> USimpleNameReferenceExpression (identifie UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = t) -> Light Parameter: t - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = foo) -> KtLightMethodImpl:foo: foo + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:foo) -> USimpleNameReferenceExpression (identifier = foo) -> KtLightMethodImpl:foo: foo UTypeReferenceExpression (name = java.util.List) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A { fun foo() {} @@ -84,8 +84,8 @@ UTypeReferenceExpression (name = A) -> USimpleNameReferenceExpression (identifie UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T UBlockExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = listT) -> Light Parameter: listT - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = isEmpty) -> PsiMethod:isEmpty: isEmpty + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:isEmpty) -> USimpleNameReferenceExpression (identifier = isEmpty) -> PsiMethod:isEmpty: isEmpty UForEachExpression -> USimpleNameReferenceExpression (identifier = listT) -> Light Parameter: listT UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = a) -> VALUE_PARAMETER: a - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = foo) -> KtLightMethodImpl:foo: foo + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:foo) -> USimpleNameReferenceExpression (identifier = foo) -> KtLightMethodImpl:foo: foo diff --git a/plugins/uast-kotlin/testData/SimpleAnnotated.resolved.txt b/plugins/uast-kotlin/testData/SimpleAnnotated.resolved.txt index 7a79a2e4824..8d4e6e330c1 100644 --- a/plugins/uast-kotlin/testData/SimpleAnnotated.resolved.txt +++ b/plugins/uast-kotlin/testData/SimpleAnnotated.resolved.txt @@ -1,5 +1,5 @@ UTypeReferenceExpression (name = kotlin.Suppress) -> USimpleNameReferenceExpression (identifier = Suppress) -> PsiClass:Suppress: Suppress - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println UTypeReferenceExpression (name = kotlin.SinceKotlin) -> USimpleNameReferenceExpression (identifier = kotlin) -> PsiPackage:kotlin: kotlin UTypeReferenceExpression (name = kotlin.SinceKotlin) -> USimpleNameReferenceExpression (identifier = SinceKotlin) -> PsiClass:SinceKotlin: SinceKotlin UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String diff --git a/plugins/uast-kotlin/testData/TypeReferences.resolved.txt b/plugins/uast-kotlin/testData/TypeReferences.resolved.txt index eeaaf17f643..3d9fbed8a3e 100644 --- a/plugins/uast-kotlin/testData/TypeReferences.resolved.txt +++ b/plugins/uast-kotlin/testData/TypeReferences.resolved.txt @@ -15,16 +15,16 @@ UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifie UExpressionList (elvis) -> USimpleNameReferenceExpression (identifier = ?:) -> null: null UTypeReferenceExpression (name = java.util.List) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = at) -> LightVariableBuilder:at: at + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = at) -> LightVariableBuilder:at: at UTypeReferenceExpression (name = java.util.List) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String ULocalVariable (name = tsl) -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = tl) -> LightVariableBuilder:tl: tl - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = map) -> PsiMethod:map: map + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:map) -> USimpleNameReferenceExpression (identifier = map) -> PsiMethod:map: map UReturnExpression -> UQualifiedReferenceExpression -> null: null UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = it) -> null: null - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = toString) -> null: null + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to null) -> USimpleNameReferenceExpression (identifier = toString) -> null: null UTypeReferenceExpression (name = java.util.List>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = java.util.List) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String @@ -32,7 +32,7 @@ UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifie UTypeReferenceExpression (name = java.util.List>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = java.util.List) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) -> USimpleNameReferenceExpression (identifier = parameterizedFoo) -> KtLightMethodImpl:parameterizedFoo: parameterizedFoo + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to KtLightMethodImpl:parameterizedFoo) -> USimpleNameReferenceExpression (identifier = parameterizedFoo) -> KtLightMethodImpl:parameterizedFoo: parameterizedFoo UTypeReferenceExpression (name = java.util.List) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) -> USimpleNameReferenceExpression (identifier = emptyList) -> PsiMethod:emptyList: emptyList + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:emptyList) -> USimpleNameReferenceExpression (identifier = emptyList) -> PsiMethod:emptyList: emptyList diff --git a/plugins/uast-kotlin/tests/AbstractKotlinResolveEverythingTest.kt b/plugins/uast-kotlin/tests/AbstractKotlinResolveEverythingTest.kt index 42cb7740d79..dc4d1b1aabd 100644 --- a/plugins/uast-kotlin/tests/AbstractKotlinResolveEverythingTest.kt +++ b/plugins/uast-kotlin/tests/AbstractKotlinResolveEverythingTest.kt @@ -6,13 +6,13 @@ package org.jetbrains.uast.test.kotlin import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.psi.KtBlockExpression -import org.jetbrains.uast.UFile -import org.jetbrains.uast.UReferenceExpression +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.utils.addToStdlib.cast +import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import org.jetbrains.uast.* import org.jetbrains.uast.test.common.kotlin.IndentedPrintingVisitor import org.jetbrains.uast.test.common.kotlin.visitUFileAndGetResult import org.jetbrains.uast.test.env.kotlin.assertEqualsToFile -import org.jetbrains.uast.toUElementOfType import java.io.File @@ -23,16 +23,33 @@ abstract class AbstractKotlinResolveEverythingTest : AbstractKotlinUastTest() { private fun UFile.resolvableWithTargets() = object : IndentedPrintingVisitor(KtBlockExpression::class) { - override fun render(element: PsiElement) = element.toUElementOfType()?.let { ref -> - StringBuilder().apply { - val parent = ref.uastParent - append(parent?.asLogString()) - append(" -> ") - append(ref.asLogString()) - append(" -> ") - append(ref.resolve()) - append(": ") - append(ref.resolvedName) + override fun render(element: PsiElement) = + UastFacade.convertToAlternatives(element, arrayOf(UReferenceExpression::class.java, UCallExpression::class.java)) + .filter { + when (it) { + is UCallExpression -> it.sourcePsi.safeAs()?.calleeExpression !is KtSimpleNameExpression + else -> true + } + }.takeIf { it.any() } + ?.joinTo(StringBuilder(), "\n") { ref -> + StringBuilder().apply { + val parent = ref.uastParent + append(parent?.asLogString()) + if (parent is UCallExpression) { + append("(resolves to ${parent.resolve()})") + } + append(" -> ") + append(ref.asLogString()) + append(" -> ") + append(ref.cast().resolve()) + append(": ") + append( + when (ref) { + is UReferenceExpression -> ref.resolvedName + is UCallExpression -> "" + else -> "" + } + ) } } }.visitUFileAndGetResult(this) diff --git a/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt b/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt index 4786f3ec25f..34e5d9ba326 100644 --- a/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt +++ b/plugins/uast-kotlin/tests/KotlinUastResolveApiTest.kt @@ -7,19 +7,17 @@ package org.jetbrains.uast.test.kotlin import com.intellij.psi.PsiClassType import com.intellij.psi.PsiType +import com.intellij.psi.PsiVariable import com.intellij.testFramework.LightProjectDescriptor import junit.framework.TestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner -import org.jetbrains.uast.UElement -import org.jetbrains.uast.UQualifiedReferenceExpression -import org.jetbrains.uast.getContainingUMethod +import org.jetbrains.uast.* import org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression import org.jetbrains.uast.test.env.kotlin.findElementByText import org.jetbrains.uast.test.env.kotlin.findElementByTextFromPsi import org.jetbrains.uast.test.env.kotlin.findUElementByTextFromPsi -import org.jetbrains.uast.toUElement import org.junit.runner.RunWith @RunWith(JUnit3WithIdeaConfigurationRunner::class) @@ -287,5 +285,22 @@ class KotlinUastResolveApiTest : KotlinLightCodeInsightFixtureTestCase() { TestCase.assertEquals(PsiType.INT, functionCall.getExpressionType()) } + fun testLocalResolve() { + + myFixture.configureByText( + "MyClass.kt", """ + fun foo() { + fun bar() {} + + bar() + } + """ + ) + + val uCallExpression = myFixture.file.findElementAt(myFixture.caretOffset).toUElement().getUCallExpression().orFail("cant convert to UCallExpression") + val resolved = uCallExpression.resolve().orFail("cant resolve from $uCallExpression") as PsiVariable + TestCase.assertEquals("bar", resolved.name) + } + }