New J2K: Add assert statement conversion
This commit is contained in:
committed by
Ilya Kirillov
parent
633c29a2de
commit
0e9abf8ca3
@@ -46,6 +46,7 @@ object ConversionsRunner {
|
|||||||
+JavaMethodToKotlinFunctionConversion()
|
+JavaMethodToKotlinFunctionConversion()
|
||||||
+MainFunctionConversion()
|
+MainFunctionConversion()
|
||||||
+LiteralConversion()
|
+LiteralConversion()
|
||||||
|
+AssertStatementConversion(context)
|
||||||
+InnerClassConversion()
|
+InnerClassConversion()
|
||||||
+ModifiersConversion(context)
|
+ModifiersConversion(context)
|
||||||
+StaticsToCompanionExtractConversion()
|
+StaticsToCompanionExtractConversion()
|
||||||
|
|||||||
@@ -368,8 +368,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
is PsiExpressionStatement -> JKExpressionStatementImpl(with(expressionTreeMapper) { expression.toJK() })
|
is PsiExpressionStatement -> JKExpressionStatementImpl(with(expressionTreeMapper) { expression.toJK() })
|
||||||
is PsiReturnStatement -> JKReturnStatementImpl(with(expressionTreeMapper) { returnValue.toJK() })
|
is PsiReturnStatement -> JKReturnStatementImpl(with(expressionTreeMapper) { returnValue.toJK() })
|
||||||
is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK())
|
is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK())
|
||||||
is PsiAssertStatement -> JKJavaAssertStatementImpl(with(expressionTreeMapper) { assertCondition.toJK() },
|
is PsiAssertStatement ->
|
||||||
with(expressionTreeMapper) { assertDescription.toJK() })
|
JKJavaAssertStatementImpl(
|
||||||
|
with(expressionTreeMapper) { assertCondition.toJK() },
|
||||||
|
with(expressionTreeMapper) { assertDescription?.toJK() } ?: JKStubExpressionImpl())
|
||||||
is PsiIfStatement ->
|
is PsiIfStatement ->
|
||||||
if (elseElement == null)
|
if (elseElement == null)
|
||||||
JKIfStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK())
|
JKIfStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK())
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. 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.kotlin.j2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.j2k.*
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKExpressionStatementImpl
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaOperatorImpl
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKLambdaExpressionImpl
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.toKtToken
|
||||||
|
|
||||||
|
|
||||||
|
class AssertStatementConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
|
if (element !is JKJavaAssertStatement) return recurse(element)
|
||||||
|
val messageExpression =
|
||||||
|
if (element.description is JKStubExpression) null
|
||||||
|
else JKLambdaExpressionImpl(
|
||||||
|
emptyList(),
|
||||||
|
JKExpressionStatementImpl(element::description.detached())
|
||||||
|
)
|
||||||
|
return recurse(
|
||||||
|
JKExpressionStatementImpl(
|
||||||
|
kotlinAssert(
|
||||||
|
element::condition.detached(),
|
||||||
|
messageExpression,
|
||||||
|
context.symbolProvider
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -170,3 +170,21 @@ fun useExpression(
|
|||||||
)
|
)
|
||||||
return JKQualifiedExpressionImpl(receiver, JKKtQualifierImpl.DOT, methodCall)
|
return JKQualifiedExpressionImpl(receiver, JKKtQualifierImpl.DOT, methodCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun <reified Symbol : JKSymbol> symbolByName(name: String, symbolProvider: JKSymbolProvider): Symbol =
|
||||||
|
symbolProvider
|
||||||
|
.provideDirectSymbol(
|
||||||
|
resolveFqName(
|
||||||
|
ClassId.fromString(name),
|
||||||
|
symbolProvider.symbolsByPsi.keys.first()
|
||||||
|
)!!
|
||||||
|
) as Symbol
|
||||||
|
|
||||||
|
fun kotlinAssert(assertion: JKExpression, message: JKExpression?, symbolProvider: JKSymbolProvider) =
|
||||||
|
JKKtCallExpressionImpl(
|
||||||
|
JKUnresolvedMethod(//TODO resolve assert
|
||||||
|
"assert",
|
||||||
|
kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.unit.asString(), symbolProvider)
|
||||||
|
),
|
||||||
|
JKExpressionListImpl(listOfNotNull(assertion, message))
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user