Editing selected Run Configuration programmatically
Hi!
I've been trying to edit a Run Configuration programmatically, specifically adding some VM-parameters. I'm trying to edit a TestNGConfiguration with following code:
public class SetTestBench extends AnAction { public void actionPerformed(AnActionEvent e) { RunManager manager = RunManager.getInstance(e.getProject()); RunnerAndConfigurationSettings selectedConfiguration = manager.getSelectedConfiguration(); TestNGConfiguration configuration = (TestNGConfiguration) selectedConfiguration.getConfiguration(); configuration.setVMParameters("-ea");
However when I run this and try to invoke this action I get following error:
[ 110167] ERROR - llij.ide.plugins.PluginManager - com.theoryinpractice.testng.configuration.TestNGConfiguration cannot be cast to com.theoryinpractice.testng.configuration.TestNGConfiguration java.lang.ClassCastException: com.theoryinpractice.testng.configuration.TestNGConfiguration cannot be cast to com.theoryinpractice.testng.configuration.TestNGConfiguration at actions.SetTestBench.actionPerformed(SetTestBench.java:20) at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:164) at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter$1.run(ActionMenuItem.java:266) at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:926) at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:124) at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:236) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:105) at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:512) at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:44) at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:532) at java.awt.Component.processMouseEvent(Component.java:6516) at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4872) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4698) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4698) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:708) at java.awt.EventQueue$4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:697) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
It looks like the class loader is loading different instances of the TestNGConfiguration, I have a dependency towards the TestNG-plugin in my plugin. I'm not sure if it collides with the TestNG run by IntelliJ itself.
请先登录再写评论。
Please make sure the dependency to TestNG-plugin (or any other plugin you're using/extending) is added to your IntelliJ Platform SDK and _not_ to your plugin module directly.
Yes I did try this but then I get a ClassNotFoundException at runtime instead. I don't need to define anything in the plugin.xml do I? That's only if I want to do an extension to the testng-plugin, which is not what I'm trying to achieve, I just need to use the classes it provides..
It feels as if there's something I've totally missed, been reading through available documentation though.
You need to define runtime dependency to TestNG plugin by using corresponding <depends> tag:
<depends>TestNG-J</depends>
Yeah, it was something that I had missed. Adding the <depends> tag in the plugin.xml.. That was the problem, thanks for the help though!
EDIT: Sorry, didn't see your reply before I posted my reply xD thanks for the help!