Skip to content

Commit f014ec5

Browse files
committedAug 3, 2019
provide extension for configure some global plugin constants
1 parent d552439 commit f014ec5

File tree

5 files changed

+69
-2
lines changed

5 files changed

+69
-2
lines changed
 

‎src/main/java/fr/adrienbrault/idea/symfony2plugin/Symfony2ProjectComponent.java

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.intellij.openapi.wm.WindowManager;
1313
import com.intellij.psi.PsiElement;
1414
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerFile;
15+
import fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension;
1516
import fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoader;
1617
import fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoaderParameter;
1718
import fr.adrienbrault.idea.symfony2plugin.profiler.widget.SymfonyProfilerWidget;
@@ -33,6 +34,7 @@ public class Symfony2ProjectComponent implements ProjectComponent {
3334
public static String HELP_URL = "http://symfony2-plugin.espend.de/";
3435
final private static Logger LOG = Logger.getInstance("Symfony-Plugin");
3536
private static final ExtensionPointName<ServiceContainerLoader> SERVICE_CONTAINER_POINT_NAME = new ExtensionPointName<>("fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoader");
37+
public static final ExtensionPointName<PluginConfigurationExtension> PLUGIN_CONFIGURATION_EXTENSION = new ExtensionPointName<>("fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension");
3638

3739
private Project project;
3840

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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 PluginConfigurationExtension {
9+
void invokePluginConfiguration(@NotNull PluginConfigurationExtensionParameter pluginConfigurationExtensionParameter);
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package fr.adrienbrault.idea.symfony2plugin.extension;
2+
3+
import com.intellij.openapi.project.Project;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
import java.util.HashSet;
7+
import java.util.Set;
8+
9+
/**
10+
* @author Daniel Espendiller <daniel@espendiller.net>
11+
*/
12+
public class PluginConfigurationExtensionParameter {
13+
@NotNull
14+
private final Project project;
15+
16+
private final Set<String> templateUsageMethod = new HashSet<>();
17+
18+
public PluginConfigurationExtensionParameter(@NotNull Project project) {
19+
this.project = project;
20+
}
21+
22+
@NotNull
23+
public Project getProject() {
24+
return project;
25+
}
26+
27+
public void addTemplateUsageMethod(@NotNull String methodName) {
28+
templateUsageMethod.add(methodName);
29+
}
30+
31+
public Set<String> getTemplateUsageMethod() {
32+
return templateUsageMethod;
33+
}
34+
}

‎src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/PhpTwigTemplateUsageStubIndex.java

+22-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.jetbrains.php.lang.psi.stubs.indexes.PhpConstantNameIndex;
1515
import de.espend.idea.php.annotation.util.AnnotationUtil;
1616
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
17+
import fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtensionParameter;
18+
import fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension;
1719
import fr.adrienbrault.idea.symfony2plugin.stubs.dict.TemplateUsage;
1820
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer;
1921
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
@@ -33,7 +35,7 @@ public class PhpTwigTemplateUsageStubIndex extends FileBasedIndexExtension<Strin
3335
private static int MAX_FILE_BYTE_SIZE = 2097152;
3436
private static ObjectStreamDataExternalizer<TemplateUsage> EXTERNALIZER = new ObjectStreamDataExternalizer<>();
3537

36-
public static Set<String> RENDER_METHODS = new HashSet<String>() {{
38+
private static Set<String> RENDER_METHODS = new HashSet<String>() {{
3739
add("render");
3840
add("renderView");
3941
add("renderResponse");
@@ -64,6 +66,7 @@ public Map<String, TemplateUsage> map(@NotNull FileContent inputData) {
6466
Map<String, Set<String>> items = new HashMap<>();
6567

6668
psiFile.accept(new PsiRecursiveElementWalkingVisitor() {
69+
private Set<String> methods = null;
6770

6871
@Override
6972
public void visitElement(PsiElement element) {
@@ -77,7 +80,24 @@ public void visitElement(PsiElement element) {
7780

7881
private void visitMethodReference(@NotNull MethodReference methodReference) {
7982
String methodName = methodReference.getName();
80-
if(!RENDER_METHODS.contains(methodName)) {
83+
84+
// init methods once per file
85+
if(methods == null) {
86+
methods = new HashSet<>();
87+
methods.addAll(RENDER_METHODS);
88+
89+
PluginConfigurationExtension[] extensions = Symfony2ProjectComponent.PLUGIN_CONFIGURATION_EXTENSION.getExtensions();
90+
if(extensions.length > 0) {
91+
PluginConfigurationExtensionParameter pluginConfiguration = new PluginConfigurationExtensionParameter(inputData.getProject());
92+
for (PluginConfigurationExtension extension : extensions) {
93+
extension.invokePluginConfiguration(pluginConfiguration);
94+
}
95+
96+
methods.addAll(pluginConfiguration.getTemplateUsageMethod());
97+
}
98+
}
99+
100+
if(!methods.contains(methodName)) {
81101
return;
82102
}
83103

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

+1
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@
540540
<extensionPoint name="extension.ServiceParameterCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector"/>
541541
<extensionPoint name="extension.ServiceDefinitionLocator" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceDefinitionLocator"/>
542542
<extensionPoint name="extension.TwigVariableCollector" interface="fr.adrienbrault.idea.symfony2plugin.templating.variable.TwigFileVariableCollector"/>
543+
<extensionPoint name="extension.PluginConfigurationExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension"/>
543544
</extensionPoints>
544545

545546
<extensions defaultExtensionNs="fr.adrienbrault.idea.symfony2plugin.extension">

0 commit comments

Comments
 (0)
Please sign in to comment.