Minor refactoring of GroovyPatterns.

This commit is contained in:
Sergey Evdokimov
2011-05-20 14:41:57 +04:00
parent 820446d937
commit 7b21c6dd48
3 changed files with 63 additions and 15 deletions
@@ -36,12 +36,12 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArg
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
import org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyElementPattern;
import org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import java.util.Map;
import static com.intellij.patterns.PlatformPatterns.psiElement;
import static org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns.namedArgument;
/**
* @author peter
@@ -77,7 +77,7 @@ class MapArgumentCompletionProvider extends CompletionProvider<CompletionParamet
));
ElementPattern<PsiElement> inLabel = psiElement(GroovyTokenTypes.mIDENT).withParent(psiElement(GrArgumentLabel.class).withParent(
GroovyPatterns.methodNamedParameter(null)));
namedArgument().isParameterOfMethodCall(null)));
contributor.extend(CompletionType.BASIC, inArgumentListOfCall, instance);
contributor.extend(CompletionType.BASIC, inLabel, instance);
@@ -0,0 +1,56 @@
package org.jetbrains.plugins.groovy.lang.psi.patterns;
import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.PatternCondition;
import com.intellij.patterns.StringPattern;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
/**
* @author Sergey Evdokimov
*/
public class GroovyNamedArgumentPattern extends GroovyElementPattern<GrNamedArgument, GroovyNamedArgumentPattern> {
public GroovyNamedArgumentPattern() {
super(GrNamedArgument.class);
}
public GroovyNamedArgumentPattern withLabel(@NotNull final String label) {
return with(new PatternCondition<GrNamedArgument>("left") {
public boolean accepts(@NotNull GrNamedArgument namedArgument, final ProcessingContext context) {
return label.equals(namedArgument.getLabelName());
}
});
}
public GroovyNamedArgumentPattern withLabel(@NotNull final StringPattern labelPattern) {
return with(new PatternCondition<GrNamedArgument>("left") {
public boolean accepts(@NotNull GrNamedArgument namedArgument, final ProcessingContext context) {
return labelPattern.getCondition().accepts(namedArgument.getLabelName(), context);
}
});
}
public GroovyNamedArgumentPattern withExpression(@NotNull final ElementPattern pattern) {
return with(new PatternCondition<GrNamedArgument>("left") {
public boolean accepts(@NotNull GrNamedArgument namedArgument, final ProcessingContext context) {
return pattern.getCondition().accepts(namedArgument.getExpression(), context);
}
});
}
public GroovyNamedArgumentPattern isParameterOfMethodCall(@Nullable final ElementPattern<? extends GrCall> methodCall) {
return with(new PatternCondition<GrNamedArgument>("left") {
public boolean accepts(@NotNull GrNamedArgument namedArgument, final ProcessingContext context) {
GrCall call = PsiUtil.getMethodByNamedParameter(namedArgument);
return call != null && (methodCall == null || methodCall.accepts(call, context));
}
});
}
}
@@ -92,7 +92,11 @@ public class GroovyPatterns extends PsiJavaPatterns {
}
public static GroovyElementPattern.Capture<GrLiteralImpl> namedArgumentStringLiteral() {
return stringLiteral().withParent(psiElement(GrNamedArgument.class));
return stringLiteral().withParent(namedArgument());
}
public static GroovyNamedArgumentPattern namedArgument() {
return new GroovyNamedArgumentPattern();
}
public static GroovyElementPattern.Capture<GrArgumentLabel> namedArgumentLabel(@Nullable final ElementPattern<? extends String> namePattern) {
@@ -114,18 +118,6 @@ public class GroovyPatterns extends PsiJavaPatterns {
});
}
public static GroovyElementPattern.Capture<GrNamedArgument> methodNamedParameter(@Nullable final ElementPattern<? extends GrCall> methodCall) {
return new GroovyElementPattern.Capture<GrNamedArgument>(new InitialPatternCondition<GrNamedArgument>(GrNamedArgument.class) {
public boolean accepts(@Nullable final Object o, final ProcessingContext context) {
if (!(o instanceof GrNamedArgument)) return false;
GrCall call = PsiUtil.getMethodByNamedParameter((GrNamedArgument)o);
return call != null && (methodCall == null || methodCall.accepts(call, context));
}
});
}
public static GroovyMethodCallPattern methodCall(final ElementPattern<? extends String> names, final String className) {
return new GroovyMethodCallPattern().withMethodName(names)
.withMethod(psiMethod().with(new PatternCondition<PsiMethod>("psiMethodClassNameCondition") {