Added util 'getParentResolvedCall', 'strict' parameter

This commit is contained in:
Svetlana Isakova
2014-07-07 13:52:36 +04:00
parent e62b4cfb5f
commit 62cb0d0baf
2 changed files with 14 additions and 7 deletions
@@ -71,11 +71,16 @@ public fun JetElement.getCall(context: BindingContext): Call? {
return context[CALL, element]
}
public fun JetExpression.getParentCall(context: BindingContext): Call? {
val parent = PsiTreeUtil.getNonStrictParentOfType<JetElement>(
this,
public fun JetElement.getParentCall(context: BindingContext, strict: Boolean = true): Call? {
val callExpressionTypes = array<Class<out JetElement>?>(
javaClass<JetSimpleNameExpression>(), javaClass<JetCallElement>(), javaClass<JetBinaryExpression>(),
javaClass<JetUnaryExpression>(), javaClass<JetArrayAccessExpression>())
val parent = if (strict) {
PsiTreeUtil.getParentOfType(this, *callExpressionTypes)
} else {
PsiTreeUtil.getNonStrictParentOfType(this, *callExpressionTypes)
}
return parent?.getCall(context)
}
@@ -87,6 +92,10 @@ public fun JetElement?.getResolvedCall(context: BindingContext): ResolvedCall<ou
return this?.getCall(context)?.getResolvedCall(context)
}
public fun JetElement?.getParentResolvedCall(context: BindingContext, strict: Boolean = true): ResolvedCall<out CallableDescriptor>? {
return this?.getParentCall(context, strict)?.getResolvedCall(context)
}
public fun JetElement.getCallWithAssert(context: BindingContext): Call {
return getCall(context).sure("No call for ${this.getTextWithLocation()}")
}
@@ -35,10 +35,9 @@ import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.jet.lang.psi.ValueArgument
import org.jetbrains.jet.lang.psi.JetPsiFactory
import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getParentCall
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.jet.lang.resolve.calls.model.VariableAsFunctionResolvedCall
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getResolvedCallWithAssert
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getParentResolvedCall
public abstract class AbstractResolvedCallsTest() : JetLiteFixture() {
override fun createEnvironment(): JetCoreEnvironment = createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY)
@@ -51,9 +50,8 @@ public abstract class AbstractResolvedCallsTest() : JetLiteFixture() {
val element = jetFile.findElementAt(text.indexOf("<caret>"))
val expression = PsiTreeUtil.getParentOfType(element, javaClass<JetExpression>())
val call = expression?.getParentCall(bindingContext)
val cachedCall = call?.getResolvedCallWithAssert(bindingContext)
val cachedCall = expression?.getParentResolvedCall(bindingContext, strict = false)
val resolvedCall = if (cachedCall !is VariableAsFunctionResolvedCall) cachedCall
else if ("(" == element?.getText()) cachedCall.functionCall