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 =
|
val operatorNames =
|
||||||
if (operatorName == "equals") listOf("equals", "compareTo")
|
if (operatorName == "equals") listOf("equals", "compareTo")
|
||||||
else listOf(operatorName)
|
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)
|
val classSymbol = leftType.classSymbol(symbolProvider)
|
||||||
return when (classSymbol) {
|
return when (classSymbol) {
|
||||||
is JKMultiverseKtClassSymbol ->
|
is JKMultiverseKtClassSymbol ->
|
||||||
@@ -53,6 +67,9 @@ private fun JKKtOperatorToken.binaryExpressionMethodSymbol(
|
|||||||
.filter { it.name in operatorNames }
|
.filter { it.name in operatorNames }
|
||||||
.mapNotNull { symbolProvider.provideDirectSymbol(it) as? JKMethodSymbol }
|
.mapNotNull { symbolProvider.provideDirectSymbol(it) as? JKMethodSymbol }
|
||||||
.firstOrNull { it.parameterTypes.singleOrNull()?.takeIf { rightType.isSubtypeOf(it, symbolProvider) } != null }!!
|
.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())
|
else -> TODO(classSymbol::class.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ fun JKExpression.type(context: ConversionContext): JKType? =
|
|||||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||||
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
is JKKtThrowExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.nothing.asString(), context.symbolProvider)
|
||||||
is JKClassAccessExpression -> null
|
is JKClassAccessExpression -> null
|
||||||
|
is JKJavaNewExpression -> JKClassTypeImpl(classSymbol)
|
||||||
|
is JKJavaInstanceOfExpression -> kotlinTypeByName(KotlinBuiltIns.FQ_NAMES._boolean.asString(), context.symbolProvider)
|
||||||
else -> TODO(this::class.java.toString())
|
else -> TODO(this::class.java.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user