Skip to content

Commit 3d51718

Browse files
authored
Merge pull request #1343 from Haehnchen/feature/form-changes
support default form types for different Symfony versions
2 parents aea05e9 + 7fa8cda commit 3d51718

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/form/FormOptionGotoCompletionRegistrar.java

+20-16
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import org.jetbrains.annotations.NotNull;
2424
import org.jetbrains.annotations.Nullable;
2525

26-
import java.util.ArrayList;
27-
import java.util.Collection;
28-
import java.util.Collections;
26+
import java.util.*;
2927

3028
/**
3129
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -81,36 +79,35 @@ public GotoCompletionProvider getProvider(@NotNull PsiElement psiElement) {
8179
return null;
8280
}
8381

84-
@Nullable
8582
private GotoCompletionProvider getMatchingOption(ParameterList parameterList, @NotNull PsiElement psiElement) {
86-
8783
// form name can be a string alias; also resolve on constants, properties, ...
8884
PsiElement psiElementAt = PsiElementUtils.getMethodParameterPsiElementAt(parameterList, 1);
8985

90-
String formTypeName = null;
86+
Set<String> formTypeNames = new HashSet<>();
9187
if(psiElementAt != null) {
9288
PhpClass phpClass = FormUtil.getFormTypeClassOnParameter(psiElementAt);
9389
if(phpClass != null) {
94-
formTypeName = phpClass.getFQN();
90+
formTypeNames.add(phpClass.getFQN());
9591
}
9692
}
9793

9894
// fallback to form
99-
if(formTypeName == null) {
100-
formTypeName = "form";
95+
if(formTypeNames.size() == 0) {
96+
formTypeNames.add("form"); // old Symfony systems
97+
formTypeNames.add("Symfony\\Component\\Form\\Extension\\Core\\Type\\FormType");
10198
}
10299

103-
return new FormReferenceCompletionProvider(psiElement, formTypeName);
100+
return new FormReferenceCompletionProvider(psiElement, formTypeNames);
104101
}
105102
}
106103

107104
private static class FormReferenceCompletionProvider extends GotoCompletionProvider {
105+
@NotNull
106+
private final Collection<String> formTypes;
108107

109-
private final String formType;
110-
111-
FormReferenceCompletionProvider(@NotNull PsiElement element, @NotNull String formType) {
108+
FormReferenceCompletionProvider(@NotNull PsiElement element, @NotNull Collection<String> formTypes) {
112109
super(element);
113-
this.formType = formType;
110+
this.formTypes = formTypes;
114111
}
115112

116113
@NotNull
@@ -127,14 +124,21 @@ public Collection<PsiElement> getPsiTargets(PsiElement psiElement) {
127124
}
128125

129126
final Collection<PsiElement> psiElements = new ArrayList<>();
130-
FormOptionsUtil.visitFormOptions(getProject(), formType, new FormOptionTargetVisitor(value, psiElements));
127+
for (String formType : formTypes) {
128+
FormOptionsUtil.visitFormOptions(getProject(), formType, new FormOptionTargetVisitor(value, psiElements));
129+
}
130+
131131
return psiElements;
132132
}
133133

134134
@NotNull
135135
public Collection<LookupElement> getLookupElements() {
136136
Collection<LookupElement> lookupElements = new ArrayList<>();
137-
FormOptionsUtil.visitFormOptions(getProject(), formType, new FormOptionLookupVisitor(lookupElements));
137+
138+
for (String formType : formTypes) {
139+
FormOptionsUtil.visitFormOptions(getProject(), formType, new FormOptionLookupVisitor(lookupElements));
140+
}
141+
138142
return lookupElements;
139143
}
140144
}

0 commit comments

Comments
 (0)