Example usage for org.eclipse.jdt.core.dom Block statements

List of usage examples for org.eclipse.jdt.core.dom Block statements

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom Block statements.

Prototype

ASTNode.NodeList statements

To view the source code for org.eclipse.jdt.core.dom Block statements.

Click Source Link

Document

The list of statements (element type: Statement ).

Usage

From source file:org.evosuite.testcarver.codegen.CodeGenerator.java

License:Open Source License

@SuppressWarnings({ "rawtypes", "unchecked" })
private void createCallMethod(final TypeDeclaration td, final CompilationUnit cu, final AST ast) {
    //      public static Object callMethod(final String clazzName, final String methodName, final Object receiver, final Object...args) throws Exception
    //      {/*from ww  w .j av a2 s  .  c  o m*/
    //         final Class<?> clazz = Class.forName(clazzName);
    //         final Method   m     = clazz.getDeclaredMethod(methodName);
    //         m.setAccessible(true);
    //         return m.invoke(receiver, args);
    //      }

    //-- add necessary import statements
    List imports = cu.imports();
    ImportDeclaration id = ast.newImportDeclaration();
    id.setName(ast.newName(new String[] { "java", "lang", "reflect", "Method" }));
    imports.add(id);

    //-- create method frame: "public static Object callMethod(final String clazzName, final String methodName, final Object receiver, final Object[] args, Class[] paramTypes) throws Exception"
    final MethodDeclaration md = ast.newMethodDeclaration();
    td.bodyDeclarations().add(md);
    md.setName(ast.newSimpleName("callMethod"));

    List modifiers = md.modifiers();
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.PRIVATE_KEYWORD));
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.STATIC_KEYWORD));

    md.thrownExceptions().add(ast.newSimpleName("Exception"));

    List parameters = md.parameters();

    SingleVariableDeclaration svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("String")));
    svd.setName(ast.newSimpleName("clazzName"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("String")));
    svd.setName(ast.newSimpleName("methodName"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("Object")));
    svd.setName(ast.newSimpleName("receiver"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Object"))));
    svd.setName(ast.newSimpleName("args"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Class"))));
    svd.setName(ast.newSimpleName("paramTypes"));
    parameters.add(svd);

    md.setReturnType2(ast.newSimpleType(ast.newSimpleName("Object")));

    //-- create method body
    //      final Class<?> clazz = Class.forName(clazzName);
    //      final Method   m     = clazz.getDeclaredMethod(methodName, paramTypes);
    //      m.setAccessible(true);
    //      return m.invoke(receiver, args);

    final Block methodBlock = ast.newBlock();
    md.setBody(methodBlock);
    final List methodStmts = methodBlock.statements();

    // final Class clazz = Class.forName(clazzName);      
    MethodInvocation init = ast.newMethodInvocation();
    init.setName(ast.newSimpleName("forName"));
    init.setExpression(ast.newSimpleName("Class"));
    init.arguments().add(ast.newSimpleName("clazzName"));
    VariableDeclarationFragment varDeclFrag = ast.newVariableDeclarationFragment();
    varDeclFrag.setName(ast.newSimpleName("clazz"));
    varDeclFrag.setInitializer(init);
    VariableDeclarationStatement varDeclStmt = ast.newVariableDeclarationStatement(varDeclFrag);
    varDeclStmt.setType(ast.newSimpleType(ast.newSimpleName("Class")));
    methodStmts.add(varDeclStmt);

    // final Method m = clazz.getDeclaredMethod(methodName);
    init = ast.newMethodInvocation();
    init.setName(ast.newSimpleName("getDeclaredMethod"));
    init.setExpression(ast.newSimpleName("clazz"));
    init.arguments().add(ast.newSimpleName("methodName"));
    init.arguments().add(ast.newSimpleName("paramTypes"));
    varDeclFrag = ast.newVariableDeclarationFragment();
    varDeclFrag.setName(ast.newSimpleName("m"));
    varDeclFrag.setInitializer(init);
    varDeclStmt = ast.newVariableDeclarationStatement(varDeclFrag);
    varDeclStmt.setType(ast.newSimpleType(ast.newSimpleName("Method")));
    methodStmts.add(varDeclStmt);

    // f.setAccessible(true);
    MethodInvocation minv = ast.newMethodInvocation();
    minv.setName(ast.newSimpleName("setAccessible"));
    minv.setExpression(ast.newSimpleName("m"));
    minv.arguments().add(ast.newBooleanLiteral(true));
    methodStmts.add(ast.newExpressionStatement(minv));

    // return m.invoke(receiver, args);
    minv = ast.newMethodInvocation();
    minv.setName(ast.newSimpleName("invoke"));
    minv.setExpression(ast.newSimpleName("m"));
    minv.arguments().add(ast.newSimpleName("receiver"));
    minv.arguments().add(ast.newSimpleName("args"));
    final ReturnStatement returnStmt = ast.newReturnStatement();
    returnStmt.setExpression(minv);
    methodStmts.add(returnStmt);
}

From source file:org.evosuite.testcarver.codegen.CodeGenerator.java

License:Open Source License

@SuppressWarnings({ "rawtypes", "unchecked" })
private void createNewInstanceMethod(final TypeDeclaration td, final CompilationUnit cu, final AST ast) {
    //      public static Object newInstance(final String clazzName, final Object receiver, final Object[] args, final Class[] parameterTypes) throws Exception
    //      {/*from w ww  .ja va  2 s .c  o  m*/
    //         final Class<?>     clazz = Class.forName(clazzName);
    //         final Constructor   c    = clazz.getDeclaredConstructor(parameterTypes);
    //         c.setAccessible(true);
    //         
    //         return c.newInstance(args);
    //      }

    //-- add necessary import statements
    List imports = cu.imports();
    ImportDeclaration id = ast.newImportDeclaration();
    id.setName(ast.newName(new String[] { "java", "lang", "reflect", "Constructor" }));
    imports.add(id);

    //-- create method frame: "public static Object newInstance(final String clazzName, final Object[] args, Class[] paramTypes) throws Exception"
    final MethodDeclaration md = ast.newMethodDeclaration();
    td.bodyDeclarations().add(md);
    md.setName(ast.newSimpleName("newInstance"));

    List modifiers = md.modifiers();
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.PRIVATE_KEYWORD));
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.STATIC_KEYWORD));

    md.thrownExceptions().add(ast.newSimpleName("Exception"));

    List parameters = md.parameters();

    SingleVariableDeclaration svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("String")));
    svd.setName(ast.newSimpleName("clazzName"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Object"))));
    svd.setName(ast.newSimpleName("args"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Class"))));
    svd.setName(ast.newSimpleName("paramTypes"));
    parameters.add(svd);

    md.setReturnType2(ast.newSimpleType(ast.newSimpleName("Object")));

    //-- create method body
    //      final Class<?>     clazz = Class.forName(clazzName);
    //      final Constructor   c    = clazz.getDeclaredConstructor(parameterTypes);
    //      c.setAccessible(true);
    //      
    //      return c.newInstance(args);

    final Block methodBlock = ast.newBlock();
    md.setBody(methodBlock);
    final List methodStmts = methodBlock.statements();

    // final Class clazz = Class.forName(clazzName);      
    MethodInvocation init = ast.newMethodInvocation();
    init.setName(ast.newSimpleName("forName"));
    init.setExpression(ast.newSimpleName("Class"));
    init.arguments().add(ast.newSimpleName("clazzName"));
    VariableDeclarationFragment varDeclFrag = ast.newVariableDeclarationFragment();
    varDeclFrag.setName(ast.newSimpleName("clazz"));
    varDeclFrag.setInitializer(init);
    VariableDeclarationStatement varDeclStmt = ast.newVariableDeclarationStatement(varDeclFrag);
    varDeclStmt.setType(ast.newSimpleType(ast.newSimpleName("Class")));
    methodStmts.add(varDeclStmt);

    // final Constructor c = clazz.getDeclaredConstructor(parameterTypes);
    init = ast.newMethodInvocation();
    init.setName(ast.newSimpleName("getDeclaredConstructor"));
    init.setExpression(ast.newSimpleName("clazz"));
    init.arguments().add(ast.newSimpleName("paramTypes"));
    varDeclFrag = ast.newVariableDeclarationFragment();
    varDeclFrag.setName(ast.newSimpleName("c"));
    varDeclFrag.setInitializer(init);
    varDeclStmt = ast.newVariableDeclarationStatement(varDeclFrag);
    varDeclStmt.setType(ast.newSimpleType(ast.newSimpleName("Constructor")));
    methodStmts.add(varDeclStmt);

    // c.setAccessible(true);
    MethodInvocation minv = ast.newMethodInvocation();
    minv.setName(ast.newSimpleName("setAccessible"));
    minv.setExpression(ast.newSimpleName("c"));
    minv.arguments().add(ast.newBooleanLiteral(true));
    methodStmts.add(ast.newExpressionStatement(minv));

    // return c.newInstance(args);
    minv = ast.newMethodInvocation();
    minv.setName(ast.newSimpleName("newInstance"));
    minv.setExpression(ast.newSimpleName("c"));
    minv.arguments().add(ast.newSimpleName("args"));
    final ReturnStatement returnStmt = ast.newReturnStatement();
    returnStmt.setExpression(minv);
    methodStmts.add(returnStmt);
}

From source file:org.evosuite.testcarver.codegen.JUnitCodeGenerator.java

License:Open Source License

@SuppressWarnings({ "rawtypes", "unchecked" })
private void createSetFieldMethod(final TypeDeclaration td, final CompilationUnit cu, final AST ast) {
    //-- add necessary import statements
    List imports = cu.imports();/*from  w  ww .  ja v  a 2 s  . co m*/
    ImportDeclaration id = ast.newImportDeclaration();
    id.setName(ast.newName(new String[] { "java", "lang", "reflect", "Field" }));
    imports.add(id);

    //-- create method frame: "public static void setProtectedField(final String clazzName, final String fieldName, final Object receiver, final Object value) throws Exception"
    final MethodDeclaration md = ast.newMethodDeclaration();
    td.bodyDeclarations().add(md);
    md.setName(ast.newSimpleName("setField"));

    List modifiers = md.modifiers();
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.PRIVATE_KEYWORD));
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.STATIC_KEYWORD));

    md.thrownExceptions().add(ast.newSimpleName("Exception"));

    List parameters = md.parameters();

    SingleVariableDeclaration svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("String")));
    svd.setName(ast.newSimpleName("clazzName"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("String")));
    svd.setName(ast.newSimpleName("fieldName"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("Object")));
    svd.setName(ast.newSimpleName("receiver"));
    parameters.add(svd);

    svd = ast.newSingleVariableDeclaration();
    svd.setType(ast.newSimpleType(ast.newSimpleName("Object")));
    svd.setName(ast.newSimpleName("value"));
    parameters.add(svd);

    //-- create method body
    //      final Class<?> clazz = Class.forName(clazzName);
    //      final Field    f     = clazz.getDeclaredField(fieldName);
    //      f.setAccessible(true);
    //      f.set(receiver, value);

    final Block methodBlock = ast.newBlock();
    md.setBody(methodBlock);
    final List methodStmts = methodBlock.statements();

    // final Class clazz = Class.forName(clazzName);      
    MethodInvocation init = ast.newMethodInvocation();
    init.setName(ast.newSimpleName("forName"));
    init.setExpression(ast.newSimpleName("Class"));
    init.arguments().add(ast.newSimpleName("clazzName"));
    VariableDeclarationFragment varDeclFrag = ast.newVariableDeclarationFragment();
    varDeclFrag.setName(ast.newSimpleName("clazz"));
    varDeclFrag.setInitializer(init);
    VariableDeclarationStatement varDeclStmt = ast.newVariableDeclarationStatement(varDeclFrag);
    varDeclStmt.setType(ast.newSimpleType(ast.newSimpleName("Class")));
    methodStmts.add(varDeclStmt);

    // final Field f = clazz.getDeclaredField(fieldName);
    init = ast.newMethodInvocation();
    init.setName(ast.newSimpleName("getDeclaredField"));
    init.setExpression(ast.newSimpleName("clazz"));
    init.arguments().add(ast.newSimpleName("fieldName"));
    varDeclFrag = ast.newVariableDeclarationFragment();
    varDeclFrag.setName(ast.newSimpleName("f"));
    varDeclFrag.setInitializer(init);
    varDeclStmt = ast.newVariableDeclarationStatement(varDeclFrag);
    varDeclStmt.setType(ast.newSimpleType(ast.newSimpleName("Field")));
    methodStmts.add(varDeclStmt);

    // f.setAccessible(true);
    MethodInvocation minv = ast.newMethodInvocation();
    minv.setName(ast.newSimpleName("setAccessible"));
    minv.setExpression(ast.newSimpleName("f"));
    minv.arguments().add(ast.newBooleanLiteral(true));
    methodStmts.add(ast.newExpressionStatement(minv));

    // f.set(receiver, value);
    minv = ast.newMethodInvocation();
    minv.setName(ast.newSimpleName("set"));
    minv.setExpression(ast.newSimpleName("f"));
    minv.arguments().add(ast.newSimpleName("receiver"));
    minv.arguments().add(ast.newSimpleName("value"));
    methodStmts.add(ast.newExpressionStatement(minv));
}

