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