Categories


Authors:
Alexei
Apache

Code Explorer

Products: IntelliJ IDEA

Vendor: HandyEdit

Email:

Website: http://plugins.intellij.net/plugin/?id=3739

SourceCode: CodeExplorer_3739.zip

Description:

CodeExplorer helps to analyze Java code: find all method call chains to the method and what methods called from the method. Analysis results (methods and calls between them) are shown on a handy diagram in the CodeExplorer tool window.

Execute plugin commands from Analyze menu (Method structure, Methods and calls in, Method call chains to), and plugin will show analysis results on the diagram. You can add more nodes to the opened diagram by double-clicking on diagram nodes or executing commands from the context menu for diagram nodes.

See usage instructions, FAQ and demo for more information about plugin features.

Downloads: 18181
Rating:
Participated in rating: 12
Version Since Build Until Build File/URL Size (Kb) Date Details
1.3.2. 93.13. . Download 153.74 2010-04-20 22:54:54 details
1.3.1. 80.8664. . Download 153.74 2009-06-15 23:24:10 details
. .
6 updates are hidden show all updates
Screenshot #2418
Screenshot #2417

Recent change notes:

CodeExplorer helps to analyze Java code: find all method call chains to the method and what methods called from the method. Analysis results (methods and calls between them) are shown on a handy diagram in the CodeExplorer tool window.

Execute plugin commands from Analyze menu (Method structure, Methods and calls in, Method call chains to), and plugin will show analysis results on the diagram. You can add more nodes to the opened diagram by double-clicking on diagram nodes or executing commands from the context menu for diagram nodes.

See usage instructions, FAQ and demo for more information about plugin features.

Version 1.3.2

  • Idea 9 version

Version 1.3.1

  • Fix ClassCastException on foreach
  • Fix exception on method delete
  • Fix exception on project close

Version 1.3

  • Improvements in code chains search
  • If jump to source on node selection is enabled (CodeExplorer toolbar) then highlight in selected method source: calls shown on graph from the method
  • Code chains search: progress dialog fixes
  • Graph scrolling and layout fixes

Version 1.2.1

  • Idea EAP compatibility

Version 1.2

  • Plugin is multitabbed now: Analyze command results are opened in a new tab
  • Diagram node for interface method: methods that implement it are shown on diagram instead method calls from it
  • Added method filters that used when perform analysis: the plugin doesn't analyze these methods and doesn't show them on diagram (configure filters in CodeExplorer settings)
  • Long operations are called with progress dialog. So UI doesn't freeze and you can cancel long operation
  • Can perform analysis for selected diagram nodes using context or Analyze menu to add more nodes to the opened diagram
  • Changed method structure command: added all calls from the method within class
  • Fixes: unit analysis
  • UI enhancements: click mode combo, inner class method name
  • Node tooltip: more info, toolbar button "Show method body in tooltip" (with method icon)
  • Added Jump to source action (F4) to the context menu

Version 1.1

  • new menu item: method call chains to specified method from class, package or module
  • Method calls in class menu item replaced by method and calls in... (shows methods from class, package, module or project)
  • added method tooltip: method sigrature and colored source
  • can delete selected nodes from diagram
  • save / load diagram from file
  • synchronize diagram with current sources
  • changed display option: show class names as camel words instead hiding

General usage instructions:

Execute Analyze menu command and see results on opened CodeExplorer diagram:
- Method structure: selected method and method calls from it within class
- Method and calls in...: methods and calls between them in class, package, module or project
- Method call chains to this...: all method call chains to this method (inside its class, package, module or project)
- Method call chains to this from...: all method call chains to this method from selected class, package or module

The diagram contains method nodes and edges for calls or usages between methods.
You can double click on method nodes to add calls from the method or its usages to the diagram
depending on value selected in the "Show on doubleclick" combobox.
Also you can add more nodes to the opened diagram executing actions from the node context menu.

Hints:
- Move mouse over a method node to see method signature and body in the node tooltip
- To see method source: choose "Jump to source" in the node context menu or select a node and press F4
- There are several Code explorer settings (in graph toolbar): graph orientation, autoscroll to method source on node selection,
show class names as camel words, show method body in tooltip

Installation:
Open Settings > Plugins
Find the CodeExplorer in the available plugins list, right click on it and choose install
Note: the plugin needs Idea 8, because it uses Graph API.

Comments:

1234>
tispratik
2014-06-24 02:06:19
I wish this plugin worked in the latest version of Intellij.
.
Anonymous
2014-06-21 01:46:18
From the description and screenshoots, this plug in looks very cool. However, does this plug in work with the latest IDEA 13?
.
tispratik
2014-06-03 21:17:18
Does it work anymore? Am in Intellij Ultimate Edition.
.
Alexei
2011-02-04 23:39:46
It doesn't work in community edition
requires graph components from enterprise
.
jimbethancourt
Rated:
2011-02-02 21:00:47
Appears to run in version 10.0.1
.
Anonymous
Rated:
2011-01-21 13:28:35
Doesn\'t work in IntelliJ 10 at all!
.
Anonymous
2010-10-07 19:55:40
Running Community edition 9.0.3, got following error after installing the addon:

