Example usage for org.eclipse.jdt.core ICompilationUnit isWorkingCopy

List of usage examples for org.eclipse.jdt.core ICompilationUnit isWorkingCopy

Introduction

In this page you can find the example usage for org.eclipse.jdt.core ICompilationUnit isWorkingCopy.

Prototype

@Override
boolean isWorkingCopy();

Source Link

Document

Returns whether this element is a working copy.

Usage

From source file:com.android.ide.eclipse.adt.internal.refactoring.core.FixImportsJob.java

License:Open Source License

@Override
public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
    if (mJavaPackage == null || mAndroidManifest == null || !mAndroidManifest.exists()) {
        return Status.CANCEL_STATUS;
    }/*from   w w w  . jav a 2  s.c om*/
    IProject project = mAndroidManifest.getProject();
    IJavaProject javaProject = JavaCore.create(project);
    if (javaProject == null || !javaProject.isOpen()) {
        return Status.CANCEL_STATUS;
    }

    project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);

    IMarker[] markers = project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE);
    for (int i = 0; i < markers.length; i++) {
        IMarker marker = markers[i];
        IResource resource = marker.getResource();
        try {
            IJavaElement element = JavaCore.create(resource);
            if (element != null && (element instanceof ICompilationUnit)) {
                final ICompilationUnit cu = (ICompilationUnit) element;
                IPackageFragment packageFragment = (IPackageFragment) cu
                        .getAncestor(IJavaElement.PACKAGE_FRAGMENT);
                if (packageFragment != null && packageFragment.exists()) {
                    String packageName = packageFragment.getElementName();
                    if (packageName != null && packageName.startsWith(mJavaPackage)) {
                        CompilationUnit astRoot = SharedASTProvider.getAST(cu,
                                SharedASTProvider.WAIT_ACTIVE_ONLY, null);
                        CodeGenerationSettings settings = JavaPreferencesSettings
                                .getCodeGenerationSettings(cu.getJavaProject());
                        final boolean hasAmbiguity[] = new boolean[] { false };
                        IChooseImportQuery query = new IChooseImportQuery() {
                            public TypeNameMatch[] chooseImports(TypeNameMatch[][] openChoices,
                                    ISourceRange[] ranges) {
                                hasAmbiguity[0] = true;
                                return new TypeNameMatch[0];
                            }
                        };
                        final OrganizeImportsOperation op = new OrganizeImportsOperation(cu, astRoot,
                                settings.importIgnoreLowercase, !cu.isWorkingCopy(), true, query);
                        Display.getDefault().asyncExec(new Runnable() {

                            public void run() {
                                try {
                                    IProgressService progressService = PlatformUI.getWorkbench()
                                            .getProgressService();
                                    progressService.run(true, true,
                                            new WorkbenchRunnableAdapter(op, op.getScheduleRule()));
                                    IEditorPart openEditor = EditorUtility.isOpenInEditor(cu);
                                    if (openEditor != null) {
                                        openEditor.doSave(monitor);
                                    }
                                } catch (Throwable e) {
                                    RefactoringUtil.log(e);
                                }
                            }
                        });

                    }
                }
            }
        } catch (Throwable e) {
            RefactoringUtil.log(e);
        }
    }
    return Status.OK_STATUS;
}

From source file:com.android.ide.eclipse.adt.internal.refactorings.core.FixImportsJob.java

License:Open Source License