From source file:org.hibernate.eclipse.jdt.ui.internal.jpa.process.ProcessEntityInfo.java

License:Open Source License

@SuppressWarnings("unchecked")
public boolean visit(TypeDeclaration node) {
    ITypeBinding typeBinding = node.resolveBinding();
    String nodeName = typeBinding == null ? null : typeBinding.getBinaryName();
    if (nodeName == null) {
        return false;
    }//from  w  ww  .j a  v  a  2s  . c  om
    entityInfo = entityInfos.getEntityInfo(nodeName);
    if (entityInfo == null) {
        return false;
    }
    if (entityInfo.isAddMappedSuperclassFlag()) {
        MarkerAnnotation matd = rewriter.getAST().newMarkerAnnotation();
        matd.setTypeName(rewriter.getAST().newSimpleName(JPAConst.ANNOTATION_MAPPEDSUPERCLASS));
        ListRewrite lrw = rewriter.getListRewrite(node, TypeDeclaration.MODIFIERS2_PROPERTY);
        lrw.insertFirst(matd, null);
    }
    if (entityInfo.isAddEntityFlag()) {
        MarkerAnnotation matd = rewriter.getAST().newMarkerAnnotation();
        matd.setTypeName(rewriter.getAST().newSimpleName(JPAConst.ANNOTATION_ENTITY));
        ListRewrite lrw = rewriter.getListRewrite(node, TypeDeclaration.MODIFIERS2_PROPERTY);
        lrw.insertFirst(matd, null);
    }
    /** /
    if (!entityInfo.isImplicitConstructorFlag() && !entityInfo.isDefaultConstructorFlag() &&
    entityInfo.isAddSerializableInterfaceFlag()) {
       // add serializable interface
       SimpleName sn = null;
       //if (!entityInfo.isAddSerializableInterfaceImportFlag()) {
    sn = rewriter.getAST().newSimpleName(JPAConst.ANNOTATION_SERIALIZABLE);
       //}
       //else {
       //   sn = rewriter.getAST().newSimpleName(JPAConst.IMPORT_SERIALIZABLE);
       //}
       SimpleType st = rewriter.getAST().newSimpleType(sn);
       ListRewrite lrw = rewriter.getListRewrite(node, TypeDeclaration.SUPER_INTERFACE_TYPES_PROPERTY);
       lrw.insertFirst(st, null);
       // add "private static final long serialVersionUID = 1L;"
       // ...
    }
    /**/
    if (!entityInfo.isImplicitConstructorFlag() && !entityInfo.isDefaultConstructorFlag()
            && entityInfo.isAddSerializableInterfaceFlag()) {

        MethodDeclaration md = rewriter.getAST().newMethodDeclaration();
        md.setConstructor(true);
        Modifier modifier = rewriter.getAST().newModifier(Modifier.ModifierKeyword.PROTECTED_KEYWORD);
        md.modifiers().add(modifier);
        Block body = rewriter.getAST().newBlock();
        md.setBody(body);
        SimpleName sn = rewriter.getAST().newSimpleName(entityInfo.getName());
        md.setName(sn);
        ListRewrite lrw = rewriter.getListRewrite(node, TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
        List<?> list = lrw.getOriginalList();
        MethodDeclaration insertBeforeNode = null;
        Iterator<?> it = list.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            if (obj instanceof MethodDeclaration) {
                insertBeforeNode = (MethodDeclaration) obj;
                break;
            }
        }
        if (insertBeforeNode == null) {
            lrw.insertLast(md, null);
        } else {
            lrw.insertBefore(md, insertBeforeNode, null);
        }
    }
    if (enableOptLock && entityInfo.isAddVersionFlag() && !entityInfo.hasVersionAnnotation()) {
        // add property "version", add getter/setter getVersion/setVersion,
        // add annotation for the property or for the getter
        //
        final String version = "version"; //$NON-NLS-1$
        final String versionType = "Integer"; //$NON-NLS-1$
        //
        VariableDeclarationFragment vdFragment = rewriter.getAST().newVariableDeclarationFragment();
        SimpleName variableName = rewriter.getAST().newSimpleName(version);
        vdFragment.setName(variableName);
        FieldDeclaration fieldVersion = rewriter.getAST().newFieldDeclaration(vdFragment);
        Modifier modifier = rewriter.getAST().newModifier(Modifier.ModifierKeyword.PROTECTED_KEYWORD);
        fieldVersion.modifiers().add(modifier);
        Name typeName = rewriter.getAST().newName(versionType);
        SimpleType type = rewriter.getAST().newSimpleType(typeName);
        fieldVersion.setType(type);
        //
        MethodDeclaration mdGetter = rewriter.getAST().newMethodDeclaration();
        modifier = rewriter.getAST().newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD);
        mdGetter.modifiers().add(modifier);
        Block body = rewriter.getAST().newBlock();
        ReturnStatement returnVersion = rewriter.getAST().newReturnStatement();
        variableName = rewriter.getAST().newSimpleName(version);
        returnVersion.setExpression(variableName);
        body.statements().add(returnVersion);
        mdGetter.setBody(body);
        SimpleName sn = rewriter.getAST().newSimpleName("getVersion"); //$NON-NLS-1$
        mdGetter.setName(sn);
        typeName = rewriter.getAST().newName(versionType);
        type = rewriter.getAST().newSimpleType(typeName);
        mdGetter.setReturnType2(type);
        //
        MethodDeclaration mdSetter = rewriter.getAST().newMethodDeclaration();
        modifier = rewriter.getAST().newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD);
        mdSetter.modifiers().add(modifier);
        body = rewriter.getAST().newBlock();
        Assignment assignment = rewriter.getAST().newAssignment();
        FieldAccess fieldAccess = rewriter.getAST().newFieldAccess();
        ThisExpression thisExpression = rewriter.getAST().newThisExpression();
        fieldAccess.setExpression(thisExpression);
        variableName = rewriter.getAST().newSimpleName(version);
        fieldAccess.setName(variableName);
        assignment.setLeftHandSide(fieldAccess);
        variableName = rewriter.getAST().newSimpleName(version);
        assignment.setRightHandSide(variableName);
        ExpressionStatement expressionStatement = rewriter.getAST().newExpressionStatement(assignment);
        body.statements().add(expressionStatement);
        mdSetter.setBody(body);
        sn = rewriter.getAST().newSimpleName("setVersion"); //$NON-NLS-1$
        mdSetter.setName(sn);
        SingleVariableDeclaration svd = rewriter.getAST().newSingleVariableDeclaration();
        variableName = rewriter.getAST().newSimpleName(version);
        svd.setName(variableName);
        typeName = rewriter.getAST().newName(versionType);
        type = rewriter.getAST().newSimpleType(typeName);
        svd.setType(type);
        mdSetter.parameters().add(svd);
        //
        ListRewrite lrw = rewriter.getListRewrite(node, TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
        if (entityInfo.getVersionFieldGetter() != FieldGetterType.FIELD
                && entityInfo.getVersionFieldGetter() != FieldGetterType.FIELD_GETTER) {
            lrw.insertLast(fieldVersion, null);
        }
        if (entityInfo.getVersionFieldGetter() != FieldGetterType.GETTER
                && entityInfo.getVersionFieldGetter() != FieldGetterType.FIELD_GETTER) {
            lrw.insertLast(mdGetter, null);
            lrw.insertLast(mdSetter, null);
        }
        if (annotationStyle == AnnotStyle.FIELDS) {
            MarkerAnnotation matd = rewriter.getAST().newMarkerAnnotation();
            matd.setTypeName(rewriter.getAST().newSimpleName(JPAConst.ANNOTATION_VERSION));
            lrw = rewriter.getListRewrite(fieldVersion, FieldDeclaration.MODIFIERS2_PROPERTY);
            lrw.insertFirst(matd, null);
        } else if (annotationStyle == AnnotStyle.GETTERS) {
            MarkerAnnotation matd = rewriter.getAST().newMarkerAnnotation();
            matd.setTypeName(rewriter.getAST().newSimpleName(JPAConst.ANNOTATION_VERSION));
            lrw = rewriter.getListRewrite(mdGetter, MethodDeclaration.MODIFIERS2_PROPERTY);
            lrw.insertFirst(matd, null);
        }
    }
    return true;
}

