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.

4 comments
Comment actions Permalink

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.

0
Comment actions Permalink

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..

[  23161]  ERROR - llij.ide.plugins.PluginManager - com/theoryinpractice/testng/configuration/TestNGConfiguration java.lang.NoClassDefFoundError: com/theoryinpractice/testng/configuration/TestNGConfiguration      at actions.SetTestBenchAction.actionPerformed(SetTestBenchAction.java:37)      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) Caused by: java.lang.ClassNotFoundException: com.theoryinpractice.testng.configuration.TestNGConfiguration PluginClassLoader[com.ericsson.swat_pt_idea, 0.1]      at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:68)      at java.lang.ClassLoader.loadClass(ClassLoader.java:358)


It feels as if there's something I've totally missed, been reading through available documentation though.

0
Comment actions Permalink

You need to define runtime dependency to TestNG plugin by using corresponding <depends> tag:

<depends>TestNG-J</depends>

0
Comment actions Permalink

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!

    <depends>TestNG-J</depends>


EDIT: Sorry, didn't see your reply before I posted my reply xD thanks for the help!

0

Please sign in to leave a comment.