Skip to content

Commit 0502b4d

Browse files
committed
variadic support also for completion and navigation inside doctrine querybuilder Haehnchen#357
1 parent 2fd3f65 commit 0502b4d

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/fr/adrienbrault/idea/symfony2plugin/doctrine/querybuilder/util/MatcherUtil.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ public class MatcherUtil {
1010
private static MethodMatcher.CallToSignature[] SELECT_FIELDS = new MethodMatcher.CallToSignature[] {
1111
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "orderBy"),
1212
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "addOrderBy"),
13+
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "set"),
14+
};
15+
16+
private static MethodMatcher.CallToSignature[] SELECT_FIELDS_VARIADIC = new MethodMatcher.CallToSignature[] {
1317
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "select"),
1418
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "addSelect"),
1519
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "groupBy"),
1620
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "addGroupBy"),
17-
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\QueryBuilder", "set"),
1821
};
1922

2023
@Nullable
@@ -24,10 +27,16 @@ public static MethodMatcher.MethodMatchParameter matchPropertyField(PsiElement p
2427
return null;
2528
}
2629

27-
MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement, 0)
30+
MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterAnyMatcher(psiElement)
2831
.withSignature(SELECT_FIELDS)
2932
.match();
3033

34+
if(methodMatchParameter == null) {
35+
methodMatchParameter = new MethodMatcher.StringParameterAnyMatcher(psiElement)
36+
.withSignature(SELECT_FIELDS_VARIADIC)
37+
.match();
38+
}
39+
3140
if(methodMatchParameter == null) {
3241
methodMatchParameter = new MethodMatcher.ArrayParameterMatcher(psiElement, 0)
3342
.withSignature(SELECT_FIELDS)

src/fr/adrienbrault/idea/symfony2plugin/util/MethodMatcher.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,35 @@ public MethodMatchParameter match() {
123123

124124
}
125125

126+
public static class StringParameterAnyMatcher extends AbstractMethodParameterMatcher {
127+
128+
public StringParameterAnyMatcher(PsiElement psiElement) {
129+
super(psiElement, -1);
130+
}
131+
132+
@Nullable
133+
public MethodMatchParameter match() {
134+
135+
if (!Symfony2ProjectComponent.isEnabled(psiElement)) {
136+
return null;
137+
}
138+
139+
140+
MethodReferenceBag bag = PhpElementsUtil.getMethodParameterReferenceBag(psiElement);
141+
if(bag == null) {
142+
return null;
143+
}
144+
145+
CallToSignature matchedMethodSignature = this.isCallTo(bag.getMethodReference());
146+
if(matchedMethodSignature == null) {
147+
return null;
148+
}
149+
150+
return new MethodMatchParameter(matchedMethodSignature, bag.getParameterBag(), bag.getParameterList().getParameters(), bag.getMethodReference());
151+
}
152+
153+
}
154+
126155
public static class StringParameterRecursiveMatcher extends AbstractMethodParameterMatcher {
127156

128157
public StringParameterRecursiveMatcher(PsiElement psiElement, int parameterIndex) {

0 commit comments

Comments
 (0)