From source file:org.jboss.forge.roaster.model.impl.statements.StatementBuilder.java

License:Open Source License

public static org.jboss.forge.roaster.model.statements.StatementSource asRoasterStatement(
        Statement jdtStatement) {
    org.jboss.forge.roaster.model.statements.StatementSource roasterStmt = null;
    switch (jdtStatement.getNodeType()) {
    case ASTNode.RETURN_STATEMENT:
        ReturnStatement returnStatement = (ReturnStatement) jdtStatement;
        roasterStmt = newReturn()/*w  w w . j av a  2s . co  m*/
                .setReturn(ExpressionBuilder.asRoasterExpression(returnStatement.getExpression()));
        break;
    case ASTNode.ASSERT_STATEMENT:
        AssertStatement assertStatement = (AssertStatement) jdtStatement;
        roasterStmt = newAssert()
                .setAssertion(ExpressionBuilder.asRoasterExpression(assertStatement.getExpression()))
                .setMessage(ExpressionBuilder.asRoasterExpression(assertStatement.getMessage()));
        break;
    case ASTNode.ASSIGNMENT:
        //TODO
        break;
    case ASTNode.BLOCK:
        Block block = (Block) jdtStatement;
        roasterStmt = newBlock();
        ((BlockImpl) roasterStmt).setInternal(block);
        for (Object o : block.statements()) {
            ((BlockStatement) roasterStmt).addStatement(StatementBuilder.asRoasterStatement((Statement) o));
        }
        break;
    case ASTNode.CONTINUE_STATEMENT:
        ContinueStatement continueStatement = (ContinueStatement) jdtStatement;
        roasterStmt = newContinue();
        break;
    case ASTNode.VARIABLE_DECLARATION_STATEMENT:
        break;
    case ASTNode.DO_STATEMENT:
        break;
    case ASTNode.EXPRESSION_STATEMENT:
        break;
    case ASTNode.ENHANCED_FOR_STATEMENT:
        break;
    case ASTNode.FOR_STATEMENT:
        break;
    case ASTNode.IF_STATEMENT:
        break;
    case ASTNode.METHOD_INVOCATION:
        break;
    case ASTNode.SUPER_METHOD_INVOCATION:
        break;
    case ASTNode.CONSTRUCTOR_INVOCATION:
        break;
    case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
        break;
    case ASTNode.SWITCH_STATEMENT:
        break;
    case ASTNode.SYNCHRONIZED_STATEMENT:
        break;
    case ASTNode.TRY_STATEMENT:
        break;
    case ASTNode.WHILE_STATEMENT:
        break;
    case ASTNode.BREAK_STATEMENT:
        break;
    case ASTNode.LABELED_STATEMENT:
        break;
    default:
        throw new RuntimeException("Unknown statement: " + jdtStatement);
    }
    if (roasterStmt != null) {
        ((org.jboss.forge.roaster.model.ASTNode) roasterStmt).setInternal(jdtStatement);
    }
    return roasterStmt;
}

