Example usage for org.eclipse.jdt.core IJavaElementDelta F_ARCHIVE_CONTENT_CHANGED

List of usage examples for org.eclipse.jdt.core IJavaElementDelta F_ARCHIVE_CONTENT_CHANGED

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IJavaElementDelta F_ARCHIVE_CONTENT_CHANGED.

Prototype

int F_ARCHIVE_CONTENT_CHANGED

To view the source code for org.eclipse.jdt.core IJavaElementDelta F_ARCHIVE_CONTENT_CHANGED.

Click Source Link

Document

Change flag indicating that the element's archive content on the classpath has changed.

Usage

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

License:Open Source License

private void contentChanged(Openable element) {

    boolean isPrimary = false;
    boolean isPrimaryWorkingCopy = false;
    if (element.getElementType() == IJavaElement.COMPILATION_UNIT) {
        CompilationUnit cu = (CompilationUnit) element;
        isPrimary = cu.isPrimary();/*from  w  w  w.  j a  va 2s. co m*/
        isPrimaryWorkingCopy = isPrimary && cu.isWorkingCopy();
    }
    if (isPrimaryWorkingCopy) {
        // filter out changes to primary compilation unit in working copy mode
        // just report a change to the resource (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=59500)
        currentDelta().changed(element, IJavaElementDelta.F_PRIMARY_RESOURCE);
    } else {
        close(element);
        int flags = IJavaElementDelta.F_CONTENT;
        if (element instanceof JarPackageFragmentRoot) {
            flags |= IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED;
            // need also to reset project cache otherwise it will be out-of-date
            // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=162621
            this.projectCachesToReset.add(element.getJavaProject());
        }
        if (isPrimary) {
            flags |= IJavaElementDelta.F_PRIMARY_RESOURCE;
        }
        currentDelta().changed(element, flags);
    }
}

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

License:Open Source License

