<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-8  評論-31  文章-0  trackbacks-0

    去年為了公司的Junit需求做了一個檢測我們的代碼是否有Junit Test Class的一個小Tool, 今天又翻出來看了下,覺得里面的有個小功能可能對大家有用,如果你也覺得有用,我覺得很榮幸。:)

    1.用途:
    指定一個類, 分析出類中所有方法的精確位置- 也就是某個方法在哪兩行之間。
    (大家可以考慮一下怎么做,然后再看看我的方法是不是太笨了。-_-!!)

    2.用法:
    新建一個類,將這幾行代碼加到mail方法,例如:

    示例使用代碼

    [補充]: CVSParseMethod的構造函數是CVSParseMethod(String String1,String String2), String1是目標的java文件在文件系統的位置,String2是類的全名..如net.blogjava.xmp123.CVSClass.
    BTW:不要忘記將后面download的jar導過來。

    結果會打在Console里,象這樣:

    Loading?net.blogjava.xmp123.CVSClass
    Loaded?net.blogjava.xmp123.CVSClass
    Found?java?source?file?in?C:\Documents?and?Settings\hut\workspace\AccountMethodLocation
    / net / blogjava / xmp123 / CVSClass.java
    Parsing?net.blogjava.xmp123.CVSClass
    Parsed?a?common?
    class ?and?brackets?can?matched?the?methods?correctly
    MethodParseEngine?have?searched?
    10 ?methods(Including?constructors).
    Completed?:Spend?
    0.187 ?seconds?to?parse? this ?file.
    [
    public ?CVSClass(String)?locate?between? 52 ?and? 123
    ,?
    public ?CVSMethod[]?getCvsMethodArray()?locate?between? 128 ?and? 130
    ,?
    public ?CVSConstructor[]?getCvsConstructorArray()?locate?between? 135 ?and? 137
    ,?
    public ?Set?getMethodSet()?locate?between? 142 ?and? 144
    ,?
    public ?Set?getConstructorSet()?locate?between? 149 ?and? 151
    ,?
    public ?String?getClasspath()?locate?between? 156 ?and? 158
    ,?
    public ?List?getMethodList()?locate?between? 163 ?and? 165
    ,?
    public ?String?getClassName()?locate?between? 174 ?and? 176
    ,?
    public ? boolean ?equals(Object)?locate?between? 183 ?and? 188
    ,?
    public ? int ?hashCode()?locate?between? 193 ?and? 196
    ]

    3. 我是怎么做的。

    .用java反射拿出所有的的類的構造函數和方法。
    .讀java源文件,通過匹配左右括號來匹配方法并記錄出合適的位置。

    4. 存在的問題:
    到目前為止,這個小程序至少不能分析它自己的主類:CVSParseMethod(很多Exceptions), 因為這個類里面定義的一些String中含用 { }而導致匹配的時候出錯。呵呵。但是我保證,它應該在>90%的概率下正常工作。:)?

    5. 下載的地址:

    http://m.tkk7.com/Files/xmp123/CountMethodLocation.zip
    posted on 2007-03-12 15:40 自己的小屋 閱讀(2271) 評論(9)  編輯  收藏

    評論:
    # re: 定位Java類中的每個方法在類文件中的位置. [未登錄] 2007-03-12 16:25 | 螞蚱
    很早以前寫java源代碼編輯器時也遇到過{}匹配的問題,處理“”中的部分很麻煩,我也沒有做成功。為了保證可以用其他方法實現,先找出方法的起始位置,再找出下一個方法的起始位置(查找方法通過private 或public修飾符關鍵字),兩個中間就是方法的代碼了。但有個問題,要求代碼中方法和成員變量不要含有默認scope聲明,例如:int i;必須用private|public|protected int i;就可以了。  回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-03-12 17:02 | BeanSoft
    想法很不錯. 可以試試 QDox http://qdox.codehaus.org/ 專業的開源Java源碼解析工具, 能把源碼分析成結構化的組織. 可以看看實際使用: http://beansoft.java-cn.org/Wiki.jsp?page=QuickJavaDocPlugin 從源碼里提取 JavaDoc 并根據不同的類型加以顏色.  回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-03-12 18:12 | Javacap
    最直接的辦法應該是分析class的bytecode,找到每個Method_info->Code Attribute->LineNumberTable Attribute ,  回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-03-13 12:47 | wanglinghua
    你所說的方法對代碼的要求太苛刻。并且默認的方法修飾符是java中訪問控制中特色的一種,如果象此類的代碼都解析不了,那可能這個方法就有問題。

    就我所知,括號的匹配問題至少有:

    1. 排除類中static域。這東西從括號上講和一個方法一模一樣。-未實現

    2. 排除類成員變量中數組的申明賦值,比如說:int[] x = { 1,2,3,4,5}
    [我可以找到第一個方法(也可能是構造函數的位置,如果在此之前有括號匹配成功,那么必然是類似的情況] -已實現。

    3. 匿名內部類在成員變量的申明。例如:

    Dog dog = new Dog() {public void shout() {}}; -未實現。

    4. 代碼注釋中含有{} ,這樣的情況太常見。-已實現。

    5. 代碼中的某個String含有 { } 之類的字符。

    你對Java知道得越多,當然想到的情況越多。也會感覺這東西很麻煩。

    :) @螞蚱
      回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-03-13 12:48 | 王凌華
    @Javacap

    這是JVM的東西,我昨天又翻了一下我已經買了很久的Inside JVM,但是總是翻不下去。:(   回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-04-27 14:15 | 執手麥田
    目前還沒有到達這一步,正在努力中。在這過程中也希望能有您這樣的高手指點一二。  回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-04-27 14:20 | 王凌華
    我剛在你blog留言,你又來踩我的了。有緣.
    @執手麥田
      回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-04-27 16:56 | 執手麥田
    呵呵,以后JAVA里有問題還要多多請教呢。  回復  更多評論
      
    # re: 定位Java類中的每個方法在類文件中的位置. 2007-04-27 17:29 | 王凌華
    @執手麥田

    多寫寫,我們互相踩踩,共同提高. :)  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品线路一在线观看| 免费中文字幕在线| 91在线视频免费91| 午夜毛片不卡高清免费| 亚洲国产精品毛片av不卡在线| 亚洲成AV人片在WWW色猫咪| 亚洲尹人九九大色香蕉网站| 亚洲中文字幕AV在天堂| 国产高清视频免费在线观看 | 亚洲Av永久无码精品三区在线| 亚洲成人免费电影| 亚欧洲精品在线视频免费观看| 四虎精品亚洲一区二区三区| 亚洲妇女水蜜桃av网网站| 日本片免费观看一区二区| 亚洲国产aⅴ综合网| free哆拍拍免费永久视频| 亚洲精品美女久久久久99小说| 无套内谢孕妇毛片免费看看| 性xxxxx免费视频播放| 亚洲成AV人片天堂网无码| 99久久精品免费精品国产| 免费国内精品久久久久影院| 鲁啊鲁在线视频免费播放| 国产免费不卡v片在线观看| 亚洲18在线天美| 狼群影院在线观看免费观看直播| 国产自偷亚洲精品页65页| 亚洲精品欧美综合四区| 久视频精品免费观看99| 亚洲中文字幕无码久久| 久久久久久精品免费免费自慰| 亚洲av日韩av综合| heyzo亚洲精品日韩| 一区二区三区观看免费中文视频在线播放 | 在线免费观看一级毛片| 日韩精品无码免费视频| 久久精品夜色国产亚洲av| 免费福利网站在线观看| 无遮挡免费一区二区三区| 免费国产一级特黄久久|