From d228d6110c373f2f37a5a95c6df1d5f261eadded Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 1 Nov 2018 15:38:04 +0300 Subject: [PATCH] New J2K: Move expression creation functions to separated file --- .../conversions/BinaryExpressionConversion.kt | 3 +- .../kotlin/j2k/conversions/ForConversion.kt | 4 +- .../kotlin/j2k/conversions/expressions.kt | 55 ------------------- .../jetbrains/kotlin/j2k/tree/expressions.kt | 20 ------- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 45 --------------- .../org/jetbrains/kotlin/j2k/tree/types.kt | 7 ++- 6 files changed, 9 insertions(+), 125 deletions(-) delete mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/expressions.kt delete mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/expressions.kt diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt index 31331cfc329..7463b71875d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.j2k.tree.JKTreeElement import org.jetbrains.kotlin.j2k.tree.impl.JKBinaryExpressionImpl import org.jetbrains.kotlin.j2k.tree.impl.JKJavaOperatorImpl import org.jetbrains.kotlin.j2k.tree.impl.toKtToken +import org.jetbrains.kotlin.j2k.kotlinBinaryExpression class BinaryExpressionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { @@ -21,7 +22,7 @@ class BinaryExpressionConversion(private val context: ConversionContext) : Recur val left = recurse(element.left) val right = recurse(element.right) (element as? JKBranchElement)?.invalidate() - val ktBinaryExpression = JKBinaryExpressionImpl.createKotlinBinaryExpression(left, right, ktOperatorToken, context) + val ktBinaryExpression = kotlinBinaryExpression(left, right, ktOperatorToken, context) ?: return JKBinaryExpressionImpl(left, right, element.operator) return recurse(ktBinaryExpression) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt index 6cd375683fa..ad0e684c0b2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt @@ -158,7 +158,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl context, psiContext ) - else -> JKBinaryExpressionImpl.createKotlinBinaryExpression( + else -> kotlinBinaryExpression( start, convertBound(bound, if (inclusiveComparison) 0 else -1), JKKtSingleValueOperatorToken(KtTokens.RANGE), @@ -176,7 +176,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl } val sign = if (correction > 0) KtTokens.PLUS else KtTokens.MINUS - return JKBinaryExpressionImpl.createKotlinBinaryExpression( + return kotlinBinaryExpression( bound, JKKtLiteralExpressionImpl(Math.abs(correction).toString(), JKLiteralExpression.LiteralType.INT), JKKtSingleValueOperatorToken(sign), diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/expressions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/expressions.kt deleted file mode 100644 index 6466c77847d..00000000000 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/expressions.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.j2k.conversions - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.j2k.ConversionContext -import org.jetbrains.kotlin.j2k.tree.JKExpression -import org.jetbrains.kotlin.j2k.tree.JKKtOperatorExpression -import org.jetbrains.kotlin.j2k.tree.impl.JKKtOperatorExpressionImpl -import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol -import org.jetbrains.kotlin.name.ClassId - -fun untilToExpression( - from: JKExpression, - to: JKExpression, - conversionContext: ConversionContext, - psiContext: PsiElement -): JKKtOperatorExpression = - rangeExpression( - from, - to, - "until", - conversionContext, - psiContext - ) - -fun downToExpression( - from: JKExpression, - to: JKExpression, - conversionContext: ConversionContext, - psiContext: PsiElement -): JKKtOperatorExpression = - rangeExpression( - from, - to, - "downTo", - conversionContext, - psiContext - ) - -fun rangeExpression( - from: JKExpression, - to: JKExpression, - operatorName: String, - conversionContext: ConversionContext, - psiContext: PsiElement -): JKKtOperatorExpressionImpl { - val symbol = conversionContext.symbolProvider.provideDirectSymbol( - multiResolveFqName(ClassId.fromString("kotlin/ranges/$operatorName"), psiContext).first() - ) as JKMethodSymbol - return JKKtOperatorExpressionImpl(from, symbol, to) -} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/expressions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/expressions.kt deleted file mode 100644 index 047f5f145fe..00000000000 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/expressions.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.j2k.tree - -import org.jetbrains.kotlin.j2k.JKSymbolProvider -import org.jetbrains.kotlin.j2k.conversions.resolveFqName -import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol -import org.jetbrains.kotlin.j2k.tree.impl.JKClassTypeImpl -import org.jetbrains.kotlin.name.ClassId - -fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider): JKClassType { - val symbol = - symbolProvider.provideDirectSymbol( - resolveFqName(ClassId.fromString(name), symbolProvider.symbolsByPsi.keys.first())!! - ) as JKClassSymbol - return JKClassTypeImpl(symbol, emptyList()) -} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index 5d1b71a7555..29655960521 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -118,51 +118,6 @@ class JKBinaryExpressionImpl( override fun accept(visitor: JKVisitor, data: D): R = visitor.visitBinaryExpression(this, data) override var right by child(right) override var left by child(left) - - companion object { - private fun methodSymbolForToken( - token: JKKtOperatorToken, - leftType: JKType, - rightType: JKType, - symbolProvider: JKSymbolProvider - ): JKMethodSymbol { - val classSymbol = - when (leftType) { - is JKClassType -> leftType.classReference as JKMultiverseKtClassSymbol - is JKJavaPrimitiveType -> { - val psiClass = resolveFqName( - ClassId.fromString(leftType.jvmPrimitiveType.primitiveType.typeFqName.asString()), - symbolProvider.symbolsByPsi.keys.first() - )!! - symbolProvider.provideDirectSymbol(psiClass) as JKMultiverseKtClassSymbol - } - else -> - TODO(leftType::class.java.toString()) - } - val operatorNames = - if(token.operatorName == "equals") listOf("equals", "compareTo") - else listOf(token.operatorName) - return classSymbol.target.declarations// todo look for extensions - .asSequence() - .filterIsInstance() - .filter { it.name in operatorNames } - .mapNotNull { symbolProvider.provideDirectSymbol(it) as? JKMethodSymbol } - .firstOrNull { it.parameterTypes.singleOrNull()?.takeIf { it.isSubtypeOf(rightType, symbolProvider) } != null }!! - } - - - fun createKotlinBinaryExpression( - left: JKExpression, - right: JKExpression, - token: JKKtOperatorToken, - context: ConversionContext - ): JKBinaryExpression? { - val leftType = left.type(context) - val rightType = right.type(context) - val methodSymbol = methodSymbolForToken(token, leftType, rightType, context.symbolProvider) - return JKBinaryExpressionImpl(left, right, JKKtOperatorImpl(token, methodSymbol)) - } - } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index 566bbbe27e1..4a13e48a068 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf import org.jetbrains.kotlin.idea.caches.resolve.util.* -import org.jetbrains.kotlin.load.java.structure.impl.JavaPrimitiveTypeImpl +import org.jetbrains.kotlin.j2k.kotlinTypeByName fun JKExpression.type(context: ConversionContext): JKType = when (this) { @@ -91,7 +91,10 @@ fun JKType.toKtType(symbolProvider: JKSymbolProvider): KotlinType = when (this) { is JKClassType -> classReference!!.toKtType(symbolProvider) is JKJavaPrimitiveType -> - kotlinTypeByName(jvmPrimitiveType.primitiveType.typeFqName.asString(), symbolProvider).toKtType(symbolProvider) + kotlinTypeByName( + jvmPrimitiveType.primitiveType.typeFqName.asString(), + symbolProvider + ).toKtType(symbolProvider) else -> TODO(this::class.java.toString()) }