update failed for AnAction with ID=CodeExplorer.ShowMethodStructure: com/intellij/openapi/graph/base/Graph
java.lang.NoClassDefFoundError: com/intellij/openapi/graph/base/Graph
at com.handyedit.codeexplorer.ui.action.analyze.BaseAnalyzeAction.getContext(BaseAnalyzeAction.java:80)
at com.handyedit.codeexplorer.ui.action.analyze.MethodStructureAction.update(MethodStructureAction.java:27)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareUpdate(ActionUtil.java:98)
at com.intellij.openapi.actionSystem.impl.Utils.doUpdate(Utils.java:143)
at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:109)
at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:122)
at com.intellij.openapi.actionSystem.impl.Utils.fillMenu(Utils.java:216)
at com.intellij.openapi.actionSystem.impl.ActionMenu.fillMenu(ActionMenu.java:235)
at com.intellij.openapi.actionSystem.impl.ActionMenu.access$400(ActionMenu.java:39)
at com.intellij.openapi.actionSystem.impl.ActionMenu$MenuListenerImpl.menuSelected(ActionMenu.java:199)
at javax.swing.JMenu.fireMenuSelected(JMenu.java:1028)
at javax.swing.JMenu$MenuChangeListener.stateChanged(JMenu.java:1107)
at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.java:333)
at javax.swing.DefaultButtonModel.setSelected(DefaultButtonModel.java:215)
at javax.swing.JMenu.setSelected(JMenu.java:294)
at javax.swing.JMenu.menuSelectionChanged(JMenu.java:1175)
at com.intellij.openapi.actionSystem.impl.ActionMenu.menuSelectionChanged(ActionMenu.java:167)
at javax.swing.MenuSelectionManager.setSelectedPath(MenuSelectionManager.java:100)
at javax.swing.plaf.basic.BasicMenuUI$Handler.mouseEntered(BasicMenuUI.java:509)
at java.awt.Component.processMouseEvent(Component.java:6272)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:4363)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:610)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:496)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:368)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.ClassNotFoundException: com.intellij.openapi.graph.base.Graph
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:70)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
... 43 more
.
Alexei
2010-04-21 11:31:11
Idea 9 version is available
You can install / update it from Idea plugins manager (Plugins section in the Idea settings)
.
Anonymous
2010-02-22 00:48:44
please update it to idea-9
.
Alexei
2009-06-15 23:26:50
CodeExplorer 1.3.1 contains fixes for the exceptions below
.
Anonymous
2009-06-12 05:20:04
The following exception happens if i try to delete a method thats mentioned in an open trace in code explorer:

Error during dispatching of java.awt.event.InvocationEvent[INVOCATION_DEFAULT,runnable=javax.swing.SystemEventQueueUtilities$ComponentWorkRequest@62572f,notifier=null,catchExceptions=false,when=1244769495635] on sun.awt.windows.WToolkit@179b3e6
java.lang.NullPointerException
at com.handyedit.codeexplorer.util.PsiUtils.asString(PsiUtils.java:125)
at com.handyedit.codeexplorer.util.PsiUtils.asString(PsiUtils.java:115)
at com.handyedit.codeexplorer.model.MethodNode.getName(MethodNode.java:32)
at com.handyedit.codeexplorer.ui.graph.MethodRenderer.getNodeName(MethodRenderer.java:35)
at com.handyedit.codeexplorer.ui.graph.MethodRenderer.getNodeName(MethodRenderer.java:18)
at com.intellij.openapi.graph.builder.renderer.BasicGraphNodeRenderer.getLabelPanel(BasicGraphNodeRenderer.java:65)
at com.intellij.openapi.graph.builder.renderer.BasicGraphNodeRenderer.tuneNode(BasicGraphNodeRenderer.java:53)
at com.intellij.openapi.graph.builder.renderer.AbstractColoredNodeCellRenderer.getRendererComponent(AbstractColoredNodeCellRenderer.java:33)
at com.intellij.openapi.graph.builder.renderer.BasicNodeCellRenderer.getNodeCellRendererComponent(BasicNodeCellRenderer.java:32)
at com.intellij.openapi.graph.impl.GraphBase$NodeCellRendererProxy.getNodeCellRendererComponent(GraphBase.java:4)
at a.j.l.a(Unknown Source)
at a.j.l.a(Unknown Source)
at a.j.k.a(Unknown Source)
at a.j.kc.d(Unknown Source)
at a.j.y.a(Unknown Source)
at a.j.y$c_.a(Unknown Source)
at a.j.a.i.b(Unknown Source)
at a.j.a.i.a(Unknown Source)
at a.j.y.a(Unknown Source)
at a.j.fe.f(Unknown Source)
at a.j.fe.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5129)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1472)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1403)
at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
at javax.swing.JComponent.paint(JComponent.java:1013)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1780)
at com.intellij.openapi.wm.impl.IdeFrameImpl.paint(IdeFrameImpl.java:71)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at com.intellij.ide.IdeEventQueue.c(IdeEventQueue.java:35)
at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:99)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:217)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
.
Anonymous
2009-06-11 23:02:32
Would be nice to see support of GWT RPC interfaces (right now its missing the client server traces)
.
Anonymous
Rated:
2009-06-11 22:00:13
Hi Alexei,