@Override
public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
    if (mJavaPackage == null || mAndroidManifest == null || !mAndroidManifest.exists()) {
        return Status.CANCEL_STATUS;
    }//  ww w.ja v a2  s  .c  o m
    IProject project = mAndroidManifest.getProject();
    IJavaProject javaProject = JavaCore.create(project);
    if (javaProject == null || !javaProject.isOpen()) {
        return Status.CANCEL_STATUS;
    }

    project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);

    IMarker[] markers = project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE);
    for (int i = 0; i < markers.length; i++) {
        IMarker marker = markers[i];
        IResource resource = marker.getResource();
        try {
            IJavaElement element = JavaCore.create(resource);
            if (element != null && (element instanceof ICompilationUnit)) {
                final ICompilationUnit cu = (ICompilationUnit) element;
                IPackageFragment packageFragment = (IPackageFragment) cu
                        .getAncestor(IJavaElement.PACKAGE_FRAGMENT);
                if (packageFragment != null && packageFragment.exists()) {
                    String packageName = packageFragment.getElementName();
                    if (packageName != null && packageName.startsWith(mJavaPackage)) {
                        CompilationUnit astRoot = SharedASTProvider.getAST(cu,
                                SharedASTProvider.WAIT_ACTIVE_ONLY, null);
                        CodeGenerationSettings settings = JavaPreferencesSettings
                                .getCodeGenerationSettings(cu.getJavaProject());
                        final boolean hasAmbiguity[] = new boolean[] { false };
                        IChooseImportQuery query = new IChooseImportQuery() {
                            @Override
                            public TypeNameMatch[] chooseImports(TypeNameMatch[][] openChoices,
                                    ISourceRange[] ranges) {
                                hasAmbiguity[0] = true;
                                return new TypeNameMatch[0];
                            }
                        };
                        final OrganizeImportsOperation op = new OrganizeImportsOperation(cu, astRoot,
                                settings.importIgnoreLowercase, !cu.isWorkingCopy(), true, query);
                        Display.getDefault().asyncExec(new Runnable() {

                            @Override
                            public void run() {
                                try {
                                    IProgressService progressService = PlatformUI.getWorkbench()
                                            .getProgressService();
                                    progressService.run(true, true,
                                            new WorkbenchRunnableAdapter(op, op.getScheduleRule()));
                                    IEditorPart openEditor = EditorUtility.isOpenInEditor(cu);
                                    if (openEditor != null) {
                                        openEditor.doSave(monitor);
                                    }
                                } catch (Throwable e) {
                                    RefactoringUtil.log(e);
                                }
                            }
                        });

                    }
                }
            }
        } catch (Throwable e) {
            RefactoringUtil.log(e);
        }
    }
    return Status.OK_STATUS;
}

From source file:com.codenvy.ide.ext.java.server.internal.core.NameLookup.java

License:Open Source License

/**
 * Find type. Considering secondary types and waiting for indexes depends on given corresponding parameters.
 *//*from  w  ww  .  ja  va 2s.c om*/
public Answer findType(String typeName, String packageName, boolean partialMatch, int acceptFlags,
        boolean considerSecondaryTypes, boolean waitForIndexes, boolean checkRestrictions,
        IProgressMonitor monitor) {
    if (packageName == null || packageName.length() == 0) {
        packageName = IPackageFragment.DEFAULT_PACKAGE_NAME;
    } else if (typeName.length() > 0 && ScannerHelper.isLowerCase(typeName.charAt(0))) {
        // see if this is a known package and not a type
        if (findPackageFragments(packageName + "." + typeName, false) != null) //$NON-NLS-1$
            return null;
    }

    // Look for concerned package fragments
    JavaElementRequestor elementRequestor = new JavaElementRequestor();
    seekPackageFragments(packageName, false, elementRequestor);
    IPackageFragment[] packages = elementRequestor.getPackageFragments();

    // Try to find type in package fragments list
    IType type = null;
    int length = packages.length;
    HashSet projects = null;
    IJavaProject javaProject = null;
    Answer suggestedAnswer = null;
    for (int i = 0; i < length; i++) {
        type = findType(typeName, packages[i], partialMatch, acceptFlags, waitForIndexes,
                considerSecondaryTypes);
        if (type != null) {
            AccessRestriction accessRestriction = null;
            if (checkRestrictions) {
                accessRestriction = getViolatedRestriction(typeName, packageName, type, accessRestriction);
            }
            Answer answer = new Answer(type, accessRestriction);
            if (!answer.ignoreIfBetter()) {
                if (answer.isBetter(suggestedAnswer))
                    return answer;
            } else if (answer.isBetter(suggestedAnswer))
                // remember suggestion and keep looking
                suggestedAnswer = answer;
        } else if (suggestedAnswer == null && considerSecondaryTypes) {
            if (javaProject == null) {
                javaProject = packages[i].getJavaProject();
            } else if (projects == null) {
                if (!javaProject.equals(packages[i].getJavaProject())) {
                    projects = new HashSet(3);
                    projects.add(javaProject);
                    projects.add(packages[i].getJavaProject());
                }
            } else {
                projects.add(packages[i].getJavaProject());
            }
        }
    }
    if (suggestedAnswer != null)
        // no better answer was found
        return suggestedAnswer;

    // If type was not found, try to find it as secondary in source folders
    if (considerSecondaryTypes && javaProject != null) {
        if (projects == null) {
            type = findSecondaryType(packageName, typeName, javaProject, waitForIndexes, monitor);
        } else {
            Iterator allProjects = projects.iterator();
            while (type == null && allProjects.hasNext()) {
                type = findSecondaryType(packageName, typeName, (IJavaProject) allProjects.next(),
                        waitForIndexes, monitor);
            }
        }
    }
    if (type != null) {
        ICompilationUnit unit = type.getCompilationUnit();
        if (unit != null && unit.isWorkingCopy()) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=421902
            IType[] types = null;
            try {
                types = unit.getTypes();
            } catch (JavaModelException e) {
                return null;
            }
            boolean typeFound = false;
            for (int i = 0, typesLength = types == null ? 0 : types.length; i < typesLength; i++) {
                if (types[i].getElementName().equals(typeName)) {
                    typeFound = true;
                    break;
                }
            }
            if (!typeFound)
                type = null;
        }
    }
    return type == null ? null : new Answer(type, null);
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.BasicSearchEngine.java