From source file:org.jboss.tools.arquillian.ui.internal.refactoring.AddMissingTypeRefactoring.java

License:Open Source License

@Override
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
    message = null;/*from   w  ww . j a va2 s  .c  o  m*/
    if (astRoot == null || (abstractMethodBindings == null && deploymentMethodName == null)) {
        message = CANNOT_FIND_A_DEPLOYMENT_METHOD;
        return null;
    }
    MethodDeclaration deploymentMethod = null;
    TextFileChange result = new TextFileChange(file.getName(), file);
    MultiTextEdit rootEdit = new MultiTextEdit();
    importRewrite = CodeStyleConfiguration.createImportRewrite(astRoot, true);
    if (astRoot.getAST().hasResolvedBindings()) {
        importRewrite.setUseContextToFilterImplicitImports(true);
    }
    rewrite = ASTRewrite.create(astRoot.getAST());
    IType fType = cUnit.findPrimaryType();
    if (fType.isAnonymous()) {
        final ClassInstanceCreation creation = (ClassInstanceCreation) ASTNodes
                .getParent(NodeFinder.perform(astRoot, fType.getNameRange()), ClassInstanceCreation.class);
        if (creation != null) {
            final AnonymousClassDeclaration declaration = creation.getAnonymousClassDeclaration();
            if (declaration != null)
                listRewriter = rewrite.getListRewrite(declaration,
                        AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY);
        }
    } else {
        final AbstractTypeDeclaration declaration = (AbstractTypeDeclaration) ASTNodes
                .getParent(NodeFinder.perform(astRoot, fType.getNameRange()), AbstractTypeDeclaration.class);
        if (declaration != null)
            listRewriter = rewrite.getListRewrite(declaration, declaration.getBodyDeclarationsProperty());
    }
    if (listRewriter == null) {
        throw new CoreException(new Status(IStatus.ERROR, ArquillianUIActivator.PLUGIN_ID, IStatus.ERROR,
                "Could not find the type element", null));
    }
    ast = astRoot.getAST();
    ReturnStatement returnStatement;
    if (abstractMethodBindings != null) {
        IMethodBinding abstractMethodBinding = null;
        for (IMethodBinding binding : abstractMethodBindings) {
            if (binding.getName().equals(deploymentMethodName)) {
                abstractMethodBinding = binding;
                break;
            }
        }
        if (abstractMethodBinding == null) {
            message = CANNOT_FIND_A_DEPLOYMENT_METHOD;
            return null;
        }
        deploymentMethod = ast.newMethodDeclaration();
        deploymentMethod.setName(ast.newSimpleName(deploymentMethodName));

        IJavaProject javaProject = abstractMethodBinding.getJavaElement().getJavaProject();
        String archiveTypeName = ArquillianUtility.ORG_JBOSS_SHRINKWRAP_API_SPEC_JAVA_ARCHIVE;
        if (javaProject != null && javaProject.isOpen()) {
            IProject project = javaProject.getProject();
            IFile pomFile = project.getFile(IMavenConstants.POM_FILE_NAME);
            if (pomFile != null && pomFile.exists()) {
                try {
                    IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().create(project,
                            new NullProgressMonitor());
                    MavenProject mavenProject = facade.getMavenProject(new NullProgressMonitor());
                    Model model = mavenProject.getModel();
                    String packaging = model.getPackaging();
                    if (ArquillianConstants.WAR.equals(packaging)) {
                        archiveTypeName = ArquillianUtility.ORG_JBOSS_SHRINKWRAP_API_SPEC_WEB_ARCHIVE;
                    }
                    if (ArquillianConstants.EAR.equals(packaging)) {
                        archiveTypeName = ArquillianUtility.ORG_JBOSS_SHRINKWRAP_API_SPEC_ENTERPRISE_ARCHIVE;
                    }
                    if (ArquillianConstants.RAR.equals(packaging)) {
                        archiveTypeName = ArquillianUtility.ORG_JBOSS_SHRINKWRAP_API_SPEC_RESOURCEADAPTER_ARCHIVE;
                    }
                } catch (CoreException e) {
                    ArquillianUIActivator.log(e);
                }
            }
        }
        int index = archiveTypeName.lastIndexOf("."); //$NON-NLS-1$
        String simpleArchiveName;
        if (index >= 0) {
            simpleArchiveName = archiveTypeName.substring(index + 1);
        } else {
            simpleArchiveName = archiveTypeName;
        }
        SimpleName type2 = ast.newSimpleName(simpleArchiveName);
        importRewrite.addImport(archiveTypeName);
        deploymentMethod.setReturnType2(ast.newSimpleType(type2));
        deploymentMethod.setConstructor(false);
        deploymentMethod.modifiers()
                .addAll(ASTNodeFactory.newModifiers(ast, Modifier.PUBLIC | Modifier.STATIC));

        Annotation marker = rewrite.getAST().newMarkerAnnotation();
        importRewrite.addImport(ArquillianUtility.ORG_JBOSS_ARQUILLIAN_CONTAINER_TEST_API_DEPLOYMENT);
        marker.setTypeName(rewrite.getAST().newSimpleName("Deployment")); //$NON-NLS-1$
        rewrite.getListRewrite(deploymentMethod, MethodDeclaration.MODIFIERS2_PROPERTY).insertFirst(marker,
                null);

        Block body = ast.newBlock();
        deploymentMethod.setBody(body);

        // XXXArchive archive = (XXXArchive) AbstractTest.createDeployment();
        String declaringClassQualifiedName = abstractMethodBinding.getDeclaringClass().getQualifiedName();
        importRewrite.addImport(declaringClassQualifiedName);
        String declaringClassName = abstractMethodBinding.getDeclaringClass().getName();
        MethodInvocation deploymentInvocation = ast.newMethodInvocation();
        deploymentInvocation.setExpression(ast.newName(declaringClassName));
        deploymentInvocation.setName(ast.newSimpleName(deploymentMethodName));
        VariableDeclarationFragment archiveDeclFragment = ast.newVariableDeclarationFragment();
        archiveDeclFragment.setName(ast.newSimpleName(ARCHIVE_VARIABLE));
        ITypeBinding returnType = abstractMethodBinding.getReturnType();
        if (!archiveTypeName.equals(returnType.getQualifiedName())) {
            CastExpression cast = ast.newCastExpression();
            cast.setType(ast.newSimpleType(ast.newName(simpleArchiveName)));
            cast.setExpression(deploymentInvocation);
            archiveDeclFragment.setInitializer(cast);
        } else {
            archiveDeclFragment.setInitializer(deploymentInvocation);
        }
        VariableDeclarationStatement vStatement = ast.newVariableDeclarationStatement(archiveDeclFragment);
        vStatement.setType(ast.newSimpleType(ast.newName(simpleArchiveName)));
        body.statements().add(vStatement);

        //return archive;
        returnStatement = ast.newReturnStatement();
        returnStatement.setExpression(ast.newSimpleName(ARCHIVE_VARIABLE));
        //body.statements().add(returnStatement);
    } else {
        for (MethodDeclaration md : deploymentMethodDeclarations) {
            if (deploymentMethodName.equals(md.getName().getIdentifier())) {
                deploymentMethod = md;
                break;
            }
        }
        if (deploymentMethod == null) {
            message = CANNOT_FIND_A_DEPLOYMENT_METHOD;
            return null;
        }
        returnStatement = getReturnStatement(deploymentMethod);
        ast = deploymentMethod.getAST();
        rewrite = ASTRewrite.create(ast);
    }

    if (returnStatement == null) {
        message = "Cannot find a return statement";
        return null;
    }

    Expression expression = returnStatement.getExpression();

    if (expression instanceof MethodInvocation) {
        int start = expression.getStartPosition();
        int length = expression.getLength();
        selectedExpression = getSelectedExpression(new SourceRange(start, length));
        tempName = ARCHIVE_VARIABLE;
        int i = 0;
        while (!checkTempName(tempName).isOK()) {
            tempName = tempName + i++;
        }
        createAndInsertTempDeclaration(start, length);
        addReplaceExpressionWithTemp();
        createStatements(tempName, className, deploymentMethod, returnStatement, rootEdit, pm);
    }
    if (expression instanceof SimpleName) {
        String name = ((SimpleName) expression).getIdentifier();
        createStatements(name, className, deploymentMethod, returnStatement, rootEdit, pm);
    }

    result.setEdit(rootEdit);
    return result;
}

