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