Skip to content

Commit 05256a2

Browse files
authored
Merge pull request Haehnchen#1259 from shyim/service-parameter-collector-point
Allow other plugins to extend container parameters
2 parents 3308698 + 631e9de commit 05256a2

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package fr.adrienbrault.idea.symfony2plugin.extension;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
5+
/**
6+
* @author Daniel Espendiller <daniel@espendiller.net>
7+
*/
8+
public interface ServiceParameterCollector {
9+
/**
10+
* Warning expect high traffic, collector needs to be highly optimized
11+
*/
12+
void collectIds(@NotNull ServiceParameterCollectorParameter.Id parameter);
13+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package fr.adrienbrault.idea.symfony2plugin.extension;
2+
3+
import com.intellij.openapi.project.Project;
4+
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerParameter;
5+
import fr.adrienbrault.idea.symfony2plugin.dic.container.SerializableService;
6+
import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceInterface;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.util.Collection;
10+
11+
/**
12+
* @author Daniel Espendiller <daniel@espendiller.net>
13+
*/
14+
public class ServiceParameterCollectorParameter {
15+
public static class Id {
16+
17+
@NotNull
18+
private final Project project;
19+
20+
@NotNull
21+
private final Collection<ContainerParameter> ids;
22+
23+
public Id(@NotNull Project project, @NotNull Collection<ContainerParameter> ids) {
24+
this.project = project;
25+
this.ids = ids;
26+
}
27+
28+
@NotNull
29+
public Project getProject() {
30+
return project;
31+
}
32+
33+
public void add(@NotNull ContainerParameter id) {
34+
this.ids.add(id);
35+
}
36+
37+
public void addAll(@NotNull Collection<ContainerParameter> names) {
38+
this.ids.addAll(names);
39+
}
40+
}
41+
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/ContainerCollectionResolver.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceSerializable;
1515
import fr.adrienbrault.idea.symfony2plugin.dic.container.dict.ContainerBuilderCall;
1616
import fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollectorParameter;
17+
import fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector;
18+
import fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollectorParameter;
1719
import fr.adrienbrault.idea.symfony2plugin.stubs.cache.FileIndexCaches;
1820
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.ContainerBuilderStubIndex;
1921
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.ContainerParameterStubIndex;
@@ -41,6 +43,10 @@ public class ContainerCollectionResolver {
4143
"fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollector"
4244
);
4345

46+
private static final ExtensionPointName<fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector> EXTENSIONS_PARAMETER = new ExtensionPointName<>(
47+
"fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector"
48+
);
49+
4450
public static Collection<String> getServiceNames(@NotNull Project project) {
4551
return ServiceCollector.create(project).getNames();
4652
}
@@ -456,6 +462,21 @@ private Map<String, ContainerParameter> getParameters() {
456462
this.containerParameterMap.put(parameterName, new ContainerParameter(parameterName, true));
457463
}
458464

465+
// Extension points
466+
ServiceParameterCollectorParameter.Id parameter = null;
467+
Collection<ContainerParameter> exps = new ArrayList<>();
468+
for (ServiceParameterCollector parameterCollector : EXTENSIONS_PARAMETER.getExtensions()) {
469+
if(parameter == null) {
470+
parameter = new ServiceParameterCollectorParameter.Id(project, exps);
471+
}
472+
473+
parameterCollector.collectIds(parameter);
474+
}
475+
476+
for (ContainerParameter extParameter: exps) {
477+
this.containerParameterMap.put(extParameter.getName(), extParameter);
478+
}
479+
459480
return this.containerParameterMap;
460481
}
461482

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@
548548
<extensionPoint name="extension.RoutingLoader" interface="fr.adrienbrault.idea.symfony2plugin.extension.RoutingLoader"/>
549549
<extensionPoint name="extension.CompiledServiceBuilderFactory" interface="fr.adrienbrault.idea.symfony2plugin.extension.CompiledServiceBuilderFactory"/>
550550
<extensionPoint name="extension.ServiceCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollector"/>
551+
<extensionPoint name="extension.ServiceParameterCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector"/>
551552
<extensionPoint name="extension.ServiceDefinitionLocator" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceDefinitionLocator"/>
552553
<extensionPoint name="extension.TwigVariableCollector" interface="fr.adrienbrault.idea.symfony2plugin.templating.variable.TwigFileVariableCollector"/>
553554
</extensionPoints>

0 commit comments

Comments
 (0)