Skip to content

Commit fb72e4b

Browse files
committed
add support for twig.extension and form.type_extension in service generator #308
1 parent 7cde590 commit fb72e4b

File tree

2 files changed

+39
-9
lines changed

2 files changed

+39
-9
lines changed

src/fr/adrienbrault/idea/symfony2plugin/action/ui/ServiceBuilder.java

+38-9
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
public class ServiceBuilder {
2929

30+
final private static String TWIG_EXTENSION = "\\Twig_Extension";
31+
3032
public enum OutputType {
3133
Yaml, XML,
3234
}
@@ -187,7 +189,7 @@ private String buildXml(Map<String, ArrayList<MethodParameter.MethodModelParamet
187189
}
188190
}
189191

190-
formTypeCallback(className, new CallbackFormTypeInterface() {
192+
serviceTagCallback(className, new TagCallbackInterface() {
191193
@Override
192194
public void onFormTypeAlias(String alias) {
193195
// <tag name="form.type" alias="gender" />
@@ -198,6 +200,15 @@ public void onFormTypeAlias(String alias) {
198200

199201
rootElement.appendChild(tag);
200202
}
203+
204+
@Override
205+
public void onTag(String tagName) {
206+
// <tag name="form.type" />
207+
Element tag = doc.createElement("tags");
208+
tag.setAttribute("name", tagName);
209+
rootElement.appendChild(tag);
210+
}
211+
201212
});
202213

203214

@@ -257,24 +268,41 @@ private String buildYaml(Map<String, ArrayList<MethodParameter.MethodModelParame
257268
lines.addAll(calls);
258269
}
259270

260-
formTypeCallback(className, new CallbackFormTypeInterface() {
271+
serviceTagCallback(className, new TagCallbackInterface() {
261272
@Override
262273
public void onFormTypeAlias(String alias) {
263274
lines.add(indent + "tags:");
264-
lines.add(indent+ indent + "- { name: form.type, alias: "+ alias + " }");
275+
lines.add(indent + indent + "- { name: form.type, alias: " + alias + " }");
276+
}
277+
278+
@Override
279+
public void onTag(String tagName) {
280+
lines.add(indent + "tags:");
281+
lines.add(indent + indent + String.format("- { name: %s }", tagName));
265282
}
266283
});
267284

268285
return StringUtils.join(lines, "\n");
269286
}
270287

271-
private void formTypeCallback(String className, CallbackFormTypeInterface callback) {
288+
private void serviceTagCallback(String className, TagCallbackInterface callback) {
272289
PhpClass phpClass = PhpElementsUtil.getClass(project, className);
273-
if(phpClass != null && new Symfony2InterfacesUtil().isInstanceOf(phpClass, FormUtil.ABSTRACT_FORM_INTERFACE)) {
274-
Set<String> aliases = FormUtil.getFormAliases(phpClass);
275-
if(aliases.size() > 0) {
276-
callback.onFormTypeAlias(aliases.iterator().next());
290+
if(phpClass != null) {
291+
if( new Symfony2InterfacesUtil().isInstanceOf(phpClass, FormUtil.ABSTRACT_FORM_INTERFACE)) {
292+
Set<String> aliases = FormUtil.getFormAliases(phpClass);
293+
if(aliases.size() > 0) {
294+
callback.onFormTypeAlias(aliases.iterator().next());
295+
}
296+
}
297+
298+
if(new Symfony2InterfacesUtil().isInstanceOf(phpClass, TWIG_EXTENSION)) {
299+
callback.onTag("twig.extension");
300+
}
301+
302+
if(new Symfony2InterfacesUtil().isInstanceOf(phpClass, FormUtil.FORM_EXTENSION_INTERFACE)) {
303+
callback.onTag("form.type_extension");
277304
}
305+
278306
}
279307
}
280308

@@ -289,8 +317,9 @@ private List<String> formatYamlService(List<String> parameters) {
289317
return yamlSyntaxParameters;
290318
}
291319

292-
public interface CallbackFormTypeInterface {
320+
public interface TagCallbackInterface {
293321
public void onFormTypeAlias(String alias);
322+
public void onTag(String tagName);
294323
}
295324

296325
}

src/fr/adrienbrault/idea/symfony2plugin/form/util/FormUtil.java

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
public class FormUtil {
3939

4040
final public static String ABSTRACT_FORM_INTERFACE = "\\Symfony\\Component\\Form\\FormTypeInterface";
41+
final public static String FORM_EXTENSION_INTERFACE = "\\Symfony\\Component\\Form\\FormTypeExtensionInterface";
4142

4243
@Nullable
4344
public static PhpClass getFormTypeToClass(Project project, @Nullable String formType) {

0 commit comments

Comments
 (0)