diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/controlStructures/KotlinUIfExpression.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/controlStructures/KotlinUIfExpression.kt new file mode 100644 index 00000000000..446019c6513 --- /dev/null +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/controlStructures/KotlinUIfExpression.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.kotlin + +import org.jetbrains.kotlin.psi.KtIfExpression +import org.jetbrains.uast.UElement +import org.jetbrains.uast.UIdentifier +import org.jetbrains.uast.UIfExpression + +class KotlinUIfExpression( + override val sourcePsi: KtIfExpression, + givenParent: UElement? +) : KotlinAbstractUExpression(givenParent), UIfExpression, KotlinUElementWithType, KotlinEvaluatableUElement { + override val condition by lz { + baseResolveProviderService.baseKotlinConverter.convertOrEmpty(sourcePsi.condition, this) + } + override val thenExpression by lz { + baseResolveProviderService.baseKotlinConverter.convertOrNull(sourcePsi.then, this) + } + override val elseExpression by lz { + baseResolveProviderService.baseKotlinConverter.convertOrNull(sourcePsi.`else`, this) + } + override val isTernary = false + + override val ifIdentifier: UIdentifier + get() = UIdentifier(null, this) + + override val elseIdentifier: UIdentifier? + get() = null +} diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt index 150b2ecb28d..6c8893549db 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt @@ -280,6 +280,8 @@ internal object FirKotlinConverter : BaseKotlinConverter { is KtDoWhileExpression -> expr(build(::KotlinUDoWhileExpression)) is KtWhileExpression -> expr(build(::KotlinUWhileExpression)) + is KtIfExpression -> expr(build(::KotlinUIfExpression)) + else -> expr(build(::UnknownKotlinExpression)) } } diff --git a/plugins/uast-kotlin-fir/testData/declaration/if.kt b/plugins/uast-kotlin-fir/testData/declaration/if.kt new file mode 100644 index 00000000000..3001a57aa17 --- /dev/null +++ b/plugins/uast-kotlin-fir/testData/declaration/if.kt @@ -0,0 +1,6 @@ +fun test(b: Boolean): Any { + return if (b) + 42 + else + "42" +} diff --git a/plugins/uast-kotlin-fir/testData/declaration/if.log.fe10.txt b/plugins/uast-kotlin-fir/testData/declaration/if.log.fe10.txt new file mode 100644 index 00000000000..4aa6a03392c --- /dev/null +++ b/plugins/uast-kotlin-fir/testData/declaration/if.log.fe10.txt @@ -0,0 +1,11 @@ +UFile (package = ) + UClass (name = IfKt) + UMethod (name = test) + UParameter (name = b) + UAnnotation (fqName = org.jetbrains.annotations.NotNull) + UBlockExpression + UReturnExpression + UIfExpression + USimpleNameReferenceExpression (identifier = b) + ULiteralExpression (value = 42) + ULiteralExpression (value = "42") diff --git a/plugins/uast-kotlin-fir/testData/declaration/if.log.fir.txt b/plugins/uast-kotlin-fir/testData/declaration/if.log.fir.txt new file mode 100644 index 00000000000..12ffc444efd --- /dev/null +++ b/plugins/uast-kotlin-fir/testData/declaration/if.log.fir.txt @@ -0,0 +1,10 @@ +UFile (package = ) + UClass (name = IfKt) + UMethod (name = test) + UParameter (name = b) + UBlockExpression + UReturnExpression + UIfExpression + [!] UnknownKotlinExpression (REFERENCE_EXPRESSION) + ULiteralExpression (value = "not-yet-compile-time-constant") + ULiteralExpression (value = "42") diff --git a/plugins/uast-kotlin-fir/testData/declaration/if.render.fe10.txt b/plugins/uast-kotlin-fir/testData/declaration/if.render.fe10.txt new file mode 100644 index 00000000000..b57d738e133 --- /dev/null +++ b/plugins/uast-kotlin-fir/testData/declaration/if.render.fe10.txt @@ -0,0 +1,5 @@ +public final class IfKt { + public static final fun test(@org.jetbrains.annotations.NotNull b: boolean) : java.lang.Object { + return if (b) 42 else "42" + } +} diff --git a/plugins/uast-kotlin-fir/testData/declaration/if.render.fir.txt b/plugins/uast-kotlin-fir/testData/declaration/if.render.fir.txt new file mode 100644 index 00000000000..22b339e31e5 --- /dev/null +++ b/plugins/uast-kotlin-fir/testData/declaration/if.render.fir.txt @@ -0,0 +1,5 @@ +public final class IfKt { + public static final fun test(b: boolean) : java.lang.Object { + return if ([!] UnknownKotlinExpression (REFERENCE_EXPRESSION)) "not-yet-compile-time-constant" else "42" + } +} diff --git a/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FE1UastDeclarationTestGenerated.java b/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FE1UastDeclarationTestGenerated.java index b7470759d80..49d593a4682 100644 --- a/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FE1UastDeclarationTestGenerated.java +++ b/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FE1UastDeclarationTestGenerated.java @@ -39,6 +39,11 @@ public class FE1UastDeclarationTestGenerated extends AbstractFE1UastDeclarationT runTest("plugins/uast-kotlin-fir/testData/declaration/facade.kt"); } + @TestMetadata("if.kt") + public void testIf() throws Exception { + runTest("plugins/uast-kotlin-fir/testData/declaration/if.kt"); + } + @TestMetadata("importOnDemand.kt") public void testImportOnDemand() throws Exception { runTest("plugins/uast-kotlin-fir/testData/declaration/importOnDemand.kt"); diff --git a/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FirUastDeclarationTestGenerated.java b/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FirUastDeclarationTestGenerated.java index 97f2ff4d195..1f760d2e049 100644 --- a/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FirUastDeclarationTestGenerated.java +++ b/plugins/uast-kotlin-fir/tests/org/jetbrains/uast/test/kotlin/FirUastDeclarationTestGenerated.java @@ -39,6 +39,11 @@ public class FirUastDeclarationTestGenerated extends AbstractFirUastDeclarationT runTest("plugins/uast-kotlin-fir/testData/declaration/facade.kt"); } + @TestMetadata("if.kt") + public void testIf() throws Exception { + runTest("plugins/uast-kotlin-fir/testData/declaration/if.kt"); + } + @TestMetadata("importOnDemand.kt") public void testImportOnDemand() throws Exception { runTest("plugins/uast-kotlin-fir/testData/declaration/importOnDemand.kt"); diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUIfExpression.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUIfExpression.kt deleted file mode 100644 index a5c16b93d65..00000000000 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUIfExpression.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.uast.kotlin - -import org.jetbrains.kotlin.psi.KtIfExpression -import org.jetbrains.uast.UElement -import org.jetbrains.uast.UIdentifier -import org.jetbrains.uast.UIfExpression - -class KotlinUIfExpression( - override val sourcePsi: KtIfExpression, - givenParent: UElement? -) : KotlinAbstractUExpression(givenParent), UIfExpression, KotlinUElementWithType, KotlinEvaluatableUElement { - override val condition by lz { KotlinConverter.convertOrEmpty(sourcePsi.condition, this) } - override val thenExpression by lz { KotlinConverter.convertOrNull(sourcePsi.then, this) } - override val elseExpression by lz { KotlinConverter.convertOrNull(sourcePsi.`else`, this) } - override val isTernary = false - - override val ifIdentifier: UIdentifier - get() = UIdentifier(null, this) - - override val elseIdentifier: UIdentifier? - get() = null -} \ No newline at end of file