我正在尝试使用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 告诉我它是以某种方式嵌套的。如何追加?
答案 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));