diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/extension/ServiceParameterCollector.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/extension/ServiceParameterCollector.java new file mode 100644 index 000000000..7c2ad500b --- /dev/null +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/extension/ServiceParameterCollector.java @@ -0,0 +1,13 @@ +package fr.adrienbrault.idea.symfony2plugin.extension; + +import org.jetbrains.annotations.NotNull; + +/** + * @author Daniel Espendiller + */ +public interface ServiceParameterCollector { + /** + * Warning expect high traffic, collector needs to be highly optimized + */ + void collectIds(@NotNull ServiceParameterCollectorParameter.Id parameter); +} diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/extension/ServiceParameterCollectorParameter.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/extension/ServiceParameterCollectorParameter.java new file mode 100644 index 000000000..ba50bcb97 --- /dev/null +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/extension/ServiceParameterCollectorParameter.java @@ -0,0 +1,41 @@ +package fr.adrienbrault.idea.symfony2plugin.extension; + +import com.intellij.openapi.project.Project; +import fr.adrienbrault.idea.symfony2plugin.dic.ContainerParameter; +import fr.adrienbrault.idea.symfony2plugin.dic.container.SerializableService; +import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceInterface; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +/** + * @author Daniel Espendiller + */ +public class ServiceParameterCollectorParameter { + public static class Id { + + @NotNull + private final Project project; + + @NotNull + private final Collection ids; + + public Id(@NotNull Project project, @NotNull Collection ids) { + this.project = project; + this.ids = ids; + } + + @NotNull + public Project getProject() { + return project; + } + + public void add(@NotNull ContainerParameter id) { + this.ids.add(id); + } + + public void addAll(@NotNull Collection names) { + this.ids.addAll(names); + } + } +} diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/ContainerCollectionResolver.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/ContainerCollectionResolver.java index b9738b410..0bc3a3fb4 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/ContainerCollectionResolver.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/ContainerCollectionResolver.java @@ -14,6 +14,8 @@ import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceSerializable; import fr.adrienbrault.idea.symfony2plugin.dic.container.dict.ContainerBuilderCall; import fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollectorParameter; +import fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector; +import fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollectorParameter; import fr.adrienbrault.idea.symfony2plugin.stubs.cache.FileIndexCaches; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.ContainerBuilderStubIndex; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.ContainerParameterStubIndex; @@ -41,6 +43,10 @@ public class ContainerCollectionResolver { "fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollector" ); + private static final ExtensionPointName EXTENSIONS_PARAMETER = new ExtensionPointName<>( + "fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector" + ); + public static Collection getServiceNames(@NotNull Project project) { return ServiceCollector.create(project).getNames(); } @@ -456,6 +462,21 @@ private Map getParameters() { this.containerParameterMap.put(parameterName, new ContainerParameter(parameterName, true)); } + // Extension points + ServiceParameterCollectorParameter.Id parameter = null; + Collection exps = new ArrayList<>(); + for (ServiceParameterCollector parameterCollector : EXTENSIONS_PARAMETER.getExtensions()) { + if(parameter == null) { + parameter = new ServiceParameterCollectorParameter.Id(project, exps); + } + + parameterCollector.collectIds(parameter); + } + + for (ContainerParameter extParameter: exps) { + this.containerParameterMap.put(extParameter.getName(), extParameter); + } + return this.containerParameterMap; } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 48fe1f8d5..543d103b3 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -548,6 +548,7 @@ +