[groovy] convert DynamicManager from project component to service

This commit is contained in:
Daniil Ovchinnikov
2016-11-10 22:40:27 +03:00
parent 254206128d
commit 9e41ec1bf8
5 changed files with 66 additions and 63 deletions
@@ -0,0 +1,27 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<projectService serviceInterface="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicManager"
testServiceImplementation="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicManagerImpl"/>
<projectService serviceImplementation="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicToolWindowWrapper"/>
<postStartupActivity implementation="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicMembersStartupActivity"/>
</extensions>
<extensions defaultExtensionNs="org.intellij.groovy">
<membersContributor implementation="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicMembersContributor"/>
</extensions>
<actions>
<group id="Groovy.Dynamic.Toolbar">
<action id="Groovy.Dynamic.Remove"
class="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.RemoveDynamicAction"
icon="AllIcons.General.Remove" text="Remove" description="Remove dynamic element"/>
<separator/>
<action id="Groovy.Dynamic.ExpandAll"
class="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.ExpandAllAction"
icon="AllIcons.Actions.Expandall" text="Expand all" description="Collapse all"/>
<action id="Groovy.Dynamic.CollapseAll"
class="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.CollapseAllAction"
icon="AllIcons.Actions.Collapseall" text="Collapse all" description="Collapse all"/>
</group>
</actions>
</idea-plugin>
+1 -19
View File
@@ -94,7 +94,6 @@
<groovyFrameworkConfigNotification order="last"
implementation="org.jetbrains.plugins.groovy.config.DefaultGroovyFrameworkConfigNotification"/>
<membersContributor implementation="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicMembersContributor"/>
<membersContributor implementation="org.jetbrains.plugins.groovy.lang.resolve.noncode.GrCollectionTypeMembersProvider"/>
<membersContributor implementation="org.jetbrains.plugins.groovy.spock.SpockMemberContributor"/>
<membersContributor implementation="org.jetbrains.plugins.groovy.lang.resolve.noncode.MixinMemberContributor"/>
@@ -1573,9 +1572,6 @@
<className>org.jetbrains.plugins.groovy.intentions.declaration.GrRemoveExplicitTypeDeclarationIntention</className>
</intentionAction>
<projectService
serviceImplementation="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicToolWindowWrapper"/>
<projectService serviceInterface="org.jetbrains.plugins.groovy.griffon.GriffonProjectViewState"
serviceImplementation="org.jetbrains.plugins.groovy.griffon.GriffonProjectViewState"/>
@@ -1668,17 +1664,6 @@
<add-to-group group-id="NewGroup" anchor="last"/>
</action>
<group id="Groovy.Dynamic.Toolbar">
<action id="Groovy.Dynamic.Remove" class="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.RemoveDynamicAction"
icon="AllIcons.General.Remove" text="Remove" description="Remove dynamic element"/>
<separator/>
<action id="Groovy.Dynamic.ExpandAll" class="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.ExpandAllAction"
icon="AllIcons.Actions.Expandall" text="Expand all" description="Collapse all"/>
<action id="Groovy.Dynamic.CollapseAll" class="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.CollapseAllAction"
icon="AllIcons.Actions.Collapseall" text="Collapse all" description="Collapse all"/>
</group>
<action id="ConvertGroovyToJava"
class="org.jetbrains.plugins.groovy.actions.ConvertToJavaAction"
text="Convert to Java"
@@ -1794,16 +1779,13 @@
<component>
<implementation-class>org.jetbrains.plugins.groovy.annotator.GrReferenceHighlighterFactory</implementation-class>
</component>
<component>
<interface-class>org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicManager</interface-class>
<implementation-class>org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicManagerImpl</implementation-class>
</component>
<component>
<implementation-class>org.jetbrains.plugins.groovy.mvc.MvcModuleStructureSynchronizer</implementation-class>
</component>
</project-components>
<xi:include href="groovy-templates.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="groovy-dynamic-members.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="groovy-indexed-property-support.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="groovy-logback-support.xml" xpointer="xpointer(/idea-plugin/*)"/>
</idea-plugin>
@@ -16,7 +16,7 @@
package org.jetbrains.plugins.groovy.annotator.intentions.dynamic;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiVariable;
@@ -32,11 +32,11 @@ import java.util.List;
* User: Dmitry.Krasilschikov
* Date: 23.11.2007
*/
public abstract class DynamicManager implements ProjectComponent, PersistentStateComponent<DRootElement> {
public abstract class DynamicManager implements PersistentStateComponent<DRootElement> {
@NotNull
public static DynamicManager getInstance(@NotNull Project project) {
return project.getComponent(DynamicManager.class);
return ServiceManager.getService(project, DynamicManager.class);
}
/**
@@ -20,7 +20,6 @@ import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiMethod;
@@ -53,22 +52,12 @@ public class DynamicManagerImpl extends DynamicManager {
public DynamicManagerImpl(final Project project) {
myProject = project;
StartupManager.getInstance(project).registerPostStartupActivity(() -> {
if (!myRootElement.getContainingClasses().isEmpty()) {
DynamicToolWindowWrapper.getInstance(project).getToolWindow(); //initialize myToolWindow
}
});
}
public Project getProject() {
return myProject;
}
@Override
public void initComponent() {
}
@Override
public void addProperty(DynamicElementSettings settings) {
assert settings != null;
@@ -390,8 +379,8 @@ public class DynamicManagerImpl extends DynamicManager {
}
@Nullable
private static DPropertyElement findConcreteDynamicProperty(DRootElement rootElement, final String conatainingClassName, final String propertyName) {
final DClassElement classElement = rootElement.getClassElement(conatainingClassName);
private static DPropertyElement findConcreteDynamicProperty(DRootElement rootElement, final String containingClassName, final String propertyName) {
final DClassElement classElement = rootElement.getClassElement(containingClassName);
if (classElement == null) return null;
@@ -399,43 +388,17 @@ public class DynamicManagerImpl extends DynamicManager {
}
@Nullable
private static DClassElement findClassElement(DRootElement rootElement, final String conatainingClassName) {
return rootElement.getClassElement(conatainingClassName);
private static DClassElement findClassElement(DRootElement rootElement, final String containingClassName) {
return rootElement.getClassElement(containingClassName);
}
@Override
public void disposeComponent() {
}
@Override
@NotNull
public String getComponentName() {
return "DynamicManagerImpl";
}
@Override
public void projectOpened() {
}
@Override
public void projectClosed() {
}
/**
* On exit
*/
@Override
public DRootElement getState() {
// return XmlSerializer.serialize(myRootElement);
return myRootElement;
}
/*
* On loading
*/
@Override
public void loadState(DRootElement element) {
// myRootElement = XmlSerializer.deserialize(element, myRootElement.getClass());
myRootElement = element;
}
@@ -0,0 +1,31 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.plugins.groovy.annotator.intentions.dynamic;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupActivity;
import org.jetbrains.annotations.NotNull;
public class DynamicMembersStartupActivity implements StartupActivity {
@Override
public void runActivity(@NotNull Project project) {
DynamicManager manager = DynamicManager.getInstance(project);
if (!manager.getRootElement().getContainingClasses().isEmpty()) {
DynamicToolWindowWrapper.getInstance(project).getToolWindow(); //initialize toolWindow
}
}
}