From source file:org.jboss.tools.ws.creation.core.commands.ImplementationClassCreationCommand.java

License:Open Source License

@SuppressWarnings("unchecked")
protected MethodDeclaration createMethodForImplClass(AST ast, MethodDeclaration inMethod) {

    MethodDeclaration md = ast.newMethodDeclaration();
    md.setConstructor(false);//  w ww  .  j  a  v a2s  . c  o  m
    @SuppressWarnings("rawtypes")
    List modifiers = md.modifiers();
    modifiers.add(ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD));
    md.setName(ast.newSimpleName(inMethod.getName().getFullyQualifiedName()));

    Type sType = copyTypeFromOtherASTNode(ast, inMethod.getReturnType2());
    md.setReturnType2(sType);

    @SuppressWarnings("rawtypes")
    List thrownExceptions = inMethod.thrownExceptions();
    for (Object obj : thrownExceptions) {
        if (obj instanceof SimpleName) {
            SimpleName sname = (SimpleName) obj;
            Name newName = ast.newName(sname.getFullyQualifiedName());
            md.thrownExceptions().add(newName);
        }
    }

    @SuppressWarnings("rawtypes")
    List parameters = inMethod.parameters();

    for (Object obj : parameters) {
        SingleVariableDeclaration implSvd = ast.newSingleVariableDeclaration();
        SingleVariableDeclaration svd = (SingleVariableDeclaration) obj;
        implSvd.setName(ast.newSimpleName(svd.getName().getFullyQualifiedName()));
        implSvd.setType(copyTypeFromOtherASTNode(ast, svd.getType()));
        md.parameters().add(implSvd);
    }

    // create method body
    Block block = ast.newBlock();
    // add log info statement
    // block.statements().add(createLoggerInvokeStatement(ast,
    // md.getName().getFullyQualifiedName()));

    Type returnType = inMethod.getReturnType2();
    ReturnStatement rs = ast.newReturnStatement();

    if (returnType.isPrimitiveType()) {
        if (((PrimitiveType) returnType).getPrimitiveTypeCode().equals(PrimitiveType.BOOLEAN)) {
            BooleanLiteral bl = ast.newBooleanLiteral(false);
            rs.setExpression(bl);
        } else if (!((PrimitiveType) returnType).getPrimitiveTypeCode().equals(PrimitiveType.VOID)) {
            NumberLiteral nl = ast.newNumberLiteral();
            nl.setToken("0"); //$NON-NLS-1$
            rs.setExpression(nl);
        }

    } else if (returnType.isSimpleType()) {
        String typeName = ((SimpleType) returnType).getName().getFullyQualifiedName();
        if ("String".equals(typeName)) { //$NON-NLS-1$

            StringLiteral sl = ast.newStringLiteral();
            sl.setLiteralValue(""); //$NON-NLS-1$
            rs.setExpression(sl);
        } else {
            rs.setExpression(ast.newNullLiteral());
        }

    } else {
        rs.setExpression(ast.newNullLiteral());
    }

    block.statements().add(rs);

    md.setBody(block);

    return md;
}

