New J2K: Resolve symbols in correctly
This commit is contained in:
@@ -10,7 +10,6 @@ import com.intellij.util.IncorrectOperationException
|
||||
import org.jetbrains.kotlin.j2k.ReferenceSearcher
|
||||
import org.jetbrains.kotlin.j2k.hasWriteAccesses
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.nj2k.*
|
||||
import org.jetbrains.kotlin.nj2k.tree.*
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||
@@ -172,15 +171,13 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
||||
reversed -> downToExpression(
|
||||
start,
|
||||
convertBound(bound, if (inclusiveComparison) 0 else +1),
|
||||
context,
|
||||
psiContext
|
||||
context
|
||||
)
|
||||
bound !is JKKtLiteralExpression && !inclusiveComparison ->
|
||||
untilToExpression(
|
||||
start,
|
||||
convertBound(bound, 0),
|
||||
context,
|
||||
psiContext
|
||||
context
|
||||
)
|
||||
else -> kotlinBinaryExpression(
|
||||
start,
|
||||
@@ -234,15 +231,17 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
||||
?: indicesByArrayLength(collectionSizeExpression)
|
||||
?: return null
|
||||
|
||||
val psiContext = collectionSizeExpression.psi<PsiExpression>() ?: return null
|
||||
return if (reversed) {
|
||||
val reversedSymbol = context.symbolProvider.provideDirectSymbol(
|
||||
multiResolveFqName(ClassId.fromString("kotlin/collections/reversed"), psiContext).first()
|
||||
) as JKMethodSymbol
|
||||
JKQualifiedExpressionImpl(
|
||||
indices,
|
||||
JKKtQualifierImpl.DOT,
|
||||
JKJavaMethodCallExpressionImpl(reversedSymbol, JKArgumentListImpl())
|
||||
JKJavaMethodCallExpressionImpl(
|
||||
context.symbolProvider.provideByFqName(
|
||||
"kotlin/collections/reversed",
|
||||
multiResolve = true
|
||||
),
|
||||
JKArgumentListImpl()
|
||||
)
|
||||
)
|
||||
} else indices
|
||||
}
|
||||
@@ -266,10 +265,12 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
||||
|
||||
private fun toIndicesCall(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? {
|
||||
val psiContext = javaSizeCall.psi ?: return null
|
||||
val indiciesSymbol = context.symbolProvider.provideDirectSymbol(
|
||||
multiResolveFqName(ClassId.fromString("kotlin/collections/indices"), psiContext).first()
|
||||
) as JKMultiversePropertySymbol
|
||||
val selector = JKFieldAccessExpressionImpl(indiciesSymbol)
|
||||
val selector = JKFieldAccessExpressionImpl(
|
||||
context.symbolProvider.provideByFqName(
|
||||
"kotlin/collections/indices",
|
||||
multiResolve = true
|
||||
)
|
||||
)
|
||||
return JKQualifiedExpressionImpl(javaSizeCall::receiver.detached(), javaSizeCall.operator, selector)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,15 +6,12 @@
|
||||
package org.jetbrains.kotlin.nj2k
|
||||
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.tree.TokenSet
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||
import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.nj2k.conversions.RecursiveApplicableConversionBase
|
||||
import org.jetbrains.kotlin.nj2k.conversions.multiResolveFqName
|
||||
import org.jetbrains.kotlin.nj2k.tree.*
|
||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
@@ -91,6 +88,9 @@ private fun JKKtOperatorToken.unaryExpressionMethodType(
|
||||
if (this == KtTokens.MINUS || this == KtTokens.PLUS) {
|
||||
return operandType!!
|
||||
}
|
||||
if (this == KtTokens.EXCL) {
|
||||
return operandType!!
|
||||
}
|
||||
val classSymbol = operandType!!.classSymbol(symbolProvider)
|
||||
return when (classSymbol) {
|
||||
is JKMultiverseKtClassSymbol ->// todo look for extensions
|
||||
@@ -220,29 +220,25 @@ fun kotlinPostfixExpression(
|
||||
fun untilToExpression(
|
||||
from: JKExpression,
|
||||
to: JKExpression,
|
||||
conversionContext: ConversionContext,
|
||||
psiContext: PsiElement
|
||||
conversionContext: ConversionContext
|
||||
): JKExpression =
|
||||
rangeExpression(
|
||||
from,
|
||||
to,
|
||||
"until",
|
||||
conversionContext,
|
||||
psiContext
|
||||
conversionContext
|
||||
)
|
||||
|
||||
fun downToExpression(
|
||||
from: JKExpression,
|
||||
to: JKExpression,
|
||||
conversionContext: ConversionContext,
|
||||
psiContext: PsiElement
|
||||
conversionContext: ConversionContext
|
||||
): JKExpression =
|
||||
rangeExpression(
|
||||
from,
|
||||
to,
|
||||
"downTo",
|
||||
conversionContext,
|
||||
psiContext
|
||||
conversionContext
|
||||
)
|
||||
|
||||
fun List<JKExpression>.toExpressionList() =
|
||||
@@ -258,14 +254,17 @@ fun rangeExpression(
|
||||
from: JKExpression,
|
||||
to: JKExpression,
|
||||
operatorName: String,
|
||||
conversionContext: ConversionContext,
|
||||
psiContext: PsiElement
|
||||
): JKExpression {
|
||||
val returnType = (conversionContext.symbolProvider.provideDirectSymbol(
|
||||
multiResolveFqName(ClassId.fromString("kotlin/ranges/$operatorName"), psiContext).first()
|
||||
) as JKMethodSymbol).returnType
|
||||
return JKBinaryExpressionImpl(from, to, JKKtOperatorImpl(JKKtWordOperatorToken(operatorName), returnType!!))
|
||||
}
|
||||
conversionContext: ConversionContext
|
||||
): JKExpression =
|
||||
JKBinaryExpressionImpl(
|
||||
from,
|
||||
to,
|
||||
JKKtOperatorImpl(
|
||||
JKKtWordOperatorToken(operatorName),
|
||||
conversionContext.symbolProvider.provideByFqName<JKMethodSymbol>("kotlin.ranges.$operatorName").returnType!!
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
fun blockStatement(vararg statements: JKStatement) =
|
||||
JKBlockStatementImpl(JKBlockImpl(statements.toList()))
|
||||
|
||||
Reference in New Issue
Block a user