New J2K: Fix also expression && lambda parameter types

This commit is contained in:
Ilya Kirillov
2019-01-12 02:40:02 +03:00
committed by Ilya Kirillov
parent d56a52fce6
commit b396ee0cca
9 changed files with 21 additions and 26 deletions
@@ -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(
@@ -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