protected boolean toDebugString(StringBuffer buffer, int flags) {
    boolean prev = super.toDebugString(buffer, flags);

    if ((flags & IJavaElementDelta.F_CHILDREN) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("CHILDREN"); //$NON-NLS-1$
        prev = true;/* w ww. jav a 2  s. co m*/
    }
    if ((flags & IJavaElementDelta.F_CONTENT) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("CONTENT"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_MOVED_FROM) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("MOVED_FROM(" + ((JavaElement) getMovedFromElement()).toStringWithAncestors() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_MOVED_TO) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("MOVED_TO(" + ((JavaElement) getMovedToElement()).toStringWithAncestors() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_ADDED_TO_CLASSPATH) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("ADDED TO CLASSPATH"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("REMOVED FROM CLASSPATH"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_REORDER) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("REORDERED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("ARCHIVE CONTENT CHANGED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_SOURCEATTACHED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("SOURCE ATTACHED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_SOURCEDETACHED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("SOURCE DETACHED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_FINE_GRAINED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("FINE GRAINED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_PRIMARY_WORKING_COPY) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("PRIMARY WORKING COPY"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("RAW CLASSPATH CHANGED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("RESOLVED CLASSPATH CHANGED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("PRIMARY RESOURCE"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_OPENED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("OPENED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_CLOSED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("CLOSED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_AST_AFFECTED) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("AST AFFECTED"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_CATEGORIES) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("CATEGORIES"); //$NON-NLS-1$
        prev = true;
    }
    if ((flags & IJavaElementDelta.F_ANNOTATIONS) != 0) {
        if (prev)
            buffer.append(" | "); //$NON-NLS-1$
        buffer.append("ANNOTATIONS"); //$NON-NLS-1$
        prev = true;
    }
    return prev;
}

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 . ja  v  a2  s  .co m*/
 * @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:net.rim.ejde.internal.core.BasicClasspathElementChangedListener.java

License:Open Source License

/**
 * The flags indicate a classpath chhange and its type
 *
 * @param flags//w  w w .  j av  a 2 s.c  om
 *            the flags to inspect
 * @return true if the flag flags a classpath change
 */
static public boolean isClasspathChangeFlag(int flags) {
    if ((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0)
        return true;

    if ((flags & IJavaElementDelta.F_ADDED_TO_CLASSPATH) != 0)
        return true;

    if ((flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) != 0)
        return true;

    if ((flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0)
        return true;

    return false;
}

From source file:org.eclipse.jst.jsf.core.jsfappconfig.RuntimeClasspathJSFAppConfigLocater.java

License:Open Source License

/**
 * Recursively tests if the passed IJavaElementDelta instance or any of its
 * descendents indicate a classpath change has occurred.
 * //w  ww .j a va2s.co m
 * @param delta IJavaElement instance to be tested.
 * @return true if a claspath change has occurred, else false.
 */
protected boolean classpathChanged(IJavaElementDelta delta) {
    int deltaFlags = delta.getFlags();
    if (((deltaFlags & IJavaElementDelta.F_ADDED_TO_CLASSPATH) == IJavaElementDelta.F_ADDED_TO_CLASSPATH)
            || ((deltaFlags
                    & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) == IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED)
            || ((deltaFlags
                    & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) == IJavaElementDelta.F_REMOVED_FROM_CLASSPATH)) {
        return true;
    }
    boolean changed = false;
    IJavaElementDelta[] childDeltas = delta.getAffectedChildren();
    if (childDeltas != null) {
        for (int i = 0; i < childDeltas.length; i++) {
            if (classpathChanged(childDeltas[i])) {
                changed = true;
                break;
            }
        }
    }
    return changed;
}

From source file:org.eclipse.jst.jsp.core.taglib.ProjectDescription.java

License:Open Source License

void handleElementChanged(IJavaElementDelta delta) {
    if (fBuildPathIsDirty) {
        return;//from   ww  w  .  j  a  v  a2s .  c  o  m
    }

    // Logger.log(Logger.INFO_DEBUG, "IJavaElementDelta: " + delta);
    IJavaElement element = delta.getElement();
    if (element.getElementType() == IJavaElement.JAVA_PROJECT) {
        IJavaElementDelta[] affectedChildren = delta.getAffectedChildren();
        for (int i = 0; i < affectedChildren.length; i++) {
            handleElementChanged(affectedChildren[i]);
        }
    }
    if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT_ROOT
            && ((IPackageFragmentRoot) element).isArchive()) {
        time0 = System.currentTimeMillis();
        if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT_ROOT
                && ((IPackageFragmentRoot) element).isExternal()) {
        }
        String libLocation = null;
        int taglibRecordEventKind = -1;
        if ((delta.getFlags() & IJavaElementDelta.F_ADDED_TO_CLASSPATH) > 0
                || (delta.getFlags() & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) > 0
                || (delta.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0) {
            taglibRecordEventKind = ITaglibIndexDelta.CHANGED;
            if ((delta.getFlags() & IJavaElementDelta.F_ADDED_TO_CLASSPATH) > 0) {
                taglibRecordEventKind = ITaglibIndexDelta.ADDED;
            } else if ((delta.getFlags() & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) > 0) {
                taglibRecordEventKind = ITaglibIndexDelta.CHANGED;
            } else if ((delta.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0) {
                taglibRecordEventKind = ITaglibIndexDelta.REMOVED;
            }
            IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(element.getPath());
            if (file.isAccessible() && file.getLocation() != null)
                libLocation = file.getLocation().toString();
            else
                libLocation = element.getPath().toString();
        }
        if (libLocation != null) {
            boolean fragmentisExported = true;
            try {
                IClasspathEntry rawClasspathEntry = ((IPackageFragmentRoot) element).getRawClasspathEntry();
                /*
                 * null may also be returned for deletions depending on
                 * resource/build path notification order. If it's null,
                 * it's been deleted and whether it's exported won't
                 * really matter
                 */
                if (rawClasspathEntry != null) {
                    fragmentisExported = rawClasspathEntry.isExported();
                }
            } catch (JavaModelException e) {
                // IPackageFragmentRoot not part of the build path
            }
            if ((delta.getFlags() & IJavaElementDelta.F_ADDED_TO_CLASSPATH) > 0) {
                fBuildPathEntryCount++;
            } else if ((delta.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0) {
                fBuildPathEntryCount--;
            }
            updateClasspathLibrary(libLocation, taglibRecordEventKind, fragmentisExported);
        }
        if (_debugIndexTime)
            Logger.log(Logger.INFO, "processed build path delta for " + fProject.getName() + "(" //$NON-NLS-1$//$NON-NLS-2$
                    + element.getPath() + ") in " + (System.currentTimeMillis() - time0) + "ms"); //$NON-NLS-1$
    }
}

From source file:org.eclipse.jst.jsp.core.taglib.ProjectDescription.java

License:Open Source License

void queueElementChanged(IJavaElementDelta delta) {
    try {//  w  ww.  ja  va 2s.co  m
        LOCK.acquire();
        IJavaElement element = delta.getElement();
        if (element.getElementType() == IJavaElement.JAVA_PROJECT) {
            IJavaElementDelta[] affectedChildren = delta.getAffectedChildren();
            for (int i = 0; i < affectedChildren.length; i++) {
                queueElementChanged(affectedChildren[i]);
            }
        }
        if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT_ROOT
                && ((IPackageFragmentRoot) element).isArchive()) {
            IPath path = element.getPath();
            boolean fragmentisExported = true;
            try {
                IClasspathEntry rawClasspathEntry = ((IPackageFragmentRoot) element).getRawClasspathEntry();
                /*
                 * null may also be returned for deletions depending on
                 * resource/build path notification order. If it's null,
                 * it's been deleted and whether it's exported won't
                 * really matter
                 */
                if (rawClasspathEntry != null) {
                    fragmentisExported = rawClasspathEntry.isExported();
                }
            } catch (JavaModelException e) {
                // IPackageFragmentRoot not part of the build path
            }
            String key = path.toString();
            if ((delta.getFlags() & IJavaElementDelta.F_ADDED_TO_CLASSPATH) > 0) {
                fPackageFragmentRootsAdded.put(key,
                        new PackageFragmentRootDelta(path, ITaglibIndexDelta.ADDED, fragmentisExported));
                fPackageFragmentRootsChanged.remove(key);
                fPackageFragmentRootsRemoved.remove(key);
                fBuildPathEntryCount++;
            } else if ((delta.getFlags() & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) > 0) {
                fPackageFragmentRootsChanged.put(key,
                        new PackageFragmentRootDelta(path, ITaglibIndexDelta.CHANGED, fragmentisExported));
            } else if (((delta.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0)
                    && ((delta.getFlags() & IJavaElementDelta.F_REORDER) == 0)) {
                fPackageFragmentRootsAdded.remove(key);
                fPackageFragmentRootsChanged.remove(key);
                fPackageFragmentRootsRemoved.put(key,
                        new PackageFragmentRootDelta(path, ITaglibIndexDelta.REMOVED, fragmentisExported));
                fBuildPathEntryCount--;
            }
        }
    } finally {
        LOCK.release();
    }

    fBuildPathJob.cancel();
    fBuildPathJob.schedule(2000);
}

From source file:org.eclipse.pde.api.tools.internal.WorkspaceDeltaProcessor.java

License:Open Source License

/**
 * Processes the java element deltas of interest
 * //  w  w  w . j  av  a2  s.  co m
 * @param deltas
 */
void processJavaElementDeltas(IJavaElementDelta[] deltas, IJavaProject project) {
    for (int i = 0; i < deltas.length; i++) {
        IJavaElementDelta delta = deltas[i];
        switch (delta.getElement().getElementType()) {
        case IJavaElement.JAVA_PROJECT: {
            IJavaProject proj = (IJavaProject) delta.getElement();
            int flags = delta.getFlags();
            switch (delta.getKind()) {
            case IJavaElementDelta.CHANGED: {
                if (!Util.isApiProject(proj)) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        System.out.println(
                                "--> skipped processing CHANGED delta for project: " + proj.getElementName()); //$NON-NLS-1$
                    }
                    continue;
                }
                if ((flags & IJavaElementDelta.F_OPENED) != 0) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        System.out.println("--> processing OPEN project: [" + proj.getElementName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                    }
                    bmanager.disposeWorkspaceBaseline();
                } else if ((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0
                        || (flags & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        System.out.println(
                                "--> processing CLASSPATH CHANGE project: [" + proj.getElementName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                    }
                    bmanager.disposeWorkspaceBaseline();
                    dmanager.projectClasspathChanged(proj);
                    try {
                        BuildState.setLastBuiltState(proj.getProject(), null);
                    } catch (CoreException e) {
                    }
                    dmanager.flushElementCache(delta.getElement());
                } else if ((flags & IJavaElementDelta.F_CHILDREN) != 0) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        System.out.println(
                                "--> processing CHILDREN delta of project: [" + proj.getElementName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                    }
                    processJavaElementDeltas(delta.getAffectedChildren(), proj);
                } else if ((flags & IJavaElementDelta.F_CONTENT) != 0) {
                    if (proj != null) {
                        if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                            System.out.println(
                                    "--> processing child CONTENT of project: [" + proj.getElementName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                        }
                        IResourceDelta[] resourcedeltas = delta.getResourceDeltas();
                        if (resourcedeltas != null) {
                            IResourceDelta rdelta = null;
                            for (int j = 0; j < resourcedeltas.length; j++) {
                                rdelta = resourcedeltas[j].findMember(new Path(Util.MANIFEST_NAME));
                                if (rdelta != null && rdelta.getKind() == IResourceDelta.CHANGED
                                        && (rdelta.getFlags() & IResourceDelta.CONTENT) > 0) {
                                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                                        System.out.println("--> processing manifest delta"); //$NON-NLS-1$
                                    }
                                    bmanager.disposeWorkspaceBaseline();
                                    break;
                                }
                            }
                        }
                    } else {
                        if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                            System.out.println("--> ignoring child CONTENT project context is null"); //$NON-NLS-1$
                        }
                    }
                }
                break;
            }
            case IJavaElementDelta.ADDED: {
                if (!Util.isApiProject(proj)) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        System.out.println(
                                "--> skipped processing ADDED delta for project: " + proj.getElementName()); //$NON-NLS-1$
                    }
                    continue;
                }
                if ((flags & IJavaElementDelta.F_MOVED_FROM) != 0) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        System.out.println("--> processing PROJECT RENAME from: [" //$NON-NLS-1$
                                + delta.getMovedFromElement().getJavaProject().getElementName() + "] to: [" //$NON-NLS-1$
                                + proj.getElementName() + "]"); //$NON-NLS-1$
                    }
                    bmanager.disposeWorkspaceBaseline();
                }
                break;
            }
            default:
                break;
            }
            break;
        }
        case IJavaElement.PACKAGE_FRAGMENT_ROOT: {
            IPackageFragmentRoot root = (IPackageFragmentRoot) delta.getElement();
            int flags = delta.getFlags();
            if ((flags & (IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED | IJavaElementDelta.F_ADDED_TO_CLASSPATH
                    | IJavaElementDelta.F_REMOVED_FROM_CLASSPATH)) != 0) {
                if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                    System.out.println("processed CLASSPATH CHANGED for package fragment root: [" //$NON-NLS-1$
                            + root.getElementName() + "]"); //$NON-NLS-1$
                }
                dmanager.projectClasspathChanged(project);
            }
            if ((flags & IJavaElementDelta.F_CHILDREN) != 0) {
                if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                    System.out.println(
                            "processed CHILDREN for package fragment root: [" + root.getElementName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                }
                processJavaElementDeltas(delta.getAffectedChildren(), project);
            }
            break;
        }
        case IJavaElement.PACKAGE_FRAGMENT: {
            IPackageFragment fragment = (IPackageFragment) delta.getElement();
            if (delta.getKind() == IJavaElementDelta.REMOVED) {
                if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                    System.out.println("processed REMOVED delta for package fragment: [" //$NON-NLS-1$
                            + fragment.getElementName() + "]"); //$NON-NLS-1$
                }
                ((ApiBaseline) bmanager.getWorkspaceBaseline()).clearPackage(fragment.getElementName());
            }
            int flags = delta.getFlags();
            if ((flags & IJavaElementDelta.F_CHILDREN) != 0) {
                if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                    System.out.println("processed CHILDREN delta for package fragment: [" //$NON-NLS-1$
                            + fragment.getElementName() + "]"); //$NON-NLS-1$
                }
                processJavaElementDeltas(delta.getAffectedChildren(), project);
            }
            break;
        }
        case IJavaElement.COMPILATION_UNIT: {
            int flags = delta.getFlags();
            switch (delta.getKind()) {
            case IJavaElementDelta.CHANGED: {
                if ((flags & (IJavaElementDelta.F_CONTENT | IJavaElementDelta.F_FINE_GRAINED
                        | IJavaElementDelta.F_PRIMARY_RESOURCE)) != 0) {
                    if (project != null) {
                        if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                            System.out
                                    .println("processed CONTENT / FINE_GRAINED / PRIMARY_RESOURCE delta for: [" //$NON-NLS-1$
                                            + delta.getElement().getElementName() + "]"); //$NON-NLS-1$
                        }
                        dmanager.projectChanged(project);
                        dmanager.flushElementCache(delta.getElement());
                        continue;
                    }
                }
                break;
            }
            case IJavaElementDelta.ADDED:
            case IJavaElementDelta.REMOVED: {
                if (project != null) {
                    if (ApiPlugin.DEBUG_WORKSPACE_DELTA_PROCESSOR) {
                        if (delta.getKind() == IJavaElementDelta.ADDED) {
                            System.out.println(
                                    "processed ADDED delta for: [" + delta.getElement().getElementName() + "]"); //$NON-NLS-1$//$NON-NLS-2$
                        } else {
                            System.out.println("processed REMOVED delta for: [" //$NON-NLS-1$
                                    + delta.getElement().getElementName() + "]"); //$NON-NLS-1$
                        }
                    }
                    dmanager.projectChanged(project);
                    dmanager.flushElementCache(delta.getElement());
                    continue;
                }
                break;
            }
            default:
                break;
            }
            break;
        }
        default:
            break;
        }
    }
}

