From 62cb0d0bafe307043d546612b038930444d959f8 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 7 Jul 2014 13:52:36 +0400 Subject: [PATCH] Added util 'getParentResolvedCall', 'strict' parameter --- .../jet/lang/resolve/BindingContextUtils.kt | 15 ++++++++++++--- .../resolve/calls/AbstractResolvedCallsTest.kt | 6 ++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt index bc60ff6f478..f3a245f54c9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt @@ -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( - this, +public fun JetElement.getParentCall(context: BindingContext, strict: Boolean = true): Call? { + val callExpressionTypes = array?>( javaClass(), javaClass(), javaClass(), javaClass(), javaClass()) + + 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? { + return this?.getParentCall(context, strict)?.getResolvedCall(context) +} + public fun JetElement.getCallWithAssert(context: BindingContext): Call { return getCall(context).sure("No call for ${this.getTextWithLocation()}") } diff --git a/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt b/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt index de183ed1edc..6ec34f96a1c 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt +++ b/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt @@ -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("")) val expression = PsiTreeUtil.getParentOfType(element, javaClass()) - 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