License:Open Source License

private ICompilationUnit[] getWorkingCopies(IJavaElement element) {
    if (element instanceof IMember) {
        ICompilationUnit cu = ((IMember) element).getCompilationUnit();
        if (cu != null && cu.isWorkingCopy()) {
            return new ICompilationUnit[] { cu };
        }/*  w ww  . ja va 2s  . c om*/
    } else if (element instanceof ICompilationUnit) {
        return new ICompilationUnit[] { (ICompilationUnit) element };
    }

    return null;
}

From source file:com.googlecode.activemq.eclipse.views.TextSelectionConverter.java

License:Open Source License

private static IJavaElement[] codeResolve(IJavaElement input, ITextSelection selection)
        throws JavaModelException {
    if (input instanceof ICodeAssist) {
        if (input instanceof ICompilationUnit) {
            ICompilationUnit cunit = (ICompilationUnit) input;
            if (cunit.isWorkingCopy())
                JavaModelUtil.reconcile(cunit);
        }/* w  w w  . j  ava2 s.c  o  m*/
        IJavaElement[] elements = ((ICodeAssist) input).codeSelect(selection.getOffset(),
                selection.getLength());
        if (elements != null && elements.length > 0)
            return elements;
    }
    return EMPTY_RESULT;
}

From source file:com.googlecode.activemq.eclipse.views.TextSelectionConverter.java

License:Open Source License

private static IJavaElement getElementAtOffset(IJavaElement input, ITextSelection selection)
        throws JavaModelException {
    if (input instanceof ICompilationUnit) {
        ICompilationUnit cunit = (ICompilationUnit) input;
        if (cunit.isWorkingCopy())
            JavaModelUtil.reconcile(cunit);
        IJavaElement ref = cunit.getElementAt(selection.getOffset());
        if (ref == null)
            return input;
        else//from  w w  w  .  j a v a 2  s.  com
            return ref;
    } else if (input instanceof IClassFile) {
        IJavaElement ref = ((IClassFile) input).getElementAt(selection.getOffset());
        if (ref == null)
            return input;
        else
            return ref;
    }
    return null;
}

From source file:com.iw.plugins.spindle.ui.wizards.factories.ClassFactory.java

License:Mozilla Public License