From source file:org.eclipse.recommenders.internal.types.rcp.TypesIndexService.java

License:Open Source License

private void processElementChanged(IJavaElementDelta delta, IJavaElement element, IJavaProject project) {
    if (PACKAGE_FRAGMENT_ROOT == element.getElementType()) {
        boolean removed = (delta.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) != 0;
        boolean content = (delta.getFlags() & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0;
        if (removed || content) {
            rebuildIndex(project);/*from  ww  w  .  ja v a2  s.c o m*/
        }
    }
}

From source file:org.eclipse.xtext.ui.util.JavaProjectClasspathChangeAnalyzer.java

License:Open Source License

/**
 * determines if the delta is a relevant change on a IPackageFragmentRoot
 * //from w  w w.  j  av  a 2  s .  c o m
 * @param delta
 *            the IJavaElementDelta to analyze. the deltas element must be an instance of IPackageFragmentRoot
 */
public boolean isRelevantPackageFragmentRootChange(IJavaElementDelta delta) {
    IJavaElement element = delta.getElement();
    assert (element instanceof IPackageFragmentRoot);
    return delta.getKind() == IJavaElementDelta.REMOVED || delta.getKind() == IJavaElementDelta.ADDED
            || (delta.getFlags() & IJavaElementDelta.F_REORDER) != 0
            || (delta.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) != 0
            || (delta.getFlags() & IJavaElementDelta.F_ADDED_TO_CLASSPATH) != 0
            || ((((IPackageFragmentRoot) element).isExternal() || ((IPackageFragmentRoot) element).isArchive())
                    && (delta.getFlags() & // external folders change
                            (IJavaElementDelta.F_CONTENT
                                    | IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED)) == delta.getFlags());
}