New J2K: Refactor code
This commit is contained in:
committed by
Ilya Kirillov
parent
3030a03584
commit
753070b6c7
@@ -49,7 +49,7 @@ object ConversionsRunner {
|
||||
+ClassToObjectPromotionConversion()
|
||||
+PolyadicExpressionConversion()
|
||||
+SwitchStatementConversion(context)
|
||||
+InstanceofConversion()
|
||||
+InstanceOfConversion()
|
||||
+ForConversion(context)
|
||||
+LabeledStatementConversion()
|
||||
}
|
||||
|
||||
@@ -437,10 +437,8 @@ class NewCodeBuilder {
|
||||
override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) {
|
||||
printer.printWithNoIndent(FqName(javaNewExpression.constructorSymbol.fqName).shortName())//TODO import name somehow?
|
||||
printer.printWithNoIndent("(")
|
||||
//TODO use new sequence generator in future
|
||||
for ((index, argument) in javaNewExpression.arguments.expressions.withIndex()) {
|
||||
if (index > 0) printer.printWithNoIndent(", ")
|
||||
argument.accept(this)
|
||||
renderList(javaNewExpression.arguments.expressions, ", ") {
|
||||
it.accept(this)
|
||||
}
|
||||
printer.printWithNoIndent(")")
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
||||
val start = loopVar.initializer
|
||||
val operationType =
|
||||
(loopStatement.updater as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar)
|
||||
val reversed = when ((operationType as? JKJavaOperatorImpl)?.token?.token) {
|
||||
val reversed = when ((operationType as? JKJavaOperatorImpl)?.token?.psiToken) {
|
||||
JavaTokenType.PLUSPLUS -> false
|
||||
JavaTokenType.MINUSMINUS -> true
|
||||
else -> return null
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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.PsiClass
|
||||
import org.jetbrains.kotlin.j2k.tree.JKBinaryExpression
|
||||
import org.jetbrains.kotlin.j2k.tree.JKClassType
|
||||
import org.jetbrains.kotlin.j2k.tree.JKJavaInstanceOfExpression
|
||||
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
|
||||
|
||||
class InstanceOfConversion : RecursiveApplicableConversionBase() {
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
if (element !is JKJavaInstanceOfExpression) return recurse(element)
|
||||
val checkingType = element.type.type
|
||||
val type =
|
||||
if (checkingType is JKClassType && checkingType.parameters.isEmpty()) {
|
||||
val resolvedClass = checkingType.classReference?.target
|
||||
val parametersCount =
|
||||
when (resolvedClass) {
|
||||
is PsiClass -> resolvedClass.typeParameters.size
|
||||
is KtClass -> resolvedClass.typeParameters.size
|
||||
else -> 0
|
||||
}
|
||||
val typeParameters = List(parametersCount) { JKStarProjectionTypeImpl() }
|
||||
JKClassTypeImpl(
|
||||
checkingType.classReference as JKClassSymbol,
|
||||
typeParameters,
|
||||
checkingType.nullability
|
||||
)
|
||||
|
||||
} else checkingType
|
||||
return recurse(JKKtIsExpressionImpl(element.expression.also { it.detach(it.parent!!) }, JKTypeElementImpl(type)))
|
||||
}
|
||||
}
|
||||
@@ -1,45 +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.PsiClass
|
||||
import org.jetbrains.kotlin.j2k.tree.JKBinaryExpression
|
||||
import org.jetbrains.kotlin.j2k.tree.JKClassType
|
||||
import org.jetbrains.kotlin.j2k.tree.JKJavaInstanceOfExpression
|
||||
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
|
||||
|
||||
class InstanceofConversion : RecursiveApplicableConversionBase() {
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
if (element is JKJavaInstanceOfExpression) {
|
||||
val checkingType = element.type.type
|
||||
val type =
|
||||
when (checkingType) {
|
||||
is JKClassType -> {
|
||||
if (checkingType.parameters.isEmpty()) {
|
||||
val resolvedClass = checkingType.classReference?.target
|
||||
val parametersCount =
|
||||
when (resolvedClass) {
|
||||
is PsiClass -> resolvedClass.typeParameters.size
|
||||
is KtClass -> resolvedClass.typeParameters.size
|
||||
else -> 0
|
||||
}
|
||||
val typeParameters = List(parametersCount) { JKStarProjectionTypeImpl() }
|
||||
JKClassTypeImpl(checkingType.classReference as JKClassSymbol,
|
||||
typeParameters,
|
||||
checkingType.nullability)
|
||||
|
||||
} else checkingType
|
||||
}
|
||||
else -> checkingType
|
||||
}
|
||||
return recurse(JKKtIsExpressionImpl(element.expression.also { it.detach(it.parent!!) }, JKTypeElementImpl(type)))
|
||||
}
|
||||
return recurse(element)
|
||||
}
|
||||
}
|
||||
@@ -64,9 +64,9 @@ class JKJavaModifierImpl(override val type: JKJavaModifier.JavaModifierType) : J
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaModifier(this, data)
|
||||
}
|
||||
|
||||
class JKJavaOperatorToken(val token: IElementType) : JKOperatorToken {
|
||||
class JKJavaOperatorToken(val psiToken: IElementType) : JKOperatorToken {
|
||||
override val text: String
|
||||
get() = when (token) {
|
||||
get() = when (psiToken) {
|
||||
JavaTokenType.EQ -> "="
|
||||
JavaTokenType.EQEQ -> "=="
|
||||
JavaTokenType.NE -> "!="
|
||||
@@ -101,12 +101,12 @@ class JKJavaOperatorToken(val token: IElementType) : JKOperatorToken {
|
||||
JavaTokenType.GTGTGTEQ -> "ushr"
|
||||
JavaTokenType.PLUSPLUS -> "++"
|
||||
JavaTokenType.MINUSMINUS -> "--"
|
||||
else -> TODO(token.toString())
|
||||
else -> TODO(psiToken.toString())
|
||||
}
|
||||
}
|
||||
|
||||
fun JKJavaOperatorToken.toKtToken(): JKKtOperatorToken =
|
||||
when (this.token) {
|
||||
when (this.psiToken) {
|
||||
JavaTokenType.DIV -> JKKtSingleValueOperatorToken(KtTokens.DIV)
|
||||
JavaTokenType.MINUS -> JKKtSingleValueOperatorToken(KtTokens.MINUS)
|
||||
JavaTokenType.ANDAND -> JKKtSingleValueOperatorToken(KtTokens.ANDAND)
|
||||
@@ -138,7 +138,7 @@ fun JKJavaOperatorToken.toKtToken(): JKKtOperatorToken =
|
||||
JavaTokenType.GTGTGTEQ -> JKKtWordOperatorToken("ushr")
|
||||
JavaTokenType.XOREQ -> JKKtWordOperatorToken("xor")
|
||||
|
||||
else -> TODO(this.token.toString())
|
||||
else -> TODO(this.psiToken.toString())
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ class JKJavaOperatorImpl private constructor(psiToken: IElementType) : JKOperato
|
||||
override val token: JKJavaOperatorToken = JKJavaOperatorToken(psiToken)
|
||||
|
||||
override val precedence: Int
|
||||
get() = when (token.token) {
|
||||
get() = when (token.psiToken) {
|
||||
JavaTokenType.ASTERISK, JavaTokenType.DIV, JavaTokenType.PERC -> 3
|
||||
JavaTokenType.PLUS, JavaTokenType.MINUS -> 4
|
||||
KtTokens.ELVIS -> 7
|
||||
|
||||
@@ -22,9 +22,7 @@ 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
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.assertedCast
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||
|
||||
class JKKtPropertyImpl(
|
||||
@@ -85,12 +83,12 @@ class JKKtLiteralExpressionImpl(
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtLiteralExpression(this, data)
|
||||
}
|
||||
|
||||
class JKKtSingleValueOperatorToken(val token: KtSingleValueToken) : JKKtOperatorToken {
|
||||
class JKKtSingleValueOperatorToken(val psiToken: KtSingleValueToken) : JKKtOperatorToken {
|
||||
override val operatorName: String
|
||||
get() = OperatorConventions.getNameForOperationSymbol(token, true, true)?.identifier
|
||||
?: OperatorConventions.BOOLEAN_OPERATIONS[token]?.identifier
|
||||
?: TODO(token.value)
|
||||
override val text: String = token.value
|
||||
get() = OperatorConventions.getNameForOperationSymbol(psiToken, true, true)?.identifier
|
||||
?: OperatorConventions.BOOLEAN_OPERATIONS[psiToken]?.identifier
|
||||
?: TODO(psiToken.value)
|
||||
override val text: String = psiToken.value
|
||||
}
|
||||
|
||||
class JKKtWordOperatorToken(override val text: String) : JKKtOperatorToken {
|
||||
|
||||
@@ -48,7 +48,7 @@ interface JKMethodSymbol : JKNamedSymbol {
|
||||
|
||||
interface JKFieldSymbol : JKNamedSymbol {
|
||||
override val fqName: String
|
||||
val filedType: JKType
|
||||
val fieldType: JKType
|
||||
}
|
||||
|
||||
class JKUniverseClassSymbol : JKClassSymbol, JKUniverseSymbol<JKClass> {
|
||||
@@ -133,7 +133,7 @@ class JKMultiverseFunctionSymbol(override val target: KtNamedFunction, private v
|
||||
}
|
||||
|
||||
class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKField> {
|
||||
override val filedType: JKType
|
||||
override val fieldType: JKType
|
||||
get() = target.type.type
|
||||
override val name: String
|
||||
get() = target.name.value
|
||||
@@ -145,7 +145,7 @@ class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKField> {
|
||||
}
|
||||
|
||||
class JKMultiverseFieldSymbol(override val target: PsiField, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
override val filedType: JKType
|
||||
override val fieldType: JKType
|
||||
get() = target.type.toJK(symbolProvider)
|
||||
override val name: String
|
||||
get() = target.name
|
||||
@@ -156,7 +156,7 @@ class JKMultiverseFieldSymbol(override val target: PsiField, private val symbolP
|
||||
}
|
||||
|
||||
class JKMultiversePropertySymbol(override val target: KtProperty, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
override val filedType: JKType
|
||||
override val fieldType: JKType
|
||||
get() = target.typeReference!!.typeElement!!.toJK(symbolProvider)
|
||||
override val name: String
|
||||
get() = target.name!!
|
||||
@@ -167,7 +167,7 @@ class JKMultiversePropertySymbol(override val target: KtProperty, private val sy
|
||||
}
|
||||
|
||||
class JKUnresolvedField(override val target: PsiReference, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
override val filedType: JKType
|
||||
override val fieldType: JKType
|
||||
get() {
|
||||
val resolvedType = (target as? PsiReferenceExpressionImpl)?.type
|
||||
if (resolvedType != null) return resolvedType.toJK(symbolProvider)
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference
|
||||
import com.intellij.util.reverse
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
@@ -16,12 +15,9 @@ import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||
import org.jetbrains.kotlin.j2k.conversions.resolveFqName
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtTypeElement
|
||||
import org.jetbrains.kotlin.psi.KtTypeReference
|
||||
import org.jetbrains.kotlin.psi.KtUserType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||
|
||||
@@ -32,7 +28,7 @@ fun JKExpression.type(context: ConversionContext): JKType =
|
||||
is JKLiteralExpression -> type.toJkType(context.symbolProvider)
|
||||
is JKBinaryExpression -> (operator as JKKtOperatorImpl).methodSymbol.returnType
|
||||
is JKMethodCallExpression -> identifier.returnType
|
||||
is JKFieldAccessExpressionImpl -> identifier.filedType
|
||||
is JKFieldAccessExpressionImpl -> identifier.fieldType
|
||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user