New J2K: Fix also expression && lambda parameter types
This commit is contained in:
committed by
Ilya Kirillov
parent
d56a52fce6
commit
b396ee0cca
@@ -173,14 +173,15 @@ class JavaToJKTreeBuilder(
|
|||||||
|
|
||||||
fun PsiLambdaExpression.toJK(): JKExpression {
|
fun PsiLambdaExpression.toJK(): JKExpression {
|
||||||
return JKLambdaExpressionImpl(
|
return JKLambdaExpressionImpl(
|
||||||
with(declarationMapper) { parameterList.parameters.map { it.toJK() } },
|
|
||||||
body.let {
|
body.let {
|
||||||
when (it) {
|
when (it) {
|
||||||
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
|
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
|
||||||
is PsiCodeBlock -> JKBlockStatementImpl(with(declarationMapper) { it.toJK() })
|
is PsiCodeBlock -> JKBlockStatementImpl(with(declarationMapper) { it.toJK() })
|
||||||
else -> JKBlockStatementImpl(JKBodyStub)
|
else -> JKBlockStatementImpl(JKBodyStub)
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
|
with(declarationMapper) { parameterList.parameters.map { it.toJK() } }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JKExpression.qualified(qualifier: JKExpression?) =
|
private fun JKExpression.qualified(qualifier: JKExpression?) =
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
|
|||||||
JKExpressionListImpl(
|
JKExpressionListImpl(
|
||||||
dimensions[0],
|
dimensions[0],
|
||||||
JKLambdaExpressionImpl(
|
JKLambdaExpressionImpl(
|
||||||
statement = JKExpressionStatementImpl(buildArrayInitializer(dimensions.subList(1, dimensions.size), type))
|
JKExpressionStatementImpl(buildArrayInitializer(dimensions.subList(1, dimensions.size), type)),
|
||||||
|
emptyList()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -67,7 +68,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur
|
|||||||
var resultType = JKClassTypeImpl(
|
var resultType = JKClassTypeImpl(
|
||||||
context.symbolProvider.provideByFqName(arrayFqName(type)),
|
context.symbolProvider.provideByFqName(arrayFqName(type)),
|
||||||
if (type is JKJavaPrimitiveType) emptyList() else listOf(type),
|
if (type is JKJavaPrimitiveType) emptyList() else listOf(type),
|
||||||
Nullability.NotNull
|
Nullability.Default
|
||||||
)
|
)
|
||||||
for (i in 0 until dimensions.size - 2) {
|
for (i in 0 until dimensions.size - 2) {
|
||||||
resultType = JKClassTypeImpl(
|
resultType = JKClassTypeImpl(
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ class AssertStatementConversion(private val context: ConversionContext) : Recurs
|
|||||||
val messageExpression =
|
val messageExpression =
|
||||||
if (element.description is JKStubExpression) null
|
if (element.description is JKStubExpression) null
|
||||||
else JKLambdaExpressionImpl(
|
else JKLambdaExpressionImpl(
|
||||||
emptyList(),
|
JKExpressionStatementImpl(element::description.detached()),
|
||||||
JKExpressionStatementImpl(element::description.detached())
|
emptyList()
|
||||||
)
|
)
|
||||||
return recurse(
|
return recurse(
|
||||||
JKExpressionStatementImpl(
|
JKExpressionStatementImpl(
|
||||||
|
|||||||
+5
-1
@@ -21,7 +21,11 @@ class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : R
|
|||||||
), context.symbolProvider.provideByFqName("kotlin/also")
|
), context.symbolProvider.provideByFqName("kotlin/also")
|
||||||
).also {
|
).also {
|
||||||
it.statement.cast<JKBlockStatement>().block.statements.first().cast<JKKtAssignmentStatement>().expression =
|
it.statement.cast<JKBlockStatement>().block.statements.first().cast<JKKtAssignmentStatement>().expression =
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it.parameter))
|
JKFieldAccessExpressionImpl(
|
||||||
|
context.symbolProvider.provideUniverseSymbol(
|
||||||
|
JKParameterImpl(JKTypeElementImpl(JKContextType), JKNameIdentifierImpl("it"))
|
||||||
|
)
|
||||||
|
)//TODO introduce symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
return recurse(
|
return recurse(
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ class BlockToRunConversion(private val context: ConversionContext) : RecursiveAp
|
|||||||
|
|
||||||
element.invalidate()
|
element.invalidate()
|
||||||
val lambda = JKLambdaExpressionImpl(
|
val lambda = JKLambdaExpressionImpl(
|
||||||
emptyList(),
|
JKBlockStatementImpl(element.block),
|
||||||
JKBlockStatementImpl(element.block)
|
emptyList()
|
||||||
)
|
)
|
||||||
val call = JKKtCallExpressionImpl(runSymbol as JKMethodSymbol, JKExpressionListImpl(listOf(lambda)))
|
val call = JKKtCallExpressionImpl(runSymbol as JKMethodSymbol, JKExpressionListImpl(listOf(lambda)))
|
||||||
return recurse(call)
|
return recurse(call)
|
||||||
|
|||||||
@@ -208,8 +208,8 @@ fun useExpression(
|
|||||||
JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier)
|
JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier)
|
||||||
|
|
||||||
val lambda = JKLambdaExpressionImpl(
|
val lambda = JKLambdaExpressionImpl(
|
||||||
listOf(lambdaParameter),
|
body,
|
||||||
body
|
listOf(lambdaParameter)
|
||||||
)
|
)
|
||||||
val methodCall =
|
val methodCall =
|
||||||
JKJavaMethodCallExpressionImpl(
|
JKJavaMethodCallExpressionImpl(
|
||||||
|
|||||||
@@ -358,9 +358,9 @@ class JKClassAccessExpressionImpl(override var identifier: JKClassSymbol) : JKCl
|
|||||||
}
|
}
|
||||||
|
|
||||||
class JKLambdaExpressionImpl(
|
class JKLambdaExpressionImpl(
|
||||||
parameters: List<JKParameter> = listOf(
|
statement: JKStatement,
|
||||||
JKParameterImpl(JKTypeElementImpl(JKJavaVoidType), JKNameIdentifierImpl("it"))
|
parameters: List<JKParameter>,
|
||||||
), statement: JKStatement, returnType: JKTypeElement = JKTypeElementImpl(JKContextType)
|
returnType: JKTypeElement = JKTypeElementImpl(JKContextType)//TODO use function type
|
||||||
) : JKLambdaExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKLambdaExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var statement by child(statement)
|
override var statement by child(statement)
|
||||||
override val returnType by child(returnType)
|
override val returnType by child(returnType)
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ class JKKtOperatorImpl(override val token: JKKtOperatorToken, val methodSymbol:
|
|||||||
class JKKtAlsoCallExpressionImpl(
|
class JKKtAlsoCallExpressionImpl(
|
||||||
statement: JKStatement,
|
statement: JKStatement,
|
||||||
override val identifier: JKMethodSymbol,
|
override val identifier: JKMethodSymbol,
|
||||||
override val parameterName: String = "it",
|
|
||||||
typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl()
|
typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl()
|
||||||
) : JKKtAlsoCallExpression, JKBranchElementBase() {
|
) : JKKtAlsoCallExpression, JKBranchElementBase() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAlsoCallExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAlsoCallExpression(this, data)
|
||||||
@@ -127,19 +126,10 @@ class JKKtAlsoCallExpressionImpl(
|
|||||||
set(it) {
|
set(it) {
|
||||||
arguments.expressions.first().cast<JKLambdaExpressionImpl>().statement = it
|
arguments.expressions.first().cast<JKLambdaExpressionImpl>().statement = it
|
||||||
}
|
}
|
||||||
val parameter
|
|
||||||
get() = arguments.expressions.first().cast<JKLambdaExpression>().parameters.first()
|
|
||||||
override var arguments: JKExpressionList by child(
|
override var arguments: JKExpressionList by child(
|
||||||
JKExpressionListImpl(
|
JKExpressionListImpl(
|
||||||
listOf(
|
listOf(
|
||||||
JKLambdaExpressionImpl(
|
JKLambdaExpressionImpl(statement, emptyList())
|
||||||
listOf(
|
|
||||||
JKParameterImpl(
|
|
||||||
JKTypeElementImpl(JKJavaVoidType),
|
|
||||||
JKNameIdentifierImpl(parameterName)
|
|
||||||
)
|
|
||||||
), statement
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ interface JKKtMethodCallExpression : JKMethodCallExpression
|
|||||||
|
|
||||||
interface JKKtAlsoCallExpression : JKKtMethodCallExpression {
|
interface JKKtAlsoCallExpression : JKKtMethodCallExpression {
|
||||||
var statement: JKStatement
|
var statement: JKStatement
|
||||||
val parameterName: String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKKtLiteralExpression : JKLiteralExpression
|
interface JKKtLiteralExpression : JKLiteralExpression
|
||||||
|
|||||||
Reference in New Issue
Block a user