diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSwitchExpression.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSwitchExpression.kt index 70f79158dc7..5712b1f3b0c 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSwitchExpression.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUSwitchExpression.kt @@ -72,21 +72,24 @@ class KotlinUSwitchEntry( is KtBlockExpression -> exprPsi.statements.map { KotlinConverter.convertOrEmpty(it, this) } else -> listOf(KotlinConverter.convertOrEmpty(exprPsi, this)) } - expressions = userExpressions.subList(0, userExpressions.lastIndex) + object : UYieldExpression, JvmDeclarationUElementPlaceholder { - override val javaPsi: PsiElement? = null - override val sourcePsi: PsiElement? = null - override val psi: PsiElement? - get() = null - override val label: String? - get() = null - override val uastParent: UElement? - get() = this@KotlinUExpressionList - override val annotations: List - get() = emptyList() - override val expression: UExpression? - get() = userExpressions.lastOrNull()?.sourcePsi.safeAs() - ?.let { KotlinConverter.convertExpression(it, this, DEFAULT_EXPRESSION_TYPES_LIST) } - } + expressions = + if (userExpressions.isNotEmpty()) + userExpressions.subList(0, userExpressions.lastIndex) + object : UYieldExpression, JvmDeclarationUElementPlaceholder { + override val javaPsi: PsiElement? = null + override val sourcePsi: PsiElement? = null + override val psi: PsiElement? + get() = null + override val label: String? + get() = null + override val uastParent: UElement? + get() = this@KotlinUExpressionList + override val annotations: List + get() = emptyList() + override val expression: UExpression? + get() = userExpressions.lastOrNull()?.sourcePsi.safeAs() + ?.let { KotlinConverter.convertExpression(it, this, DEFAULT_EXPRESSION_TYPES_LIST) } + } + else emptyList() } } diff --git a/plugins/uast-kotlin/testData/WhenAndDestructing.kt b/plugins/uast-kotlin/testData/WhenAndDestructing.kt index da4ea1bb20c..9c377ca0bf3 100644 --- a/plugins/uast-kotlin/testData/WhenAndDestructing.kt +++ b/plugins/uast-kotlin/testData/WhenAndDestructing.kt @@ -7,6 +7,8 @@ fun getElementsAdditionalResolve(string: String): String { return "bindingContext" } + "empty-switch" -> {} + else -> { val (bindingContext, statementFilter) = arr return bindingContext diff --git a/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt b/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt index b8d0ae898d6..b7f3b82bc31 100644 --- a/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt +++ b/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt @@ -24,23 +24,27 @@ UFile (package = ) UReturnExpression UPolyadicExpression (operator = +) ULiteralExpression (value = "bindingContext") + USwitchClauseExpressionWithBody + UPolyadicExpression (operator = +) + ULiteralExpression (value = "empty-switch") + UExpressionList (when_entry) USwitchClauseExpressionWithBody UExpressionList (when_entry) UDeclarationsExpression - ULocalVariable (name = var837f1e82) + ULocalVariable (name = var837f2350) UAnnotation (fqName = null) USimpleNameReferenceExpression (identifier = arr) ULocalVariable (name = bindingContext) UAnnotation (fqName = null) UQualifiedReferenceExpression - USimpleNameReferenceExpression (identifier = var837f1e82) + USimpleNameReferenceExpression (identifier = var837f2350) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) UIdentifier (Identifier (component1)) USimpleNameReferenceExpression (identifier = , resolvesTo = null) ULocalVariable (name = statementFilter) UAnnotation (fqName = null) UQualifiedReferenceExpression - USimpleNameReferenceExpression (identifier = var837f1e82) + USimpleNameReferenceExpression (identifier = var837f2350) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) UIdentifier (Identifier (component2)) USimpleNameReferenceExpression (identifier = , resolvesTo = null) diff --git a/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt.192 b/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt.192 index b62fb8cccba..f54c38324c6 100644 --- a/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt.192 +++ b/plugins/uast-kotlin/testData/WhenAndDestructing.log.txt.192 @@ -24,23 +24,28 @@ UFile (package = ) UPolyadicExpression (operator = +) ULiteralExpression (value = "bindingContext") UBreakExpression (label = null) + USwitchClauseExpressionWithBody + UPolyadicExpression (operator = +) + ULiteralExpression (value = "empty-switch") + UExpressionList (when_entry) + UBreakExpression (label = null) USwitchClauseExpressionWithBody UExpressionList (when_entry) UDeclarationsExpression - ULocalVariable (name = var837f1e82) + ULocalVariable (name = var837f2350) UAnnotation (fqName = null) USimpleNameReferenceExpression (identifier = arr) ULocalVariable (name = bindingContext) UAnnotation (fqName = null) UQualifiedReferenceExpression - USimpleNameReferenceExpression (identifier = var837f1e82) + USimpleNameReferenceExpression (identifier = var837f2350) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) UIdentifier (Identifier (component1)) USimpleNameReferenceExpression (identifier = , resolvesTo = null) ULocalVariable (name = statementFilter) UAnnotation (fqName = null) UQualifiedReferenceExpression - USimpleNameReferenceExpression (identifier = var837f1e82) + USimpleNameReferenceExpression (identifier = var837f2350) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) UIdentifier (Identifier (component2)) USimpleNameReferenceExpression (identifier = , resolvesTo = null) diff --git a/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt b/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt index 0f32ef4ec5a..d1c48e4dc93 100644 --- a/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt +++ b/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt @@ -6,10 +6,13 @@ public final class WhenAndDestructingKt { yield return "bindingContext" } + "empty-switch" -> { + } + -> { - @null var var837f1e82: = arr - @null var bindingContext: java.lang.String = var837f1e82.() - @null var statementFilter: java.lang.String = var837f1e82.() + @null var var837f2350: = arr + @null var bindingContext: java.lang.String = var837f2350.() + @null var statementFilter: java.lang.String = var837f2350.() yield return bindingContext } diff --git a/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt.192 b/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt.192 index 91e017bb1e5..8e8f98c034d 100644 --- a/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt.192 +++ b/plugins/uast-kotlin/testData/WhenAndDestructing.render.txt.192 @@ -7,10 +7,14 @@ public final class WhenAndDestructingKt { break } + "empty-switch" -> { + break + } + -> { - @null var var837f1e82: = arr - @null var bindingContext: java.lang.String = var837f1e82.() - @null var statementFilter: java.lang.String = var837f1e82.() + @null var var837f2350: = arr + @null var bindingContext: java.lang.String = var837f2350.() + @null var statementFilter: java.lang.String = var837f2350.() return bindingContext break }