private void createType(IProgressMonitor monitor) throws CoreException, InterruptedException {
    if (monitor == null) {
        monitor = new NullProgressMonitor();
    }/* w  w w . ja v  a  2s. c o  m*/

    monitor.beginTask(UIPlugin.getString("ClassFactory.operationdesc", fTypeName), 10);

    ICompilationUnit createdWorkingCopy = null;
    try {
        IPackageFragmentRoot root = fPackageFragmentyRoot;
        IPackageFragment pack = fPackageFragment;
        if (pack == null) {
            pack = root.getPackageFragment(""); //$NON-NLS-1$
        }

        if (!pack.exists()) {
            String packName = pack.getElementName();
            pack = root.createPackageFragment(packName, true, null);
        }

        monitor.worked(1);

        String clName = fTypeName;

        boolean isInnerClass = false;

        IType createdType;
        ImportsManager imports;
        int indent = 0;

        String lineDelimiter = System.getProperty("line.separator", "\n");

        ICompilationUnit parentCU = pack.createCompilationUnit(clName + ".java", "", false,
                new SubProgressMonitor(monitor, 2));
        // create a working copy with a new owner
        createdWorkingCopy = parentCU.getWorkingCopy(null);

        // use the compiler template a first time to read the imports
        String content = CodeGeneration.getCompilationUnitContent(createdWorkingCopy, null, "", lineDelimiter); //$NON-NLS-1$
        if (content != null)
            createdWorkingCopy.getBuffer().setContents(content);

        imports = new ImportsManager(createdWorkingCopy);
        // add an import that will be removed again. Having this import solves
        // 14661
        imports.addImport(JavaModelUtil.concatenateName(pack.getElementName(), fTypeName));

        String typeContent = constructTypeStub(imports, lineDelimiter);

        String cuContent = constructCUContent(parentCU, typeContent, lineDelimiter);

        createdWorkingCopy.getBuffer().setContents(cuContent);

        createdType = createdWorkingCopy.getType(clName);

        if (monitor.isCanceled()) {
            throw new InterruptedException();
        }

        // add imports for superclass/interfaces, so types can be resolved
        // correctly

        ICompilationUnit cu = createdType.getCompilationUnit();
        boolean needsSave = !cu.isWorkingCopy();

        imports.create(needsSave, new SubProgressMonitor(monitor, 1));

        JavaModelUtil.reconcile(cu);

        if (monitor.isCanceled()) {
            throw new InterruptedException();
        }

        // set up again
        imports = new ImportsManager(imports.getCompilationUnit(), imports.getAddedTypes());

        createTypeMembers(createdType, imports, new SubProgressMonitor(monitor, 1));

        // add imports
        imports.create(needsSave, new SubProgressMonitor(monitor, 1));

        removeUnusedImports(cu, imports.getAddedTypes(), needsSave);

        JavaModelUtil.reconcile(cu);

        ISourceRange range = createdType.getSourceRange();

        IBuffer buf = cu.getBuffer();
        String originalContent = buf.getText(range.getOffset(), range.getLength());

        String formattedContent = CodeFormatterUtil.format(CodeFormatter.K_CLASS_BODY_DECLARATIONS,
                originalContent, indent, null, lineDelimiter, pack.getJavaProject());
        buf.replace(range.getOffset(), range.getLength(), formattedContent);

        //      String fileComment = getFileComment(cu);
        //      if (fileComment != null && fileComment.length() > 0)
        //      {
        //        buf.replace(0, 0, fileComment + lineDelimiter);
        //      }
        cu.commitWorkingCopy(false, new SubProgressMonitor(monitor, 1));
        if (createdWorkingCopy != null) {
            fCreatedType = (IType) createdType.getPrimaryElement();
        } else {
            fCreatedType = createdType;
        }
    } finally {
        if (createdWorkingCopy != null) {
            createdWorkingCopy.discardWorkingCopy();
        }
        monitor.done();
    }

}

From source file:com.redhat.ceylon.eclipse.code.explorer.PackageExplorerContentProvider.java

License:Open Source License

/**
 * Processes a delta recursively. When more than two children are affected the
 * tree is fully refreshed starting at this node.
 *
 * @param delta the delta to process/*  w  w w.  j ava  2 s.com*/
 * @param runnables the resulting view changes as runnables (type {@link Runnable})
 * @return true is returned if the conclusion is to refresh a parent of an element. In that case no siblings need
 * to be processed
 * @throws JavaModelException thrown when the access to an element failed
 */
