Skip to content

Commit

Permalink
Fixes #92 IJ 2020 compatibility - better solution (service, postStart…
Browse files Browse the repository at this point in the history
…upActivity)
  • Loading branch information
krasa committed Jan 22, 2020
1 parent 43a4bc5 commit 08422d7
Show file tree
Hide file tree
Showing 13 changed files with 171 additions and 162 deletions.
20 changes: 11 additions & 9 deletions META-INF/plugin.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!DOCTYPE idea-plugin PUBLIC "Plugin/DTD" "http://plugins.intellij.net/plugin.dtd">
<idea-plugin url="https://github.com/krasa/StringManipulation">
<name>String Manipulation</name>
<version>7.3.182.000.0</version>
<version>7.3.191.000.0</version>
<vendor email="vojta.krasa@gmail.com">original author: Olivier Smedile, current maintainer: Vojtech Krasa</vendor>
<idea-version since-build="182.000"/>
<idea-version since-build="191.000"/>

<!--branch 143 - IntelliJ IDEA 15, WebStorm 11, PyCharm 5, PhpStorm 10, RubyMine 8, AppCode 3.3, CLion 1.2, DataGrip 1.0-->
<!--branch 141 - IntelliJ IDEA 14.1, WebStorm 10, PyCharm 4.1, Android Studio 1.3-->
Expand Down Expand Up @@ -428,11 +428,11 @@
text="Switch File Path Separators: Windows&lt;-&gt;UNIX"
description="Switch file path separators: Windows&lt;-&gt;UNIX">
</action>
<action id="osmedile.intellij.stringmanip.transform.DelimitedListAction"
class="osmedile.intellij.stringmanip.transform.DelimitedListAction"
text="Transform Delimited List"
description="Delimited list - e.g between CSV and array">
</action>
<!-- <action id="osmedile.intellij.stringmanip.transform.DelimitedListAction"-->
<!-- class="osmedile.intellij.stringmanip.transform.DelimitedListAction"-->
<!-- text="Transform Delimited List"-->
<!-- description="Delimited list - e.g between CSV and array">-->
<!-- </action>-->
<!-- </group>-->

</group>
Expand All @@ -452,11 +452,14 @@
<application-components>
<!-- Add your application components here -->
<component>
<implementation-class>osmedile.intellij.stringmanip.MyApplicationComponent</implementation-class>
<implementation-class>osmedile.intellij.stringmanip.MyApplicationService</implementation-class>
</component>
</application-components>

<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="osmedile.intellij.stringmanip.MyApplicationService"/>

<postStartupActivity implementation="osmedile.intellij.stringmanip.ShortcutStartupActivity"/>
<customizableActionGroupProvider
implementation="osmedile.intellij.stringmanip.MyCustomizableActionGroupProvider" order="first"/>
<applicationService
Expand Down Expand Up @@ -587,7 +590,6 @@
<ul>
<li>Improved: Switch File Path Separators</li>
<li>Added: Encode/Decode Hex</li>
<li>Added: Transform Delimited List</li>
<li>IntelliJ 2020 compatibility</li>
</ul>
</div>
Expand Down
132 changes: 0 additions & 132 deletions src/osmedile/intellij/stringmanip/MyApplicationComponent.java

This file was deleted.

61 changes: 61 additions & 0 deletions src/osmedile/intellij/stringmanip/MyApplicationService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package osmedile.intellij.stringmanip;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.PluginId;
import org.jetbrains.annotations.NotNull;
import osmedile.intellij.stringmanip.styles.custom.CustomActionModel;

import java.util.HashMap;
import java.util.Map;