I have recently installed Code Explorer 1.3 for IDEA 8.1.2. I think it is a very USEFUL and POWERFUL tool which will help me to analyze a complex (10000+ lines) Java project.

I have just one question. If I have a file which contains multiple classes, for example...

public class Top {
Bottom b = new Bottom(this);

public void method2() {
//...
}
}

class Bottom {
Top t;

//constructor
public Bottom(Top t) { this.t = t; }

public void method1() {
t.method2();
}
}

If I select "Bottom" in the Project Explorer, and choose "Analyze methods and calls in class", then Code Explorer shows "Top" in the diagram window and not "Bottom"?

If I separate the two classes into two separate files then it works perfectly.

Is it possible to force Code Explorer to Analyze one of the other classes in a file (for example "Bottom")?
Or is the best way to separate each class into its own file?

THANK YOU FOR YOUR TIME,
Best regards,
James C.
.
Anonymous
2009-04-27 15:02:17
Exception during method chain call

com.intellij.psi.impl.source.tree.java.PsiForeachStatementImpl cannot be cast to com.intellij.psi.PsiMethod: com.intellij.psi.impl.source.tree.java.PsiForeachStatementImpl cannot be cast to com.intellij.psi.PsiMethod
java.lang.ClassCastException: com.intellij.psi.impl.source.tree.java.PsiForeachStatementImpl cannot be cast to com.intellij.psi.PsiMethod
at com.handyedit.ast.AstParameter.getPsiMethod(AstParameter.java:22)
at com.handyedit.ast.AstParameter.getIndex(AstParameter.java:18)
at com.handyedit.codeexplorer.explore.Dataflow.addMethodConstraint(Dataflow.java:101)
at com.handyedit.codeexplorer.explore.Dataflow.visitCall(Dataflow.java:90)
at com.handyedit.codeexplorer.explore.Dataflow.stop(Dataflow.java:31)
at com.handyedit.codeexplorer.explore.CallChainStopCondition.stop(CallChainStopCondition.java:20)
at com.handyedit.codeexplorer.explore.CallChainStopCondition.stop(CallChainStopCondition.java:6)
at com.handyedit.codeexplorer.math.GraphWalker.walkAll(GraphWalker.java:81)
at com.handyedit.codeexplorer.math.GraphWalker.walk(GraphWalker.java:57)
at com.handyedit.codeexplorer.explore.MethodExplorer.getCallChains(MethodExplorer.java:118)
at com.handyedit.codeexplorer.explore.MethodExplorer.getCallChains(MethodExplorer.java:108)
at com.handyedit.codeexplorer.ui.action.analyze.MethodCallChainsInAction.getCallChains(MethodCallChainsInAction.java:61)
at com.handyedit.codeexplorer.ui.action.analyze.MethodCallChainsInAction.access$000(MethodCallChainsInAction.java:22)
at com.handyedit.codeexplorer.ui.action.analyze.MethodCallChainsInAction$1.run(MethodCallChainsInAction.java:36)
at com.handyedit.codeexplorer.ui.action.analyze.MethodCallChainsInAction$1.run(MethodCallChainsInAction.java:34)
at com.handyedit.codeexplorer.util.ProgressUtils$1.run(ProgressUtils.java:14)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$3.run(ProgressManagerImpl.java:1)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:3)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$4.run(ProgressManagerImpl.java:1)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:5)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:13)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:101)
at com.intellij.openapi.application.impl.ApplicationImpl$7$1.run(ApplicationImpl.java:3)
at com.intellij.openapi.application.impl.ApplicationImpl$5.run(ApplicationImpl.java:8)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:5)
.
Anonymous
2009-03-18 22:19:43
Seems, the previous version of the plugin is installed.

Please uninstall previous:
- from user plugins list (IDE settings > plugins)
- delete the plugin from the idea_home/plugin directory (system plugins)
- then restart Idea and try to install this version
.
1234>