国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Java 中的屠龍之術(shù):如何修改語(yǔ)法樹?

共 16335字,需瀏覽 33分鐘

 ·

2021-11-12 20:03

來(lái)源:my.oschina.net/u/
4030990/blog/3211858



    在網(wǎng)上關(guān)于如何修改Java的抽象語(yǔ)法樹的相關(guān)API文檔并不多,于是本篇記錄一下相關(guān)的知識(shí)點(diǎn),以便隨后查閱。

    JCTree的介紹

    JCTree是語(yǔ)法樹元素的基類,包含一個(gè)重要的字段pos,該字段用于指明當(dāng)前語(yǔ)法樹節(jié)點(diǎn)(JCTree)在語(yǔ)法樹中的位置,因此我們不能直接用new關(guān)鍵字來(lái)創(chuàng)建語(yǔ)法樹節(jié)點(diǎn),即使創(chuàng)建了也沒有意義。

    此外,結(jié)合訪問者模式,將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)的處理進(jìn)行解耦,部分源碼如下:

    public?abstract?class?JCTree?implements?Tree,?Cloneable,?DiagnosticPosition?{

    ????public?int?pos?=?-1;

    ????...

    ????public?abstract?void?accept(JCTree.Visitor?visitor);

    ????...
    }

    我們可以看到JCTree是一個(gè)抽象類,這里重點(diǎn)介紹幾個(gè)JCTree的子類

    1. JCStatement:聲明 語(yǔ)法樹節(jié)點(diǎn),常見的子類如下



      • JCBlock:語(yǔ)句塊 語(yǔ)法樹節(jié)點(diǎn)
    • JCReturn:return語(yǔ)句 語(yǔ)法樹節(jié)點(diǎn)
    • JCClassDecl:類定義 語(yǔ)法樹節(jié)點(diǎn)
    • JCVariableDecl:字段/變量定義 語(yǔ)法樹節(jié)點(diǎn)
    1. JCMethodDecl:方法定義 語(yǔ)法樹節(jié)點(diǎn)

    2. JCModifiers:訪問標(biāo)志 語(yǔ)法樹節(jié)點(diǎn)

    3. JCExpression:表達(dá)式 語(yǔ)法樹節(jié)點(diǎn),常見的子類如下



      • JCAssign:賦值語(yǔ)句 語(yǔ)法樹節(jié)點(diǎn)
    • JCIdent:標(biāo)識(shí)符 語(yǔ)法樹節(jié)點(diǎn),可以是變量,類型,關(guān)鍵字等等

    推薦下自己做的 Spring Boot 的實(shí)戰(zhàn)項(xiàng)目:

    https://github.com/YunaiV/ruoyi-vue-pro

    TreeMaker介紹

    TreeMaker用于創(chuàng)建一系列的語(yǔ)法樹節(jié)點(diǎn),我們上面說(shuō)了創(chuàng)建JCTree不能直接使用new關(guān)鍵字來(lái)創(chuàng)建,所以Java為我們提供了一個(gè)工具,就是TreeMaker,它會(huì)在創(chuàng)建時(shí)為我們創(chuàng)建的JCTree對(duì)象設(shè)置pos字段,所以必須使用上下文相關(guān)的TreeMaker對(duì)象來(lái)創(chuàng)建語(yǔ)法樹節(jié)點(diǎn)。

    具體的API介紹可以參照,TreeMakerAPI,接下來(lái)著重介紹一下常用的幾個(gè)方法。

    TreeMaker.Modifiers

    TreeMaker.Modifiers方法用于創(chuàng)建訪問標(biāo)志 語(yǔ)法樹節(jié)點(diǎn)(JCModifiers),源碼如下

    public?JCModifiers?Modifiers(long?flags)?{
    ????return?Modifiers(flags,?List.nil());
    }

    public?JCModifiers?Modifiers(long?flags,
    ????List?annotations)
    ?
    {
    ????????JCModifiers?tree?=?new?JCModifiers(flags,?annotations);
    ????????boolean?noFlags?=?(flags?&?(Flags.ModifierFlags?|?Flags.ANNOTATION))?==?0;
    ????????tree.pos?=?(noFlags?&&?annotations.isEmpty())???Position.NOPOS?:?pos;
    ????????return?tree;
    }
    1. flags:訪問標(biāo)志
    2. annotations:注解列表

    其中flags可以使用枚舉類com.sun.tools.javac.code.Flags來(lái)表示,例如我們可以這樣用,就生成了下面的訪問標(biāo)志了。

    treeMaker.Modifiers(Flags.PUBLIC?+?Flags.STATIC?+?Flags.FINAL);

    public?static?final

    TreeMaker.ClassDef

    TreeMaker.ClassDef用于創(chuàng)建類定義 語(yǔ)法樹節(jié)點(diǎn)(JCClassDecl),源碼如下:

    public?JCClassDecl?ClassDef(JCModifiers?mods,
    ????Name?name,
    ????List?typarams,
    ????JCExpression?extending,
    ????List?implementing,
    ????List?defs)
    ?
    {
    ????????JCClassDecl?tree?=?new?JCClassDecl(mods,
    ?????????????????????????????????????name,
    ?????????????????????????????????????typarams,
    ?????????????????????????????????????extending,
    ?????????????????????????????????????implementing,
    ?????????????????????????????????????defs,
    ?????????????????????????????????????null);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }
    1. mods:訪問標(biāo)志,可以通過(guò)TreeMaker.Modifiers來(lái)創(chuàng)建
    2. name:類名
    3. typarams:泛型參數(shù)列表
    4. extending:父類
    5. implementing:實(shí)現(xiàn)的接口
    6. defs:類定義的詳細(xì)語(yǔ)句,包括字段、方法的定義等等

    TreeMaker.MethodDef

    TreeMaker.MethodDef用于創(chuàng)建方法定義 語(yǔ)法樹節(jié)點(diǎn)(JCMethodDecl),源碼如下

    public?JCMethodDecl?MethodDef(JCModifiers?mods,
    ????Name?name,
    ????JCExpression?restype,
    ????List?typarams,
    ????List?params,
    ????List?thrown,
    ????JCBlock?body,
    ????JCExpression?defaultValue)
    ?
    {
    ????????JCMethodDecl?tree?=?new?JCMethodDecl(mods,
    ???????????????????????????????????????name,
    ???????????????????????????????????????restype,
    ???????????????????????????????????????typarams,
    ???????????????????????????????????????params,
    ???????????????????????????????????????thrown,
    ???????????????????????????????????????body,
    ???????????????????????????????????????defaultValue,
    ???????????????????????????????????????null);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }

    public?JCMethodDecl?MethodDef(MethodSymbol?m,
    ????Type?mtype,
    ????JCBlock?body)
    ?
    {
    ????????return?(JCMethodDecl)
    ????????????new?JCMethodDecl(
    ????????????????Modifiers(m.flags(),?Annotations(m.getAnnotationMirrors())),
    ????????????????m.name,
    ????????????????Type(mtype.getReturnType()),
    ????????????????TypeParams(mtype.getTypeArguments()),
    ????????????????Params(mtype.getParameterTypes(),?m),
    ????????????????Types(mtype.getThrownTypes()),
    ????????????????body,
    ????????????????null,
    ????????????????m).setPos(pos).setType(mtype);
    }
    1. mods:訪問標(biāo)志
    2. name:方法名
    3. restype:返回類型
    4. typarams:泛型參數(shù)列表
    5. params:參數(shù)列表
    6. thrown:異常聲明列表
    7. body:方法體
    8. defaultValue:默認(rèn)方法(可能是interface中的哪個(gè)default)
    9. m:方法符號(hào)
    10. mtype:方法類型。包含多種類型,泛型參數(shù)類型、方法參數(shù)類型、異常參數(shù)類型、返回參數(shù)類型。

    返回類型restype填寫null或者treeMaker.TypeIdent(TypeTag.VOID)都代表返回void類型。

    TreeMaker.VarDef

    TreeMaker.VarDef用于創(chuàng)建字段/變量定義 語(yǔ)法樹節(jié)點(diǎn)(JCVariableDecl),源碼如下

    public?JCVariableDecl?VarDef(JCModifiers?mods,
    ????Name?name,
    ????JCExpression?vartype,
    ????JCExpression?init)
    ?
    {
    ????????JCVariableDecl?tree?=?new?JCVariableDecl(mods,?name,?vartype,?init,?null);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }

    public?JCVariableDecl?VarDef(VarSymbol?v,
    ????JCExpression?init)
    ?
    {
    ????????return?(JCVariableDecl)
    ????????????new?JCVariableDecl(
    ????????????????Modifiers(v.flags(),?Annotations(v.getAnnotationMirrors())),
    ????????????????v.name,
    ????????????????Type(v.type),
    ????????????????init,
    ????????????????v).setPos(pos).setType(v.type);
    }
    1. mods:訪問標(biāo)志
    2. name:參數(shù)名稱
    3. vartype:類型
    4. init:初始化語(yǔ)句
    5. v:變量符號(hào)

    TreeMaker.Ident

    TreeMaker.Ident用于創(chuàng)建標(biāo)識(shí)符 語(yǔ)法樹節(jié)點(diǎn)(JCIdent),源碼如下

    public?JCIdent?Ident(Name?name)?{
    ????????JCIdent?tree?=?new?JCIdent(name,?null);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }

    public?JCIdent?Ident(Symbol?sym)?{
    ????????return?(JCIdent)new?JCIdent((sym.name?!=?names.empty)
    ??????????????????????????????????sym.name
    ????????????????????????????????:?sym.flatName(),?sym)
    ????????????.setPos(pos)
    ????????????.setType(sym.type);
    }

    public?JCExpression?Ident(JCVariableDecl?param)?{
    ????????return?Ident(param.sym);
    }

    TreeMaker.Return

    TreeMaker.Return用于創(chuàng)建return語(yǔ)句 (JCReturn),源碼如下

    public?JCReturn?Return(JCExpression?expr)?{
    ????????JCReturn?tree?=?new?JCReturn(expr);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }

    TreeMaker.Select

    TreeMaker.Select用于創(chuàng)建域訪問/方法訪問 (這里的方法訪問只是取到名字,方法的調(diào)用需要用TreeMaker.Apply)語(yǔ)法樹節(jié)點(diǎn)(JCFieldAccess),源碼如下

    public?JCFieldAccess?Select(JCExpression?selected,
    ????Name?selector)
    ?
    {
    ????????JCFieldAccess?tree?=?new?JCFieldAccess(selected,?selector,?null);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }

    public?JCExpression?Select(JCExpression?base,
    ????Symbol?sym)
    ?
    {
    ????????return?new?JCFieldAccess(base,?sym.name,?sym).setPos(pos).setType(sym.type);
    }
    1. selected:.運(yùn)算符左邊的表達(dá)式
    2. selector:.運(yùn)算符右邊的表達(dá)式

    下面給出一個(gè)例子,一語(yǔ)句生成的Java語(yǔ)句就是二語(yǔ)句

    一.?TreeMaker.Select(treeMaker.Ident(names.fromString("this")),?names.fromString("name"));

    二.?this.name

    TreeMaker.NewClass

    TreeMaker.NewClass用于創(chuàng)建new語(yǔ)句 語(yǔ)法樹節(jié)點(diǎn)(JCNewClass),源碼如下:

    public?JCNewClass?NewClass(JCExpression?encl,
    ????List?typeargs,
    ????JCExpression?clazz,
    ????List?args,
    ????JCClassDecl?def)
    ?
    {
    ????????JCNewClass?tree?=?new?JCNewClass(encl,?typeargs,?clazz,?args,?def);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }
    1. encl:不太明白此參數(shù)的含義,我看很多例子中此參數(shù)都設(shè)置為null
    2. typeargs:參數(shù)類型列表
    3. clazz:待創(chuàng)建對(duì)象的類型
    4. args:參數(shù)列表
    5. def:類定義

    TreeMaker.Apply

    TreeMaker.Apply用于創(chuàng)建方法調(diào)用 語(yǔ)法樹節(jié)點(diǎn)(JCMethodInvocation),源碼如下:

    public?JCMethodInvocation?Apply(List?typeargs,
    ????JCExpression?fn,
    ????List?args)
    ?
    {
    ????????JCMethodInvocation?tree?=?new?JCMethodInvocation(typeargs,?fn,?args);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }
    1. typeargs:參數(shù)類型列表
    2. fn:調(diào)用語(yǔ)句
    3. args:參數(shù)列表

    TreeMaker.Assign

    TreeMaker.Assign用戶創(chuàng)建賦值語(yǔ)句 語(yǔ)法樹節(jié)點(diǎn)(JCAssign),源碼如下:

    ublic?JCAssign?Assign(JCExpression?lhs,
    ????JCExpression?rhs)
    ?
    {
    ????????JCAssign?tree?=?new?JCAssign(lhs,?rhs);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }
    1. lhs:賦值語(yǔ)句左邊表達(dá)式
    2. rhs:賦值語(yǔ)句右邊表達(dá)式

    TreeMaker.Exec

    TreeMaker.Exec用于創(chuàng)建可執(zhí)行語(yǔ)句 語(yǔ)法樹節(jié)點(diǎn)(JCExpressionStatement),源碼如下:

    public?JCExpressionStatement?Exec(JCExpression?expr)?{
    ????????JCExpressionStatement?tree?=?new?JCExpressionStatement(expr);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }

    TreeMaker.Apply以及TreeMaker.Assign就需要外面包一層TreeMaker.Exec來(lái)獲得一個(gè)JCExpressionStatement。

    TreeMaker.Block

    TreeMaker.Block用于創(chuàng)建組合語(yǔ)句 的語(yǔ)法樹節(jié)點(diǎn)(JCBlock),源碼如下:

    public?JCBlock?Block(long?flags,
    ????List?stats)
    ?
    {
    ????????JCBlock?tree?=?new?JCBlock(flags,?stats);
    ????????tree.pos?=?pos;
    ????????return?tree;
    }
    1. flags:訪問標(biāo)志
    2. stats:語(yǔ)句列表

    推薦下自己做的 Spring Cloud 的實(shí)戰(zhàn)項(xiàng)目:

    https://github.com/YunaiV/onemall

    com.sun.tools.javac.util.List介紹

    在我們操作抽象語(yǔ)法樹的時(shí)候,有時(shí)會(huì)涉及到關(guān)于List的操作,但是這個(gè)List不是我們經(jīng)常使用的java.util.List而是com.sun.tools.javac.util.List,這個(gè)List比較奇怪,是一個(gè)鏈?zhǔn)降慕Y(jié)構(gòu),有頭結(jié)點(diǎn)和尾節(jié)點(diǎn),但是只有尾節(jié)點(diǎn)是一個(gè)List,這里作為了解就行了。

    public?class?List<A>?extends?AbstractCollection<A>?implements?java.util.List<A>?{
    ????public?A?head;
    ????public?List?tail;
    ????private?static?final?List?EMPTY_LIST?=?new?List((Object)null,?(List)null)?{
    ????????public?List?setTail(List?var1)?{
    ????????????throw?new?UnsupportedOperationException();
    ????????}

    ????????public?boolean?isEmpty()?{
    ????????????return?true;
    ????????}
    ????};

    ????List(A?head,?List?tail)?{
    ????????this.tail?=?tail;
    ????????this.head?=?head;
    ????}

    ????public?static?
    ?List?nil()?{
    ????????return?EMPTY_LIST;
    ????}

    ????public?List
    ?prepend(A?var1)?{
    ????????return?new?List(var1,?this);
    ????}

    ????public?List
    ?append(A?var1)?{
    ????????return?of(var1).prependList(this);
    ????}

    ????public?static?
    ?List?of(A?var0)?{
    ????????return?new?List(var0,?nil());
    ????}

    ????public?static?
    ?List?of(A?var0,?A?var1)?{
    ????????return?new?List(var0,?of(var1));
    ????}

    ????public?static?
    ?List?of(A?var0,?A?var1,?A?var2)?{
    ????????return?new?List(var0,?of(var1,?var2));
    ????}

    ????public?static?
    ?List?of(A?var0,?A?var1,?A?var2,?A...?var3)?{
    ????????return?new?List(var0,?new?List(var1,?new?List(var2,?from(var3))));
    ????}

    ????...
    }

    com.sun.tools.javac.util.ListBuffer

    由于com.sun.tools.javac.util.List使用起來(lái)不方便,所以又在其上面封裝了一層,這個(gè)封裝類是ListBuffer,此類的操作和我們平時(shí)經(jīng)常使用的java.util.List用法非常類似。

    public?class?ListBuffer<A>?extends?AbstractQueue<A>?{

    ????public?static??ListBuffer?of(T?x)?{
    ????????ListBuffer?lb?=?new?ListBuffer();
    ????????lb.add(x);
    ????????return?lb;
    ????}

    ????/**?The?list?of?elements?of?this?buffer.
    ?????*/

    ????private?List?elems;

    ????/**?A?pointer?pointing?to?the?last?element?of?'elems'?containing?data,
    ?????*??or?null?if?the?list?is?empty.
    ?????*/

    ????private?List
    ?last;

    ????/**?The?number?of?element?in?this?buffer.
    ?????*/

    ????private?int?count;

    ????/**?Has?a?list?been?created?from?this?buffer?yet?
    ?????*/

    ????private?boolean?shared;

    ????/**?Create?a?new?initially?empty?list?buffer.
    ?????*/

    ????public?ListBuffer()?{
    ????????clear();
    ????}

    ????/**?Append?an?element?to?buffer.
    ?????*/

    ????public?ListBuffer
    ?append(A?x)?{
    ????????x.getClass();?//?null?check
    ????????if?(shared)?copy();
    ????????List
    ?newLast?=?List.of(x);
    ????????if?(last?!=?null)?{
    ????????????last.tail?=?newLast;
    ????????????last?=?newLast;
    ????????}?else?{
    ????????????elems?=?last?=?newLast;
    ????????}
    ????????count++;
    ????????return?this;
    ????}
    ????........
    }

    com.sun.tools.javac.util.Names介紹

    這個(gè)是為我們創(chuàng)建名稱的一個(gè)工具類,無(wú)論是類、方法、參數(shù)的名稱都需要通過(guò)此類來(lái)創(chuàng)建。它里面經(jīng)常被使用到的一個(gè)方法就是fromString(),一般使用方法如下所示。

    Names?names??=?new?Names()
    names.?fromString("setName");

    實(shí)戰(zhàn)演練

    上面我們大概了解了如何操作抽象語(yǔ)法樹,接下來(lái)我們就來(lái)寫幾個(gè)真實(shí)的案例加深理解。

    變量相關(guān)

    在類中我們經(jīng)常操作的參數(shù)就是變量,那么如何使用抽象語(yǔ)法樹的特性為我們操作變量呢?接下來(lái)我們就將一些對(duì)于變量的一些操作。

    生成變量

    例如生成private String age;這樣一個(gè)變量,借用我們上面講的VarDef方法

    //?生成參數(shù)?例如:private String age;
    treeMaker.VarDef(treeMaker.Modifiers(Flags.PRIVATE),?names.fromString("age"),?treeMaker.Ident(names.fromString("String")),?null);

    對(duì)變量賦值

    例如我們想生成private String name = "BuXueWuShu",還是利用VarDef方法

    //?private?String?name?=?"BuXueWuShu"
    treeMaker.VarDef(treeMaker.Modifiers(Flags.PRIVATE),names.fromString("name"),treeMaker.Ident(names.fromString("String")),treeMaker.Literal("BuXueWuShu"))

    兩個(gè)字面量相加

    例如我們生成String add = "a" + "b";,借用我們上面講的Exec方法和Assign方法

    //?add?=?"a"+"b"
    treeMaker.Exec(treeMaker.Assign(treeMaker.Ident(names.fromString("add")),treeMaker.Binary(JCTree.Tag.PLUS,treeMaker.Literal("a"),treeMaker.Literal("b"))))

    +=語(yǔ)法

    例如我們想生成add += "test",則和上面字面量差不多。

    //?add+="test"
    treeMaker.Exec(treeMaker.Assignop(JCTree.Tag.PLUS_ASG,?treeMaker.Ident(names.fromString("add")),?treeMaker.Literal("test")))

    ++語(yǔ)法

    例如想生成++i

    treeMaker.Exec(treeMaker.Unary(JCTree.Tag.PREINC,treeMaker.Ident(names.fromString("i"))))

    方法相關(guān)

    我們對(duì)于變量進(jìn)行了操作,那么基本上都是要生成方法的,那么如何對(duì)方法進(jìn)行生成和操作呢?我們接下來(lái)演示一下關(guān)于方法相關(guān)的操作方法。

    無(wú)參無(wú)返回值

    我們可以利用上面講到的MethodDef方法進(jìn)行生成

    /*
    ????無(wú)參無(wú)返回值的方法生成
    ????public?void?test(){

    ????}
    ?*/

    //?定義方法體
    ListBuffer?testStatement?=?new?ListBuffer<>();
    JCTree.JCBlock?testBody?=?treeMaker.Block(0,?testStatement.toList());
    ????
    JCTree.JCMethodDecl?test?=?treeMaker.MethodDef(
    ????????treeMaker.Modifiers(Flags.PUBLIC),?//?方法限定值
    ????????names.fromString("test"),?//?方法名
    ????????treeMaker.Type(new?Type.JCVoidType()),?//?返回類型
    ????????com.sun.tools.javac.util.List.nil(),
    ????????com.sun.tools.javac.util.List.nil(),
    ????????com.sun.tools.javac.util.List.nil(),
    ????????testBody,?//?方法體
    ????????null
    );

    有參無(wú)返回值

    我們可以利用上面講到的MethodDef方法進(jìn)行生成

    /*
    ????無(wú)參無(wú)返回值的方法生成
    ????public?void?test2(String?name){
    ????????name?=?"xxxx";
    ????}
    ?*/

    ListBuffer?testStatement2?=?new?ListBuffer<>();
    testStatement2.append(treeMaker.Exec(treeMaker.Assign(treeMaker.Ident(names.fromString("name")),treeMaker.Literal("xxxx"))));
    JCTree.JCBlock?testBody2?=?treeMaker.Block(0,?testStatement2.toList());

    //?生成入?yún)?/span>
    JCTree.JCVariableDecl?param?=?treeMaker.VarDef(treeMaker.Modifiers(Flags.PARAMETER),?names.fromString("name"),treeMaker.Ident(names.fromString("String")),?null);
    com.sun.tools.javac.util.List?parameters?=?com.sun.tools.javac.util.List.of(param);

    JCTree.JCMethodDecl?test2?=?treeMaker.MethodDef(
    ????????treeMaker.Modifiers(Flags.PUBLIC),?//?方法限定值
    ????????names.fromString("test2"),?//?方法名
    ????????treeMaker.Type(new?Type.JCVoidType()),?//?返回類型
    ????????com.sun.tools.javac.util.List.nil(),
    ????????parameters,?//?入?yún)?/span>
    ????????com.sun.tools.javac.util.List.nil(),
    ????????testBody2,
    ????????null
    );

    有參有返回值

    ?/*
    ????有參有返回值
    ????public?String?test3(String?name){
    ???????return?name;
    ????}
    ?*/


    ListBuffer?testStatement3?=?new?ListBuffer<>();
    testStatement3.append(treeMaker.Return(treeMaker.Ident(names.fromString("name"))));
    JCTree.JCBlock?testBody3?=?treeMaker.Block(0,?testStatement3.toList());

    //?生成入?yún)?/span>
    JCTree.JCVariableDecl?param3?=?treeMaker.VarDef(treeMaker.Modifiers(Flags.PARAMETER),?names.fromString("name"),treeMaker.Ident(names.fromString("String")),?null);
    com.sun.tools.javac.util.List?parameters3?=?com.sun.tools.javac.util.List.of(param3);

    JCTree.JCMethodDecl?test3?=?treeMaker.MethodDef(
    ????????treeMaker.Modifiers(Flags.PUBLIC),?//?方法限定值
    ????????names.fromString("test4"),?//?方法名
    ????????treeMaker.Ident(names.fromString("String")),?//?返回類型
    ????????com.sun.tools.javac.util.List.nil(),
    ????????parameters3,?//?入?yún)?/span>
    ????????com.sun.tools.javac.util.List.nil(),
    ????????testBody3,
    ????????null
    );

    特殊的

    我們學(xué)完了如何進(jìn)行定義參數(shù),如何進(jìn)行定義方法,其實(shí)還有好多語(yǔ)句需要學(xué)習(xí),例如如何生成new語(yǔ)句,如何生成方法調(diào)用的語(yǔ)句,如何生成if語(yǔ)句。j接下來(lái)我們就學(xué)習(xí)一些比較特殊的語(yǔ)法。

    new一個(gè)對(duì)象

    //?創(chuàng)建一個(gè)new語(yǔ)句?CombatJCTreeMain?combatJCTreeMain?=?new?CombatJCTreeMain();
    JCTree.JCNewClass?combatJCTreeMain?=?treeMaker.NewClass(
    ????????null,
    ????????com.sun.tools.javac.util.List.nil(),
    ????????treeMaker.Ident(names.fromString("CombatJCTreeMain")),
    ????????com.sun.tools.javac.util.List.nil(),
    ????????null
    );
    JCTree.JCVariableDecl?jcVariableDecl1?=?treeMaker.VarDef(
    ????????treeMaker.Modifiers(Flags.PARAMETER),
    ????????names.fromString("combatJCTreeMain"),
    ????????treeMaker.Ident(names.fromString("CombatJCTreeMain")),
    ????????combatJCTreeMain
    );

    方法調(diào)用(無(wú)參)

    JCTree.JCExpressionStatement?exec?=?treeMaker.Exec(
    ????????treeMaker.Apply(
    ????????????????com.sun.tools.javac.util.List.nil(),
    ????????????????treeMaker.Select(
    ????????????????????????treeMaker.Ident(names.fromString("combatJCTreeMain")),?//?.?左邊的內(nèi)容
    ????????????????????????names.fromString("test")?//?.?右邊的內(nèi)容
    ????????????????),
    ????????????????com.sun.tools.javac.util.List.nil()
    ????????)
    );

    方法調(diào)用(有參)

    //?創(chuàng)建一個(gè)方法調(diào)用?combatJCTreeMain.test2("hello?world!");
    JCTree.JCExpressionStatement?exec2?=?treeMaker.Exec(
    ????????treeMaker.Apply(
    ????????????????com.sun.tools.javac.util.List.nil(),
    ????????????????treeMaker.Select(
    ????????????????????????treeMaker.Ident(names.fromString("combatJCTreeMain")),?//?.?左邊的內(nèi)容
    ????????????????????????names.fromString("test2")?//?.?右邊的內(nèi)容
    ????????????????),
    ????????????????com.sun.tools.javac.util.List.of(treeMaker.Literal("hello?world!"))?//?方法中的內(nèi)容
    ????????)
    );

    if語(yǔ)句

    /*
    ????創(chuàng)建一個(gè)if語(yǔ)句
    ????if("BuXueWuShu".equals(name)){
    ????????add?=?"a"?+?"b";
    ????}else{
    ????????add?+=?"test";
    ????}
    ?*/

    //?"BuXueWuShu".equals(name)
    JCTree.JCMethodInvocation?apply?=?treeMaker.Apply(
    ????????com.sun.tools.javac.util.List.nil(),
    ????????treeMaker.Select(
    ????????????????treeMaker.Literal("BuXueWuShu"),?//?.?左邊的內(nèi)容
    ????????????????names.fromString("equals")?//?.?右邊的內(nèi)容
    ????????),
    ????????com.sun.tools.javac.util.List.of(treeMaker.Ident(names.fromString("name")))
    );
    //??add?=?"a"?+?"b"
    JCTree.JCExpressionStatement?exec3?=?treeMaker.Exec(treeMaker.Assign(treeMaker.Ident(names.fromString("add")),?treeMaker.Binary(JCTree.Tag.PLUS,?treeMaker.Literal("a"),?treeMaker.Literal("b"))));
    //??add?+=?"test"
    JCTree.JCExpressionStatement?exec1?=?treeMaker.Exec(treeMaker.Assignop(JCTree.Tag.PLUS_ASG,?treeMaker.Ident(names.fromString("add")),?treeMaker.Literal("test")));

    JCTree.JCIf?anIf?=?treeMaker.If(
    ????????apply,?//?if語(yǔ)句里面的判斷語(yǔ)句
    ????????exec3,?//?條件成立的語(yǔ)句
    ????????exec1??//?條件不成立的語(yǔ)句
    );

    源碼地址:https://github.com/modouxiansheng/Doraemon

    總結(jié)

    紙上得來(lái)終覺淺,絕知此事要躬行。

    希望大家看完此篇文章能夠自己在本機(jī)上自己試驗(yàn)一下。

    自己設(shè)置幾個(gè)參數(shù),自己學(xué)的Lombok學(xué)著生成一下get、set方法,雖然本篇知識(shí)在日常開發(fā)中基本上不會(huì)用到,但是萬(wàn)一用到了這些知識(shí)那么別人不會(huì)而你會(huì),差距其實(shí)就慢慢的給拉開了。

    本篇涉及到的所有代碼都在github上面有,拉下來(lái)以后全局搜CombatJCTreeProcessor類就可以看到了。


    關(guān)注公眾號(hào)【Java技術(shù)江湖】后回復(fù)“PDF”即可領(lǐng)取200+頁(yè)的《Java工程師面試指南》

    強(qiáng)烈推薦,幾乎涵蓋所有Java工程師必知必會(huì)的知識(shí)點(diǎn),不管是復(fù)習(xí)還是面試,都很實(shí)用。



    瀏覽 28
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    感谢您访问我们的网站,您可能还对以下资源感兴趣:

    国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日日干网| 日韩第22页| 成人黄色在线观看| 残忍另类BBWBBWBBW| 国产精品theporn| 蜜臀久久99久久久久久宅男| 日本一区二区三区免费看| 香蕉久久久| 日韩中文字幕高清| 三浦恵子一级婬片A片| 亚洲午夜影院在线| 综合色国产精品欧美在线观看| 五月丁香综合激情| 色婷婷亚洲婷婷| 停停六综合| 一级特黄大片录像i| 欧美日韩视频一区二区三区| 热热色| 7777影视电视剧在线观看官网| 国产av网站大全| 久操国产视频| 插吧插吧综合网| 欧美一卡二卡| 色婷婷导航| 农村一级婬片A片AAA毛片古装| 亚洲成人无码精品| 黄色三级A片| 操小逼视频| 婷婷草逼| 91在线亚洲| 亚洲成人av在线观看| 亚洲理论视频| 欧洲一区在线观看| re久久| 国产成人精品无码片区在线观91| 水蜜桃视频网站| 国产www在线观看| 久久毛片视频| 北条麻纪无码视频| 亚洲尤物| 黄色视频免费观看国产| 国产老女人操逼视频| 九九免费视频| 欧洲精品在线观看| www.色五月| 色秘乱码一区二区三区唱戏| 狠狠干狠狠爱| h片免费网站| 激情五月天av| 黄色网址五月天| 国产激情都市一区二区三区欧美| 成人无码www在线看免费| 午夜福利亚洲| 大荫蒂hd大荫蒂视频| 国产一级麻豆| 韩日在线视频| 男人视频网站| 日本无码视频在线| 噼里啪啦免费观看视频大全| 国产综合亚洲精品一区二| mm131亚洲国产精品久久| 午夜激情av| www欧美| 亚洲A级片| 日韩在线播放视频| 亚洲网站在线播放| 在线看片av| 三级毛片视频| 黄色大片在线播放| 亚洲日本无码50p| 亚洲欧美成人| 久久久精品999| 69午夜| 欧美成人图片视频在线| 久热大香蕉| 在线观看中文字幕av| 久久婷婷国产| 西西人体大胆ww4444| 91人人妻人人澡人人爽人人| 蜜桃视频在线入口www| 黄片视频国产| 亚洲激情欧美| 在线视频99| 国产ts| 在桌下含她的花蒂和舌头H视频| 免费在线观看内射| 高清无码小视频| 无码欧美精品一区二区| 婷婷丁香五月在线| www.777熟女人妻| 麻豆视频在线看| 天天爽夜夜爽精品成人免费| 97色色得| 青青青在线| 99精品六月婷婷综合在线| 日本少妇午夜福利| 北条麻妃视频| 殴殴美日韩在线| 国产精品毛片| 美女黄网站| 亚洲群交| 在线免费看黄色| 国产欧美在线| 水蜜桃在线视频| 97福利视频| 肏屄网站| 大香蕉伊人在线视频| 一级AV| 日韩Av无码一区二区三区不卡| 国产在线观看免费视频| 97精品| 果冻传媒A片一二三区| 成人免费毛片AAAAAA片| 大香蕉A片| 91免费观看视频| 在线观看日韩| 一本色道久久综合亚洲精东小说| 悠悠无码一区日韩妇女| 国产AV无码区亚洲| 长腿女神打扫偷懒被主人猛操惩罚| 亚洲AV无码第一区二区三区蜜桃| 久久久97精品久久| 国产亚洲99久久精品| 操操操AV| 国产a片视频| 日本无码毛片| 久久久久久久艹| 麻豆91蜜桃传媒在线观看| 蜜桃人妻无码AV天堂三区| 91欧美精品成人综合在线观看| 欧美日在线观看| 日本黄色免费在线观看| 国产五月天婷婷| 最新中文字幕在线观看视频| 欧美又粗又长| 国产成人精品二三区麻豆| 亚洲日韩视频在线| 三级片在线网站| 91av视频在线| 91免费小视频| 东方成人AV| www.久草| 曰本精品综合网在线| 精品少妇视频| 96精品久久久久久久久久| 超碰免费视| 亚洲影音先锋在线| 色欲AV网站| 亚洲综合在线观看视频| 亚洲天堂精品视频| 无码毛片一区二区三区人口| 小黄片在线| 国产十八岁在线观看免费| 久9热| 淫荡五月天视频导航| 国产性爱电影网| 日韩精品毛片一区二区视频免费| 日日夜夜天天综合| 五月天福利影院| 久热免费| 特级A级毛片| 蜜臀久久久久久999| 色色五月婷婷| 久草资源| 伊人大香蕉久久| www.日韩精品| 激情AV在线观看| 福利老湿69| 啪啪视频m3u8| 亚洲精品国产精品国自产A片同性| 人妻av无码| 蜜桃精品视频在线观看| 久操免费在线视频| 无码视频一区二区| 久久久成人网| 影音先锋av色| 五月天色婷婷丁香| 91九色蝌蚪91POR成人| 91视频你懂的| 亚洲午夜福利在线| 性色网| 东京热综合| 天堂麻豆天美| 久久w| 免费在线亚洲| 国产操逼免费视频| 91视频色| yw尤物| 青草社区在线观看| 热久久在线| 夜间福利视频| 色三区| 日韩AV免费在线| 日韩无码一级| 麻豆蜜桃wwww精品无码| 神马午夜激情| 黄色电影大香蕉| 五月丁香婷婷综合网| 高清无码在线免费| 五月丁香婷婷综合| 天天摸天天添| 美女人人操| 强奸乱伦五月天| 亚洲永久视频| 色婷婷精品国产一区二区三区 | 成人A片免费视频| 一级av在线| 精品视频国产| 五月婷婷在线观看| 狠狠精品| 真人一级毛毛片| 亚洲无码入口| 香蕉91视频| 大香蕉视频在线观看| 亚洲国产成人精品综合99| 91青青视频| 91成人在线电影| 国产综合久久久7777777| 成人视频在线播放| 激情性爱婷婷色五月| 狠狠se| 黄片无码视频| 欧美一级A片免费看| 国产性爱在线| 国产性综合| 艹美女视频| 亚洲色爽| 久久er热| 俺来了俺去了www色官网| 99精品亚洲| 91无码人妻精品一区二区蜜桃| 久久久久久久久国产| 免费亚洲视频| 国产在线内射| 激情午夜av| 久操无码| 乱伦专区| 正在播放无码| 东京热黄色电影| 久久亚洲av| 看毛片网站| 国模无码在线| 久久学生妹| 最近2021中文字幕免费| 中文字幕亚洲精品| 韩国一区二区在线观看| 欧美A片网站| 欧美色图15P| 亚洲有码人妻| 国产三级黄色| 亚洲熟女视频| 亚洲AAA| 西西444WWW无码大胆在线观看| 一插菊花综合视频| 91视频内射| 中文字幕亚洲在线| 亚洲av大片| 人人妻人人玩人人澡人人爽| 欧美狠狠操| 午夜成人福利视频| 五月丁香欧美综合| 日韩欧美午夜成人无码| 毛片A级成人片| 国产一区二区不卡视频| 在线久草| 久久久久久久久久久高清毛片一级| 俩小伙3p老熟女露脸| 美女裸身18禁| 综合色区| 天天操嫩逼无套视频| 艹美女视频| 免费黄片视频在线观看| 亚洲成人自拍| 麻豆网站91| www.亚洲| 这里只有精品视频| 欧美草比视频| 婷婷成人综合| 男女操逼网站| 俺来也俺去www色情网| 亚洲国产精品午夜福利| 国产a级毛片| 大香蕉九九| 另类欧美色图| 亚洲专区免费| 91人妻人人澡人人爽人人精品一 | 亚洲无码99| 中文字幕在线观看福利视频| 人妻精品综合码| 亚洲精品成人在线| 999久久精品| 五月天婷婷成人| 人人爱人人射| 欧美久久电影| 亚洲中文字幕2019| 国产激情综合| 国产无码a| 亚洲一区二区在线视频| 99热1| 91无码国产成人精品| 久久久久久久久免费看无码| 久久亚洲福利视频| 中文字幕第72页| 一区二区黄色| 天天撸天天色| 国产精品成人一区二区| 毛片网页| 一级a免一级a做免费线看内裤| 夜夜嗨av| 国产在线成人视频| 无码福利导航| 日韩一级黄色视频| www.俺去啦| 噜噜噜av| 蜜桃久久久久久久| 六月激情网| 无码-ThePorn| av亚洲波多野结衣白嫩水多波 | 99爱视频| 久久亚洲AV成人无码国产野外| 精品免费| 黄网| 色综合中文字幕| 丰满人妻一区二区三区| 日韩一级性爱视频| 青春草在线| 日日综合网| 蜜桃视频在线入口www| 中文字幕三级片在线观看| 久久精品免费电影| 麻豆啪啪| 亚洲婷婷精品国产成人| 中文字幕2018第一页| 欧美老妇日韩| 大地资源38页| 在线一区二区三区| 亚洲娱乐在线| 免费在线黄色电影| 久久影院av| 福利视频亚洲| 男女啪啪啪| 97久久人人| www.青青草视频| 91香蕉视频免费在线观看| 欧美性爱一区| 69综合| 特级西西WWW888| 性爱av在线观看| 无码黄| 正在播放无码| 中文字幕23页| 尻屄电影| 另类老妇奶BBBBwBB| 亚洲AV在线看| 成年人黄色视频在线观看| 色AV高清| 不卡日韩| 亚洲欧美大香蕉视频网| 日韩一级片免费| 亚洲高清中文字幕| 国产性爱自拍视频| 午夜性爱福利| 中文字幕免费MV第一季歌词 | 麻豆亚洲| 人妻97| 男人的天堂aa| 欧美色图网站| 97人妻一区二区精品视频| 一级免费视频| 国产中文字幕第一页| 91人人澡人人爽人人看| 欧美日韩一区二区在线| 51妺妺嘿嘿午夜成人A片| 亚洲无码在线观看网站| 成人A片在线观看| 久久亚洲AV成人无码国产野外| 五月激情丁香| 69福利| 一本色道久久加勒比精品| 成人免费视频一区二区三区| 手机免费av| 欧美成人电影在线观看| 成人A片视频| 中文无码在线观看中文字幕av中文 | 中文字幕人妻互换av久久| 亚洲日韩网站| 亚洲AV激情无码专区在线播放| 亚洲国产高清国产精品| 亚洲综合免费观看高清| 欧美日韩中文视频| 99精品视频在线观看免费| 色播视频在线观看| 成人网站视频在线观看| www.五月天.con| 影音先锋成人在线| 青青色在线视频| 日日夜夜老司机| 香蕉一区二区| 国产在线观看自拍| 国产又爽又黄免费网站在线看| 久久99精品久久久久| 中文字幕精品在线观看| 亚洲熟妇在线观看| 亚洲a视频| 日日搔AV一区二区三区| 好吊一区二区三区| 久久嫩草国产成人一区| 日韩肏屄网| 中文字幕一区二区三区四区五区六区| 91麻豆成人精品国产| 老熟女露脸25分钟91秒| 免费色色视频| 中文字幕免费高清| 偷拍视频第一页| 久久精品99视频| 99日韩| 黄色毛片在线播放| 豆花视频成人| 九九热视频在线| 日韩无码成人| 91AV成人| 日韩黄色电影在线| 先锋成人资源| 91精品视频网| 中文字幕操逼网站| 91麻豆精品国产91久久久吃药| 超碰日日夜夜| 熟妇人妻中文字幕无码老熟妇| 欧美成人一级片| 青青草原在线视频| 久一视频| 日本欧美成人片AAAA| 日韩欧美性爱| 色操网| 狠狠干五月| 波多野成人无码精品视频| 天天射日| 一本道无码在线观看| 亚洲性爱视频| 伊人久久大香蕉视频| 五月婷婷在线播放| 精品国产女人| 欧美在线成人网| 三级麻豆| 国产精品久久久久久久牛牛| 欧美日逼视频| 凹凸熟女凹凸BBWBBW| 久久国产高清视频| 久久久精品人妻| 亚洲欧美日韩激情| 热久久在线| 欧美一卡二卡三卡| 内射婷婷| 天天撸天天色| 91亚洲成人| 亚洲天堂av网| 日韩无码123区| 大香蕉视频网| 午夜精品人妻无码| 麻妃无码| 成人a毛片| 久久精品无码视频| 欧美大鸡吧视频| 翔田千里珍藏版无码| aaa国产| 欧美性猛交XXXX乱大交| 欧美人与禽乱婬A片| 国产黄色视频免费看| 插吧插吧综合网| 亚洲有码在线观看| 无码水蜜桃一区二区| 久久久免费黄色视频| 亚洲卡一卡二| 无码精品成人观看A片| 欧美黄片在线免费看| 成人一级电影| 日韩91在线| 一本色道久久88亚洲精品综合| 国产AA| 日韩成人视频在线| 久久2| 高清无码一区二区三区| 国产午夜无码视频在线观看| 色哟哟无码精品一区二区三区| 中韩一区二区| 亚州无码视频| 成人久久av| 成人性生交片无码免费看人| 水蜜桃一区二区| 一区二区三区四区视频在线| 日韩中文字幕在线高清| 欧美视频免费操逼图。| 秋霞午夜| 久久公开视频| 亚洲精品成人无码熟妇在线| 日韩免费av| 亚洲一区二区在线视频| 秘蜜桃色一区二区三区在线观看| 美女一级变态毛片| 亚洲欧美日韩久久| 北条麻妃AV在线播放| 3D精品啪啪一区二区免费| 97超碰在线播放| 久久精品99久久久久久| 亚洲高清无码中字| 尤物Av| 青青草操逼视频| 色妞视频| 久综合网| 青青草成人免费在线视频| 国产久久在线| 人人干人人干人人干| 啪啪动漫| 综合欧美国产视频二区| 无码一区二区三区在线| 久草福利网| 日韩中文字幕在线高清| 草免费视频| 久久久久久久国产精品| 蜜臀久久99精品久久久兰草影视 | www.丁香五月| 五月一区| 短发半推半就AV| 久久久久国产视频| 九九热re99re6在线精品| 免费观看亚洲视频| 亚洲精品成人片在线观看精品字幕| 99精品视频在线播放免费| 91蝌蚪在线观看| 神马午夜三级| 在线看V片| 国产无码高清| 艹逼视频网站| 国产美女一级真毛片酒店| yw尤物在线| 日韩肏屄视频在线观看| 五月丁香六月婷| 免费操| 久久久久久久久久国产精品| 成人在线三级| 狠狠躁夜夜躁人人爽人妻| 国产精品99久久久久的广告情况| 麻豆日韩| 亚洲欧美另类色图| 亚洲性图第一页| 无码a区天堂| 中文字幕不卡在线观看| 亚洲人妻无码一区| 国产高清无码福利| 99久久精彩视频| 丁香六月婷婷| 日韩一级免费视频| 亚洲精品无码中文字幕| 国内精品内射| 免费在线a视频| 欧美自拍视频| 91在线观看高清18| 无码一区二区三区四| 99热在线观看免费精品| 99久热在线精品| 97桃色| 无码一区二区北条| 毛片在线视频| 国产高清免费| 亚洲人天堂| 亚洲天堂国产| 996热re视频精品视频这里| 亚洲AV第一页| 爱搞搞就要搞| 怡红院男人的天堂| 伊人久久国产| 亚洲人成人无码一区二区三区 | 成人免费视频网| 荫蒂添的高潮免费视频| 伊人久久大香线蕉| 高清欧美日韩第一摸| 五月天激情电影| 成人视频在线观看黄色18| 亚洲第一视频在线观看| 18成人网站在线观看| 天天干天天射天天| 狼人香蕉在线视频| 北条麻妃无码| 天天色天天干天天日| 无码一区二区视频| 免费观看一区二区三区| 免费观看在线无码视频| 久久综合无码内射国产| 特级西西444www高清大胆免费看| 日韩亚洲中文在线| 欧美一区二区无码视频| 中文字幕在线观看免费高清完整版在线观看 | 亚洲成人av在线| 丁香花小说完整视频免费观看| 日本操逼片| 秘亚洲国产精品成人网站| 激情久久综合| 免费观看成人毛片A片直播千姿| www.国产豆花精品区| 伊人网视频在线观看| 亚洲视频中文字幕| 日本高清无码在线| 欧美三级网站在线观看| 久久久波多野结衣| 大屌在线| 亚洲人人爱| 澳门簧片| 日本成人午夜福利| 伊人大香蕉网| 日本无码嫩草一区二区| 五月天久久久| 337p大胆色噜噜噜噜噜| 成年人黄色电影| 久久99国产乱子伦...| 日本黄色色情视频| 毛片1| 国产成人自拍视频在线| 日本a片免费| 亚洲无码视频在线观看高清| 国产精品美女| 99视频免费观看| 韩国无码人妻| 97碰碰碰| 成人福利网| 色婷婷在线无码精品秘人口传媒| 中国免费一级无码成人片| 亚洲欧美不卡| 欧洲AV在线| 亚洲污污| 艹逼无码| AV手机天堂| 大香蕉电影网站| 刘玥精品A片在线观看| 人人妻人人操人人爱| 三级AV在线免费观看| 亚洲免费在线视频| 无码激情视频| 天天射天天| 精品二区| 深爱婷婷| 夜夜操影院| 理论片熟女奶水哺乳| 操少妇| 日精品| 七十路の高齢熟女千代子| 你懂的网址在线观看| 91乱子伦国产乱| 翔田千里無碼破解| 男人av在线| 91久久免费视频| 亚洲无码91| 日韩无码成人片| 国产成人欧美| 少妇A片| 亚洲AV无码成人精品一区| 婷婷色视频| 成人三级片网| 你懂得在线视频| 日韩无码一二三区| 91人人妻人人澡人人爽人人精品 | 人人免费操| 欧美老妇操逼视频| 夜夜操夜夜骑| 少妇bbb搡bbbb搡bbbb| 热久久伊人| 91人妻人人澡人人爽人妻| 2024天天操| 俺来俺也去www色在线观看| 神马午夜精品91| 成人无码免费毛片| 最新中文字幕av| 日本牲交| 大香蕉黄色片| 久久黄色精品视频| 日韩精品视频一区二区三区| 少妇搡BBBB搡BBB搡造水多/| 91丨九色丨国产在线| A级片免费| 97无码精品人妻一区二区三区| 99热国产在线观看| 亚洲人妻在线播放| 蜜臀99久久精品久久久懂爱| 三级国产AV| 亚洲日韩欧美一区二区| 在线观看日韩AV| 国产精品成人在线| 成人无码一区二区三区| 无码操逼视频| 国产精品久久精品| 国产伊人大香蕉| 在线观看日本vs欧洲vs美洲| 亚洲成人高清无码| 成人电影一区二区三区| 91青青草| 欧美成人视频。| 翔田千里被躁120分钟| 日韩一及| www.777熟女人妻| 五月丁香成人电影| 东京热第一页| 亚洲少妇人妻| 日韩无码免费电影| 97AV人妻无码视频二区| 天堂一区在线观看| 能看的av| 成人做爰黄AA片免费看三区| 手机看片日韩| 成人免费看AA片| www.av在线| 人人射| 国产欧美综合在线三区| 男人天堂无码av| 69日逼| 天天操夜夜操狠狠| 男女AV网站| 人人干天天操| 欧美搡BBBB搡BBB| a4yy午夜福利| 国产黄色视频在线免费观看| 九九国产精品| 久久免费黄色视频| 成人免费观看的毛视频| 久久伊人中文字幕| 欧美日韩中文在线视频| 欧美日韩免费观看视频| 国产在线观看你懂的| 国产成人精品一区二区三区视频| 日韩爆乳一区二区三区| 国产精品大全| 久久久久伊人| www.插插插| 亚洲无码免费在线观看| 色婷婷一区二区三区四区五区精品视| 福利黄色片:片| 亚洲秘无码一区二区| 国产免费AV在线观看| 夜夜福利| 午夜爽爽爽| 欧美囗交荫蒂AAAA| 大香蕉视频网| 日韩理论片| 欧美视频色| 国产极品无码| 97人妻精品一区二区三区免| 免费成人视频| 伊人狠狠蜜桃亚洲综合| 欧美午夜福利在线观看| 色接久久| 国产精品后入| 日本黄色大全| 天天舔天天射| 国产无码AV在线| 中文字幕在线观看不卡| 午夜成人毛片| 亚洲精品一区二区三区在线观看| 快播激情小说| 日逼高清视频| 大伊香蕉视频| 亚洲视频高清无码| 高H视频在线观看| 亚洲插逼| 99青青草| 黄色搞逼视频| 最新免费一区二区三区| 人人爱天天做| 3344gc在线观看入口| 操操操操操| 日韩AV在线直播| 青草久操| www.199麻豆在线观看网站| 人人色人人操人人干| 激情国产av| 最近中文字幕免费mv第一季歌词強上 | 中文字字幕在线中文乱码| 国产欧美一区二区三区视频| 51精品国产午夜福利| 成av人片一区二区三区久久| 欧美成人在线免费视频| a片在线视频| 日韩操逼网| 久草视频在线资源| 青青草视频免费观看| 成人免费精品视频| 黄片大全免费看| 江苏妇搡BBBB搡BBBB| 九九r在线精品观看视频| 中文字幕综合在线| 无码视频久久| 2025av天堂网| 天天操中文字幕| 国产P片内射天涯海角| 国产精品毛片VA一区二区三区| 超碰人人妻| 天天插天天狠天天透| 91亚洲成人| 肥臀AV在线| 91大神在线免费观看| 2014av天堂网| 福利在线播放| 免费黄色在线| 吴梦梦一区二区三区| 婷婷情色| 国产黄色一级| 欧美日韩性爱视频| 色aV牛牛在线观看| 95四川乱子伦视频国产| 安徽妇搡BBBB搡BBBB按摩| 中文无码电影| 欧美日皮视频| 欧美一区电影| 丁香综合网| 日韩中文字幕免费| www.婷婷五月天| 日韩在线中文字幕亚洲| 大香蕉伊人视频在线观看| 日韩美女在线| 中文字幕人妻日韩在线| 国产剧情一区二区av在线观看| 伊人久久大香蕉国产| 日本成人黄色电影| 亚洲69视频| 无码一级| 北条麻妃九九九精品视频免费观看| 国产精品美女久久久久AV爽| 激情国产av| 五月丁香六月激情| 少妇三级| 日本一级婬片免费放| 黄色二区| 国产av资源| 高清在线无码视频| 亚洲无码精品一区| 国产逼| 国产欧美一区二区人妻喷水| 人人摸人人看人人| 日韩在线视频一区二区三区| 成人做爰黄A片免费看直播室动漫| 国产激情都市一区二区三区欧美| 围内精品久久久久久久久白丝制服| 亚洲免费观看高清完整版在va线观看| 国产婷婷久久| 搡BBBB搡BBB搡五十粉嫩| 国产在线性爱视频| 亚洲国产天堂| 国产无码电影| 亚洲成人电影AV| 少妇搡BBBB搡BBB搡HD(| 日韩免费网站| 2019中文字幕在线| 18成人网站在线观看| 精品资源成人| 樱桃av| 欧美草比视频| 日韩婬乱片A片AAA真人视频| 国产精品777| 国产特级婬片免费看| 激情综合网五月| 大香蕉性爱视频| 免费成人在线网站| 91嫩操| 天天综合国产| 欧美footjob| 成人无码91| 亚洲欧美视频在线| 成人做爱免费网站| 日韩三级片在线播放| 日韩性爱视频在线观看| 国产一级片| 免费在线观看AV片| 久久精品视频99| 999日本不卡影院| 大香蕉色视频| 美女91视频网站| 欧美丝袜脚交xxxxBH| 日韩中文字幕在线高清| 精品人妻午夜一区二区三区四区 | 夜夜躁狠狠躁日日躁av| jizz日本护士| 成人精品视频在线| 波多野42部无码喷潮更新时间 | 青青草公开视频| 三级片无码在线播放| 大帝AV| 一区二区三区精品无码| 日韩视频免费| AV天堂小说网| 中文字幕区| 欧美在线a| 日韩日逼网站| 中文字幕+乱码+中文字幕电视剧| 欧美性爱在线观看| 能看的操逼视频| 一级a一级a爱片免费免免高潮| 怡红影院美乳| 日韩精品小电影| 日韩在线不卡视频| 国产,亚洲91| 九九综合伊人7777777| 日韩欧美激情| 久久精品无码一区二区无码性色|