JDT:嵌套MethodInvocation

时间:2015-01-29 05:13:28

标签: java abstract-syntax-tree eclipse-jdt

我正在尝试使用Eclipse JDT的AST模型来创建如下命令:

tmpStringBuffer.append("Content: ").append(gateId);

什么有效:创建

tmpStringBuffer.append("Content: ");

使用以下代码

MethodInvocation mi = ast.newMethodInvocation();
mi.setExpression(ast.newSimpleName("tmpStringBuffer"));
mi.setName(ast.newSimpleName("append"));
sl = ast.newStringLiteral();
sl.setLiteralValue("Content: " );
mi.arguments().add(sl);
bufferBlock.statements().add(ast.newExpressionStatement(mi));

但是如何设置第二个.append(gateId)(以获得上面显示的命令)。它不是第二个添加的MethodInvocation命令,因为它将导致tmpStringBuffer.append("Content: ", append(gateId));。但结果应为tmpStringBuffer.append("Content: ").append(gateId);

AstView 告诉我它是以某种方式嵌套的。如何追加?

1 个答案:

答案 0 :(得分:1)

第二个MethodInvocation应该嵌套为第一个MethodInovcation的表达式。请尝试以下代码:

MethodInvocation nestedMI = ast.newMethodInvocation();
nestedMI.setExpression(ast.newSimpleName("tmpStringBuffer"));
nestedMI.setName(ast.newSimpleName("append"));
sl = ast.newStringLiteral();
sl.setLiteralValue("Content: " );
nestedMI.arguments().add(s1);

MethodInvocation mi = ast.newMethodInvocation();
mi.setExpression(nestedMI);
mi.setName(ast.newSimpleName("append"));
mi.arguments().add(ast.newSimpleName("gateId"));

bufferBlock.statements().add(ast.newExpressionStatement(mi));