Example usage for org.eclipse.jdt.core.dom.rewrite ListRewrite getOriginalList

List of usage examples for org.eclipse.jdt.core.dom.rewrite ListRewrite getOriginalList

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom.rewrite ListRewrite getOriginalList.

Prototype

public List getOriginalList() 

Source Link

Document

Returns the original nodes in the list property managed by this rewriter.

Usage

From source file:edu.illinois.compositerefactorings.refactorings.NewClassCreator.java

License:Open Source License

public List<ResourceChange> createTopLevelParameterObject() throws CoreException {
    List<ResourceChange> changes = new ArrayList<ResourceChange>();
    ICompilationUnit unit = getPackageFragment()
            .getCompilationUnit(getClassName() + JavaModelUtil.DEFAULT_CU_SUFFIX);
    Assert.isTrue(!unit.exists());/* w  ww . j  a v a  2 s  . co  m*/
    IJavaProject javaProject = unit.getJavaProject();
    ICompilationUnit workingCopy = unit.getWorkingCopy(null);

    try {
        // create stub with comments and dummy type
        String lineDelimiter = StubUtility.getLineDelimiterUsed(javaProject);
        String fileComment = getFileComment(workingCopy, lineDelimiter);
        String typeComment = getTypeComment(workingCopy, lineDelimiter);
        String content = CodeGeneration.getCompilationUnitContent(workingCopy, fileComment, typeComment,
                "class " + getClassName() + "{}", lineDelimiter); //$NON-NLS-1$ //$NON-NLS-2$
        workingCopy.getBuffer().setContents(content);

        CompilationUnitRewrite cuRewrite = new CompilationUnitRewrite(workingCopy);
        ASTRewrite rewriter = cuRewrite.getASTRewrite();
        CompilationUnit root = cuRewrite.getRoot();
        AST ast = cuRewrite.getAST();
        ImportRewrite importRewrite = cuRewrite.getImportRewrite();

        if (fSuperclassType != null) {
            importRewrite.addImport(fSuperclassType.resolveBinding());
        }

        // retrieve&replace dummy type with real class
        ListRewrite types = rewriter.getListRewrite(root, CompilationUnit.TYPES_PROPERTY);
        ASTNode dummyType = (ASTNode) types.getOriginalList().get(0);
        TypeDeclaration classDeclaration = createClassDeclaration(getClassName(), cuRewrite);
        classDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD));
        Javadoc javadoc = (Javadoc) dummyType.getStructuralProperty(TypeDeclaration.JAVADOC_PROPERTY);
        rewriter.set(classDeclaration, TypeDeclaration.JAVADOC_PROPERTY, javadoc, null);
        types.replace(dummyType, classDeclaration, null);

        // Apply rewrites and discard workingcopy
        // Using CompilationUnitRewrite.createChange() leads to strange
        // results
        String charset = ResourceUtil.getFile(unit).getCharset(false);
        Document document = new Document(content);
        try {
            rewriter.rewriteAST().apply(document);
            TextEdit rewriteImports = importRewrite.rewriteImports(null);
            rewriteImports.apply(document);
        } catch (BadLocationException e) {
            throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(),
                    RefactoringCoreMessages.IntroduceParameterObjectRefactoring_parameter_object_creation_error,
                    e));
        }
        String docContent = document.get();
        CreateCompilationUnitChange compilationUnitChange = new CreateCompilationUnitChange(unit, docContent,
                charset);
        changes.add(compilationUnitChange);
    } finally {
        workingCopy.discardWorkingCopy();
    }
    return changes;
}

From source file:lang.java.jdt.internal.UnqualifyTypeNames.java

License:Open Source License

