From 07fab541fc28462af82bbe15b0e663f2ec240b4d Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 26 Feb 2024 23:42:19 -0800 Subject: [PATCH] KT UAST: always preserve receiver expression of class literal ...similar to dbaaeef (for callable reference). This time, only receiver expression is discarded if type is resolvable. Similarly, Java UAST counterpart has both information always. GitOrigin-RevId: fd1aa3cccaa0d5063e1272ff6df32f7b3815c8ce --- .../usagesInClassLiteral/expected.xml | 5 -- .../deadCode/usagesInClassLiteral/src/TC.kt | 2 +- .../KotlinUClassLiteralExpression.kt | 6 +- .../legacyRenderLog/ComplicatedTypes.log.txt | 1 + .../testData/legacyRenderLog/Reified.log.txt | 4 ++ .../UnexpectedContainerException.log.txt | 1 + .../ComplicatedTypes.types.fe10.txt | 1 + .../ComplicatedTypes.types.fir.txt | 1 + .../legacyTypes/Reified.types.fe10.txt | 4 ++ .../legacyTypes/Reified.types.fir.txt | 4 ++ ...nexpectedContainerException.types.fe10.txt | 1 + ...UnexpectedContainerException.types.fir.txt | 1 + .../ComplicatedTypes.values.fe10.txt | 1 + .../ComplicatedTypes.values.fir.txt | 1 + .../testData/legacyValues/Reified.values.txt | 4 ++ .../UnexpectedContainerException.values.txt | 1 + ....types.txt => classLiteral.types.fe10.txt} | 4 ++ .../testData/type/classLiteral.types.fir.txt | 60 +++++++++++++++++++ .../tests/testData/Reified.log.txt | 4 ++ .../UnexpectedContainerException.log-ide.txt | 1 + .../UnexpectedContainerException.log.txt | 1 + .../UnexpectedContainerException.types.txt | 1 + .../expressions/UClassLiteralExpression.kt | 1 - 23 files changed, 100 insertions(+), 10 deletions(-) rename plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/{classLiteral.types.txt => classLiteral.types.fe10.txt} (93%) create mode 100644 plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fir.txt diff --git a/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/expected.xml b/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/expected.xml index b1db08b7b0b1..5e933496b9cf 100644 --- a/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/expected.xml +++ b/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/expected.xml @@ -1,8 +1,3 @@ - - TC.kt - 7 - Parameter <code>s</code> is not used - \ No newline at end of file diff --git a/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/src/TC.kt b/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/src/TC.kt index 25034b8d4d4e..0f8bd54c8e8d 100644 --- a/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/src/TC.kt +++ b/java/java-tests/testData/inspection/jvm/deadCode/usagesInClassLiteral/src/TC.kt @@ -4,7 +4,7 @@ fun main() { fun bar( i: Int, - s: String // todo wrongly marked as unused + s: String ) { println("Foo $i") println(s::class.java) diff --git a/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUClassLiteralExpression.kt b/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUClassLiteralExpression.kt index 21ac4e54cb21..a636661935c3 100644 --- a/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUClassLiteralExpression.kt +++ b/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUClassLiteralExpression.kt @@ -13,6 +13,7 @@ class KotlinUClassLiteralExpression( ) : KotlinAbstractUExpression(givenParent), UClassLiteralExpression, KotlinUElementWithType { private val typePart = UastLazyPart() + private val expressionPart = UastLazyPart() override val type: PsiType? get() = typePart.getOrBuild { @@ -20,9 +21,8 @@ class KotlinUClassLiteralExpression( } override val expression: UExpression? - get() { - if (type != null) return null - val receiverExpression = sourcePsi.receiverExpression ?: return null + get() = expressionPart.getOrBuild { + val receiverExpression = sourcePsi.receiverExpression ?: return@getOrBuild null return baseResolveProviderService.baseKotlinConverter.convertExpression(receiverExpression, this, DEFAULT_EXPRESSION_TYPES_LIST) } } diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/ComplicatedTypes.log.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/ComplicatedTypes.log.txt index d75b897dc532..3515c1d4ef49 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/ComplicatedTypes.log.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/ComplicatedTypes.log.txt @@ -19,6 +19,7 @@ UFile (package = ) UQualifiedReferenceExpression UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = base) USimpleNameReferenceExpression (identifier = java) USimpleNameReferenceExpression (identifier = genericSuperclass) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/Reified.log.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/Reified.log.txt index 51a92e837eaa..f08d73513730 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/Reified.log.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/Reified.log.txt @@ -10,6 +10,7 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = String) USimpleNameReferenceExpression (identifier = java) UMethod (name = systemService1) UParameter (name = $this$systemService1) @@ -21,6 +22,7 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = T) USimpleNameReferenceExpression (identifier = java) UClass (name = Context) UMethod (name = ownSystemService2) @@ -31,6 +33,7 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = String) USimpleNameReferenceExpression (identifier = java) UMethod (name = Context) UMethod (name = ownSystemService1) @@ -41,4 +44,5 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = T) USimpleNameReferenceExpression (identifier = java) \ No newline at end of file diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/UnexpectedContainerException.log.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/UnexpectedContainerException.log.txt index e5240fe0ecfa..21d67c0c6142 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/UnexpectedContainerException.log.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyRenderLog/UnexpectedContainerException.log.txt @@ -22,6 +22,7 @@ UFile (package = ) USimpleNameReferenceExpression (identifier = crashMe, resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = Callback) USimpleNameReferenceExpression (identifier = java) ULambdaExpression UBlockExpression diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fe10.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fe10.txt index eddbeb168742..cdf6e56579ec 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fe10.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fe10.txt @@ -19,6 +19,7 @@ UFile (package = ) [import java.lang.reflect.ParameterizedType...] UQualifiedReferenceExpression [.java.genericSuperclass] : PsiType:Type UQualifiedReferenceExpression [.java] : PsiType: UClassLiteralExpression [] : PsiType: + USimpleNameReferenceExpression (identifier = base) [base] : PsiType: USimpleNameReferenceExpression (identifier = java) [java] : PsiType: USimpleNameReferenceExpression (identifier = genericSuperclass) [genericSuperclass] : PsiType:Type UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [getGenericSuperclass()] diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fir.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fir.txt index 8f69c5c5751b..b75539a21e4d 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fir.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/ComplicatedTypes.types.fir.txt @@ -19,6 +19,7 @@ UFile (package = ) [import java.lang.reflect.ParameterizedType...] UQualifiedReferenceExpression [TypeBase.java.genericSuperclass] : PsiType:Type UQualifiedReferenceExpression [TypeBase.java] : PsiType:Class> UClassLiteralExpression [TypeBase] : PsiType:KClass> + USimpleNameReferenceExpression (identifier = base) [base] : PsiType:TypeBase USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class> USimpleNameReferenceExpression (identifier = genericSuperclass) [genericSuperclass] : PsiType:Type UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [getGenericSuperclass()] diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fe10.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fe10.txt index 5f5f671209f1..88cef9866cb6 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fe10.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fe10.txt @@ -10,6 +10,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] UQualifiedReferenceExpression [java.lang.String.java] : PsiType:Class UClassLiteralExpression [java.lang.String] : PsiType:KClass + USimpleNameReferenceExpression (identifier = String) [String] USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class UMethod (name = systemService1) [public static fun systemService1(@org.jetbrains.annotations.NotNull $this$systemService1: test.pkg.Context) : {...}] UParameter (name = $this$systemService1) [@org.jetbrains.annotations.NotNull var $this$systemService1: test.pkg.Context] @@ -21,6 +22,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] UQualifiedReferenceExpression [T.java] : PsiType:Class UClassLiteralExpression [T] : PsiType:KClass + USimpleNameReferenceExpression (identifier = T) [T] USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class UClass (name = Context) [public final class Context {...}] UMethod (name = ownSystemService2) [public final fun ownSystemService2() : error.NonExistentClass {...}] @@ -31,6 +33,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] UQualifiedReferenceExpression [java.lang.String.java] : PsiType:Class UClassLiteralExpression [java.lang.String] : PsiType:KClass + USimpleNameReferenceExpression (identifier = String) [String] USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class UMethod (name = Context) [public fun Context() = UastEmptyExpression] UMethod (name = ownSystemService1) [public fun ownSystemService1() : {...}] @@ -41,4 +44,5 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] UQualifiedReferenceExpression [T.java] : PsiType:Class UClassLiteralExpression [T] : PsiType:KClass + USimpleNameReferenceExpression (identifier = T) [T] USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fir.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fir.txt index 314d67579246..c1073626e837 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fir.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/Reified.types.fir.txt @@ -10,6 +10,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] : PsiType: UQualifiedReferenceExpression [java.lang.String.java] : PsiType:Class UClassLiteralExpression [java.lang.String] : PsiType:KClass + USimpleNameReferenceExpression (identifier = String) [String] : PsiType:String USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class UMethod (name = systemService1) [public static fun systemService1(@org.jetbrains.annotations.NotNull $this$systemService1: test.pkg.Context) : {...}] UParameter (name = $this$systemService1) [@org.jetbrains.annotations.NotNull var $this$systemService1: test.pkg.Context] @@ -21,6 +22,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] : PsiType: UQualifiedReferenceExpression [T.java] : PsiType:Class UClassLiteralExpression [T] : PsiType:KClass + USimpleNameReferenceExpression (identifier = T) [T] : PsiType:T USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class UClass (name = Context) [public final class Context {...}] UMethod (name = ownSystemService2) [public final fun ownSystemService2() : error.NonExistentClass {...}] @@ -31,6 +33,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] : PsiType: UQualifiedReferenceExpression [java.lang.String.java] : PsiType:Class UClassLiteralExpression [java.lang.String] : PsiType:KClass + USimpleNameReferenceExpression (identifier = String) [String] : PsiType:String USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class UMethod (name = Context) [public fun Context() = UastEmptyExpression] UMethod (name = ownSystemService1) [public fun ownSystemService1() : {...}] @@ -41,4 +44,5 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] : PsiType: UQualifiedReferenceExpression [T.java] : PsiType:Class UClassLiteralExpression [T] : PsiType:KClass + USimpleNameReferenceExpression (identifier = T) [T] : PsiType:T USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fe10.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fe10.txt index 73c1af170dae..56637e39bc38 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fe10.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fe10.txt @@ -22,6 +22,7 @@ UFile (package = ) [public abstract interface Callback {...] USimpleNameReferenceExpression (identifier = crashMe, resolvesTo = null) [crashMe] : PsiType:Unit UQualifiedReferenceExpression [Callback.java] : PsiType:Class UClassLiteralExpression [Callback] : PsiType:KClass + USimpleNameReferenceExpression (identifier = Callback) [Callback] USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class ULambdaExpression [{ ...}] : PsiType:Function0 UBlockExpression [{...}] diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fir.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fir.txt index cefce13c442b..09aa415efce9 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fir.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyTypes/UnexpectedContainerException.types.fir.txt @@ -22,6 +22,7 @@ UFile (package = ) [public abstract interface Callback {...] USimpleNameReferenceExpression (identifier = crashMe, resolvesTo = null) [crashMe] : PsiType:Unit UQualifiedReferenceExpression [Callback.java] : PsiType:Class UClassLiteralExpression [Callback] : PsiType:KClass + USimpleNameReferenceExpression (identifier = Callback) [Callback] : PsiType:Callback USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class ULambdaExpression [{ ...}] : PsiType:Function0 UBlockExpression [{...}] : PsiType:Callback diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fe10.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fe10.txt index 90970c6515e4..72173b3c9886 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fe10.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fe10.txt @@ -19,6 +19,7 @@ UFile (package = ) [import java.lang.reflect.ParameterizedType...] UQualifiedReferenceExpression [.java.genericSuperclass] = external genericSuperclass() UQualifiedReferenceExpression [.java] = external java() UClassLiteralExpression [] = + USimpleNameReferenceExpression (identifier = base) [base] = Undetermined USimpleNameReferenceExpression (identifier = java) [java] = external java() USimpleNameReferenceExpression (identifier = genericSuperclass) [genericSuperclass] = external genericSuperclass() UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [getGenericSuperclass()] = external getGenericSuperclass()() diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fir.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fir.txt index 64e4a33c874b..5b1502b1e126 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fir.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/ComplicatedTypes.values.fir.txt @@ -19,6 +19,7 @@ UFile (package = ) [import java.lang.reflect.ParameterizedType...] UQualifiedReferenceExpression [TypeBase.java.genericSuperclass] = external genericSuperclass() UQualifiedReferenceExpression [TypeBase.java] = external java() UClassLiteralExpression [TypeBase] = TypeBase + USimpleNameReferenceExpression (identifier = base) [base] = Undetermined USimpleNameReferenceExpression (identifier = java) [java] = external java() USimpleNameReferenceExpression (identifier = genericSuperclass) [genericSuperclass] = external genericSuperclass() UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) [getGenericSuperclass()] = external getGenericSuperclass()() diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/Reified.values.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/Reified.values.txt index 5e662e415286..67090f394d75 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/Reified.values.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/Reified.values.txt @@ -10,6 +10,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] = external (java.lang.String.java)(external java()) UQualifiedReferenceExpression [java.lang.String.java] = external java() UClassLiteralExpression [java.lang.String] = java.lang.String + USimpleNameReferenceExpression (identifier = String) [String] = external String() USimpleNameReferenceExpression (identifier = java) [java] = external java() UMethod (name = systemService1) [public static fun systemService1(@org.jetbrains.annotations.NotNull $this$systemService1: test.pkg.Context) : {...}] UParameter (name = $this$systemService1) [@org.jetbrains.annotations.NotNull var $this$systemService1: test.pkg.Context] @@ -21,6 +22,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] = external (T.java)(external java()) UQualifiedReferenceExpression [T.java] = external java() UClassLiteralExpression [T] = T + USimpleNameReferenceExpression (identifier = T) [T] = external T() USimpleNameReferenceExpression (identifier = java) [java] = external java() UClass (name = Context) [public final class Context {...}] UMethod (name = ownSystemService2) [public final fun ownSystemService2() : error.NonExistentClass {...}] @@ -31,6 +33,7 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] = external (java.lang.String.java)(external java()) UQualifiedReferenceExpression [java.lang.String.java] = external java() UClassLiteralExpression [java.lang.String] = java.lang.String + USimpleNameReferenceExpression (identifier = String) [String] = external String() USimpleNameReferenceExpression (identifier = java) [java] = external java() UMethod (name = Context) [public fun Context() = UastEmptyExpression] UMethod (name = ownSystemService1) [public fun ownSystemService1() : {...}] @@ -41,4 +44,5 @@ UFile (package = test.pkg) [package test.pkg...] USimpleNameReferenceExpression (identifier = , resolvesTo = null) [] = external (T.java)(external java()) UQualifiedReferenceExpression [T.java] = external java() UClassLiteralExpression [T] = T + USimpleNameReferenceExpression (identifier = T) [T] = external T() USimpleNameReferenceExpression (identifier = java) [java] = external java() \ No newline at end of file diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/UnexpectedContainerException.values.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/UnexpectedContainerException.values.txt index 704c4be41434..f4416c81655a 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/UnexpectedContainerException.values.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/legacyValues/UnexpectedContainerException.values.txt @@ -46,6 +46,7 @@ UFile (package = ) [public abstract interface Callback {...] })(external java(), Undetermined) UQualifiedReferenceExpression [Callback.java] = external java() UClassLiteralExpression [Callback] = Callback + USimpleNameReferenceExpression (identifier = Callback) [Callback] = external Callback() USimpleNameReferenceExpression (identifier = java) [java] = external java() ULambdaExpression [{ ...}] = Undetermined UBlockExpression [{...}] = Nothing diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fe10.txt similarity index 93% rename from plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.txt rename to plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fe10.txt index ed32494c0552..973d7699b9c6 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.txt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fe10.txt @@ -3,6 +3,7 @@ UFile (package = ) [public final class ClassLiteralKt {...] UField (name = stringClass) [@org.jetbrains.annotations.NotNull private static final var stringClass: kotlin.reflect.KClass = java.lang.String] UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull] UClassLiteralExpression [java.lang.String] : PsiType:KClass + USimpleNameReferenceExpression (identifier = String) [String] UMethod (name = getStringClass) [public static final fun getStringClass() : kotlin.reflect.KClass = UastEmptyExpression] UMethod (name = box) [public static final fun box() : java.lang.String {...}] UBlockExpression [{...}] : PsiType:Void @@ -13,6 +14,7 @@ UFile (package = ) [public final class ClassLiteralKt {...] UDeclarationsExpression [var xClass: kotlin.reflect.KClass = java.lang.CharSequence] ULocalVariable (name = xClass) [var xClass: kotlin.reflect.KClass = java.lang.CharSequence] UClassLiteralExpression [java.lang.CharSequence] : PsiType:KClass + USimpleNameReferenceExpression (identifier = x) [x] : PsiType:CharSequence UReturnExpression [return if (xClass == stringClass) "OK" else xClass] : PsiType:Void UIfExpression [if (xClass == stringClass) "OK" else xClass] : PsiType:String UBinaryExpression (operator = ==) [xClass == stringClass] : PsiType:boolean @@ -38,7 +40,9 @@ UFile (package = ) [public final class ClassLiteralKt {...] UIfExpression [if (java.lang.Object != Foo) return false] : PsiType:Unit UBinaryExpression (operator = !=) [java.lang.Object != Foo] : PsiType:boolean UClassLiteralExpression [java.lang.Object] : PsiType:KClass + USimpleNameReferenceExpression (identifier = other) [other] : PsiType:Object UClassLiteralExpression [Foo] : PsiType:KClass + UThisExpression (label = null) [this] : PsiType:Foo UReturnExpression [return false] : PsiType:Void ULiteralExpression (value = false) [false] : PsiType:boolean UReturnExpression [return s == (other as Foo).s] : PsiType:Void diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fir.txt b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fir.txt new file mode 100644 index 000000000000..685a272c7e4b --- /dev/null +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/testData/type/classLiteral.types.fir.txt @@ -0,0 +1,60 @@ +UFile (package = ) [public final class ClassLiteralKt {...] + UClass (name = ClassLiteralKt) [public final class ClassLiteralKt {...}] + UField (name = stringClass) [@org.jetbrains.annotations.NotNull private static final var stringClass: kotlin.reflect.KClass = java.lang.String] + UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull] + UClassLiteralExpression [java.lang.String] : PsiType:KClass + USimpleNameReferenceExpression (identifier = String) [String] : PsiType:String + UMethod (name = getStringClass) [public static final fun getStringClass() : kotlin.reflect.KClass = UastEmptyExpression] + UMethod (name = box) [public static final fun box() : java.lang.String {...}] + UBlockExpression [{...}] : PsiType:Void + UDeclarationsExpression [var x: java.lang.CharSequence = ""] + ULocalVariable (name = x) [var x: java.lang.CharSequence = ""] + UPolyadicExpression (operator = +) [""] : PsiType:String + ULiteralExpression (value = "") [""] : PsiType:String + UDeclarationsExpression [var xClass: kotlin.reflect.KClass = java.lang.CharSequence] + ULocalVariable (name = xClass) [var xClass: kotlin.reflect.KClass = java.lang.CharSequence] + UClassLiteralExpression [java.lang.CharSequence] : PsiType:KClass + USimpleNameReferenceExpression (identifier = x) [x] : PsiType:CharSequence + UReturnExpression [return if (xClass == stringClass) "OK" else xClass] : PsiType:Void + UIfExpression [if (xClass == stringClass) "OK" else xClass] : PsiType:String + UBinaryExpression (operator = ==) [xClass == stringClass] : PsiType:boolean + USimpleNameReferenceExpression (identifier = xClass) [xClass] : PsiType:KClass + USimpleNameReferenceExpression (identifier = stringClass) [stringClass] : PsiType:KClass + UPolyadicExpression (operator = +) ["OK"] : PsiType:String + ULiteralExpression (value = "OK") ["OK"] : PsiType:String + UPolyadicExpression (operator = +) [xClass] : PsiType:String + USimpleNameReferenceExpression (identifier = xClass) [xClass] : PsiType:KClass + UClass (name = Foo) [public final class Foo {...}] + UField (name = s) [@org.jetbrains.annotations.NotNull private final var s: java.lang.String] + UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull] + UMethod (name = equals) [public fun equals(@org.jetbrains.annotations.Nullable other: java.lang.Object) : boolean {...}] + UParameter (name = other) [@org.jetbrains.annotations.Nullable var other: java.lang.Object] + UAnnotation (fqName = org.jetbrains.annotations.Nullable) [@org.jetbrains.annotations.Nullable] + UBlockExpression [{...}] : PsiType:Void + UIfExpression [if (other == null) return false] : PsiType:Unit + UBinaryExpression (operator = ==) [other == null] : PsiType:boolean + USimpleNameReferenceExpression (identifier = other) [other] : PsiType:Object + ULiteralExpression (value = null) [null] : PsiType:Void + UReturnExpression [return false] : PsiType:Void + ULiteralExpression (value = false) [false] : PsiType:boolean + UIfExpression [if (java.lang.Object != Foo) return false] : PsiType:Unit + UBinaryExpression (operator = !=) [java.lang.Object != Foo] : PsiType:boolean + UClassLiteralExpression [java.lang.Object] : PsiType:KClass + USimpleNameReferenceExpression (identifier = other) [other] : PsiType:Object + UClassLiteralExpression [Foo] : PsiType:KClass + UThisExpression (label = null) [this] : PsiType:Foo + UReturnExpression [return false] : PsiType:Void + ULiteralExpression (value = false) [false] : PsiType:boolean + UReturnExpression [return s == (other as Foo).s] : PsiType:Void + UBinaryExpression (operator = ==) [s == (other as Foo).s] : PsiType:boolean + USimpleNameReferenceExpression (identifier = s) [s] : PsiType:String + UQualifiedReferenceExpression [(other as Foo).s] : PsiType:String + UParenthesizedExpression [(other as Foo)] : PsiType:Foo + UBinaryExpressionWithType [other as Foo] : PsiType:Foo + USimpleNameReferenceExpression (identifier = other) [other] : PsiType:Object + UTypeReferenceExpression (name = Foo) [Foo] + USimpleNameReferenceExpression (identifier = s) [s] : PsiType:String + UMethod (name = getS) [public final fun getS() : java.lang.String = UastEmptyExpression] + UMethod (name = Foo) [public fun Foo(@org.jetbrains.annotations.NotNull s: java.lang.String) = UastEmptyExpression] + UParameter (name = s) [@org.jetbrains.annotations.NotNull var s: java.lang.String] + UAnnotation (fqName = org.jetbrains.annotations.NotNull) [@org.jetbrains.annotations.NotNull] diff --git a/plugins/kotlin/uast/uast-kotlin/tests/testData/Reified.log.txt b/plugins/kotlin/uast/uast-kotlin/tests/testData/Reified.log.txt index 029694e885dc..5cd9fb68c5f1 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/testData/Reified.log.txt +++ b/plugins/kotlin/uast/uast-kotlin/tests/testData/Reified.log.txt @@ -10,6 +10,7 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = String) USimpleNameReferenceExpression (identifier = java) UMethod (name = systemService1) UParameter (name = $this$systemService1) @@ -21,6 +22,7 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = T) USimpleNameReferenceExpression (identifier = java) UClass (name = Context) UMethod (name = ownSystemService2) @@ -31,6 +33,7 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = String) USimpleNameReferenceExpression (identifier = java) UMethod (name = Context) UMethod (name = ownSystemService1) @@ -41,4 +44,5 @@ UFile (package = test.pkg) USimpleNameReferenceExpression (identifier = , resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = T) USimpleNameReferenceExpression (identifier = java) diff --git a/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log-ide.txt b/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log-ide.txt index e5240fe0ecfa..21d67c0c6142 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log-ide.txt +++ b/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log-ide.txt @@ -22,6 +22,7 @@ UFile (package = ) USimpleNameReferenceExpression (identifier = crashMe, resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = Callback) USimpleNameReferenceExpression (identifier = java) ULambdaExpression UBlockExpression diff --git a/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log.txt b/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log.txt index e5240fe0ecfa..21d67c0c6142 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log.txt +++ b/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.log.txt @@ -22,6 +22,7 @@ UFile (package = ) USimpleNameReferenceExpression (identifier = crashMe, resolvesTo = null) UQualifiedReferenceExpression UClassLiteralExpression + USimpleNameReferenceExpression (identifier = Callback) USimpleNameReferenceExpression (identifier = java) ULambdaExpression UBlockExpression diff --git a/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.types.txt b/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.types.txt index 73c1af170dae..56637e39bc38 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.types.txt +++ b/plugins/kotlin/uast/uast-kotlin/tests/testData/UnexpectedContainerException.types.txt @@ -22,6 +22,7 @@ UFile (package = ) [public abstract interface Callback {...] USimpleNameReferenceExpression (identifier = crashMe, resolvesTo = null) [crashMe] : PsiType:Unit UQualifiedReferenceExpression [Callback.java] : PsiType:Class UClassLiteralExpression [Callback] : PsiType:KClass + USimpleNameReferenceExpression (identifier = Callback) [Callback] USimpleNameReferenceExpression (identifier = java) [java] : PsiType:Class ULambdaExpression [{ ...}] : PsiType:Function0 UBlockExpression [{...}] diff --git a/uast/uast-common/src/org/jetbrains/uast/expressions/UClassLiteralExpression.kt b/uast/uast-common/src/org/jetbrains/uast/expressions/UClassLiteralExpression.kt index 2800f278b919..75d79cc36c0c 100644 --- a/uast/uast-common/src/org/jetbrains/uast/expressions/UClassLiteralExpression.kt +++ b/uast/uast-common/src/org/jetbrains/uast/expressions/UClassLiteralExpression.kt @@ -23,7 +23,6 @@ interface UClassLiteralExpression : UExpression { /** * Returns an expression for this class literal expression. - * Might be null if the [type] is specified. */ val expression: UExpression?