From 8d602b9e474de094301e72d6f12d61f76d9baaa0 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 7 Nov 2018 13:24:28 +0300 Subject: [PATCH] New J2K: Add "use" expression generator --- .../org/jetbrains/kotlin/j2k/expressions.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt index 481954b131f..fcff9628761 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.j2k import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.j2k.conversions.multiResolveFqName import org.jetbrains.kotlin.j2k.conversions.resolveFqName import org.jetbrains.kotlin.j2k.tree.* @@ -106,3 +107,32 @@ fun rangeExpression( fun blockStatement(vararg statements: JKStatement) = JKBlockStatementImpl(JKBlockImpl(statements.toList())) + +fun useExpression( + receiver: JKExpression, + variableIdentifier: JKNameIdentifier, + body: JKStatement, + symbolProvider: JKSymbolProvider +): JKExpression { + val useSymbol = + symbolProvider + .provideDirectSymbol( + resolveFqName( + ClassId.fromString("kotlin.io.use"), + symbolProvider.symbolsByPsi.keys.first() + )!! + ) as JKMethodSymbol + val lambdaParameter = + JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier, JKModifierListImpl()) + + val lambda = JKLambdaExpressionImpl( + listOf(lambdaParameter), + body + ) + val methodCall = + JKJavaMethodCallExpressionImpl( + useSymbol, + JKExpressionListImpl(listOf(lambda)) + ) + return JKQualifiedExpressionImpl(receiver, JKKtQualifierImpl.DOT, methodCall) +} \ No newline at end of file