New J2K: Change type of JKType.classSymbol to JKClassSymbol

This commit is contained in:
Ilya Kirillov
2018-11-26 22:09:58 +03:00
committed by Ilya Kirillov
parent 2292e0b792
commit 71fcbcb60a
@@ -24,16 +24,15 @@ fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider): JKClassTyp
private fun JKType.classSymbol(symbolProvider: JKSymbolProvider) = private fun JKType.classSymbol(symbolProvider: JKSymbolProvider) =
when (this) { when (this) {
is JKClassType -> classReference as JKMultiverseKtClassSymbol is JKClassType -> classReference
is JKJavaPrimitiveType -> { is JKJavaPrimitiveType -> {
val psiClass = resolveFqName( val psiClass = resolveFqName(
ClassId.fromString(jvmPrimitiveType.primitiveType.typeFqName.asString()), ClassId.fromString(jvmPrimitiveType.primitiveType.typeFqName.asString()),
symbolProvider.symbolsByPsi.keys.first() symbolProvider.symbolsByPsi.keys.first()
)!! )!!
symbolProvider.provideDirectSymbol(psiClass) as JKMultiverseKtClassSymbol symbolProvider.provideDirectSymbol(psiClass) as JKClassSymbol
} }
else -> else -> TODO(this::class.java.toString())
TODO(this::class.java.toString())
} }
private fun JKKtOperatorToken.binaryExpressionMethodSymbol( private fun JKKtOperatorToken.binaryExpressionMethodSymbol(
@@ -44,12 +43,17 @@ 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)
return leftType.classSymbol(symbolProvider).target.declarations// todo look for extensions val classSymbol = leftType.classSymbol(symbolProvider)
.asSequence() return when (classSymbol) {
.filterIsInstance<KtNamedFunction>() is JKMultiverseKtClassSymbol ->
.filter { it.name in operatorNames } classSymbol.target.declarations
.mapNotNull { symbolProvider.provideDirectSymbol(it) as? JKMethodSymbol } .asSequence()
.firstOrNull { it.parameterTypes.singleOrNull()?.takeIf { rightType.isSubtypeOf(it, symbolProvider) } != null }!! .filterIsInstance<KtNamedFunction>()
.filter { it.name in operatorNames }
.mapNotNull { symbolProvider.provideDirectSymbol(it) as? JKMethodSymbol }
.firstOrNull { it.parameterTypes.singleOrNull()?.takeIf { rightType.isSubtypeOf(it, symbolProvider) } != null }!!
else -> TODO(classSymbol::class.toString())
}
} }
private fun JKKtOperatorToken.unaryExpressionMethodSymbol( private fun JKKtOperatorToken.unaryExpressionMethodSymbol(