Skip to content

Commit be3a3ca

Browse files
authored
Merge pull request #1809 from Haehnchen/feature/project-dynamic
replace the project component to allow the plugin be dynamic
2 parents 189a6b5 + fc473f0 commit be3a3ca

File tree

6 files changed

+52
-71
lines changed

6 files changed

+52
-71
lines changed

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

+28-42
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package fr.adrienbrault.idea.symfony2plugin;
22

3-
import com.intellij.notification.Notification;
4-
import com.intellij.notification.NotificationType;
5-
import com.intellij.notification.Notifications;
6-
import com.intellij.openapi.components.ProjectComponent;
3+
import com.intellij.openapi.Disposable;
74
import com.intellij.openapi.diagnostic.Logger;
85
import com.intellij.openapi.extensions.ExtensionPointName;
96
import com.intellij.openapi.project.Project;
@@ -28,51 +25,40 @@
2825
/**
2926
* @author Adrien Brault <[email protected]>
3027
*/
31-
public class Symfony2ProjectComponent implements ProjectComponent {
28+
public class Symfony2ProjectComponent {
29+
public static class PostStartupActivity implements com.intellij.openapi.startup.StartupActivity {
30+
@Override
31+
public void runActivity(@NotNull Project project) {
32+
checkProject(project);
3233

33-
public static String HELP_URL = "http://symfony2-plugin.espend.de/";
34-
final private static Logger LOG = Logger.getInstance("Symfony-Plugin");
35-
private static final ExtensionPointName<ServiceContainerLoader> SERVICE_CONTAINER_POINT_NAME = new ExtensionPointName<>("fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoader");
36-
public static final ExtensionPointName<PluginConfigurationExtension> PLUGIN_CONFIGURATION_EXTENSION = new ExtensionPointName<>("fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension");
37-
38-
private final Project project;
39-
40-
public Symfony2ProjectComponent(Project project) {
41-
this.project = project;
42-
}
43-
44-
@NotNull
45-
public String getComponentName() {
46-
return "Symfony2ProjectComponent";
34+
}
4735
}
4836

49-
public void projectOpened() {
50-
this.checkProject();
51-
}
37+
public static class ProjectCloseService implements Disposable {
38+
private final Project project;
5239

53-
public void projectClosed() {
54-
ServiceXmlParserFactory.cleanInstance(project);
40+
public ProjectCloseService(@NotNull Project project) {
41+
this.project = project;
42+
}
5543

56-
// clean routing
57-
if(RouteHelper.COMPILED_CACHE.containsKey(project)) {
44+
@Override
45+
public void dispose() {
46+
ServiceXmlParserFactory.cleanInstance(this.project);
47+
// clean routing
5848
RouteHelper.COMPILED_CACHE.remove(project);
5949
}
6050
}
6151

52+
public static String HELP_URL = "http://symfony2-plugin.espend.de/";
53+
final private static Logger LOG = Logger.getInstance("Symfony-Plugin");
54+
private static final ExtensionPointName<ServiceContainerLoader> SERVICE_CONTAINER_POINT_NAME = new ExtensionPointName<>("fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoader");
55+
public static final ExtensionPointName<PluginConfigurationExtension> PLUGIN_CONFIGURATION_EXTENSION = new ExtensionPointName<>("fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension");
56+
6257
public static Logger getLogger() {
6358
return LOG;
6459
}
6560

66-
public void showInfoNotification(String content) {
67-
Notification errorNotification = new Notification("Symfony Plugin", "Symfony Plugin", content, NotificationType.INFORMATION);
68-
Notifications.Bus.notify(errorNotification, this.project);
69-
}
70-
71-
private boolean isEnabled() {
72-
return Settings.getInstance(project).pluginEnabled;
73-
}
74-
75-
public Collection<File> getContainerFiles() {
61+
public static Collection<File> getContainerFiles(@NotNull Project project) {
7662
Collection<ContainerFile> containerFiles = new ArrayList<>();
7763

7864
ServiceContainerLoaderParameter containerLoaderExtensionParameter = new ServiceContainerLoaderParameter(project, containerFiles);
@@ -88,25 +74,25 @@ public Collection<File> getContainerFiles() {
8874

8975
Collection<File> validFiles = new ArrayList<>();
9076
for(ContainerFile containerFile : containerFiles) {
91-
if(containerFile.exists(this.project)) {
92-
validFiles.add(containerFile.getFile(this.project));
77+
if(containerFile.exists(project)) {
78+
validFiles.add(containerFile.getFile(project));
9379
}
9480
}
9581

9682
return validFiles;
9783
}
9884

99-
private void checkProject() {
100-
if(!this.isEnabled()
85+
private static void checkProject(@NotNull Project project) {
86+
if(!isEnabled(project)
10187
&& !Settings.getInstance(project).dismissEnableNotification
102-
&& VfsUtil.findRelativeFile(ProjectUtil.getProjectDir(this.project), "vendor", "symfony") != null
88+
&& VfsUtil.findRelativeFile(ProjectUtil.getProjectDir(project), "vendor", "symfony") != null
10389
) {
10490

10591
IdeHelper.notifyEnableMessage(project);
10692
return;
10793
}
10894

109-
if(this.getContainerFiles().size() == 0) {
95+
if(getContainerFiles(project).size() == 0) {
11096
Symfony2ProjectComponent.getLogger().warn("missing at least one container file");
11197
}
11298
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/profiler/factory/LocalProfilerFactory.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ private File findCsvProfilerFile(@NotNull Project project) {
5858

5959
@Nullable
6060
protected File getCsvIndex(@NotNull Project project) {
61-
Symfony2ProjectComponent symfony2ProjectComponent = project.getComponent(Symfony2ProjectComponent.class);
62-
for(File file: symfony2ProjectComponent.getContainerFiles()) {
61+
for(File file: Symfony2ProjectComponent.getContainerFiles(project)) {
6362
if(file.exists()) {
6463
File csvFile = new File(file.getParentFile().getPath() + "/profiler/index.csv");
6564
if (csvFile.exists()) {

src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesDefinitionStubIndex.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public static boolean isValidForIndex(FileContent inputData, PsiFile psiFile) {
106106
}
107107

108108
// dont add configured service paths
109-
Collection<File> settingsServiceFiles = psiFile.getProject().getComponent(Symfony2ProjectComponent.class).getContainerFiles();
109+
Collection<File> settingsServiceFiles = Symfony2ProjectComponent.getContainerFiles(psiFile.getProject());
110110
for(File file: settingsServiceFiles) {
111111
if(VfsUtil.isAncestor(VfsUtil.virtualToIoFile(inputData.getFile()), file, false)) {
112112
return false;

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/service/ServiceXmlParserFactory.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,7 @@ private boolean isModified(Collection<File> serviceFiles) {
6565

6666
@Nullable
6767
synchronized public <T extends ServiceParserInterface> T parser(Class<T> serviceParser) {
68-
69-
Symfony2ProjectComponent symfony2ProjectComponent = this.project.getComponent(Symfony2ProjectComponent.class);
70-
71-
Collection<File> settingsServiceFiles = symfony2ProjectComponent.getContainerFiles();
68+
Collection<File> settingsServiceFiles = Symfony2ProjectComponent.getContainerFiles(this.project);
7269

7370
if (this.serviceParserInstance != null && !this.isModified(settingsServiceFiles)) {
7471
return (T) this.serviceParserInstance;

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<idea-plugin url="https://www.jetbrains.com/idea">
33

44
<extensionPoints>
5-
<extensionPoint name="extension.PluginConfigurationExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension"/>
6-
<extensionPoint name="extension.TwigFileUsage" interface="fr.adrienbrault.idea.symfony2plugin.extension.TwigFileUsage"/>
5+
<extensionPoint dynamic="true" name="extension.PluginConfigurationExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.PluginConfigurationExtension"/>
6+
<extensionPoint dynamic="true" name="extension.TwigFileUsage" interface="fr.adrienbrault.idea.symfony2plugin.extension.TwigFileUsage"/>
77

88

99
</extensionPoints>

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

+19-20
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@
252252

253253
<statusBarWidgetFactory implementation="fr.adrienbrault.idea.symfony2plugin.ui.SymfonyStatusbarWidgetFactory" />
254254

255+
<postStartupActivity implementation="fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent$PostStartupActivity"/>
256+
<projectService
257+
serviceImplementation="fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent$ProjectCloseService"/>
258+
259+
255260
<localInspection groupPath="Symfony" shortName="PhpRouteMissingInspection" displayName="Route Missing"
256261
groupName="Route"
257262
enabledByDefault="true" level="WARNING"
@@ -544,20 +549,20 @@
544549
</extensions>
545550

546551
<extensionPoints>
547-
<extensionPoint name="extension.ServiceContainerLoader" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoader"/>
548-
<extensionPoint name="extension.DoctrineModelProvider" interface="fr.adrienbrault.idea.symfony2plugin.extension.DoctrineModelProvider"/>
549-
<extensionPoint name="extension.MethodSignatureTypeProviderExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.MethodSignatureTypeProviderExtension"/>
550-
<extensionPoint name="extension.MethodParameterReferenceContributorExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.MethodParameterReferenceContributorExtension"/>
551-
<extensionPoint name="extension.ControllerActionGotoRelatedCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ControllerActionGotoRelatedCollector"/>
552-
<extensionPoint name="extension.GotoCompletionRegistrar" interface="fr.adrienbrault.idea.symfony2plugin.codeInsight.GotoCompletionRegistrar"/>
553-
<extensionPoint name="extension.TwigNamespaceExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtension"/>
554-
<extensionPoint name="extension.RoutingLoader" interface="fr.adrienbrault.idea.symfony2plugin.extension.RoutingLoader"/>
555-
<extensionPoint name="extension.CompiledServiceBuilderFactory" interface="fr.adrienbrault.idea.symfony2plugin.extension.CompiledServiceBuilderFactory"/>
556-
<extensionPoint name="extension.ServiceCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollector"/>
557-
<extensionPoint name="extension.ServiceParameterCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector"/>
558-
<extensionPoint name="extension.ServiceDefinitionLocator" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceDefinitionLocator"/>
559-
<extensionPoint name="extension.TwigVariableCollector" interface="fr.adrienbrault.idea.symfony2plugin.templating.variable.TwigFileVariableCollector"/>
560-
<extensionPoint name="extension.TranslatorProvider" interface="fr.adrienbrault.idea.symfony2plugin.extension.TranslatorProvider"/>
552+
<extensionPoint dynamic="true" name="extension.ServiceContainerLoader" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceContainerLoader"/>
553+
<extensionPoint dynamic="true" name="extension.DoctrineModelProvider" interface="fr.adrienbrault.idea.symfony2plugin.extension.DoctrineModelProvider"/>
554+
<extensionPoint dynamic="true" name="extension.MethodSignatureTypeProviderExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.MethodSignatureTypeProviderExtension"/>
555+
<extensionPoint dynamic="true" name="extension.MethodParameterReferenceContributorExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.MethodParameterReferenceContributorExtension"/>
556+
<extensionPoint dynamic="true" name="extension.ControllerActionGotoRelatedCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ControllerActionGotoRelatedCollector"/>
557+
<extensionPoint dynamic="true" name="extension.GotoCompletionRegistrar" interface="fr.adrienbrault.idea.symfony2plugin.codeInsight.GotoCompletionRegistrar"/>
558+
<extensionPoint dynamic="true" name="extension.TwigNamespaceExtension" interface="fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtension"/>
559+
<extensionPoint dynamic="true" name="extension.RoutingLoader" interface="fr.adrienbrault.idea.symfony2plugin.extension.RoutingLoader"/>
560+
<extensionPoint dynamic="true" name="extension.CompiledServiceBuilderFactory" interface="fr.adrienbrault.idea.symfony2plugin.extension.CompiledServiceBuilderFactory"/>
561+
<extensionPoint dynamic="true" name="extension.ServiceCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceCollector"/>
562+
<extensionPoint dynamic="true" name="extension.ServiceParameterCollector" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceParameterCollector"/>
563+
<extensionPoint dynamic="true" name="extension.ServiceDefinitionLocator" interface="fr.adrienbrault.idea.symfony2plugin.extension.ServiceDefinitionLocator"/>
564+
<extensionPoint dynamic="true" name="extension.TwigVariableCollector" interface="fr.adrienbrault.idea.symfony2plugin.templating.variable.TwigFileVariableCollector"/>
565+
<extensionPoint dynamic="true" name="extension.TranslatorProvider" interface="fr.adrienbrault.idea.symfony2plugin.extension.TranslatorProvider"/>
561566
</extensionPoints>
562567

563568
<extensions defaultExtensionNs="fr.adrienbrault.idea.symfony2plugin.extension">
@@ -658,12 +663,6 @@
658663
<PhpToolboxTargetLocator implementation="fr.adrienbrault.idea.symfony2plugin.external.locator.BundleFileToolboxTargetLocator"/>
659664
</extensions>
660665

661-
<project-components>
662-
<component>
663-
<implementation-class>fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent</implementation-class>
664-
</component>
665-
</project-components>
666-
667666
<actions>
668667

669668
<action id="Symfony.Menu" class="fr.adrienbrault.idea.symfony2plugin.action.SymfonyContainerServiceBuilder">

0 commit comments

Comments
 (0)