New J2K: Change type of JKType.classSymbol to JKClassSymbol
This commit is contained in:
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(
|
||||||
|
|||||||
Reference in New Issue
Block a user