private void visitCompilationUnit() {
    ICompilationUnit icu = JavaCore.createCompilationUnitFrom(file);

    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setResolveBindings(true);/*from  w ww.j a v a2 s .c o m*/
    parser.setSource(icu);

    CompilationUnit cu = (CompilationUnit) parser.createAST(null);

    IProblem[] problems = cu.getProblems();
    for (int i = 0; i < problems.length; i++) {
        if (problems[i].isError()) {
            int offset = problems[i].getSourceStart();
            int length = problems[i].getSourceEnd() - offset;
            int sl = problems[i].getSourceLineNumber();
            ISourceLocation pos = VF.sourceLocation(loc.getURI(), offset, length, sl, sl, 0, 0);
            throw new Throw(VF.string("Error(s) in compilation unit: " + problems[i].getMessage()), pos, null);
        }
    }

    // Figure out which imports we need to keep and/or need to add
    cu.accept(new GatherUsedPackages());
    calculateImportsToAdd();

    // Now, start the rewrite process, first with the imports, then with the various
    // types found in the code in the file
    rewriter = ASTRewrite.create(cu.getAST());
    ListRewrite lrw = rewriter.getListRewrite(cu, CompilationUnit.IMPORTS_PROPERTY);

    // Throw away the current imports
    List<?> imps = lrw.getOriginalList();
    for (int i = 0; i < imps.size(); ++i) {
        lrw.remove((ASTNode) imps.get(i), null);
    }

    // Add the statically imported types back in
    for (String s : importedFullNames) {
        ImportDeclaration id = cu.getAST().newImportDeclaration();
        id.setName(cu.getAST().newName(s));
        id.setStatic(true);
        lrw.insertLast(id, null);
    }

    // Add the new imports back in
    String[] whatever = { "A" };
    String[] sortedImports = importsToAdd.toArray(whatever);
    Arrays.sort(sortedImports);

    for (String s : sortedImports) {
        ImportDeclaration id = cu.getAST().newImportDeclaration();
        id.setName(cu.getAST().newName(s));
        id.setStatic(false);
        lrw.insertLast(id, null);
    }

    cu.accept(this);

    try {
        IPath path = file.getFullPath();

        ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager();
        bufferManager.connect(path, LocationKind.IFILE, new NullProgressMonitor());

        ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(path, LocationKind.IFILE);

        IDocument doc = textFileBuffer.getDocument();
        TextEdit te = rewriter.rewriteAST(doc, null);
        te.apply(doc);
        textFileBuffer.commit(new NullProgressMonitor(), true);

        bufferManager.disconnect(path, LocationKind.IFILE, new NullProgressMonitor());
    } catch (CoreException e) {
        throw new Throw(VF.string("Error(s) in rewrite of compilation unit: " + e.getMessage()), loc, null);
    } catch (MalformedTreeException e) {
        throw new Throw(VF.string("Error(s) in rewrite of compilation unit: " + e.getMessage()), loc, null);
    } catch (BadLocationException e) {
        throw new Throw(VF.string("Error(s) in rewrite of compilation unit: " + e.getMessage()), loc, null);
    }
}

From source file:nz.ac.massey.cs.care.refactoring.executers.IntroduceFactoryRefactoring.java

License:Open Source License

/**
 * Updates the constructor call./*  ww  w  .ja  v  a2 s  .c  o m*/
 *
 * @param ctorCall the ClassInstanceCreation to be marked as replaced
 * @param unitRewriter the AST rewriter
 * @param gd the edit group to use
 */