public class MyApplicationService {
private static final Logger LOG = Logger.getInstance(MyApplicationService.class);

private Class lastAction;
private CustomActionModel lastCustomActionModel;
private Map<Class, AnAction> classToActionMap;

public static MyApplicationService getInstance() {
return ServiceManager.getService(MyApplicationService.class);
}

public AnAction getAnAction() {
if (lastCustomActionModel != null) {
return ActionManagerEx.getInstanceEx().getAction(lastCustomActionModel.getId());
}
return getActionMap().get(lastAction);
}

public static void setAction(Class aClass, CustomActionModel customActionModel) {
if (aClass != null) {
MyApplicationService instance = getInstance();
instance.lastAction = aClass;
instance.lastCustomActionModel = customActionModel;
}
}

public static void setAction(Class aClass) {
setAction(aClass, null);
}

@NotNull
protected Map<Class, AnAction> getActionMap() {
if (this.classToActionMap == null) {
ActionManagerEx instanceEx = ActionManagerEx.getInstanceEx();
PluginId pluginId = PluginId.getId("String Manipulation");

HashMap<Class, AnAction> classToActionMap = new HashMap<Class, AnAction>();
for (String string_manipulation : instanceEx.getPluginActions(pluginId)) {
AnAction action = instanceEx.getAction(string_manipulation);
classToActionMap.put(action.getClass(), action);
}
this.classToActionMap = classToActionMap;
}
return this.classToActionMap;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public MyEditorWriteActionHandler(Class actionClass) {

@Override
protected final void doExecute(final Editor editor, @Nullable final Caret caret, final DataContext dataContext) {
MyApplicationComponent.setAction(actionClass, customActionModel);
MyApplicationService.setAction(actionClass, customActionModel);

final Pair<Boolean, T> additionalParameter = beforeWriteAction(editor, dataContext);
if (!additionalParameter.first) {
Expand Down
4 changes: 2 additions & 2 deletions src/osmedile/intellij/stringmanip/RepeatAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public RepeatAction() {
@Override
protected Pair beforeWriteAction(Editor editor, DataContext dataContext) {

AnAction anAction = MyApplicationComponent.getInstance().getAnAction();
AnAction anAction = MyApplicationService.getInstance().getAnAction();
if (anAction != null) {
anAction.actionPerformed(new AnActionEvent(null, dataContext, ActionPlaces.UNKNOWN, new Presentation(), ActionManager.getInstance(), 0));
}
Expand All @@ -33,7 +33,7 @@ protected void executeWriteAction(Editor editor, @Nullable Caret caret, DataCont
@Override
public void update(AnActionEvent e) {
super.update(e);
AnAction anAction = MyApplicationComponent.getInstance().getAnAction();
AnAction anAction = MyApplicationService.getInstance().getAnAction();
if (anAction != null) {
e.getPresentation().setEnabled(true);
e.getPresentation().setText("Repeat - " + anAction.getTemplatePresentation().getText());
Expand Down
78 changes: 78 additions & 0 deletions src/osmedile/intellij/stringmanip/ShortcutStartupActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package osmedile.intellij.stringmanip;

import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.Constraints;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupActivity;
import org.jetbrains.annotations.NotNull;
import osmedile.intellij.stringmanip.config.PluginPersistentStateComponent;
import osmedile.intellij.stringmanip.styles.custom.CustomAction;
import osmedile.intellij.stringmanip.styles.custom.CustomActionModel;
import shaded.org.apache.commons.lang3.StringUtils;

import java.util.List;


public class ShortcutStartupActivity implements StartupActivity {

private static final Logger LOG = Logger.getInstance(ShortcutStartupActivity.class);

private volatile boolean registered = false;

@Override
public void runActivity(@NotNull Project project) {
if (!registered) {
registerActions();
registered = true;
}
}


public static void registerActions() {
ActionManager actionManager = ActionManager.getInstance();
DefaultActionGroup group = (DefaultActionGroup) actionManager.getAction("StringManipulation.Group.SwitchCase");
List<CustomActionModel> customActionModels = PluginPersistentStateComponent.getInstance().getCustomActionModels();

unRegisterActions(customActionModels);

for (int i = customActionModels.size() - 1; i >= 0; i--) {
CustomActionModel customActionModel = customActionModels.get(i);
registerAction(actionManager, group, customActionModel);
}
}

protected static void registerAction(ActionManager actionManager, DefaultActionGroup group, CustomActionModel customActionModel) {
String actionId = customActionModel.getId();
if (StringUtils.isNotBlank(actionId) && StringUtils.isNotBlank(customActionModel.getName())) {
CustomAction action = new CustomAction(customActionModel);
LOG.info("Registering " + action + " id:" + actionId);
actionManager.registerAction(actionId, action, PluginId.getId("String Manipulation"));
group.add(action, Constraints.FIRST);
}
}

public static void unRegisterActions(List<CustomActionModel> customActionModels) {
ActionManager instance = ActionManager.getInstance();
DefaultActionGroup group = (DefaultActionGroup) instance.getAction("StringManipulation.Group.SwitchCase");
for (CustomActionModel actionModel : customActionModels) {
String id = actionModel.getId();
if (StringUtils.isNotBlank(id)) {
unRegisterAction(instance, id, group);
}
}
}

private static void unRegisterAction(ActionManager instance, String actionId, DefaultActionGroup group) {
AnAction action = instance.getActionOrStub(actionId);
if (action != null) {
LOG.info("Unregistering " + action + " id:" + actionId);
group.remove(action);
instance.unregisterAction(actionId);
}
}

}
6 changes: 3 additions & 3 deletions src/osmedile/intellij/stringmanip/config/MyConfigurable.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import osmedile.intellij.stringmanip.MyApplicationComponent;
import osmedile.intellij.stringmanip.ShortcutStartupActivity;

import javax.swing.*;

Expand Down Expand Up @@ -67,11 +67,11 @@ public boolean isModified() {

@Override
public void apply() throws ConfigurationException {
MyApplicationComponent.getInstance().unRegisterActions(instance.getCustomActionModels());
ShortcutStartupActivity.unRegisterActions(instance.getCustomActionModels());

gui.getData(instance);

MyApplicationComponent.getInstance().registerActions();
ShortcutStartupActivity.registerActions();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.SelectionModel;
import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler;
import osmedile.intellij.stringmanip.MyApplicationComponent;
import osmedile.intellij.stringmanip.MyApplicationService;
import osmedile.intellij.stringmanip.MyEditorAction;
import shaded.org.apache.commons.lang3.StringUtils;

Expand All @@ -23,7 +23,7 @@ public RemoveEmptyLinesAction() {

@Override
public void executeWriteAction(Editor editor, DataContext dataContext) {
MyApplicationComponent.setAction(getActionClass());
MyApplicationService.setAction(getActionClass());

// Column mode not supported
if (editor.isColumnMode()) {
Expand Down
Loading

0 comments on commit 08422d7

Please sign in to comment.