New J2K: Add assert statement conversion

This commit is contained in:
Ilya Kirillov
2018-11-22 13:05:28 +03:00
committed by Ilya Kirillov
parent 633c29a2de
commit 0e9abf8ca3
4 changed files with 59 additions and 3 deletions
@@ -46,6 +46,7 @@ object ConversionsRunner {
+JavaMethodToKotlinFunctionConversion()
+MainFunctionConversion()
+LiteralConversion()
+AssertStatementConversion(context)
+InnerClassConversion()
+ModifiersConversion(context)
+StaticsToCompanionExtractConversion()
@@ -368,8 +368,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
is PsiExpressionStatement -> JKExpressionStatementImpl(with(expressionTreeMapper) { expression.toJK() })
is PsiReturnStatement -> JKReturnStatementImpl(with(expressionTreeMapper) { returnValue.toJK() })
is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK())
is PsiAssertStatement -> JKJavaAssertStatementImpl(with(expressionTreeMapper) { assertCondition.toJK() },
with(expressionTreeMapper) { assertDescription.toJK() })
is PsiAssertStatement ->
JKJavaAssertStatementImpl(
with(expressionTreeMapper) { assertCondition.toJK() },
with(expressionTreeMapper) { assertDescription?.toJK() } ?: JKStubExpressionImpl())
is PsiIfStatement ->
if (elseElement == null)
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
)
)
)
}
}
@@ -169,4 +169,22 @@ fun useExpression(
JKExpressionListImpl(listOf(lambda))
)
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))
)