New J2K: Introduce context type
This commit is contained in:
@@ -120,7 +120,6 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
fun PsiLambdaExpression.toJK(): JKExpression {
|
fun PsiLambdaExpression.toJK(): JKExpression {
|
||||||
return JKLambdaExpressionImpl(
|
return JKLambdaExpressionImpl(
|
||||||
with(declarationMapper) { parameterList.parameters.map { it.toJK() } },
|
with(declarationMapper) { parameterList.parameters.map { it.toJK() } },
|
||||||
JKTypeElementImpl(JKJavaVoidType),
|
|
||||||
body.let {
|
body.let {
|
||||||
when (it) {
|
when (it) {
|
||||||
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
|
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
|
||||||
|
|||||||
@@ -311,8 +311,11 @@ class NewCodeBuilder {
|
|||||||
printer.print("var")
|
printer.print("var")
|
||||||
}
|
}
|
||||||
|
|
||||||
printer.printWithNoIndent(" ", localVariable.name.value, ": ")
|
printer.printWithNoIndent(" ", localVariable.name.value)
|
||||||
localVariable.type.accept(this)
|
if(localVariable.type.type != JKContextType) {
|
||||||
|
printer.printWithNoIndent(": ")
|
||||||
|
localVariable.type.accept(this)
|
||||||
|
}
|
||||||
if (localVariable.initializer !is JKStubExpression) {
|
if (localVariable.initializer !is JKStubExpression) {
|
||||||
printer.printWithNoIndent(" = ")
|
printer.printWithNoIndent(" = ")
|
||||||
localVariable.initializer.accept(this)
|
localVariable.initializer.accept(this)
|
||||||
@@ -325,8 +328,8 @@ class NewCodeBuilder {
|
|||||||
when (type) {
|
when (type) {
|
||||||
is JKClassType ->
|
is JKClassType ->
|
||||||
(type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(FqName(it).shortName().asString()) }
|
(type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(FqName(it).shortName().asString()) }
|
||||||
is JKUnresolvedClassType ->
|
is JKUnresolvedClassType -> printer.printWithNoIndent(type.name)
|
||||||
printer.printWithNoIndent(type.name)
|
is JKContextType -> return
|
||||||
else -> printer.printWithNoIndent("Unit /* TODO: ${type::class} */")
|
else -> printer.printWithNoIndent("Unit /* TODO: ${type::class} */")
|
||||||
}
|
}
|
||||||
if (type is JKParametrizedType && type.parameters.isNotEmpty()) {
|
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)
|
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) :
|
class JKLambdaExpressionImpl(
|
||||||
JKLambdaExpression, JKBranchElementBase() {
|
parameters: List<JKParameter>, statement: JKStatement, returnType: JKTypeElement = JKTypeElementImpl(JKContextType)
|
||||||
|
) : JKLambdaExpression, JKBranchElementBase() {
|
||||||
override var statement by child(statement)
|
override var statement by child(statement)
|
||||||
override val returnType by child(returnType)
|
override val returnType by child(returnType)
|
||||||
override var parameters by children(parameters)
|
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.KtSingleValueToken
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
|
|
||||||
class JKKtPropertyImpl(
|
class JKKtPropertyImpl(
|
||||||
modifierList: JKModifierList,
|
modifierList: JKModifierList,
|
||||||
@@ -153,7 +154,7 @@ class JKKtAlsoCallExpressionImpl(
|
|||||||
JKNameIdentifierImpl(parameterName),
|
JKNameIdentifierImpl(parameterName),
|
||||||
JKModifierListImpl()
|
JKModifierListImpl()
|
||||||
)
|
)
|
||||||
), JKTypeElementImpl(JKJavaVoidType), statement
|
), statement
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -168,6 +169,10 @@ class JKKtAssignmentStatementImpl(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object JKContextType : JKType {
|
||||||
|
override val nullability: Nullability
|
||||||
|
get() = Nullability.Default
|
||||||
|
}
|
||||||
class JKKtConstructorImpl(
|
class JKKtConstructorImpl(
|
||||||
name: JKNameIdentifier,
|
name: JKNameIdentifier,
|
||||||
parameters: List<JKParameter>,
|
parameters: List<JKParameter>,
|
||||||
|
|||||||
Reference in New Issue
Block a user