New J2K: Fix labeled statement conversion

This commit is contained in:
Ilya Kirillov
2019-02-18 10:36:04 +03:00
committed by Ilya Kirillov
parent 0b92b3160f
commit 63d3f90373
@@ -6,25 +6,32 @@
package org.jetbrains.kotlin.nj2k.conversions package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.asStatement import org.jetbrains.kotlin.nj2k.asStatement
import org.jetbrains.kotlin.nj2k.tree.JKLabeledStatement import org.jetbrains.kotlin.nj2k.tree.*
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.impl.JKBlockStatementWithoutBracketsImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementWithoutBracketsImpl
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConvertedFromForLoopSyntheticWhileStatementImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConvertedFromForLoopSyntheticWhileStatementImpl
import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class LabeledStatementConversion : RecursiveApplicableConversionBase() { class LabeledStatementConversion : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement { override fun applyToElement(element: JKTreeElement): JKTreeElement {
if (element !is JKLabeledStatement) return recurse(element) if (element !is JKExpressionStatement) return recurse(element)
val statement = element.statement as? JKKtConvertedFromForLoopSyntheticWhileStatementImpl ?: return recurse(element) val labeledStatement = element.expression as? JKLabeledStatement ?: return recurse(element)
val convertedFromForLoopSyntheticWhileStatement = labeledStatement.statement
.safeAs<JKBlockStatement>()
?.block
?.statements
?.singleOrNull()
?.safeAs<JKKtConvertedFromForLoopSyntheticWhileStatementImpl>() ?: return recurse(element)
return recurse( return recurse(
JKBlockStatementWithoutBracketsImpl( JKBlockStatementWithoutBracketsImpl(
JKBlockImpl( listOf(
statement::variableDeclaration.detached(), convertedFromForLoopSyntheticWhileStatement::variableDeclaration.detached(),
JKLabeledStatementImpl(statement::whileStatement.detached(), element::labels.detached()).asStatement() JKLabeledStatementImpl(
convertedFromForLoopSyntheticWhileStatement::whileStatement.detached(),
labeledStatement::labels.detached()
).asStatement()
) )
) )
) )