Vim Tips Wiki
No edit summary
 
(Category: Java)
Line 151: Line 151:
 
----
 
----
 
<!-- parsed by vimtips.py in 0.625483 seconds-->
 
<!-- parsed by vimtips.py in 0.625483 seconds-->
  +
[[Category:Java]]

Revision as of 19:00, 14 August 2007

Previous TipNext Tip

Tip: #54 - View a Java Class File using a decompiler

Created: March 22, 2001 18:21 Complexity: intermediate Author: bhaskar_v_k--AT--hotmail.com Version: 5.7 Karma: 148/48 Imported from: Tip#54

Hi All,

Wish u could view a Java Class File using Vim,

Well ur query ends here.

First of all u will need a Java Decompiler to decompile

the Class File.

I would suggest the JAD decompiler by Pavel Kouznetsov

http://www.geocities.com/SiliconValley/Bridge/8617/jad.html


Its a command line decompiler and absolutely free.

U can use any command line decompiler of ur choice.


Next create a vimscript file called jad.vim as

######################### FILE START ################

augr class

au!

au bufreadpost,filereadpost *.class %!d:jad.exe -noctor -ff -i -p %

au bufreadpost,filereadpost *.class set readonly

au bufreadpost,filereadpost *.class set ft=java

au bufreadpost,filereadpost *.class normal gg=G

au bufreadpost,filereadpost *.class set nomodified

augr END

######################## FILE END #####################


Note:- Keep the Jad.exe in a directory with out white spaces.

The -p options directs JAD to send the output to standard output

instead of a .jad file. Other options are described on the JAD site.


Next add the following line in the .vimrc file.

so jad.vim


Next time u do vim abc.class. Viola u have the source code

for abc.class.


NOTE:- I have written the script so as to open the class file

read only, So that u dont accidently modify it.

U can also exted this script to unjar a jar file and then view each

file in the JAR file.

thanks

bhaskar

Any suggestions are welcome

Comments

Hi, first I love this script I modified this a little bit to use the improved file runtime organisation of vim60, I don't know if other will like it better but here it is: I added to filetype.vim:

augroup filetypedetect 
au! BufRead,BufNewFile *.jad setfiletype java 
au! BufRead,BufNewFile *.class setfiletype class 
augroup END 

and created in ftplugin a class.vim with %!jad.exe -noctor -ff -i -p % set readonly set ft=java normal gg=G set nomodified

b.cerrina--AT--wanadoo.fr , August 21, 2001 13:54


If you don't want to 'hit ENTER' after every decompilation, you can add 'silent' to some of the lines:

au bufreadpost,filereadpost *.class silent %!jad -noctor -ff -i -p % 

and maybe even:

au bufreadpost,filereadpost *.class silent normal gg=G 

(thanks to myitcv on #vim--AT--EFnet)


roel--AT--SP-AM_almende.com , February 24, 2004 6:00


Nice script!!

I can now select any class file, right click, and select the "Edit with Vim" option to view the source.

I'm just wondering, how do I change this to if I do the same to a jar file, and it will show me the contents of the jar file, as in a jar -tf, and if I select any of the entries, I can view the source?

I tried opening the jar file using WinZip, and if I view any of the entries in it using vim, I'll get something like this: JavaClassFileReadException: can't open input file on `C:\Documents' JavaClassFileReadException: can't open input file on `and' JavaClassFileReadException: can't open input file on `Settings\gwunwai\Local' JavaClassFileReadException: can't open input file on `Settings\Temp\Version.class'

I think that's because WinZip extracts the zip entries into my temp directory, which contains white spaces.

Is there some way around this?

gwunwai--AT--pacific.net.sg , June 6, 2004 23:06


you can change the command to %!jad.exe -noctor -ff -i -p "%" (enclosed the % with quotes). It worked for me

Anonymous , July 13, 2005 11:18