随笔-8  评论-31  文章-0  trackbacks-0
那是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)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: