diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index 07511d17085..7c190eff5a8 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -31,7 +31,7 @@ object ConversionsRunner { JavaMethodToKotlinFunctionConversion().runConversion(it, context) LiteralConversion().runConversion(it, context) ModifiersConversion().runConversion(it, context) - BinaryExpressionConverter().runConversion(it, context) + BinaryExpressionConversion().runConversion(it, context) } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 411392c5162..ec247771070 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.j2k.tree.impl.JKBodyStub import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol import org.jetbrains.kotlin.j2k.tree.impl.modality import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitorVoid -import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.utils.Printer @@ -39,11 +38,6 @@ class NewCodeBuilder { JKClass.ClassKind.INTERFACE -> "interface" } - private fun operatorString(operator: JKOperator): String { - return (operator.token as? KtSingleValueToken)?.value ?: "TODO: $operator" - - } - inner class Visitor : JKVisitorVoid { override fun visitTreeElement(treeElement: JKTreeElement) { printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */") @@ -144,23 +138,23 @@ class NewCodeBuilder { override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) { binaryExpression.left.accept(this) printer.printWithNoIndent(" ") - printer.printWithNoIndent(operatorString(binaryExpression.operator)) + printer.printWithNoIndent(binaryExpression.operator.operatorText) printer.printWithNoIndent(" ") binaryExpression.right.accept(this) } - override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression) { - printer.printWithNoIndent(ktLiteralExpression.literal) + override fun visitLiteralExpression(literalExpression: JKLiteralExpression) { + printer.printWithNoIndent(literalExpression.literal) } override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) { - printer.printWithNoIndent(operatorString(prefixExpression.operator)) + printer.printWithNoIndent(prefixExpression.operator.operatorText) prefixExpression.expression.accept(this) } override fun visitPostfixExpression(postfixExpression: JKPostfixExpression) { postfixExpression.expression.accept(this) - printer.printWithNoIndent(operatorString(postfixExpression.operator)) + printer.printWithNoIndent(postfixExpression.operator.operatorText) } override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConverter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt similarity index 90% rename from j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConverter.kt rename to j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt index b37bc520421..e98a43acec3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConverter.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/BinaryExpressionConversion.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.j2k.tree.JKTreeElement import org.jetbrains.kotlin.j2k.tree.impl.JKKtOperatorImpl -class BinaryExpressionConverter : RecursiveApplicableConversionBase() { +class BinaryExpressionConversion : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { return if (element is JKBinaryExpression) element.also { element.operator = JKKtOperatorImpl.javaToKotlinOperator[element.operator] ?: element.operator diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/LiteralConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/LiteralConversion.kt index 863e521ae2e..6fa3c7b4de1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/LiteralConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/LiteralConversion.kt @@ -103,5 +103,4 @@ class LiteralConversion : RecursiveApplicableConversionBase() { element.type ) } - } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index bcce8a9fc98..4305110a909 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -62,7 +62,10 @@ class JKJavaModifierImpl(override val type: JKJavaModifier.JavaModifierType) : J override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaModifier(this, data) } -class JKJavaOperatorImpl private constructor(override val token: IElementType) : JKOperator { +class JKJavaOperatorImpl private constructor(val token: IElementType) : JKOperator { + override val operatorText: String + get() = TODO(token.toString()) + companion object { val tokenToOperator = OPERATION_BIT_SET.types.associate { it to JKJavaOperatorImpl(it) 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 3121ff6292a..adc39bf45b3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -192,6 +192,8 @@ class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase( get() = value.toString() override val type: LiteralType get() = BOOLEAN + + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitLiteralExpression(this, data) } class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) : diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt index 4c491301005..b9c8580de38 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -17,9 +17,9 @@ package org.jetbrains.kotlin.j2k.tree.impl import com.intellij.psi.JavaTokenType -import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor +import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens class JKKtPropertyImpl( @@ -82,10 +82,13 @@ class JKKtLiteralExpressionImpl( override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtLiteralExpression(this, data) } -class JKKtOperatorImpl private constructor(override val token: IElementType) : JKOperator, JKElementBase() { +class JKKtOperatorImpl private constructor(val token: KtSingleValueToken) : JKOperator, JKElementBase() { + override val operatorText: String + get() = token.value + companion object { - val tokenToOperator = KtTokens.OPERATIONS.types.associate { - it to JKKtOperatorImpl(it) + val tokenToOperator = KtTokens.OPERATIONS.types.filter { it is KtSingleValueToken }.associate { + it to JKKtOperatorImpl(it as KtSingleValueToken) } val javaToKotlinOperator = mutableMapOf() @@ -97,13 +100,25 @@ class JKKtOperatorImpl private constructor(override val token: IElementType) : J this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.ANDAND]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.ANDAND]!! this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.OROR]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.OROR]!! this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.PLUS]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.PLUS]!! + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.ASTERISK]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.MUL]!! this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GT]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.GT]!! + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GE]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.GTEQ]!! this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LT]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.LT]!! + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LE]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.LTEQ]!! + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.PERC]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.PERC]!! + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.AND]!!] = JKKtWordOperatorImpl("and") + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.OR]!!] = JKKtWordOperatorImpl("or") + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.XOR]!!] = JKKtWordOperatorImpl("xor") + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GTGTGT]!!] = JKKtWordOperatorImpl("ushr") + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GTGT]!!] = JKKtWordOperatorImpl("shr") + this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LTLT]!!] = JKKtWordOperatorImpl("shl") } } } } +class JKKtWordOperatorImpl constructor(override val operatorText: String) : JKOperator, JKElementBase() + class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtModifier(this, data) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt index 7e554771c67..7f3789d01a0 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt @@ -16,13 +16,12 @@ package org.jetbrains.kotlin.j2k.tree -import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType interface JKOperator { - val token: IElementType + val operatorText: String } interface JKQualifier