New J2K: Fix binaryExpressionMethodSymbol in a case of not JKMultiverseKtClassSymbol
This commit is contained in:
committed by
Ilya Kirillov
parent
2c7e44f41e
commit
fb3c7e87a1
@@ -44,6 +44,20 @@ private fun JKKtOperatorToken.binaryExpressionMethodSymbol(
|
||||
val operatorNames =
|
||||
if (operatorName == "equals") listOf("equals", "compareTo")
|
||||
else listOf(operatorName)
|
||||
|
||||
fun PsiClass.methodSymbol() =
|
||||
allMethods
|
||||
.filter { it.name in operatorNames }
|
||||
.firstOrNull {
|
||||
it.parameterList.parameters.singleOrNull()?.takeIf {
|
||||
rightType.isSubtypeOf(
|
||||
it.type.toJK(symbolProvider),
|
||||
symbolProvider
|
||||
)
|
||||
} != null
|
||||
}?.let { symbolProvider.provideDirectSymbol(it) as JKMethodSymbol }
|
||||
|
||||
|
||||
val classSymbol = leftType.classSymbol(symbolProvider)
|
||||
return when (classSymbol) {
|
||||
is JKMultiverseKtClassSymbol ->
|
||||
@@ -53,6 +67,9 @@ private fun JKKtOperatorToken.binaryExpressionMethodSymbol(
|
||||
.filter { it.name in operatorNames }
|
||||
.mapNotNull { symbolProvider.provideDirectSymbol(it) as? JKMethodSymbol }
|
||||
.firstOrNull { it.parameterTypes.singleOrNull()?.takeIf { rightType.isSubtypeOf(it, symbolProvider) } != null }!!
|
||||
is JKUniverseClassSymbol -> classSymbol.target.psi<PsiClass>()?.methodSymbol()!!
|
||||
is JKMultiverseClassSymbol -> classSymbol.target.methodSymbol()!!
|
||||
|
||||
else -> TODO(classSymbol::class.toString())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ fun JKExpression.type(context: ConversionContext): JKType? =
|
||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
||||
is JKClassAccessExpression -> null
|
||||
is JKJavaNewExpression -> JKClassTypeImpl(classSymbol)
|
||||
is JKJavaInstanceOfExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES._boolean.asString(), context.symbolProvider)
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user