private void rewriteFactoryMethodCall(ClassInstanceCreation ctorCall, ASTRewrite unitRewriter,
        TextEditGroup gd) {
    AST ast = unitRewriter.getAST();
    MethodInvocation factoryMethodCall = ast.newMethodInvocation();

    ASTNode ctorCallParent = ctorCall.getParent();
    StructuralPropertyDescriptor ctorCallLocation = ctorCall.getLocationInParent();
    if (ctorCallLocation instanceof ChildListPropertyDescriptor) {
        ListRewrite ctorCallParentListRewrite = unitRewriter.getListRewrite(ctorCallParent,
                (ChildListPropertyDescriptor) ctorCallLocation);
        int index = ctorCallParentListRewrite.getOriginalList().indexOf(ctorCall);
        ctorCall = (ClassInstanceCreation) ctorCallParentListRewrite.getRewrittenList().get(index);
    } else {
        ctorCall = (ClassInstanceCreation) unitRewriter.get(ctorCallParent, ctorCallLocation);
    }

    ListRewrite actualFactoryArgs = unitRewriter.getListRewrite(factoryMethodCall,
            MethodInvocation.ARGUMENTS_PROPERTY);
    ListRewrite actualCtorArgs = unitRewriter.getListRewrite(ctorCall,
            ClassInstanceCreation.ARGUMENTS_PROPERTY);

    // Need to use a qualified name for the factory method if we're not
    // in the context of the class holding the factory.
    AbstractTypeDeclaration callOwner = (AbstractTypeDeclaration) ASTNodes.getParent(ctorCall,
            AbstractTypeDeclaration.class);
    ITypeBinding callOwnerBinding = callOwner.resolveBinding();

    if (callOwnerBinding == null
            || !Bindings.equals(callOwner.resolveBinding(), fFactoryOwningClass.resolveBinding())) {
        String qualifier = fImportRewriter.addImport(fFactoryOwningClass.resolveBinding());
        factoryMethodCall.setExpression(ASTNodeFactory.newName(ast, qualifier));
    }

    factoryMethodCall.setName(ast.newSimpleName(fNewMethodName));

    List<Expression> actualCtorArgsList = actualCtorArgs.getRewrittenList();
    for (int i = 0; i < actualCtorArgsList.size(); i++) {
        Expression actualCtorArg = actualCtorArgsList.get(i);

        ASTNode movedArg;
        if (ASTNodes.isExistingNode(actualCtorArg)) {
            movedArg = unitRewriter.createMoveTarget(actualCtorArg);
        } else {
            unitRewriter.remove(actualCtorArg, null);
            movedArg = actualCtorArg;
        }

        actualFactoryArgs.insertLast(movedArg, gd);
    }

    unitRewriter.replace(ctorCall, factoryMethodCall, gd);
}

From source file:org.eclipseguru.gwt.core.internal.codegen.AsyncServiceCodeGenerator.java

License:Open Source License

private void updateJavadoc(final IType createdType, final IProgressMonitor monitor)
        throws JavaModelException, CoreException, ValidateEditException {
    final CompilationUnit cu = createdType.getCompilationUnit().reconcile(AST.JLS3, true, null, null);
    final ASTRewrite cuRewrite = ASTRewrite.create(cu.getAST());
    final TextEditGroup textEditGroup = new TextEditGroup(
            "Updating JavaDoc of interface " + createdType.getElementName());

    // find remote service type and rewrite it
    final ListRewrite typeRewrite = cuRewrite.getListRewrite(cu, CompilationUnit.TYPES_PROPERTY);
    for (final Iterator stream = typeRewrite.getOriginalList().iterator(); stream.hasNext();) {
        final TypeDeclaration td = (TypeDeclaration) stream.next();
        if (td.getName().getIdentifier().equals(getTypeNameWithoutParameters())) {
            updateTypeJavaDoc(cuRewrite, td, textEditGroup);
        }//  w w  w. j av  a 2  s .c o m
    }

    // apply edit
    final TextEdit edit = cuRewrite.rewriteAST();
    JavaModelUtil.applyEdit(createdType.getCompilationUnit(), edit, false,
            ProgressUtil.subProgressMonitor(monitor, 1));
}

From source file:org.eclipseguru.gwt.core.internal.codegen.AsyncServiceCodeGenerator.java

License:Open Source License

