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.runArgumetnsCheck
dmitriy.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