List of usage examples for org.eclipse.jdt.core.dom Block statements
ASTNode.NodeList statements
To view the source code for org.eclipse.jdt.core.dom Block statements.
Click Source Link
From source file:com.google.devtools.j2cpp.translate.InitializationNormalizer.java
License:Open Source License
/** * Returns true if this is a constructor that doesn't doesn't call * "this(...)". This constructors are skipped so initializers * aren't run more than once per instance creation. *///from w w w . j a va2 s.c o m boolean isDesignatedConstructor(MethodDeclaration node) { if (!node.isConstructor()) { return false; } Block body = node.getBody(); if (body == null) { return false; } @SuppressWarnings("unchecked") List<Statement> stmts = body.statements(); // safe by specification if (stmts.isEmpty()) { return true; } Statement firstStmt = stmts.get(0); return !(firstStmt instanceof ConstructorInvocation); }
From source file:com.google.devtools.j2cpp.translate.InitializationNormalizer.java
License:Open Source License
@SuppressWarnings("unchecked") private void addMethod(String name, int modifiers, ITypeBinding type, List<Statement> initStatements, List<BodyDeclaration> members, AST ast, boolean isConstructor) { Block body = ast.newBlock(); List<Statement> stmts = body.statements(); // safe by definition for (Statement stmt : initStatements) { Statement newStmt = NodeCopier.copySubtree(ast, stmt); stmts.add(newStmt);/*from w w w . j a v a 2 s. c o m*/ } MethodDeclaration method = ast.newMethodDeclaration(); GeneratedMethodBinding binding = new GeneratedMethodBinding(name, modifiers, null, type, isConstructor, false, true); Types.addBinding(method, binding); Type returnType = ast.newPrimitiveType(PrimitiveType.VOID); Types.addBinding(returnType, ast.resolveWellKnownType("void")); method.setReturnType2(returnType); method.setBody(body); method.setConstructor(isConstructor); method.modifiers().addAll(ast.newModifiers(modifiers)); SimpleName nameNode = NameTable.unsafeSimpleName(name, ast); Types.addBinding(nameNode, binding); method.setName(nameNode); members.add(method); Symbols.resolve(method, binding); }
From source file:com.google.devtools.j2cpp.translate.InnerClassExtractor.java
License:Open Source License
public boolean visitType(AbstractTypeDeclaration node) { ASTNode parentNode = node.getParent(); if (!(parentNode instanceof CompilationUnit)) { ITypeBinding type = Types.getTypeBinding(node); if (!type.isInterface() && !type.isAnnotation() && !Modifier.isStatic(type.getModifiers())) { addOuterFields(node);/*from w w w. j a v a 2s .c om*/ } if (parentNode instanceof AbstractTypeDeclaration) { // Remove declaration from declaring type. AbstractTypeDeclaration parent = (AbstractTypeDeclaration) node.getParent(); @SuppressWarnings("unchecked") List<AbstractTypeDeclaration> parentTypes = parent.bodyDeclarations(); // safe by definition boolean success = parentTypes.remove(node); assert success; } else { TypeDeclarationStatement typeStatement = (TypeDeclarationStatement) parentNode; node = NodeCopier.copySubtree(node.getAST(), typeStatement.getDeclaration()); // Remove stmt from method body (or an if/else/try/catch/finally clause). Block body = (Block) typeStatement.getParent(); @SuppressWarnings("unchecked") List<Statement> stmts = body.statements(); // safe by definition boolean success = stmts.remove(typeStatement); assert success; } // Make this node non-private, if necessary, and add it to the unit's type // list. @SuppressWarnings("unchecked") // safe by definition List<IExtendedModifier> modifiers = node.modifiers(); for (IExtendedModifier iem : modifiers) { if (iem instanceof Modifier) { Modifier mod = (Modifier) iem; if (mod.getKeyword().equals(ModifierKeyword.PRIVATE_KEYWORD)) { modifiers.remove(mod); break; } } } unitTypes.add(node); } return true; }
From source file:com.google.devtools.j2cpp.translate.JavaToIOSMethodTranslator.java
License:Open Source License
/** * Explicitly walk block statement lists, to work around a bug in * ASTNode.visitChildren that skips list members. *///from w ww . j a v a 2 s . c o m @Override public boolean visit(Block node) { @SuppressWarnings("unchecked") List<Statement> stmts = node.statements(); // safe by design for (Statement s : stmts) { s.accept(this); } return false; }
From source file:com.google.devtools.j2cpp.translate.JavaToIOSMethodTranslator.java
License:Open Source License
private void addCopyWithZoneMethod(TypeDeclaration node) { // Create copyWithZone: method. ITypeBinding type = Types.getTypeBinding(node).getTypeDeclaration(); SimpleName methodName = newCloneMethodName(type, true); GeneratedMethodBinding binding = (GeneratedMethodBinding) Types.getMethodBinding(methodName); IOSMethod iosMethod = Types.getMappedMethod(binding); MethodDeclaration cloneMethod = ast.newMethodDeclaration(); Types.addBinding(cloneMethod, binding); cloneMethod.setName(methodName);/*from w ww . ja v a2s . c o m*/ cloneMethod.setReturnType2(Types.makeType(binding.getReturnType())); // Add NSZone *zone parameter. IOSTypeBinding nsZoneType = new IOSTypeBinding("NSZone", false); GeneratedVariableBinding zoneBinding = new GeneratedVariableBinding("zone", 0, nsZoneType, false, true, binding.getDeclaringClass(), binding); binding.addParameter(zoneBinding); @SuppressWarnings("unchecked") List<SingleVariableDeclaration> parameters = cloneMethod.parameters(); // safe by definition parameters.add(makeZoneParameter(zoneBinding)); Types.addMappedIOSMethod(binding, iosMethod); Block block = ast.newBlock(); cloneMethod.setBody(block); MethodInvocation cloneInvocation = makeCloneInvocation(type, zoneBinding); ReturnStatement returnStmt = ast.newReturnStatement(); returnStmt.setExpression(cloneInvocation); @SuppressWarnings("unchecked") List<Statement> stmts = block.statements(); // safe by definition stmts.add(returnStmt); @SuppressWarnings("unchecked") List<BodyDeclaration> members = node.bodyDeclarations(); // safe by definition members.add(cloneMethod); }
From source file:com.google.devtools.j2cpp.translate.Rewriter.java
License:Open Source License
@Override public boolean visit(FieldDeclaration node) { int mods = node.getModifiers(); if (Modifier.isStatic(mods)) { ASTNode parent = node.getParent(); @SuppressWarnings("unchecked") List<BodyDeclaration> classMembers = parent instanceof AbstractTypeDeclaration ? ((AbstractTypeDeclaration) parent).bodyDeclarations() : ((AnonymousClassDeclaration) parent).bodyDeclarations(); // safe by specification int indexOfNewMember = classMembers.indexOf(node) + 1; @SuppressWarnings("unchecked") List<VariableDeclarationFragment> fragments = node.fragments(); // safe by specification for (VariableDeclarationFragment var : fragments) { IVariableBinding binding = Types.getVariableBinding(var); if (Types.isPrimitiveConstant(binding) && Modifier.isPrivate(binding.getModifiers())) { // Don't define accessors for private constants, since they can be // directly referenced. continue; }/* ww w . j av a 2 s. c o m*/ // rename varName to varName_, per Obj-C style guide SimpleName oldName = var.getName(); ITypeBinding type = ((AbstractTypeDeclaration) node.getParent()).resolveBinding(); String varName = NameTable.getStaticVarQualifiedName(type, oldName.getIdentifier()); NameTable.rename(binding, varName); ITypeBinding typeBinding = binding.getType(); var.setExtraDimensions(0); // if array, type was corrected above // add accessor(s) if (needsReader(var, classMembers)) { classMembers.add(indexOfNewMember++, makeStaticReader(var, mods)); } if (!Modifier.isFinal(node.getModifiers()) && needsWriter(var, classMembers)) { classMembers.add(indexOfNewMember++, makeStaticWriter(var, oldName.getIdentifier(), node.getType(), mods)); } // move non-constant initialization to init block Expression initializer = var.getInitializer(); if (initializer != null && initializer.resolveConstantExpressionValue() == null) { var.setInitializer(null); AST ast = var.getAST(); SimpleName newName = ast.newSimpleName(varName); Types.addBinding(newName, binding); Assignment assign = ast.newAssignment(); assign.setLeftHandSide(newName); Expression newInit = NodeCopier.copySubtree(ast, initializer); assign.setRightHandSide(newInit); Types.addBinding(assign, typeBinding); Block initBlock = ast.newBlock(); @SuppressWarnings("unchecked") List<Statement> stmts = initBlock.statements(); // safe by definition stmts.add(ast.newExpressionStatement(assign)); Initializer staticInitializer = ast.newInitializer(); staticInitializer.setBody(initBlock); @SuppressWarnings("unchecked") List<IExtendedModifier> initMods = staticInitializer.modifiers(); // safe by definition initMods.add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD)); classMembers.add(indexOfNewMember++, staticInitializer); } } } return true; }
From source file:com.google.devtools.j2cpp.translate.Rewriter.java
License:Open Source License
@Override public boolean visit(Block node) { // split array declarations so that initializers are in separate statements. @SuppressWarnings("unchecked") List<Statement> stmts = node.statements(); // safe by definition int n = stmts.size(); for (int i = 0; i < n; i++) { Statement s = stmts.get(i); if (s instanceof VariableDeclarationStatement) { VariableDeclarationStatement var = (VariableDeclarationStatement) s; Map<VariableDeclarationFragment, Expression> initializers = Maps.newLinkedHashMap(); @SuppressWarnings("unchecked") List<VariableDeclarationFragment> fragments = var.fragments(); for (VariableDeclarationFragment fragment : fragments) { ITypeBinding varType = Types.getTypeBinding(fragment); if (varType.isArray()) { fragment.setExtraDimensions(0); Expression initializer = fragment.getInitializer(); if (initializer != null) { initializers.put(fragment, initializer); if (initializer instanceof ArrayCreation) { ArrayCreation creator = (ArrayCreation) initializer; if (creator.getInitializer() != null) { // replace this redundant array creation node with its // rewritten initializer initializer = creator.getInitializer(); } else { continue; }// w w w . j a va 2 s . c o m } if (initializer instanceof ArrayInitializer) { fragment.setInitializer(createIOSArrayInitializer(Types.getTypeBinding(fragment), (ArrayInitializer) initializer)); } } } } } else if (s instanceof ExpressionStatement && ((ExpressionStatement) s).getExpression() instanceof Assignment) { Assignment assign = (Assignment) ((ExpressionStatement) s).getExpression(); ITypeBinding assignType = Types.getTypeBinding(assign); if (assign.getRightHandSide() instanceof ArrayInitializer) { ArrayInitializer arrayInit = (ArrayInitializer) assign.getRightHandSide(); assert assignType.isArray() : "array initializer assigned to non-array"; assign.setRightHandSide(createIOSArrayInitializer(assignType, arrayInit)); } else if (assign.getRightHandSide() instanceof ArrayCreation) { ArrayCreation arrayCreate = (ArrayCreation) assign.getRightHandSide(); ArrayInitializer arrayInit = arrayCreate.getInitializer(); if (arrayInit != null) { // Replace ArrayCreation node with its initializer. AST ast = node.getAST(); Assignment newAssign = ast.newAssignment(); Types.addBinding(newAssign, assignType); newAssign.setLeftHandSide(NodeCopier.copySubtree(ast, assign.getLeftHandSide())); newAssign.setRightHandSide(createIOSArrayInitializer(assignType, arrayInit)); ((ExpressionStatement) s).setExpression(newAssign); } } } } return true; }
From source file:com.google.devtools.j2cpp.translate.Rewriter.java
License:Open Source License
@SuppressWarnings("unchecked") @Override// w w w . j av a 2s. c om public boolean visit(LabeledStatement node) { Statement s = node.getBody(); Statement statementBody = null; if (s instanceof DoStatement) { statementBody = ((DoStatement) s).getBody(); } else if (s instanceof EnhancedForStatement) { statementBody = ((EnhancedForStatement) s).getBody(); } else if (s instanceof ForStatement) { statementBody = ((ForStatement) s).getBody(); } else if (s instanceof WhileStatement) { statementBody = ((WhileStatement) s).getBody(); } if (statementBody != null) { AST ast = node.getAST(); final boolean[] hasContinue = new boolean[1]; final boolean[] hasBreak = new boolean[1]; node.accept(new ASTVisitor() { @Override public void endVisit(ContinueStatement node) { if (node.getLabel() != null) { hasContinue[0] = true; } } @Override public void endVisit(BreakStatement node) { if (node.getLabel() != null) { hasBreak[0] = true; } } }); List<Statement> stmts = null; if (hasContinue[0]) { if (statementBody instanceof Block) { // Add empty labeled statement as last block statement. stmts = ((Block) statementBody).statements(); LabeledStatement newLabel = ast.newLabeledStatement(); newLabel.setLabel(NodeCopier.copySubtree(ast, node.getLabel())); newLabel.setBody(ast.newEmptyStatement()); stmts.add(newLabel); } } if (hasBreak[0]) { ASTNode parent = node.getParent(); if (parent instanceof Block) { stmts = ((Block) parent).statements(); } else { // Surround parent with block. Block block = ast.newBlock(); stmts = block.statements(); stmts.add((Statement) parent); // Replace parent in its statement list with new block. List<Statement> superStmts = ((Block) parent.getParent()).statements(); for (int i = 0; i < superStmts.size(); i++) { if (superStmts.get(i) == parent) { superStmts.set(i, block); break; } } stmts = block.statements(); } // Find node in statement list, and add empty labeled statement after it. for (int i = 0; i < stmts.size(); i++) { if (stmts.get(i) == node) { LabeledStatement newLabel = ast.newLabeledStatement(); newLabel.setLabel(NodeCopier.copySubtree(ast, node.getLabel())); newLabel.setBody(ast.newEmptyStatement()); stmts.add(i + 1, newLabel); break; } } } if (hasContinue[0] || hasBreak[0]) { // Replace this node with its statement, thus deleting the label. ASTNode parent = node.getParent(); if (parent instanceof Block) { stmts = ((Block) parent).statements(); for (int i = 0; i < stmts.size(); i++) { if (stmts.get(i) == node) { stmts.set(i, NodeCopier.copySubtree(ast, node.getBody())); break; } } } } } return true; }
From source file:com.google.devtools.j2cpp.translate.Rewriter.java
License:Open Source License
/** * Java interfaces that redeclare java.lang.Object's equals, hashCode, or * toString methods need a forwarding method if the implementing class * relies on java.lang.Object's implementation. This is because NSObject * is declared as adhering to the NSObject protocol, but doesn't explicitly * declare these method in its interface. This prevents gcc from finding * an implementation, so it issues a warning. *//*from w w w. j a v a2s. com*/ private void addForwardingMethod(AST ast, ITypeBinding typeBinding, IMethodBinding interfaceMethod, List<BodyDeclaration> decls) { Logger.getAnonymousLogger() .fine(String.format("adding %s to %s", interfaceMethod.getName(), typeBinding.getQualifiedName())); MethodDeclaration method = createInterfaceMethodBody(ast, typeBinding, interfaceMethod); // Add method body with single "super.method(parameters);" statement. Block body = ast.newBlock(); method.setBody(body); SuperMethodInvocation superInvocation = ast.newSuperMethodInvocation(); superInvocation.setName(NodeCopier.copySubtree(ast, method.getName())); @SuppressWarnings("unchecked") List<SingleVariableDeclaration> parameters = method.parameters(); // safe by design @SuppressWarnings("unchecked") List<Expression> args = superInvocation.arguments(); // safe by definition for (SingleVariableDeclaration param : parameters) { Expression arg = NodeCopier.copySubtree(ast, param.getName()); args.add(arg); } Types.addBinding(superInvocation, Types.getMethodBinding(method)); @SuppressWarnings("unchecked") List<Statement> stmts = body.statements(); // safe by definition ReturnStatement returnStmt = ast.newReturnStatement(); returnStmt.setExpression(superInvocation); stmts.add(returnStmt); decls.add(method); }
From source file:com.google.devtools.j2objc.util.ASTUtil.java
License:Apache License
/** * Helper method to isolate the unchecked warning. *//* w ww . j av a2s. c om*/ @SuppressWarnings("unchecked") public static List<Statement> getStatements(Block block) { return block.statements(); }