From source file:org.juniversal.translator.cplusplus.CPlusPlusSourceFileWriter.java

License:Open Source License

/**
 * Add visitors for the different kinds of statements.
 *//*from w  w w.  j  a v  a  2s  .  c o  m*/
private void addStatementWriters() {
    // Block
    addWriter(Block.class, new CPlusPlusASTNodeWriter<Block>(this) {
        @SuppressWarnings("unchecked")
        @Override
        public void write(Block block) {
            matchAndWrite("{");

            boolean firstStatement = true;
            for (Statement statement : (List<Statement>) block.statements()) {
                // If the first statement is a super constructor invocation, we skip it since
                // it's included as part of the method declaration in C++. If a super
                // constructor invocation is a statement other than the first, which it should
                // never be, we let that error out since writeNode won't find a match for it.
                if (firstStatement && statement instanceof SuperConstructorInvocation)
                    setPositionToEndOfNodeSpaceAndComments(statement);
                else {
                    copySpaceAndComments();
                    writeNode(statement);
                }

                firstStatement = false;
            }

            copySpaceAndComments();
            matchAndWrite("}");
        }
    });

    // Empty statement (";")
    addWriter(EmptyStatement.class, new CPlusPlusASTNodeWriter<EmptyStatement>(this) {
        @Override
        public void write(EmptyStatement emptyStatement) {
            matchAndWrite(";");
        }
    });

    // Expression statement
    addWriter(ExpressionStatement.class, new CPlusPlusASTNodeWriter<ExpressionStatement>(this) {
        @Override
        public void write(ExpressionStatement expressionStatement) {
            writeNode(expressionStatement.getExpression());

            copySpaceAndComments();
            matchAndWrite(";");
        }
    });

    // If statement
    addWriter(IfStatement.class, new CPlusPlusASTNodeWriter<IfStatement>(this) {
        @Override
        public void write(IfStatement ifStatement) {
            matchAndWrite("if");
            copySpaceAndComments();

            matchAndWrite("(");
            copySpaceAndComments();

            writeNode(ifStatement.getExpression());
            copySpaceAndComments();

            matchAndWrite(")");
            copySpaceAndComments();

            writeNode(ifStatement.getThenStatement());

            Statement elseStatement = ifStatement.getElseStatement();
            if (elseStatement != null) {
                copySpaceAndComments();

                matchAndWrite("else");
                copySpaceAndComments();

                writeNode(elseStatement);
            }
        }
    });

    // While statement
    addWriter(WhileStatement.class, new CPlusPlusASTNodeWriter<WhileStatement>(this) {
        @Override
        public void write(WhileStatement whileStatement) {
            matchAndWrite("while");

            copySpaceAndComments();
            matchAndWrite("(");

            copySpaceAndComments();
            writeNode(whileStatement.getExpression());

            copySpaceAndComments();
            matchAndWrite(")");

            copySpaceAndComments();
            writeNode(whileStatement.getBody());
        }
    });

    // Do while statement
    addWriter(DoStatement.class, new CPlusPlusASTNodeWriter<DoStatement>(this) {
        @Override
        public void write(DoStatement doStatement) {
            matchAndWrite("do");

            copySpaceAndComments();
            writeNode(doStatement.getBody());

            copySpaceAndComments();
            matchAndWrite("while");

            copySpaceAndComments();
            matchAndWrite("(");

            copySpaceAndComments();
            writeNode(doStatement.getExpression());

            copySpaceAndComments();
            matchAndWrite(")");

            copySpaceAndComments();
            matchAndWrite(";");
        }
    });

    // Continue statement
    addWriter(ContinueStatement.class, new CPlusPlusASTNodeWriter<ContinueStatement>(this) {
        @Override
        public void write(ContinueStatement continueStatement) {
            if (continueStatement.getLabel() != null)
                throw sourceNotSupported(
                        "continue statement with a label isn't supported as that construct doesn't exist in C++; change the code to not use a label");

            matchAndWrite("continue");

            copySpaceAndComments();
            matchAndWrite(";");
        }
    });

    // Break statement
    addWriter(BreakStatement.class, new CPlusPlusASTNodeWriter<BreakStatement>(this) {
        @Override
        public void write(BreakStatement breakStatement) {
            if (breakStatement.getLabel() != null)
                throw sourceNotSupported(
                        "break statement with a label isn't supported as that construct doesn't exist in C++; change the code to not use a label");

            matchAndWrite("break");

            copySpaceAndComments();
            matchAndWrite(";");
        }
    });

    // For statement
    addWriter(ForStatement.class, new ForStatementWriter(this));

    // Return statement
    addWriter(ReturnStatement.class, new CPlusPlusASTNodeWriter<ReturnStatement>(this) {
        @Override
        public void write(ReturnStatement returnStatement) {
            matchAndWrite("return");

            Expression expression = returnStatement.getExpression();
            if (expression != null) {
                copySpaceAndComments();
                writeNode(returnStatement.getExpression());
            }

            copySpaceAndComments();
            matchAndWrite(";");
        }
    });

    // Local variable declaration statement
    addWriter(VariableDeclarationStatement.class, new VariableDeclarationWriter(this));

    // Throw statement
    addWriter(ThrowStatement.class, new CPlusPlusASTNodeWriter<ThrowStatement>(this) {
        @Override
        public void write(ThrowStatement throwStatement) {
            matchAndWrite("throw");

            copySpaceAndComments();
            writeNode(throwStatement.getExpression());

            copySpaceAndComments();
            matchAndWrite(";");
        }
    });

    // Delegating constructor invocation
    addWriter(ConstructorInvocation.class, new CPlusPlusASTNodeWriter(this) {
        @Override
        public void write(ASTNode node) {
            throw sourceNotSupported(
                    "Delegating constructors aren't currently supported; for now you have to change the code to not use them (e.g. by adding an init method)");
        }
    });
}

