new version of jad decompiler plugin (IdeaJad)
Hi,
I just uploaded a new version of the jad decompiler plugin.
Installation instructions are in the readme.
=> http://www.tagtraum.com/ideajad.html
Enjoy,
-hendrik
Changes:
- Added configuration panel
- Remembers project specific configurations
- Only the files that shall be decompiled are
extracted from jars
- Temporary files are now stored in java.io.tmpdir
and not in the home directory
- Multiple frames are handled correctly
- Added progressbar
Please sign in to leave a comment.
Hendrik,
Nice ONE - great job - congratulations!
The only usability points I can make ...
(compared to the plugin I used in a previous developer life with
JBuilder ;) :
1)
I have a projct with many source roots.
once I have defined the destination for decompiled classes
in the jad plugin panel, I'd like not to be asked again and again for
the destination each time I decompile a new class.
2) Also, I usually do not want my decompiled classes be part of my
'real' sources I have to compile.
So to work well with the plugin - which now requires a destination to
be one of the project sourceroots - I had to define a srcroot that I
exclude from compilation.
Maybe using a temporary root for decompiled files, would be nice ...
thanks!
Edo
Hendrik Schreiber wrote:
--
Edoardo Comar
Cape Clear Software
http://www.capeclear.com
Register for our Web Services Seminar tour - "Lowering the Cost of
Business Integration".
See http://www.capeclear.com/seminars for details
So what do you think... has Jad come to the end of its life?
Hendrik Schreiber wrote:
--
Erb
==============================================================
"Most of you are familiar with the virtues of a programmer.
There are three, of course: laziness, impatience, and hubris."
- Larry Wall
==============================================================
Erb wrote:
what do you mean ... ?
It's probably not being develped actively now ... but
can you suggest a better decompiler ?
Edo
There's files it can't handle. And as Java changes, the situation
may become worse. And unfortunately, no, there isn't a better one.
So we may be in trouble soon, unless someone can take over the
project.
Edoardo Comar wrote:
>> So what do you think... has Jad come to the end of its life?
--
Erb
==============================================================
"Most of you are familiar with the virtues of a programmer.
There are three, of course: laziness, impatience, and hubris."
- Larry Wall
==============================================================
well, unfortunately the code isn't open source :(
-hendrik
thanks.
Right. I will consider your suggestion for the next version.
From the top of my head I don't know whether that can be done with the current Open API. We'll see...
-hendrik
Hendrik,
here are other suggestions :
3) I'd also find useful the 'decompile' menuitem in the project tree
(esp. in the classpath view!). It's annoying to have to open the the
.class in the editor to be able to decompile it.
4) an 'automatic' decompile option would be nice too.
ie whenever a .class is open in the editor, automatically perform
decompilation and substitute JAD's output to IDEA's own
1) and 3) are the options I'd love most to see next.
Edo
Hendrik Schreiber wrote:
>>1)
>>I have a projct with many source roots.
>>once I have defined the destination for decompiled
>>classes
>>in the jad plugin panel, I'd like not to be asked
>>again and again for
>>the destination each time I decompile a new class.
>>2) Also, I usually do not want my decompiled classes
>>be part of my
>>'real' sources I have to compile.
>>So to work well with the plugin - which now requires
>>a destination to
>>be one of the project sourceroots - I had to define a
>>srcroot that I
>>exclude from compilation.
>>Maybe using a temporary root for decompiled files,
>>would be nice ...
--
Edoardo Comar
Cape Clear Software
http://www.capeclear.com
Register for our Web Services Seminar tour - "Lowering the Cost of
Business Integration".
See http://www.capeclear.com/seminars for details
Hendrik Schreiber wrote:
>>There's files it can't handle. And as Java changes,
>>the situation
>>may become worse. And unfortunately, no, there isn't
>>a better one.
>>So we may be in trouble soon, unless someone can take
>>over the
>>project.
this decompiler is good and opensource :
http://sourceforge.net/projects/jode/
unfortunately, development seems to have halted here as well.
Edo
--
Edoardo Comar
Cape Clear Software
http://www.capeclear.com
Register for our Web Services Seminar tour - "Lowering the Cost of
Business Integration".
See http://www.capeclear.com/seminars for details
Hangs forever on startup :(
Here's a thread dump
Full thread dump Java HotSpot(TM) Client VM (1.4.1_01-b01 mixed mode):
"AWT-EventQueue-1" prio=7 tid=0x1792A8B0 nid=0x6f0 waiting on condition [1bcaf00
0..1bcafd8c]
at java.lang.reflect.Field.copy(Unknown Source)
at java.lang.reflect.ReflectAccess.copyField(Unknown Source)
at sun.reflect.ReflectionFactory.copyField(Unknown Source)
at java.lang.Class.copyFields(Unknown Source)
at java.lang.Class.getFields(Unknown Source)
at com.intellij.openapi.util.DefaultJDOMExternalizer.writeExternal(Defau
ltJDOMExternalizer.java:32)
at com.intellij.openapi.util.DefaultJDOMExternalizer.writeExternal(Defau
ltJDOMExternalizer.java:48)
at com.intellij.ide.cf.writeExternal(cf.java:3)
at com.intellij.openapi.components.a.a.a(a.java:32)
at com.intellij.openapi.application.a.e.d(e.java:137)
at com.intellij.openapi.application.a.e.saveSettings(e.java:63)
at com.intellij.ide.cn.b(cn.java:9)
at com.intellij.ide.cn.b(cn.java:3)
at com.intellij.ide.cq.run(cq.java:1)
at com.intellij.util.Alarm$1.run(Alarm.java:3)
at com.intellij.util.Alarm$2.run(Alarm.java:6)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at com.intellij.ide.p.a(p.java:88)
at com.intellij.ide.p.dispatchEvent(p.java:40)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
"TimerQueue" daemon prio=5 tid=0x1B18DF08 nid=0x490 in Object.wait() [1ba6f000..
1ba6fd8c]
at java.lang.Object.wait(Native Method)
- waiting on (a javax.swing.TimerQueue) at javax.swing.TimerQueue.run(Unknown Source) - locked <0435E580>]]> (a javax.swing.TimerQueue)
at java.lang.Thread.run(Unknown Source)
"StoreRefreshStatusThread" prio=2 tid=0x1780EF60 nid=0x990 waiting on condition
at java.lang.Thread.sleep(Native Method)
at com.intellij.openapi.vfs.b.b.bi.run(bi.java:7)
"WatchForChangesThread" prio=7 tid=0x1775FAD0 nid=0x60c runnable [1af6f000..1af6
fd8c]
at com.intellij.vfs.local.win32.FileWatcher.waitForChangeImpl(Native Met
hod)
at com.intellij.vfs.local.win32.FileWatcher.b(FileWatcher.java:17)
at com.intellij.openapi.vfs.b.b.bj.run(bj.java:28)
"Image Fetcher 3" daemon prio=9 tid=0x009B8C20 nid=0x7b8 in Object.wait() [1ad3f
000..1ad3fd8c]
at java.lang.Object.wait(Native Method)
- waiting on (a java.util.Vector) at sun.awt.image.ImageFetcher.nextImage(Unknown Source) - locked <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) "Image Fetcher 2" daemon prio=9 tid=0x009B89A8 nid=0x5e0 in Object.wait() [1ac3f 000..1ac3fd8c] at java.lang.Object.wait(Native Method) - waiting on <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.nextImage(Unknown Source) - locked <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) "AlarmThread" prio=7 tid=0x17495C28 nid=0x8d8 in Object.wait() [1ab3f000..1ab3fd 8c] at java.lang.Object.wait(Native Method) - waiting on <04187DA8> (a java.lang.Object) at com.intellij.util.Alarm$MyThread.run(Alarm.java:63) - locked <04187DA8> (a java.lang.Object) "AlarmThread" prio=7 tid=0x1748FD50 nid=0x6b4 in Object.wait() [1aa3f000..1aa3fd 8c] at java.lang.Object.wait(Native Method) - waiting on <04187E10> (a java.lang.Object) at java.lang.Object.wait(Unknown Source) at com.intellij.util.Alarm$MyThread.run(Alarm.java:43) - locked <04187E10>]]> (a java.lang.Object)
"AWT-EventQueue-0" prio=7 tid=0x17830380 nid=0x76c runnable
at java.util.ArrayList.get(Unknown Source)
at com.intellij.openapi.actionSystem.DefaultActionGroup.a(DefaultActionG
roup.java:13)
at com.intellij.openapi.actionSystem.DefaultActionGroup.a(DefaultActionG
roup.java:84)
at com.intellij.openapi.actionSystem.DefaultActionGroup.a(DefaultActionG
roup.java:33)
at com.intellij.openapi.actionSystem.DefaultActionGroup.add(DefaultActio
nGroup.java:20)
at com.intellij.openapi.actionSystem.b.a.a(a.java:133)
at com.intellij.openapi.actionSystem.b.a.b(a.java:12)
at com.intellij.openapi.actionSystem.b.a.a(a.java:124)
- locked (a java.lang.Object) at com.intellij.idea.r.r(r.java:53) at com.intellij.idea.r.g(r.java:70) at com.intellij.idea.r.a(r.java:55) at com.intellij.idea.l.run(l.java:1) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) "Image Fetcher 1" daemon prio=9 tid=0x177DC5C8 nid=0x680 in Object.wait() [1a6ef 000..1a6efd8c] at java.lang.Object.wait(Native Method) - waiting on <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.nextImage(Unknown Source) - locked <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) "Java2D Disposer" daemon prio=10 tid=0x17760BE0 nid=0x840 in Object.wait() [1a5e f000..1a5efd8c] at java.lang.Object.wait(Native Method) - waiting on <0410F520> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) - locked <0410F520> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at sun.java2d.Disposer.run(Unknown Source) at java.lang.Thread.run(Unknown Source) "Image Fetcher 0" daemon prio=9 tid=0x17757460 nid=0x960 in Object.wait() [1a4ef 000..1a4efd8c] at java.lang.Object.wait(Native Method) - waiting on <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.nextImage(Unknown Source) - locked <04105038> (a java.util.Vector) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) "AWT-Windows" daemon prio=7 tid=0x175A9B08 nid=0x6f4 runnable [1a3ef000..1a3efd8 c] at sun.awt.windows.WToolkit.eventLoop(Native Method) at sun.awt.windows.WToolkit.run(Unknown Source) at java.lang.Thread.run(Unknown Source) "AWT-Shutdown" prio=5 tid=0x175A9780 nid=0x610 in Object.wait() [1a2ef000..1a2ef d8c] at java.lang.Object.wait(Native Method) - waiting on <04093FB0> (a java.lang.Object) at java.lang.Object.wait(Unknown Source) at sun.awt.AWTAutoShutdown.run(Unknown Source) - locked <04093FB0>]]> (a java.lang.Object)
at java.lang.Thread.run(Unknown Source)
"License checker" prio=5 tid=0x1746D400 nid=0x5f0 runnable
at java.net.PlainDatagramSocketImpl.receive(Native Method)
- locked (a java.net.PlainDatagramSocketImpl) at java.net.DatagramSocket.receive(Unknown Source) - locked <04094458> (a java.net.DatagramPacket) - locked <04094478>]]> (a java.net.MulticastSocket)
at com.intellij.ide.j.i.d(i.java:33)
at com.intellij.idea.i.run(i.java)
at java.lang.Thread.run(Unknown Source)
"Lock thread" prio=5 tid=0x176F1490 nid=0x984 runnable
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
- locked ]]> (a java.net.PlainSocketImpl)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at com.intellij.idea.p.run(p.java:0)
at java.lang.Thread.run(Unknown Source)
"Signal Dispatcher" daemon prio=10 tid=0x0098AAB8 nid=0x70c waiting on condition
"Finalizer" daemon prio=9 tid=0x009D3E78 nid=0x8f8 in Object.wait() [16f1f000..1
6f1fd8c]
at java.lang.Object.wait(Native Method)
- waiting on (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) - locked <03EB3FE8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source) "Reference Handler" daemon prio=10 tid=0x009D3208 nid=0x7e8 in Object.wait() [16 e1f000..16e1fd8c] at java.lang.Object.wait(Native Method) - waiting on <03EB4050> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Unknown Source) at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source) - locked <03EB4050>]]> (a java.lang.ref.Reference$Lock)
"main" prio=5 tid=0x00865408 nid=0x784 waiting on condition
"VM Thread" prio=5 tid=0x009D1FD0 nid=0x8b4 runnable
"VM Periodic Task Thread" prio=10 tid=0x00988F90 nid=0x9a0 waiting on condition
"Suspend Checker Thread" prio=10 tid=0x0098A0D0 nid=0x68c runnable
--
Erb
==============================================================
"Most of you are familiar with the virtues of a programmer.
There are three, of course: laziness, impatience, and hubris."
- Larry Wall
==============================================================
always or just sometimes?
it does not seem to hang in the plugin's code though...
-hendrik
I have filed a bug on that. Do you have DiffFile as well ?
It is fixed in 664
(http://www.intellij.net/tracker/idea/viewSCR?publicId=6161)
Jacques
"Erb" <dont@evenbother.com> wrote in message
news:ap1vv1$p6q$1@is.intellij.net...
>
>
>
[1bcaf00
com.intellij.openapi.util.DefaultJDOMExternalizer.writeExternal(Defau
com.intellij.openapi.util.DefaultJDOMExternalizer.writeExternal(Defau
Source)
>
Source)
>
[1ba6f000..
>
condition
>
[1af6f000..1af6
com.intellij.vfs.local.win32.FileWatcher.waitForChangeImpl(Native Met
>
[1ad3f
>
[1ac3f
>
[1ab3f000..1ab3fd
>
[1aa3f000..1aa3fd
>
>
com.intellij.openapi.actionSystem.DefaultActionGroup.a(DefaultActionG
com.intellij.openapi.actionSystem.DefaultActionGroup.a(DefaultActionG
com.intellij.openapi.actionSystem.DefaultActionGroup.a(DefaultActionG
com.intellij.openapi.actionSystem.DefaultActionGroup.add(DefaultActio
Source)
>
Source)
>
[1a6ef
>
[1a5e
>
[1a4ef
>
[1a3ef000..1a3efd8
>
[1a2ef000..1a2ef
>
>
>
condition
>
[16f1f000..1
>
Object.wait() [16
>
>
>
condition
>
>
>
>
>
>
Thank you for tracking that down for me, I was too lazy.
I wonder what the problem (in IDEA code) turned out to be.
Jacques Morel wrote:
>>Hangs forever on startup :(
>>
>>Here's a thread dump
>>
>>Full thread dump Java HotSpot(TM) Client VM (1.4.1_01-b01 mixed mode):
>>
--
Erb
==============================================================
"Most of you are familiar with the virtues of a programmer.
There are three, of course: laziness, impatience, and hubris."
- Larry Wall
==============================================================
just uploaded a new version.
=> http://www.tagtraum.com/ideajad.html
thanks for your input. i wasn't able to put everything you guys requested in there, but at least there is now a release that works with the latest version of idea.
-hendrik
But jad is far better than jode and, as you stated, developement has halted in both cases anyway.
Another promising decompiler I found yesterday is JReversePro http://sourceforge.net/projects/jrevpro/. It is not perfect, but it is open source, actively developed and much more up to date than jad or jode.
I guess, you should all take a look at it!
Michael