Skip to content

Commit 8548eb3

Browse files
committed
prevent duplicate complete for already known path / url twig lookup elements
1 parent 53d2838 commit 8548eb3

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/routing/PhpRouteReferenceContributor.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.intellij.psi.*;
55
import com.intellij.util.ProcessingContext;
66
import com.jetbrains.php.lang.PhpLanguage;
7+
import com.jetbrains.php.lang.psi.elements.MethodReference;
8+
import com.jetbrains.php.lang.psi.elements.PhpExpression;
79
import com.jetbrains.php.lang.psi.elements.StringLiteralExpression;
810
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
911
import fr.adrienbrault.idea.symfony2plugin.util.MethodMatcher;
@@ -50,9 +52,17 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar psiReferen
5052
new PsiReferenceProvider() {
5153
@NotNull
5254
@Override
53-
public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) {
55+
public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) {
56+
57+
MethodMatcher.MethodMatchParameter matchedSignatureWithDepth = MethodMatcher.getMatchedSignatureWithDepth(psiElement, GENERATOR_SIGNATURES);
58+
if (matchedSignatureWithDepth == null) {
59+
return new PsiReference[0];
60+
}
5461

55-
if (MethodMatcher.getMatchedSignatureWithDepth(psiElement, GENERATOR_SIGNATURES) == null) {
62+
// @TODO: find better solution; prevent duplicate on proxy frpm twig to php eg on path() or url()
63+
MethodReference methodReference = matchedSignatureWithDepth.getMethodReference();
64+
PhpExpression classReference = methodReference.getClassReference();
65+
if (classReference != null && "____proxy____".equalsIgnoreCase(classReference.getName())) {
5666
return new PsiReference[0];
5767
}
5868

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigTemplateCompletionContributor.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,9 @@ public void addCompletions(@NotNull CompletionParameters parameters, ProcessingC
318318
extend(
319319
CompletionType.BASIC,
320320
TwigPattern.getAutocompletableRoutePattern(),
321-
new CompletionProvider<CompletionParameters>() {
321+
new CompletionProvider<>() {
322322
public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet resultSet) {
323-
if(!Symfony2ProjectComponent.isEnabled(parameters.getPosition())) {
323+
if (!Symfony2ProjectComponent.isEnabled(parameters.getPosition())) {
324324
return;
325325
}
326326

@@ -994,7 +994,7 @@ protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull
994994
return;
995995
}
996996

997-
// @TODO: support more the first argument
997+
// @TODO: support more then the first argument
998998
int wantParameter = 0;
999999

10001000
Collection<Pair<PhpNamedElement, Integer>> sources = new ArrayList<>();
@@ -1043,23 +1043,23 @@ protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull
10431043
if (containingClass != null) {
10441044
@NotNull ParameterList phpPsiFromText = PhpPsiElementFactory.createPhpPsiFromText(parameters.getPosition().getProject(), ParameterList.class, "" +
10451045
"<?php\n" +
1046-
"/** @var " + containingClass.getFQN() + " $x */\n" +
1047-
"$x->" + psiElement.getName() + "(" + join + ");\n");
1046+
"/** @var " + containingClass.getFQN() + " $____proxy____ */\n" +
1047+
"$____proxy____->" + psiElement.getName() + "(" + join + ");\n");
10481048

10491049
PsiElement[] parameters1 = phpPsiFromText.getParameters();
10501050
targets.add(parameters1[parameters1.length - 1]);
10511051
}
10521052
} else if (psiElement instanceof com.jetbrains.php.lang.psi.elements.Function) {
10531053
@NotNull ParameterList phpPsiFromText = PhpPsiElementFactory.createPhpPsiFromText(parameters.getPosition().getProject(), ParameterList.class, "" +
10541054
"<?php\n" +
1055-
psiElement.getName() + "(" + join + ");\n");
1055+
"$____proxy____ = " + psiElement.getName() + "(" + join + ");\n");
10561056

10571057
PsiElement[] parameters1 = phpPsiFromText.getParameters();
10581058
targets.add(parameters1[parameters1.length - 1]);
10591059
} else if (psiElement instanceof PhpClass) {
10601060
@NotNull ParameterList phpPsiFromText = PhpPsiElementFactory.createPhpPsiFromText(parameters.getPosition().getProject(), ParameterList.class, "" +
10611061
"<?php\n" +
1062-
"new " + psiElement.getFQN() + "(" + join + ");\n");
1062+
"$____proxy____ = new " + psiElement.getFQN() + "(" + join + ");\n");
10631063

10641064
PsiElement[] parameters1 = phpPsiFromText.getParameters();
10651065
targets.add(parameters1[parameters1.length - 1]);

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,32 +70,41 @@ public String getMethod() {
7070
}
7171

7272
public static class MethodMatchParameter {
73-
73+
@NotNull
7474
final private CallToSignature signature;
75+
76+
@NotNull
7577
final private ParameterBag parameterBag;
78+
79+
@NotNull
7680
final private PsiElement[] parameters;
81+
82+
@NotNull
7783
final private MethodReference methodReference;
7884

79-
public MethodMatchParameter(CallToSignature signature, ParameterBag parameterBag, PsiElement[] parameters, MethodReference methodReference) {
85+
public MethodMatchParameter(@NotNull CallToSignature signature, @NotNull ParameterBag parameterBag, @NotNull PsiElement[] parameters, @NotNull MethodReference methodReference) {
8086
this.signature = signature;
8187
this.parameterBag = parameterBag;
8288
this.parameters = parameters;
8389
this.methodReference = methodReference;
8490
}
8591

86-
@Nullable
92+
@NotNull
8793
public CallToSignature getSignature() {
8894
return signature;
8995
}
9096

97+
@NotNull
9198
public ParameterBag getParameterBag() {
9299
return this.parameterBag;
93100
}
94101

102+
@NotNull
95103
public PsiElement[] getParameters() {
96104
return parameters;
97105
}
98106

107+
@NotNull
99108
public MethodReference getMethodReference() {
100109
return methodReference;
101110
}

0 commit comments

Comments
 (0)