Pass KotlinBuiltIns into getExpectedTypePredicate utility

This commit is contained in:
Pavel V. Talanov
2015-09-16 15:27:42 +03:00
parent 0fc23fc426
commit d2a4235dd8
4 changed files with 16 additions and 11 deletions
@@ -69,10 +69,12 @@ fun getReceiverTypePredicate(resolvedCall: ResolvedCall<*>, receiverValue: Recei
return null
}
public fun getExpectedTypePredicate(value: PseudoValue, bindingContext: BindingContext): TypePredicate {
public fun getExpectedTypePredicate(
value: PseudoValue,
bindingContext: BindingContext,
builtIns: KotlinBuiltIns
): TypePredicate {
val pseudocode = value.createdAt?.owner ?: return AllTypes
val builtIns = KotlinBuiltIns.getInstance()
val typePredicates = LinkedHashSet<TypePredicate?>()
fun addSubtypesOf(jetType: JetType?) = typePredicates.add(jetType?.getSubtypesPredicate())
@@ -16,15 +16,16 @@
package org.jetbrains.kotlin.cfg
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.cfg.pseudocode.PseudoValue
import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeImpl
import org.jetbrains.kotlin.cfg.pseudocode.TypePredicate
import org.jetbrains.kotlin.cfg.pseudocode.getExpectedTypePredicate
import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.InstructionWithValue
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.psi.JetTreeVisitorVoid
import org.jetbrains.kotlin.resolve.BindingContext
import java.util.*
import org.jetbrains.kotlin.cfg.pseudocode.TypePredicate
import org.jetbrains.kotlin.cfg.pseudocode.getExpectedTypePredicate
import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.InstructionWithValue
public abstract class AbstractPseudoValueTest : AbstractPseudocodeTest() {
override fun dumpInstructions(pseudocode: PseudocodeImpl, out: StringBuilder, bindingContext: BindingContext) {
@@ -49,7 +50,9 @@ public abstract class AbstractPseudoValueTest : AbstractPseudocodeTest() {
element?.getText()?.replace("\\s+".toRegex(), " ") ?: ""
fun valueDecl(value: PseudoValue): String {
val typePredicate = expectedTypePredicateMap.getOrPut(value) { getExpectedTypePredicate(value, bindingContext) }
val typePredicate = expectedTypePredicateMap.getOrPut(value) {
getExpectedTypePredicate(value, bindingContext, KotlinBuiltIns.getInstance())
}
return "${value.debugName}: $typePredicate"
}