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()
|
||||
+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))
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user