New J2K: Introduce context type

This commit is contained in:
Dimach
2018-07-24 11:04:18 +03:00
committed by Ilya Kirillov
parent 986b38102e
commit c43bfcb185
4 changed files with 16 additions and 8 deletions
@@ -120,7 +120,6 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
fun PsiLambdaExpression.toJK(): JKExpression {
return JKLambdaExpressionImpl(
with(declarationMapper) { parameterList.parameters.map { it.toJK() } },
JKTypeElementImpl(JKJavaVoidType),
body.let {
when (it) {
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
@@ -311,8 +311,11 @@ class NewCodeBuilder {
printer.print("var")
}
printer.printWithNoIndent(" ", localVariable.name.value, ": ")
localVariable.type.accept(this)
printer.printWithNoIndent(" ", localVariable.name.value)
if(localVariable.type.type != JKContextType) {
printer.printWithNoIndent(": ")
localVariable.type.accept(this)
}
if (localVariable.initializer !is JKStubExpression) {
printer.printWithNoIndent(" = ")
localVariable.initializer.accept(this)
@@ -325,8 +328,8 @@ class NewCodeBuilder {
when (type) {
is JKClassType ->
(type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(FqName(it).shortName().asString()) }
is JKUnresolvedClassType ->
printer.printWithNoIndent(type.name)
is JKUnresolvedClassType -> printer.printWithNoIndent(type.name)
is JKContextType -> return
else -> printer.printWithNoIndent("Unit /* TODO: ${type::class} */")
}
if (type is JKParametrizedType && type.parameters.isNotEmpty()) {
@@ -330,8 +330,9 @@ class JKMutabilityModifierImpl(override val mutability: Mutability) : JKMutabili
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitMutabilityModifier(this, data)
}
class JKLambdaExpressionImpl(parameters: List<JKParameter>, returnType: JKTypeElement, statement: JKStatement) :
JKLambdaExpression, JKBranchElementBase() {
class JKLambdaExpressionImpl(
parameters: List<JKParameter>, statement: JKStatement, returnType: JKTypeElement = JKTypeElementImpl(JKContextType)
) : JKLambdaExpression, JKBranchElementBase() {
override var statement by child(statement)
override val returnType by child(returnType)
override var parameters by children(parameters)
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
import org.jetbrains.kotlin.lexer.KtSingleValueToken
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.kotlin.j2k.ast.Nullability
class JKKtPropertyImpl(
modifierList: JKModifierList,
@@ -153,7 +154,7 @@ class JKKtAlsoCallExpressionImpl(
JKNameIdentifierImpl(parameterName),
JKModifierListImpl()
)
), JKTypeElementImpl(JKJavaVoidType), statement
), statement
)
)
)
@@ -168,6 +169,10 @@ class JKKtAssignmentStatementImpl(
}
object JKContextType : JKType {
override val nullability: Nullability
get() = Nullability.Default
}
class JKKtConstructorImpl(
name: JKNameIdentifier,
parameters: List<JKParameter>,