New J2K: Fix labeled statement conversion
This commit is contained in:
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()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user