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

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

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

    邋遢居

    我的Java天堂

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

    Jmerger 使用初步 ( )

    前面一篇提到了他基本的概念和能完成的功能。在這一篇里我們來(lái)看看他的使用條件和使用方法。

    使用條件:應(yīng)為

    org.eclipse.jdt.core (提供基本的語(yǔ)法分析)

    org.eclipse.core.runtime (提供基本的 URI 等)

    org.eclipse.ui (提供進(jìn)度條,我就看到了這個(gè)。其他可能還有)。

    看到他要使用這么多 Eclipse 的東西。我徹底的打消了在 Eclipse 外使用他的打算(如果誰(shuí)有好的解決方案記得給我發(fā)一份。在下感激不盡)。


    我們下面就來(lái)看看如何定制他的合并規(guī)則是如何定義的吧。我先做法是找了一個(gè)例子。看看他是如何工作的。


    我的 Merge.xml 如下:

    清單 2

    <? xml version = "1.0" encoding = "UTF-8" ?>

    < merge:options xmlns:merge = "http://www.eclipse.org/org/eclipse/emf/codegen/jmerge/Options" >


    < merge:dictionaryPattern

    name = "generatedMember"

    select = "Member/getComment"

    match = "\s*@\s*(gen)erated\s*\n" />

    <!-- if target is generated, transfer -->

    <!-- change to sourceMarkup if the source is the standard -->

    < merge:pull

    targetMarkup = "^gen$"

    sourceGet = "Method/getBody"

    targetPut = "Method/setBody" />


    </ merge:options >


    運(yùn)行前的 Source Java Source A 分源代碼為

    /**

    * Source javadoc 13

    * <!-- begin-user-doc -->

    * Source user javadoc 14

    * <!-- end-user-doc -->

    * Source javadoc 15

    * @return source

    * @generated

    */

    public boolean isID()

    {

    // begin-user-code

    System.out.println("Source user code 1");

    // end-user-code

    System.out.println("Source code 2");

    return id == "source";

    }








    運(yùn)行前 Target(Java Source B) 部分的源代碼為:

    /**
    * Source javadoc 13
    * <!-- begin-user-doc -->
    * Target user javadoc 16
    * Target user javadoc 17
    * <!-- end-user-doc -->
    * Source javadoc 15
    * @return source
    * @generated
    */
    public boolean isID()
    {
    //This is my owner code
    System.out.print("Will be replace");
    // begin-user-code
    System.out.println("Target user code 2");
    // end-user-code
    System.out.println("Source code 2");
    return id == "source";
    }


    /**
    * Target javadoc 19
    * <!-- begin-user-doc -->
    * Target user javadoc 20
    * Target user javadoc 21
    * <!-- end-user-doc -->
    * Target javadoc 22
    * @param target
    * @generated NOT
    */
    public void setID(boolean value)
    {
    //This Jet Code
    System.out.println("Not be replaced!");
    id = value ? "target" : "source";
    System.out.println("Target code 4");
    }

    注意: isID 方法 注釋里有” @generated” 這一行。而 setID 方法的注釋中是 @generated NOT


    運(yùn)行后的結(jié)果是( Result of merge )為

    /**
    * Source javadoc 13
    * <!-- begin-user-doc -->
    * Target user javadoc 16
    * Target user javadoc 17
    * <!-- end-user-doc -->
    * Source javadoc 15
    * @return source
    * @generated
    */
    public boolean isID()

    {

    // begin-user-code

    System.out.println("Source user code 1");

    // end-user-code

    System.out.println("Source code 2");

    return id == "source";

    }

    // 使用了 Source 部分的代碼。

    /**
    * Target javadoc 19
    * <!-- begin-user-doc -->
    * Target user javadoc 20
    * Target user javadoc 21
    * <!-- end-user-doc -->
    * Target javadoc 22
    * @param target
    * @generated NOT
    */
    public void setID(boolean value)
    {
    //This Jet Code
    System.out.println("Not be replaced!");
    id = value ? "target" : "source";
    System.out.println("Target code 4");
    }

    // 維持原來(lái) Target 中的代碼沒(méi)有變化。

    這樣我們就不難看出

    < merge:dictionaryPattern ……/> 是定義了一個(gè)匹配模式。具體的這個(gè)匹配模式要做的動(dòng)作就是在

    < merge:pull

    targetMarkup = "^gen$"

    sourceGet = "Method/getBody"

    targetPut = "Method/setBody" />

    段中定義了。猜想他只是把 Source 部分的內(nèi)容直接輸出到 Target 那里去了。

    如果我們覺(jué)得需要做點(diǎn)什么過(guò)濾。比如說(shuō)想保留 Target 中一個(gè)特定的內(nèi)容。這一個(gè)我們可以通過(guò) merge:pull sourceTransfer 屬性來(lái)設(shè)置。


    現(xiàn)在來(lái)看一個(gè)例子:

    merge:pull 節(jié)點(diǎn)修改成

    < merge:pull

    targetMarkup = "^gen$"

    sourceTransfer = "(\s*//\s*begin-user-code.*?//\s*end-user-code\s*)\n"

    sourceGet = "Method/getBody"

    targetPut = "Method/setBody" />

    注意:添加了一個(gè) sourceTransfer, 他的值 值是一個(gè)正則表達(dá)式。匹配的是被

    // begin-user-code” 和“ // end-user-code” 包圍住的所有的字符。

    Target 的代碼為我們現(xiàn)在只是關(guān)注 isID 方法


    /**
    * Source javadoc 13
    * <!-- begin-user-doc -->
    * Target user javadoc 16
    * Target user javadoc 17
    * <!-- end-user-doc -->
    * Source javadoc 15
    * @return source
    * @generated
    */
    public boolean isID()

    {

    // begin-user-code

    System.out.println("Source user code 1");
    System.out.println("This will not be replaced!");

    // end-user-code
    System.out.print("this will be replaced!");

    System.out.println("Source code 2");

    return id == "source";

    }


    請(qǐng)注意看一下紅色部分的兩行代碼。

    合并后的代碼為:

    /**
    * Source javadoc 13
    * <!-- begin-user-doc -->
    * Target user javadoc 16
    * Target user javadoc 17
    * <!-- end-user-doc -->
    * Source javadoc 15
    * @return source
    * @generated
    */
    public boolean isID()

    {

    // begin-user-code

    System.out.println("Source user code 1");
    System.out.println("This will not be replaced!");

    // end-user-code
    System.out.println("Source code 2");

    return id == "source";

    }


    在“ // begin-user-code 和“ // end-user-code 外的代碼全部被替換成了。這樣就起到了過(guò)濾的效果。

    posted on 2006-05-02 11:34 Jet Geng 閱讀(2001) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): EclipseEMF

    Feedback

    # re: Jmerge的使用初步(二) 2007-11-13 11:24 help
    你好:

    我在merge.xml中加入
    sourceTransfer = "(\s*//\s*begin-user-code.*?//\s*end-user-code\s*)\n"
    后,方法就不會(huì)覆蓋生成了,我不知道為什么。
    能幫幫忙嗎?


      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 67194成手机免费观看| 激情综合亚洲色婷婷五月| 亚洲第一区精品观看| 午夜影视在线免费观看| 成年人免费网站在线观看| 欧美好看的免费电影在线观看| 最近在线2018视频免费观看| 6080午夜一级毛片免费看| 亚洲免费闲人蜜桃| 久久久久久精品成人免费图片| 免费无码VA一区二区三区| 久久久久高潮毛片免费全部播放| 日韩免费人妻AV无码专区蜜桃| 91成人在线免费视频| 国产又黄又爽又猛免费app| 大学生高清一级毛片免费| 韩国日本好看电影免费看| va亚洲va日韩不卡在线观看| 亚洲欧洲自拍拍偷精品 美利坚| AV在线亚洲男人的天堂| 亚洲国产成人一区二区三区| 色婷婷亚洲十月十月色天| 亚洲制服丝袜中文字幕| 亚洲人成电影网站色www| 国产精品亚洲专区无码不卡| 黄视频在线观看免费| 日韩视频在线观看免费| 一个人免费观看在线视频www| 永久免费bbbbbb视频| 国产av无码专区亚洲国产精品| 亚洲熟妇丰满多毛XXXX| 亚洲成a人不卡在线观看| 亚洲国产精品无码久久久秋霞1| 四虎永久在线精品免费一区二区| 永久免费A∨片在线观看| 国产精品久久久久久久久免费| 青青青青青青久久久免费观看| 亚洲成a人片在线观看国产| 亚洲色欲色欲www在线丝| 亚洲伊人久久大香线焦| 国产亚洲精品美女久久久久久下载|