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

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

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

    隨筆-8  評(píng)論-31  文章-0  trackbacks-0

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

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

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

    示例使用代碼

    [補(bǔ)充]: CVSParseMethod的構(gòu)造函數(shù)是CVSParseMethod(String String1,String String2), String1是目標(biāo)的java文件在文件系統(tǒng)的位置,String2是類的全名..如net.blogjava.xmp123.CVSClass.
    BTW:不要忘記將后面download的jar導(dǎo)過來。

    結(jié)果會(huì)打在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反射拿出所有的的類的構(gòu)造函數(shù)和方法。
    .讀java源文件,通過匹配左右括號(hào)來匹配方法并記錄出合適的位置。

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

    5. 下載的地址:

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

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

    就我所知,括號(hào)的匹配問題至少有:

    1. 排除類中static域。這東西從括號(hào)上講和一個(gè)方法一模一樣。-未實(shí)現(xiàn)

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

    3. 匿名內(nèi)部類在成員變量的申明。例如:

    Dog dog = new Dog() {public void shout() {}}; -未實(shí)現(xiàn)。

    4. 代碼注釋中含有{} ,這樣的情況太常見。-已實(shí)現(xiàn)。

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

    你對(duì)Java知道得越多,當(dāng)然想到的情況越多。也會(huì)感覺這東西很麻煩。

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

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

    多寫寫,我們互相踩踩,共同提高. :)  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲一区二区三区乱码A| a级毛片视频免费观看| 亚洲专区中文字幕| 国产真人无码作爱视频免费| 亚洲成a人一区二区三区| 亚洲精品国产成人片| 五月天国产成人AV免费观看| 免费国产a国产片高清| 亚洲国产精品久久久久秋霞小| 无码日韩人妻AV一区免费l| 四虎影院永久免费观看| 亚洲国产精品lv| 免费一级不卡毛片| 四虎永久在线精品免费观看地址| 久久精品国产69国产精品亚洲| 在线亚洲午夜片AV大片| 好吊妞998视频免费观看在线| 亚洲精品无码乱码成人| 日韩成人免费视频| 亚洲AV无码之日韩精品| yellow视频免费看| 亚洲欧洲日产国码av系列天堂| 亚洲熟妇AV乱码在线观看| 午夜高清免费在线观看| 免费高清A级毛片在线播放| 亚洲自偷自偷偷色无码中文| 免费福利在线视频| 亚洲成电影在线观看青青| 在线播放免费播放av片| 人人鲁免费播放视频人人香蕉| 成人黄动漫画免费网站视频| 亚洲AV成人精品日韩一区| 中文字幕无码免费久久99| 亚洲视频在线视频| 啦啦啦中文在线观看电视剧免费版| 亚洲AV乱码久久精品蜜桃| 免费无码A片一区二三区| 老司机午夜在线视频免费| 免费看少妇作爱视频| 国产特黄特色的大片观看免费视频| 日本大片在线看黄a∨免费|