
Apache
IntelliJad
Vendor:
Steve Chaloner
Email: N/A
Website: N/A
SourceCode:
link
Forum page
Description:
IntelliJad integrates the Jad decompiler into IntelliJ.
Downloads: 22020
Rating:
Participated in rating: 6
| 1.4.3. |
69.7126. |
. |
Download
|
474.21. |
2008-04-20 15:34:49 |
. |
| 1.4.2. |
69.7126. |
. |
Download
|
473.91. |
2008-03-28 01:32:58 |
. |
| 1.4.1. |
69.7126. |
. |
Download
|
473.9. |
2008-02-16 11:38:11 |
. |
| 1.4.0. |
69.7126. |
. |
Download
|
473.61. |
2008-01-30 00:33:29 |
. |
| 1.3. |
69.7126. |
. |
Download
|
459.52. |
2007-12-07 01:58:12 |
. |
| 1.2.2.1. |
69.7126. |
. |
Download
|
459.33. |
2007-12-06 13:53:14 |
. |
| 1.2.2. |
69.7126. |
. |
Download
|
459.31. |
2007-11-30 22:49:39 |
. |
| 1.2.1. |
69.7126. |
. |
Download
|
452.53. |
2007-11-28 21:21:28 |
. |
| 1.2.0. |
69.7126. |
. |
Download
|
446.63. |
2007-11-24 19:42:26 |
. |
| 1.1.0. |
69.7126. |
. |
Download
|
443.08. |
2007-11-19 20:29:35 |
. |
| 1.0.1. |
69.7126. |
. |
Download
|
441.37. |
2007-11-15 10:12:07 |
. |
| 1.0. |
69.7126. |
. |
Download
|
441.15. |
2007-11-11 20:46:25 |
. |
| 0.7.1. |
69.7126. |
. |
Download
|
439.53. |
2007-11-01 17:54:12 |
. |
| 0.7. |
69.7126. |
. |
Download
|
416.26. |
2007-10-28 16:06:01 |
. |
| 0.6.1. |
69.7126. |
. |
Download
|
645.47. |
2007-10-18 11:34:24 |
. |
| 0.6. |
69.7126. |
. |
Download
|
274.49. |
2007-10-15 12:19:42 |
. |
| 0.5.4. |
69.7126. |
. |
Download
|
273.01. |
2007-10-10 23:40:13 |
. |
| 0.5.3. |
69.7126. |
. |
Download
|
272. |
2007-10-08 16:31:22 |
. |
| 0.5.2. |
69.7126. |
. |
Download
|
270.05. |
2007-10-04 02:15:51 |
. |
| 0.5.1. |
69.7126. |
. |
Download
|
269.92. |
2007-10-03 11:46:48 |
. |
| 0.5. |
69.7126. |
. |
Download
|
269.75. |
2007-10-03 01:52:53 |
. |
| 0.4. |
69.7126. |
. |
Download
|
263.96. |
2007-09-27 17:31:37 |
. |
| 0.3. |
60.6180. |
60.6180. |
Download
|
265.57. |
2007-09-23 20:52:34 |
. |
| 0.2. |
60.6180. |
60.6180. |
Download
|
258.49. |
2007-09-21 12:21:24 |
. |
| 0.1. |
60.6180. |
60.6180. |
Download
|
258.64. |
2007-09-18 12:58:51 |
. |
| . |
. |
Recent change notes:
- 1.4.3
- Fixed icon selection bug in memory file manager.
- 1.4.2
- NPE when opening Window menu with no project open fixed.
- 1.4.1
- Project cleanup is now triggered from canProjectClose to circumvent a deadlock issue.
- 1.4.0
- Project cleanup is optional, based on a config flag. This is a temporary facility while project-closing deadlock issues are examined.
- 1.3
- Project configuration is only stored when used.
- 1.2.2.1
- Flush release to synchronize svn repository and released version inconsistencies due to server issues recently.
- Fixed a couple of typos in the help.
- 1.2.2
- Added total/selected file size counter to memory VFS manager.
- 1.2.1
- Added attach/detech memory VFS source root controls to memory VFS manager.
- 1.2.0
- Added source to SDK to enable SDK-class attachment.
- Decompilation is attemped up to three more times per class if the resulting output is empty.
- 1.1.0
- The memory VFS is now based entirely on the deprecated VFS to sort out issues with library
attachment and file creation.
- Added CloseAllX-like functionality for decompiled file editors.
- Project-level configurations are now stored in the workspace file.
- 1.0.1
- Added quotes to decompiled class paths if a space exists.
- Normalised some documentation.
- 1.0
- All help documentation now present and hopefully useful.
- 0.7.1
- Various GUI tweaks.
- Added help documentation for the memory VFS manager.
- 0.7
- Added a basic manager for the memory file system.
- Added a package browser to the exclusion UI.
- 0.6.1
- Fixed some more GUI behaviour bugs.
- All screenshots replaced with up-to-date versions.
- More help documentation added.
- 0.6
- Added namespace to decompilation action ID.
- Sorted code maturity issues.
- Added "clear and close console" control to config editor.
- Read-only status set always on memory files, and as per config on local file-system files.
- 0.5.4
- Non-jarred classes are now opened and decompiled correctly.
- Project configuration view enables/disables controls on dialog opening.
- 0.5.3
- Config is persisted alphabetically.
- Console now appears when there is an issue.
- 0.5.2
- ConfigForm now checks for modified data in unbound items correctly.
- 0.5.1
- Line numbers only present in user-preferred code style if requested.
- Line numbers never present in debuggable style - this will be remedied later.
- 0.5
- The fallback decompilation file system is now the memory FS.
- If decompilation is attempted with no, or an invalid, Jad path defined the user has the opportunity to cancel the decompilation or open the config.
- Reformatting styles are now user-preferred OR debuggable.
- Local file system decompilation is now based on the memory decompilation to provide greater control over file content.
- 0.4 - Moved to IntelliJ 7-only compatibility.
- 0.3 - Memory decompilation now results in source code that is debuggable.
- 0.2 - Added more icons to console tree renderer; added more help content.
- 0.1 - Initial release.
General usage instructions:
You must have Jad installed on your machine. Open the IntelliJad config (see paragraph below for a note on this) and specify the path to the executable in the "Jad executable" field. Once this is done, the existing default settings are suitable for immediate transparent decompilation.
In IntelliJ's settings view, there are two IntelliJad icons - one for project settings, and one for IDE settings. By default, the project settings are disabled and therefore fall back to the IDE settings. In this way, you can set up a persistent configuration for IntelliJad but override it when necessary for specific projects.
Help for configuring IntelliJad can be found under Help/IntelliJad/Configuring IntelliJad/IntelliJad options. The help will be developed on an ongoing basis to improve it.
Comments:
com.intellij.openapi.roots.ProjectRootManager.getProjectJdk()Lcom/intellij/openapi/projectRoots/ProjectJdk;: com.intellij.openapi.roots.ProjectRootManager.getProjectJdk()Lcom/intellij/openapi/projectRoots/ProjectJdk;
java.lang.NoSuchMethodError: com.intellij.openapi.roots.ProjectRootManager.getProjectJdk()Lcom/intellij/openapi/projectRoots/ProjectJdk;
at net.stevechaloner.intellijad.IntelliJad$3.run(IntelliJad.java:339)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:748)
at net.stevechaloner.intellijad.IntelliJad.checkSDKRoot(IntelliJad.java:335)
at net.stevechaloner.intellijad.IntelliJad.checkSDKRoot(IntelliJad.java:315)
at net.stevechaloner.intellijad.IntelliJad.decompile(IntelliJad.java:243)
at net.stevechaloner.intellijad.actions.NavigationListener$1$1.execute(NavigationListener.java:70)
at net.stevechaloner.intellijad.actions.NavigationListener.fileOpened(NavigationListener.java:154)
at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:101)
at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:183)
at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:188)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:175)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:172)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:167)
at com.intellij.util.messages.impl.MessageBusImpl.access$000(MessageBusImpl.java:40)
at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:106)
at $Proxy59.fileOpened(Unknown Source)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl3(FileEditorManagerImpl.java:582)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$5.run(FileEditorManagerImpl.java:447)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:103)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:86)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:78)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl2(FileEditorManagerImpl.java:445)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:439)
at com.intellij.openapi.fileEditor.ex.FileEditorManagerEx.openFile(FileEditorManagerEx.java:107)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$7.run(FileEditorManagerImpl.java:688)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:110)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:86)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:78)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openEditor(FileEditorManagerImpl.java:685)
at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigateInAnyFileEditor(OpenFileDescriptor.java:133)
at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigateInEditor(OpenFileDescriptor.java:118)
at com.intellij.openapi.fileEditor.OpenFileDescriptor.navigate(OpenFileDescriptor.java:105)
at com.intellij.psi.impl.PsiElementBase.navigate(PsiElementBase.java:125)
at com.intellij.codeInsight.navigation.NavigationUtil.activateFileWithPsiElement(NavigationUtil.java:90)
at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.navigate(AbstractPsiBasedNode.java:192)
at com.intellij.util.OpenSourceUtil.navigate(OpenSourceUtil.java:41)
at com.intellij.util.OpenSourceUtil.openSourcesFrom(OpenSourceUtil.java:30)
at com.intellij.util.EditSourceOnDoubleClickHandler$TreeMouseListener.processDoubleClick(EditSourceOnDoubleClickHandler.java:109)
at com.intellij.util.EditSourceOnDoubleClickHandler$TreeMouseListener.mouseClicked(EditSourceOnDoubleClickHandler.java:104)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
at java.awt.Component.processMouseEvent(Component.java:6266)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at com.intellij.ui.treeStructure.Tree.processMouseEvent(Tree.java:125)
at com.intellij.ide.dnd.aware.DnDAwareTree.processMouseEvent(DnDAwareTree.java:57)
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.processMouseEvent(Container.java:4247)
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:621)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:507)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:372)
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)
I hope one day will decompile successfully 1.5 code with exceptions-I know it is jad problem and not Plugin fault.
Many Thanks
Boaz
A version for Idea 7 does exist, but it's currently unstable.
By default, the program should run silently in the background and just decompile the class files when needed. By this I mean that by default the plugin should
(1) decompile to memory,
(2) decompile without asking the user,
(3) not popup a IntelliJad Console nor anything else distracting.
These changes will be quite trivial to make (just use sensible defaults and make IntelliJad Console optional), but they will very much improve the usability of the program.
Then some other improvements:
- The wording of "Confirm navigation-triggered decompile: Always/Ask/Never" is illogical, the same way as "Show this dialog: Always/Ask/Never" is in the popup. You better change the text to something like "Decompile on navigation: Always/Ask/Never" or similar.
- The "Ask" popup has unnecessary tabs and it's not obvious what the "Apply/OK/Cancel" buttons do. The popup would better be something like this:
Decompile the class foo.bar.SomeClass?
[ ] Remember my decision for all classes
[ ] Exclude foo.bar.* from decompilation
[ ] Exclude recursively
[ Decompile ] [ Do not decompile ]
- It's a bit unclear how long the program will keep the decompiled files in memory. I hope the memory is freed after some time (by default limit the number or total size of decompiled files kept in memory). Maybe an option in the settings dialog would clear up this uncertainty which I'm having?
- When using the debugger on classes without source code, it would be extremely useful if the files would be decompiled so, that the line numbers of the decompiled .java file would equal the line numbers in the .class file. Then you could step lines in the debugger and see the code which is being executed. This would be useful also outside the debugger, when you browse the stack trace of an exception which was thrown from a library class whose source code is otherwise not available. This should be an option in the plugin's configuration.
Implementing these correct line numbers might be the hardest part of the plugin, because Jad does not do it, but I hope you can do it. If implemented, the "Reformat according to style" should reformat as much as possible without changing the line numbers (in some cases it will not possible to fully reformat according to the style, because otherwise the line numbers would get messed up - and the correct line numbers are more important than the code style).
- I was not able to run the pluging on IntelliJ IDEA #7274. Please add IDEA 7 compatibility. There's little point in using IDEA 6, because the EAP versions of IDEA 7 have many times better performance (and nice new features).
- Bug: When I use Copy (F5) on a .class file in a library (so as to copy it to my own source folder for modification), IntelliJad is not able to copy it if the .class file has not yet been opened in the editor (an error "Cannot modify compiled element" is given).
- Now the "Original line numbers as comments" and the "Reformat according to style" settings are in conflict, because at least IDEA's default code style does not allow comment blocks on the same line before a statement ("/* 123 */ someStatement();"). Would it be possible to generate the line numbers as end-of-line comments ("someStatement(); // 123"), preferably aligned on a vertical line?