use of com.google.devtools.j2objc.ast.Block 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.Block in project j2objc by google.
the class RewriterTest method testLabeledBreak.
public void testLabeledBreak() throws IOException {
List<Statement> stmts = translateStatements("int i = 0; outer: for (; i < 10; i++) { " + "for (int j = 0; j < 10; j++) { break outer; }}");
assertEquals(3, stmts.size());
Statement s = stmts.get(1);
// not LabeledStatement
assertTrue(s instanceof ForStatement);
ForStatement fs = (ForStatement) s;
Statement forStmt = fs.getBody();
assertTrue(forStmt instanceof Block);
assertEquals(1, ((Block) forStmt).getStatements().size());
Statement lastStmt = stmts.get(2);
assertTrue(lastStmt instanceof LabeledStatement);
assertTrue(((LabeledStatement) lastStmt).getBody() instanceof EmptyStatement);
}
use of com.google.devtools.j2objc.ast.Block in project j2objc by google.
the class RewriterTest method testLabeledContinue.
public void testLabeledContinue() throws IOException {
List<Statement> stmts = translateStatements("int i = 0; outer: for (; i < 10; i++) { " + "for (int j = 0; j < 10; j++) { continue outer; }}");
assertEquals(2, stmts.size());
Statement s = stmts.get(1);
// not LabeledStatement
assertTrue(s instanceof ForStatement);
ForStatement fs = (ForStatement) s;
Statement forStmt = fs.getBody();
assertTrue(forStmt instanceof Block);
stmts = ((Block) forStmt).getStatements();
assertEquals(2, stmts.size());
Statement lastStmt = stmts.get(1);
assertTrue(lastStmt instanceof LabeledStatement);
assertTrue(((LabeledStatement) lastStmt).getBody() instanceof EmptyStatement);
}
use of com.google.devtools.j2objc.ast.Block in project j2objc by google.
the class AnnotationRewriter method addDefaultAccessors.
// Create accessors for properties that have default values.
private void addDefaultAccessors(AnnotationTypeDeclaration node, List<AnnotationTypeMemberDeclaration> members) {
TypeElement type = node.getTypeElement();
for (AnnotationTypeMemberDeclaration member : members) {
ExecutableElement memberElement = member.getExecutableElement();
AnnotationValue defaultValue = memberElement.getDefaultValue();
if (defaultValue == null || defaultValue.getValue() == null) {
continue;
}
TypeMirror memberType = memberElement.getReturnType();
String propName = NameTable.getAnnotationPropertyName(memberElement);
ExecutableElement defaultGetterElement = GeneratedExecutableElement.newMethodWithSelector(propName + "Default", memberType, type).addModifiers(Modifier.STATIC);
MethodDeclaration defaultGetter = new MethodDeclaration(defaultGetterElement);
defaultGetter.setHasDeclaration(false);
Block defaultGetterBody = new Block();
defaultGetter.setBody(defaultGetterBody);
defaultGetterBody.addStatement(new ReturnStatement(translationUtil.createAnnotationValue(memberType, defaultValue)));
node.addBodyDeclaration(defaultGetter);
}
}
use of com.google.devtools.j2objc.ast.Block in project j2objc by google.
the class TreeConverter method convertAbstractTypeDeclaration.
private static TreeNode convertAbstractTypeDeclaration(org.eclipse.jdt.core.dom.AbstractTypeDeclaration node, AbstractTypeDeclaration newNode) {
convertBodyDeclaration(node, newNode);
ITypeBinding typeBinding = node.resolveBinding();
Set<IMethodBinding> declaredInAst = new HashSet<>();
for (Object bodyDecl : node.bodyDeclarations()) {
if (bodyDecl instanceof org.eclipse.jdt.core.dom.MethodDeclaration) {
declaredInAst.add(((org.eclipse.jdt.core.dom.MethodDeclaration) bodyDecl).resolveBinding());
}
newNode.addBodyDeclaration((BodyDeclaration) convert(bodyDecl));
}
for (IMethodBinding method : typeBinding.getDeclaredMethods()) {
if (method.isConstructor() && method.getParameterTypes().length == 0 && !declaredInAst.contains(method)) {
MethodDeclaration defaultConstructor = new MethodDeclaration(BindingConverter.getExecutableElement(method)).setBody(new Block());
addImplicitSuperCall(defaultConstructor);
newNode.addBodyDeclaration(0, defaultConstructor);
break;
}
}
return newNode.setName((SimpleName) convert(node.getName())).setTypeElement(BindingConverter.getTypeElement(typeBinding));
}
Aggregations