From source file:org.juniversal.translator.cplusplus.MethodDeclarationWriter.java

License:Open Source License

@SuppressWarnings("unchecked")
private void writeSuperConstructorInvocation(MethodDeclaration methodDeclaration) {
    Block body = methodDeclaration.getBody();
    if (body == null)
        return;//from w w w .  j a  v  a  2  s. c om

    SuperConstructorInvocation superConstructorInvocation = null;
    for (Statement statement : (List<Statement>) body.statements()) {
        if (statement instanceof SuperConstructorInvocation)
            superConstructorInvocation = (SuperConstructorInvocation) statement;
        break;
    }

    if (superConstructorInvocation == null)
        return;

    int originalPosition = getPosition();
    setPositionToStartOfNode(superConstructorInvocation);

    // TODO: Support <expression>.super
    if (superConstructorInvocation.getExpression() != null)
        throw sourceNotSupported("<expression>.super constructor invocation syntax not currently supported");

    // TODO: Support type arguments here
    if (!superConstructorInvocation.typeArguments().isEmpty())
        throw sourceNotSupported("super constructor invocation with type arguments not currently supported");

    write(" : ");
    matchAndWrite("super");
    copySpaceAndComments();
    matchAndWrite("(");

    List<?> arguments = superConstructorInvocation.arguments();

    boolean first = true;
    for (Expression argument : (List<Expression>) arguments) {
        if (!first) {
            copySpaceAndComments();
            matchAndWrite(",");
        }

        copySpaceAndComments();
        writeNode(argument);

        first = false;
    }

    copySpaceAndComments();
    matchAndWrite(")");

    write(" ");

    setPosition(originalPosition);
}

From source file:org.juniversal.translator.cplusplus.WriteCPPTest.java

License:Open Source License

public void testWriteStatement(String javaStatement, String expectedCPPStatement) {
    String java = "class TestClass{ void testMethod() {\n" + javaStatement + "\n} }";

    CompilationUnit compilationUnit = parseCompilationUnit(java);

    Block block = getFirstMethodBlock(compilationUnit);
    ASTNode firstStatement = (ASTNode) block.statements().get(0);

    testWriteNode(firstStatement, java, compilationUnit, 4, expectedCPPStatement);
}