summaryrefslogtreecommitdiff
path: root/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java')
-rw-r--r--plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java
index 4bedf1db1185..535729946558 100644
--- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java
+++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ClosureMissingMethodContributor.java
@@ -16,10 +16,13 @@
package org.jetbrains.plugins.groovy.lang.resolve;
import com.intellij.openapi.extensions.ExtensionPointName;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.ResolveState;
import com.intellij.psi.scope.PsiScopeProcessor;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
+import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceExpressionImpl;
+import org.jetbrains.plugins.groovy.lang.resolve.processors.ClassHint;
/**
* @author Sergey Evdokimov
@@ -28,6 +31,20 @@ public abstract class ClosureMissingMethodContributor {
public static final ExtensionPointName<ClosureMissingMethodContributor> EP_NAME = ExtensionPointName.create("org.intellij.groovy.closureMissingMethodContributor");
+ public static boolean processMethodsFromClosures(GrReferenceExpressionImpl ref, PsiScopeProcessor processor) {
+ for (PsiElement e = ref.getContext(); e != null; e = e.getContext()) {
+ if (e instanceof GrClosableBlock) {
+ ResolveState state = ResolveState.initial().put(ClassHint.RESOLVE_CONTEXT, e);
+ for (ClosureMissingMethodContributor contributor : EP_NAME.getExtensions()) {
+ if (!contributor.processMembers((GrClosableBlock)e, processor, ref, state)) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
public abstract boolean processMembers(GrClosableBlock closure, PsiScopeProcessor processor, GrReferenceExpression refExpr, ResolveState state);
}