那是2007年三月二日,我发了<
定位Java类中的每个方法在类文件中的位置>引起了几个大虾的注意并且给我指点,当时看了以后也没有怎么弄,也不知道怎么弄.
这是cape给我的建议:
最直接的办法应该是分析class的bytecode,找到每个Method_info->Code Attribute->LineNumberTable Attribute今天空闲得慌而是我拿这个method linenumber几个keyword在网上狂搜了一把,
http://www.ibm.com/developerworks/cn/java/j-dyn0302/index.html
得到美文一篇,用Javassist来做. Javassist是一个专门操控java class的bytecode的类,可以动态的改变其状态,我没有深究它到底有多大的能耐,有兴趣可以去它的官方网站看看,
http://www.csg.is.titech.ac.jp/~chiba/javassist/但是它确实可以象cape指点的那样,让我实现对java类中的每个方法的定位(得到类中的某个方法的lineRange)
而是我就随便翻了几个例子以后根据在线文档写了不到100行代码轻松搞定。:) 我高兴啊。
干这个事情的两个java的source code可以从这里得到:
http://www.blogjava.net/Files/xmp123/MethodParser.zip
代码很简单,我就不解释代码了。
这是示例结果:
------------------------------------------------------------------------------------------------------------------------------
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
自己的小屋 阅读(1124)
评论(0) 编辑 收藏