那是2007年三月二日,我發(fā)了<
定位Java類中的每個(gè)方法在類文件中的位置>引起了幾個(gè)大蝦的注意并且給我指點(diǎn),當(dāng)時(shí)看了以后也沒(méi)有怎么弄,也不知道怎么弄.
這是cape給我的建議:
最直接的辦法應(yīng)該是分析class的bytecode,找到每個(gè)Method_info->Code Attribute->LineNumberTable Attribute今天空閑得慌而是我拿這個(gè)method linenumber幾個(gè)keyword在網(wǎng)上狂搜了一把,
http://www.ibm.com/developerworks/cn/java/j-dyn0302/index.html
得到美文一篇,用Javassist來(lái)做. Javassist是一個(gè)專門操控java class的bytecode的類,可以動(dòng)態(tài)的改變其狀態(tài),我沒(méi)有深究它到底有多大的能耐,有興趣可以去它的官方網(wǎng)站看看,
http://www.csg.is.titech.ac.jp/~chiba/javassist/但是它確實(shí)可以象cape指點(diǎn)的那樣,讓我實(shí)現(xiàn)對(duì)java類中的每個(gè)方法的定位(得到類中的某個(gè)方法的lineRange)
而是我就隨便翻了幾個(gè)例子以后根據(jù)在線文檔寫(xiě)了不到100行代碼輕松搞定。:) 我高興啊。
干這個(gè)事情的兩個(gè)java的source code可以從這里得到:
http://m.tkk7.com/Files/xmp123/MethodParser.zip
代碼很簡(jiǎn)單,我就不解釋代碼了。
這是示例結(jié)果:
------------------------------------------------------------------------------------------------------------------------------
Analyzing net.blogjava.xmp123.MyMethodInfo ...
net.blogjava.xmp123.MyMethodInfo.getLineList() locate between 56 and 56
net.blogjava.xmp123.MyMethodInfo.updateLineList() locate between 63 and 80
net.blogjava.xmp123.MyMethodInfo.addLineToLineList(int) locate between 87 and 89
net.blogjava.xmp123.MyMethodInfo.setLineList(java.util.List) locate between 95 and 97
...
------------------------------------------------------------------------------------------------------------------------------
希望這東西有用......
posted on 2007-08-15 17:56
自己的小屋 閱讀(1138)
評(píng)論(0) 編輯 收藏