private boolean processDelta(IJavaElementDelta delta, Collection<Runnable> runnables)
        throws JavaModelException {

    int kind = delta.getKind();
    int flags = delta.getFlags();
    IJavaElement element = delta.getElement();
    int elementType = element.getElementType();

    if (elementType != IJavaElement.JAVA_MODEL && elementType != IJavaElement.JAVA_PROJECT) {
        IJavaProject proj = element.getJavaProject();
        if (proj == null || !proj.getProject().isOpen()) // TODO: Not needed if parent already did the 'open' check!
            return false;
    }

    if (elementType == IJavaElement.PACKAGE_FRAGMENT) {
        if ((flags & (IJavaElementDelta.F_CONTENT
                | IJavaElementDelta.F_CHILDREN)) == IJavaElementDelta.F_CONTENT) {
            // TODO: This should never be true for folders (F_CONTENT is only for files)
            if (!fIsFlatLayout) {
                Object parent = getHierarchicalPackageParent((IPackageFragment) element);
                if (!(parent instanceof IPackageFragmentRoot)) {
                    postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
                    return true;
                }
            }
            // content change, without children info (for example resource added/removed to class folder package)
            postRefresh(internalGetParent(element), PARENT, element, runnables);
            return true;
        }

        if (!fIsFlatLayout) {
            if (kind == IJavaElementDelta.REMOVED) {
                final Object parent = getHierarchicalPackageParent((IPackageFragment) element);
                if (parent instanceof IPackageFragmentRoot) {
                    postRemove(element, runnables);
                    return false;
                } else {
                    postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
                    return true;
                }
            } else if (kind == IJavaElementDelta.ADDED) {
                final Object parent = getHierarchicalPackageParent((IPackageFragment) element);
                if (parent instanceof IPackageFragmentRoot) {
                    if (fFoldPackages) {
                        postRefresh(parent, PARENT, element, runnables);
                        return true;
                    } else {
                        postAdd(parent, element, runnables);
                        return false;
                    }
                } else {
                    postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
                    return true;
                }
            }
            handleAffectedChildren(delta, element, runnables);
            return false;
        }
    }

    if (elementType == IJavaElement.COMPILATION_UNIT) {
        ICompilationUnit cu = (ICompilationUnit) element;
        if (!JavaModelUtil.isPrimary(cu)) {
            return false;
        }

        if (!getProvideMembers() && cu.isWorkingCopy() && kind == IJavaElementDelta.CHANGED) {
            return false;
        }

        if (kind == IJavaElementDelta.CHANGED && !isStructuralCUChange(flags)) {
            return false; // test moved ahead
        }

        if (!isOnClassPath(cu)) { // TODO: isOnClassPath expensive! Should be put after all cheap tests
            return false;
        }

    }

    if (elementType == IJavaElement.JAVA_PROJECT) {
        // handle open and closing of a project
        if ((flags & (IJavaElementDelta.F_CLOSED | IJavaElementDelta.F_OPENED)) != 0) {
            postRefresh(element, ORIGINAL, element, runnables);
            return false;
        }
        // if the class path has changed we refresh the entire project
        if ((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0) {
            postRefresh(element, ORIGINAL, element, runnables);
            return false;
        }
        // if added it could be that the corresponding IProject is already shown. Remove it first.
        // bug 184296
        if (kind == IJavaElementDelta.ADDED) {
            postRemove(element.getResource(), runnables);
            postAdd(element.getParent(), element, runnables);
            return false;
        }
    }

    if (kind == IJavaElementDelta.REMOVED) {
        Object parent = internalGetParent(element);
        if (element instanceof IPackageFragment) {
            // refresh package fragment root to allow filtering empty (parent) packages: bug 72923
            if (fViewer.testFindItem(parent) != null)
                postRefresh(parent, PARENT, element, runnables);
            return true;

        } else if (element instanceof IPackageFragmentRoot) {
            // libs and class folders can show up twice (in library container and as resource at original location)
            IResource resource = element.getResource();
            if (resource != null && !resource.exists())
                postRemove(resource, runnables);
        }

        postRemove(element, runnables);
        if (parent instanceof IPackageFragment)
            postUpdateIcon((IPackageFragment) parent, runnables);
        // we are filtering out empty subpackages, so we
        // a package becomes empty we remove it from the viewer.
        if (isPackageFragmentEmpty(element.getParent())) {
            if (fViewer.testFindItem(parent) != null)
                postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
            return true;
        }
        return false;
    }

    if (kind == IJavaElementDelta.ADDED) {
        Object parent = internalGetParent(element);
        // we are filtering out empty subpackages, so we
        // have to handle additions to them specially.
        if (parent instanceof IPackageFragment) {
            Object grandparent = internalGetParent(parent);
            // 1GE8SI6: ITPJUI:WIN98 - Rename is not shown in Packages View
            // avoid posting a refresh to an invisible parent
            if (parent.equals(fInput)) {
                postRefresh(parent, PARENT, element, runnables);
            } else {
                // refresh from grandparent if parent isn't visible yet
                if (fViewer.testFindItem(parent) == null)
                    postRefresh(grandparent, GRANT_PARENT, element, runnables);
                else {
                    postRefresh(parent, PARENT, element, runnables);
                }
            }
            return true;
        } else {
            if (element instanceof IPackageFragmentRoot
                    && ((IPackageFragmentRoot) element).getKind() != IPackageFragmentRoot.K_SOURCE) {
                // libs and class folders can show up twice (in library container or under project, and as resource at original location)
                IResource resource = element.getResource();
                if (resource != null) {
                    Object resourceParent = super.internalGetParent(resource);
                    if (resourceParent != null) {
                        IJavaProject proj = element.getJavaProject();
                        if (fShowLibrariesNode || !resourceParent.equals(proj)) {
                            postAdd(resourceParent, resource, runnables);
                        }
                    }
                }
            }
            postAdd(parent, element, runnables);
        }
    }

    if (elementType == IJavaElement.COMPILATION_UNIT || elementType == IJavaElement.CLASS_FILE) {
        if (kind == IJavaElementDelta.CHANGED) {
            // isStructuralCUChange already performed above
            postRefresh(element, ORIGINAL, element, runnables);
        }
        return false;
    }

    if (elementType == IJavaElement.PACKAGE_FRAGMENT_ROOT) {
        // the contents of an external JAR has changed
        if ((flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0) {
            postRefresh(element, ORIGINAL, element, runnables);
            return false;
        }
        if ((flags & (IJavaElementDelta.F_CONTENT
                | IJavaElementDelta.F_CHILDREN)) == IJavaElementDelta.F_CONTENT) {
            // TODO: This should never be true for folders (F_CONTENT is only for files)
            // content change, without children info (for example resource added/removed to class folder package)
            postRefresh(internalGetParent(element), PARENT, element, runnables);
            return true;
        }

        // the source attachment of a JAR has changed
        if ((flags & (IJavaElementDelta.F_SOURCEATTACHED | IJavaElementDelta.F_SOURCEDETACHED)) != 0)
            postUpdateIcon(element, runnables);

        if (isClassPathChange(delta)) {
            // throw the towel and do a full refresh of the affected java project.
            postRefresh(element.getJavaProject(), PROJECT, element, runnables);
            return true;
        }
    }

    handleAffectedChildren(delta, element, runnables);
    return false;
}

From source file:edu.brown.cs.bubbles.bedrock.BedrockEditor.java

License:Open Source License

/********************************************************************************/

private synchronized FileData findFile(String proj, String file, String bid, String id)
        throws BedrockException {
    FileData fd = file_map.get(file);/*from   w  w  w  .  ja  va 2  s.  co  m*/

    if (fd == null) {
        ICompilationUnit icu = null;
        icu = our_plugin.getProjectManager().getCompilationUnit(proj, file);
        if (icu == null && proj != null) {
            icu = our_plugin.getProjectManager().getCompilationUnit(null, file);
            if (icu != null)
                proj = null;
        }

        if (icu == null)
            return null;
        BedrockPlugin.logD("START FILE " + proj + " " + file + " " + bid + " " + icu.isWorkingCopy() + " "
                + icu.hasResourceChanged() + " " + icu.isOpen() + " " + icu.getOwner() + " "
                + System.identityHashCode(icu) + " " + System.identityHashCode(icu.getPrimary()));

        icu = icu.getPrimary();

        fd = new FileData(proj, file, icu);
        file_map.put(file, fd);
    }

    if (id != null)
        fd.setCurrentId(bid, id);

    return fd;
}

From source file:edu.brown.cs.bubbles.bedrock.BedrockJava.java

License:Open Source License

/********************************************************************************/

void handleJavaSearch(String proj, String bid, String patstr, String foritems, boolean defs, boolean refs,
        boolean impls, boolean equiv, boolean exact, boolean system, IvyXmlWriter xw) throws BedrockException {
    IJavaProject ijp = getJavaProject(proj);

    our_plugin.waitForEdits();// ww w .  j ava 2s  .co  m

    int forflags = 0;
    if (foritems == null)
        forflags = IJavaSearchConstants.TYPE;
    else if (foritems.equalsIgnoreCase("CLASS"))
        forflags = IJavaSearchConstants.CLASS;
    else if (foritems.equalsIgnoreCase("INTERFACE"))
        forflags = IJavaSearchConstants.INTERFACE;
    else if (foritems.equalsIgnoreCase("ENUM"))
        forflags = IJavaSearchConstants.ENUM;
    else if (foritems.equalsIgnoreCase("ANNOTATION"))
        forflags = IJavaSearchConstants.ANNOTATION_TYPE;
    else if (foritems.equalsIgnoreCase("CLASS&ENUM"))
        forflags = IJavaSearchConstants.CLASS_AND_ENUM;
    else if (foritems.equalsIgnoreCase("CLASS&INTERFACE"))
        forflags = IJavaSearchConstants.CLASS_AND_INTERFACE;
    else if (foritems.equalsIgnoreCase("TYPE"))
        forflags = IJavaSearchConstants.TYPE;
    else if (foritems.equalsIgnoreCase("FIELD"))
        forflags = IJavaSearchConstants.FIELD;
    else if (foritems.equalsIgnoreCase("METHOD"))
        forflags = IJavaSearchConstants.METHOD;
    else if (foritems.equalsIgnoreCase("CONSTRUCTOR"))
        forflags = IJavaSearchConstants.CONSTRUCTOR;
    else if (foritems.equalsIgnoreCase("PACKAGE"))
        forflags = IJavaSearchConstants.PACKAGE;
    else if (foritems.equalsIgnoreCase("FIELDWRITE"))
        forflags = IJavaSearchConstants.FIELD | IJavaSearchConstants.WRITE_ACCESSES;
    else if (foritems.equalsIgnoreCase("FIELDREAD"))
        forflags = IJavaSearchConstants.FIELD | IJavaSearchConstants.READ_ACCESSES;
    else
        forflags = IJavaSearchConstants.TYPE;

    int limit = 0;
    if (defs && refs)
        limit = IJavaSearchConstants.ALL_OCCURRENCES;
    else if (defs)
        limit = IJavaSearchConstants.DECLARATIONS;
    else if (refs)
        limit = IJavaSearchConstants.REFERENCES;
    else if (impls)
        limit = IJavaSearchConstants.IMPLEMENTORS;

    int mrule = SearchPattern.R_PATTERN_MATCH;
    if (equiv)
        mrule = SearchPattern.R_EQUIVALENT_MATCH;
    else if (exact)
        mrule = SearchPattern.R_EXACT_MATCH;

    SearchPattern pat = SearchPattern.createPattern(patstr, forflags, limit, mrule);
    if (pat == null) {
        throw new BedrockException(
                "Invalid java search pattern `" + patstr + "' " + forflags + " " + limit + " " + mrule);
    }

    FindFilter filter = null;
    if (forflags == IJavaSearchConstants.METHOD) {
        String p = patstr;
        int idx = p.indexOf("(");
        if (idx > 0)
            p = p.substring(0, idx);
        idx = p.lastIndexOf(".");
        if (idx > 0) {
            if (defs)
                filter = new ClassFilter(p.substring(0, idx));
        }
    }

    // TODO: create scope for only user's items
    IJavaElement[] pelt;
    if (ijp != null)
        pelt = new IJavaElement[] { ijp };
    else
        pelt = getAllProjects();

    ICompilationUnit[] working = getWorkingElements(pelt);
    for (ICompilationUnit xcu : working) {
        try {
            BedrockPlugin.logD("WORK WITH " + xcu.isWorkingCopy() + " " + xcu.getPath() + xcu.getSourceRange());
        } catch (JavaModelException e) {
            BedrockPlugin.logD("WORK WITH ERROR: " + e);
        }
    }

    IJavaSearchScope scp = null;
    int fg = IJavaSearchScope.SOURCES | IJavaSearchScope.REFERENCED_PROJECTS;
    if (system) {
        fg |= IJavaSearchScope.SYSTEM_LIBRARIES | IJavaSearchScope.APPLICATION_LIBRARIES;
        scp = SearchEngine.createWorkspaceScope();
    } else {
        scp = SearchEngine.createJavaSearchScope(pelt, fg);
    }

    SearchEngine se = new SearchEngine(working);
    SearchParticipant[] parts = new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
    FindHandler fh = new FindHandler(xw, filter, system);

    BedrockPlugin.logD("BEGIN SEARCH " + pat);
    BedrockPlugin.logD("SEARCH SCOPE " + system + " " + fg + " " + scp);

    try {
        se.search(pat, parts, scp, fh, null);
    } catch (Throwable e) {
        throw new BedrockException("Problem doing Java search: " + e, e);
    }
}