use of com.google.devtools.j2objc.ast.Statement in project j2objc by google.
the class TreeConverter method needsImplicitSuperCall.
private static boolean needsImplicitSuperCall(MethodDeclaration node) {
ExecutableElement method = node.getExecutableElement();
if (!ElementUtil.isConstructor(method)) {
return false;
}
TypeMirror superType = ElementUtil.getDeclaringClass(method).getSuperclass();
if (TypeUtil.isNone(superType)) {
// java.lang.Object supertype is null.
return false;
}
List<Statement> stmts = node.getBody().getStatements();
if (stmts.isEmpty()) {
return true;
}
Statement firstStmt = stmts.get(0);
return !(firstStmt instanceof SuperConstructorInvocation || firstStmt instanceof ConstructorInvocation);
}
use of com.google.devtools.j2objc.ast.Statement in project j2objc by google.
the class GenerationTest method translateStatements.
/**
* Translate a string of Java statement(s) into a list of
* JDT DOM Statements. Although JDT has support for statement
* parsing, it doesn't resolve them. The statements are therefore
* wrapped in a type declaration so they having bindings.
*/
protected List<Statement> translateStatements(String stmts) {
// Wrap statements in test class, so type resolution works.
String source = "public class Test { void test() { " + stmts + "}}";
CompilationUnit unit = translateType("Test", source);
final List<Statement> statements = Lists.newArrayList();
unit.accept(new TreeVisitor() {
@Override
public boolean visit(MethodDeclaration node) {
if (ElementUtil.getName(node.getExecutableElement()).equals("test")) {
statements.addAll(node.getBody().getStatements());
}
return false;
}
});
return statements;
}
use of com.google.devtools.j2objc.ast.Statement in project j2objc by google.
the class Rewriter method endVisit.
@Override
public void endVisit(ForStatement node) {
// nodes in the initializers.
if (node.getInitializers().size() == 1) {
Object initializer = node.getInitializer(0);
if (initializer instanceof VariableDeclarationExpression) {
List<VariableDeclarationFragment> fragments = ((VariableDeclarationExpression) initializer).getFragments();
for (VariableDeclarationFragment fragment : fragments) {
if (ElementUtil.hasAnnotation(fragment.getVariableElement(), AutoreleasePool.class)) {
Statement loopBody = node.getBody();
if (!(loopBody instanceof Block)) {
Block block = new Block();
node.setBody(block);
block.addStatement(loopBody);
}
((Block) node.getBody()).setHasAutoreleasePool(true);
}
}
}
}
}
use of com.google.devtools.j2objc.ast.Statement in project j2objc by google.
the class UnsequencedExpressionRewriter method visit.
@Override
public boolean visit(ForStatement node) {
List<Expression> initializers = node.getInitializers();
// expression or a list of initializer expressions.
if (initializers.size() == 1 && initializers.get(0) instanceof VariableDeclarationExpression) {
VariableDeclarationExpression decl = (VariableDeclarationExpression) initializers.get(0);
extractVariableDeclarationFragments(decl.getFragments(), TreeUtil.asStatementList(node).subList(0, 0));
} else {
extractExpressionList(initializers, TreeUtil.asStatementList(node).subList(0, 0), false);
}
Expression expr = node.getExpression();
if (expr != null) {
newExpression(expr);
expr.accept(this);
List<VariableAccess> toExtract = getUnsequencedAccesses();
if (!toExtract.isEmpty()) {
// Convert "if (;cond;)" into "if (;;) { if (!(cond)) break; ...}".
List<Statement> stmtList = TreeUtil.asStatementList(node.getBody()).subList(0, 0);
extractOrderedAccesses(stmtList, currentTopNode, toExtract);
stmtList.add(createLoopTermination(node.getExpression()));
node.setExpression(null);
}
}
extractExpressionList(node.getUpdaters(), TreeUtil.asStatementList(node.getBody()), true);
node.getBody().accept(this);
return false;
}
use of com.google.devtools.j2objc.ast.Statement in project j2objc by google.
the class UnsequencedExpressionRewriter method visit.
@Override
public boolean visit(IfStatement node) {
visitAndExtract(node.getExpression(), node);
node.getThenStatement().accept(this);
Statement elseStmt = node.getElseStatement();
if (elseStmt != null) {
elseStmt.accept(this);
}
return false;
}
Aggregations