raulraja
06/22/2019, 8:38 PMdmitriy.novozhilov
06/22/2019, 10:20 PMPsiCallResolver, you can start from there
Resulting resolvedCall is created in` KotlinToResolvedCallTransformer.transformAndReport` method
But I assume that you can achieve functionality that you want via smartcast mechanism by adding to context info about that x is Option<A> without changing algorithm of descriptors creating (look at KotlinToResolvedCallTransformer.runArgumetnsCheckdmitriy.novozhilov
06/22/2019, 10:21 PMraulraja
06/22/2019, 10:52 PMraulraja
06/22/2019, 10:52 PMKotlinTypeChecker.DEFAULT with:
class KindAwareTypeChecker(val typeChecker: KotlinTypeChecker) : KotlinTypeChecker by typeChecker {
override fun isSubtypeOf(p0: KotlinType, p1: KotlinType): Boolean {
println("KindAwareTypeChecker.isSubtypeOf: $p0 <-> $p1")
return typeChecker.isSubtypeOf(p0, p1)
}
override fun equalTypes(p0: KotlinType, p1: KotlinType): Boolean {
println("KindAwareTypeChecker.equalTypes: $p0 <-> $p1")
return typeChecker.equalTypes(p0, p1)
}
}raulraja
06/22/2019, 10:53 PMraulraja
06/22/2019, 11:01 PMdmitriy.novozhilov
06/22/2019, 11:01 PMdmitriy.novozhilov
06/22/2019, 11:02 PMraulraja
06/22/2019, 11:02 PMraulraja
06/22/2019, 11:04 PMrunArgumentsCheck but not sure where it would add info to the contextraulraja
06/22/2019, 11:04 PMreplaceDataFlowInfo ?raulraja
06/22/2019, 11:13 PMDataFlowValueFactory or something similar?. Intercepting KotlinToResolvedCallTransformer.runArgumentsChecks does not seem an option. If then I realize this can’t be done in this class due to lack of access how could I intercept the PsiCallResolver instead? thanks!dmitriy.novozhilov
06/22/2019, 11:22 PMDataFlowAnalyzer?dmitriy.novozhilov
06/22/2019, 11:24 PMcheckType is most interesting method for you, inside it compiler writes to bindingContext info about smartcasts