private void updateMethodJavadoc(final ASTRewrite cuRewrite, final MethodDeclaration md,
        final TextEditGroup textEditGroup) {
    // create javadoc
    final Javadoc javadoc = createJavadocIfNecessary(cuRewrite, md, textEditGroup);
    final ListRewrite javadocRewrite = cuRewrite.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);

    // find last @param tag and remove @throws tags and @gwt.typeArgs tags
    ASTNode lastParamPos = null;/*from  ww w  .  jav a 2 s. c om*/
    boolean hasReturnTag = false;
    for (final Iterator stream = javadocRewrite.getOriginalList().iterator(); stream.hasNext();) {
        final TagElement element = (TagElement) stream.next();
        if (null != element.getTagName()) {
            final String tagName = element.getTagName();
            if (tagName.equals(TAG_PARAM)) {
                lastParamPos = element;
            } else if (tagName.equals(TAG_RETURN) && !element.fragments().isEmpty()) {
                hasReturnTag = true;
                cuRewrite.set(element, TagElement.TAG_NAME_PROPERTY, TAG_GWT_CALLBACK_RETURN, textEditGroup);
            } else if (tagName.equals(TAG_THROWS) || tagName.equals(TAG_GWT_TYPE_ARGS)) {
                javadocRewrite.remove(element, textEditGroup);
            }
        }
    }

    // create @param callback
    final TagElement callbackParamTag = cuRewrite.getAST().newTagElement();
    if (null != lastParamPos) {
        javadocRewrite.insertAfter(callbackParamTag, lastParamPos, textEditGroup);
    } else {
        javadocRewrite.insertLast(callbackParamTag, textEditGroup);
    }
    cuRewrite.set(callbackParamTag, TagElement.TAG_NAME_PROPERTY, TAG_PARAM, textEditGroup);
    final ListRewrite tagRewrite = cuRewrite.getListRewrite(callbackParamTag, TagElement.FRAGMENTS_PROPERTY);
    final TextElement space = cuRewrite.getAST().newTextElement();
    tagRewrite.insertFirst(space, textEditGroup);
    final SimpleName callbackName = cuRewrite.getAST().newSimpleName(CALLBACK);
    tagRewrite.insertAfter(callbackName, space, textEditGroup);
    final TextElement callbackDescription = cuRewrite.getAST().newTextElement();
    callbackDescription.setText("the callback that will be called to receive the return value");
    tagRewrite.insertAfter(callbackDescription, callbackName, textEditGroup);
    if (hasReturnTag) {
        final TextElement text = cuRewrite.getAST().newTextElement();
        text.setText(NLS.bind("(see <code>{0}</code> tag)", TAG_GWT_CALLBACK_RETURN));
        tagRewrite.insertAfter(text, callbackDescription, textEditGroup);
    }

    // add @generated tag
    javadocRewrite.insertLast(createGeneratedTagForMethod(cuRewrite), textEditGroup);
}

From source file:org.eclipseguru.gwt.core.internal.codegen.AsyncServiceCodeGenerator.java

License:Open Source License

