Added util 'getParentResolvedCall', 'strict' parameter
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user