From 63d3f90373c8fe5ed2d5d5a06b0863a413dca282 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 18 Feb 2019 10:36:04 +0300 Subject: [PATCH] New J2K: Fix labeled statement conversion --- .../conversions/LabeledStatementConversion.kt | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt index 60c592067ed..09124729aa0 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt @@ -6,25 +6,32 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.asStatement -import org.jetbrains.kotlin.nj2k.tree.JKLabeledStatement -import org.jetbrains.kotlin.nj2k.tree.JKTreeElement -import org.jetbrains.kotlin.nj2k.tree.detached -import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockImpl +import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementWithoutBracketsImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConvertedFromForLoopSyntheticWhileStatementImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl +import org.jetbrains.kotlin.utils.addToStdlib.safeAs class LabeledStatementConversion : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { - if (element !is JKLabeledStatement) return recurse(element) - val statement = element.statement as? JKKtConvertedFromForLoopSyntheticWhileStatementImpl ?: return recurse(element) + if (element !is JKExpressionStatement) return recurse(element) + val labeledStatement = element.expression as? JKLabeledStatement ?: return recurse(element) + val convertedFromForLoopSyntheticWhileStatement = labeledStatement.statement + .safeAs() + ?.block + ?.statements + ?.singleOrNull() + ?.safeAs() ?: return recurse(element) return recurse( JKBlockStatementWithoutBracketsImpl( - JKBlockImpl( - statement::variableDeclaration.detached(), - JKLabeledStatementImpl(statement::whileStatement.detached(), element::labels.detached()).asStatement() + listOf( + convertedFromForLoopSyntheticWhileStatement::variableDeclaration.detached(), + JKLabeledStatementImpl( + convertedFromForLoopSyntheticWhileStatement::whileStatement.detached(), + labeledStatement::labels.detached() + ).asStatement() ) ) )