private void updateTypeJavaDoc(final ASTRewrite cuRewrite, final TypeDeclaration td,
        final TextEditGroup textEditGroup) {
    // add @generated tag to JavaDoc
    final Javadoc javadoc = createJavadocIfNecessary(cuRewrite, td, textEditGroup);
    final ListRewrite javadocRewrite = cuRewrite.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
    javadocRewrite.insertLast(createGeneratedTagForType(cuRewrite), textEditGroup);

    // rewrite methods
    final ListRewrite bodyRewrite = cuRewrite.getListRewrite(td, TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
    for (final Iterator stream = bodyRewrite.getOriginalList().iterator(); stream.hasNext();) {
        final ASTNode node = (ASTNode) stream.next();
        switch (node.getNodeType()) {
        case ASTNode.METHOD_DECLARATION:
            // rewrite method
            updateMethodJavadoc(cuRewrite, (MethodDeclaration) node, textEditGroup);
            break;
        }/*from  w  ww . ja va  2 s  . c  o m*/
    }
}

From source file:org.evosuite.eclipse.quickfixes.ResolutionMarkerThrowsException.java

License:Open Source License

@Override
public void run(IMarker marker) {
    // TODO Auto-generated method stub
    IResource res = marker.getResource();

    try {//ww w.ja v a2s  .  c om
        String markerMessage = (String) marker.getAttribute(IMarker.MESSAGE);
        String exception = markerMessage.split(" ")[0];
        String[] exceptionPackageArray = exception.split("\\.");
        String exceptionPackage = "";
        for (int i = 0; i < exceptionPackageArray.length - 1; i++) {
            exceptionPackage += exceptionPackageArray[i] + ".";
        }
        exception = exception.substring(exceptionPackage.length());

        System.out.println("Package: " + exceptionPackage + ", Exception: " + exception);

        ICompilationUnit icomp = CompilationUnitManager.getICompilationUnit(res);

        CompilationUnit compunit = CompilationUnitManager.getCompilationUnit(res);

        int position = marker.getAttribute(IMarker.CHAR_START, 0) + 1;
        if (position == 1) {
            int line = marker.getAttribute(IMarker.LINE_NUMBER, 0);
            position = compunit.getPosition(line, 0);
        }

        AST ast = compunit.getAST();
        ASTRewrite rewriter = ASTRewrite.create(ast);

        IJavaElement element = icomp.getElementAt(position);
        IJavaElement method = getMethod(element);

        //         TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);
        TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);

        MethodDeclaration md = td.getMethods()[0];

        int counter = 1;
        while (!md.getName().getFullyQualifiedName().equals(method.getElementName())
                && counter < td.getMethods().length) {
            md = td.getMethods()[counter];
            System.out.println(md.getName().getFullyQualifiedName() + " " + method.getElementName());
            counter++;
        }

        ListRewrite lr = rewriter.getListRewrite(md, MethodDeclaration.THROWN_EXCEPTIONS_PROPERTY);
        ImportDeclaration id = ast.newImportDeclaration();
        id.setName(ast.newName(exceptionPackage + exception));
        ListRewrite lrClass = rewriter.getListRewrite(compunit, CompilationUnit.TYPES_PROPERTY);
        lrClass.insertAt(id, 0, null);

        Statement s = (Statement) rewriter.createStringPlaceholder(exception, ASTNode.EMPTY_STATEMENT);

        lr.insertAt(s, 0, null);
        System.out.println("MD: " + md.getName() + "\nList: " + lr.getOriginalList());

        ITextFileBufferManager bm = FileBuffers.getTextFileBufferManager();
        IPath path = compunit.getJavaElement().getPath();
        try {
            bm.connect(path, null, null);
            ITextFileBuffer textFileBuffer = bm.getTextFileBuffer(path, null);
            IDocument document = textFileBuffer.getDocument();
            TextEdit edits = rewriter.rewriteAST(document, null);
            edits.apply(document);
            textFileBuffer.commit(null, false);

        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedTreeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadLocationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                bm.disconnect(path, null, null);
            } catch (CoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } // (4)
        }
        System.out
                .println(lr.getRewrittenList() + "\nPosition: " + position + "\nEdits: " + rewriter.toString());
    } catch (JavaModelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (CoreException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

}

From source file:org.evosuite.eclipse.quickfixes.ResolutionMarkerTryBlock.java

License:Open Source License

@Override
public void run(IMarker marker) {
    // TODO Auto-generated method stub
    IResource res = marker.getResource();

    try {//from w w  w  . j a va 2s .c om
        String markerMessage = (String) marker.getAttribute(IMarker.MESSAGE);
        String exception = markerMessage.split(" ")[0];
        String[] exceptionPackageArray = exception.split("\\.");
        String exceptionPackage = "";
        for (int i = 0; i < exceptionPackageArray.length - 1; i++) {
            exceptionPackage += exceptionPackageArray[i] + ".";
        }
        exception = exception.substring(exceptionPackage.length());

        System.out.println("Package: " + exceptionPackage + ", Exception: " + exception);

        ICompilationUnit icomp = CompilationUnitManager.getICompilationUnit(res);

        CompilationUnit compunit = CompilationUnitManager.getCompilationUnit(res);

        int position = marker.getAttribute(IMarker.CHAR_START, 0) + 1;
        int line = marker.getAttribute(IMarker.LINE_NUMBER, 0);
        if (position == 1) {
            position = compunit.getPosition(line, 0);
        }

        AST ast = compunit.getAST();
        ASTRewrite rewriter = ASTRewrite.create(ast);

        IJavaElement element = icomp.getElementAt(position);
        IJavaElement method = getMethod(element);

        // TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);
        TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);

        MethodDeclaration md = td.getMethods()[0];

        int counter = 1;
        while (!md.getName().getFullyQualifiedName().equals(method.getElementName())
                && counter < td.getMethods().length) {
            md = td.getMethods()[counter];
            System.out.println(md.getName().getFullyQualifiedName() + " " + method.getElementName());
            counter++;
        }

        Block block = md.getBody();

        ListRewrite lr = rewriter.getListRewrite(block, Block.STATEMENTS_PROPERTY);
        ImportDeclaration id = ast.newImportDeclaration();
        id.setName(ast.newName(exceptionPackage + exception));
        ListRewrite lrClass = rewriter.getListRewrite(compunit, CompilationUnit.TYPES_PROPERTY);
        lrClass.insertAt(id, 0, null);
        ASTNode currentNode = null;
        List<ASTNode> list = new ArrayList<ASTNode>();
        for (Object o : lr.getOriginalList()) {
            if (o instanceof ASTNode) {
                list.add((ASTNode) o);
            }
        }
        for (int i = 0; i < list.size(); i++) {
            ASTNode node = list.get(i);
            int nodeLine = compunit.getLineNumber(node.getStartPosition());
            System.out.println(line + " " + nodeLine);
            if (line == nodeLine) {
                currentNode = node;
                break;
            }
            List childrenList = node.structuralPropertiesForType();
            for (int j = 0; j < childrenList.size(); j++) {
                StructuralPropertyDescriptor curr = (StructuralPropertyDescriptor) childrenList.get(j);
                Object child = node.getStructuralProperty(curr);
                if (child instanceof List) {
                    for (Object ob : (List) child) {
                        if (ob instanceof ASTNode) {
                            list.add((ASTNode) ob);
                        }
                    }
                } else if (child instanceof ASTNode) {
                    list.add((ASTNode) child);
                }
            }
        }

        TryStatement ts = ast.newTryStatement();
        Statement emptyStatement = (Statement) rewriter.createStringPlaceholder("\n", ASTNode.EMPTY_STATEMENT);
        Statement emptyStatement2 = (Statement) rewriter.createStringPlaceholder("\n\t",
                ASTNode.EMPTY_STATEMENT);
        Block b2 = ast.newBlock();
        b2.statements().add(0, ASTNode.copySubtree(b2.getAST(), currentNode));
        b2.statements().add(1, emptyStatement);
        b2.statements().add(0, emptyStatement2);
        ts.setBody(b2);
        CatchClause cc = ast.newCatchClause();
        SingleVariableDeclaration svd = ast.newSingleVariableDeclaration();
        svd.setName(ast.newSimpleName("e"));
        Type type = ast.newSimpleType(ast.newName(exception));
        svd.setType(type);
        cc.setException(svd);
        Block b3 = ast.newBlock();
        Statement printStatement = (Statement) rewriter.createStringPlaceholder("e.printStackTrace();",
                ASTNode.EMPTY_STATEMENT);
        b3.statements().add(0, printStatement);
        cc.setBody(b3);
        ListRewrite parentList = rewriter.getListRewrite(currentNode.getParent(), Block.STATEMENTS_PROPERTY);
        parentList.replace(currentNode, ts, null);
        parentList.insertAfter(cc, ts, null);

        ITextFileBufferManager bm = FileBuffers.getTextFileBufferManager();
        IPath path = compunit.getJavaElement().getPath();
        try {
            bm.connect(path, null, null);
            ITextFileBuffer textFileBuffer = bm.getTextFileBuffer(path, null);
            IDocument document = textFileBuffer.getDocument();
            TextEdit edits = rewriter.rewriteAST(document, null);
            edits.apply(document);
            textFileBuffer.commit(null, false);

        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedTreeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadLocationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                bm.disconnect(path, null, null);
            } catch (CoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } // (4)
        }
        marker.delete();
    } catch (JavaModelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (CoreException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

}

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;
    }//w  w  w  .  j av a  2 s  . c o  m
    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;
}