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

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

Introduction

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

Prototype

int F_PRIMARY_RESOURCE

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

Click Source Link

Document

Change flag indicating that the resource of a primary compilation unit 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();//w w  w  .j  a  v a  2  s  .  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.DeltaProcessor.java

License:Open Source License

private void elementAdded(Openable element, IResourceDelta delta, RootInfo rootInfo) {
    int elementType = element.getElementType();

    if (elementType == IJavaElement.JAVA_PROJECT) {
        // project add is handled by JavaProject.configure() because
        // when a project is created, it does not yet have a Java nature
        IProject project;/*from  ww  w  .  j  av  a  2 s  .  com*/
        if (delta != null && JavaProject.hasJavaNature(project = (IProject) delta.getResource())) {
            addToParentInfo(element);
            this.manager.getPerProjectInfo(true /*create info if needed*/).rememberExternalLibTimestamps();
            if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0) {
                Openable movedFromElement = (Openable) element.getJavaModel()
                        .getJavaProject(delta.getMovedFromPath().lastSegment());
                currentDelta().movedTo(element, movedFromElement);
            } else {
                // Force the project to be closed as it might have been opened
                // before the resource modification came in and it might have a new child
                // For example, in an IWorkspaceRunnable:
                // 1. create a Java project P (where P=src)
                // 2. open project P
                // 3. add folder f in P's pkg fragment root
                // When the resource delta comes in, only the addition of P is notified,
                // but the pkg fragment root of project P is already opened, thus its children are not recomputed
                // and it appears to contain only the default package.
                close(element);

                currentDelta().added(element);
            }
            this.state.updateRoots(element.getPath(), delta, this);

            // remember that the project's cache must be reset
            this.projectCachesToReset.add(element);
        }
    } else {
        if (delta == null || (delta.getFlags() & IResourceDelta.MOVED_FROM) == 0) {
            // regular element addition
            if (isPrimaryWorkingCopy(element, elementType)) {
                // 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 {
                addToParentInfo(element);

                // Force the element to be closed as it might have been opened
                // before the resource modification came in and it might have a new child
                // For example, in an IWorkspaceRunnable:
                // 1. create a package fragment p using a java model operation
                // 2. open package p
                // 3. add file X.java in folder p
                // When the resource delta comes in, only the addition of p is notified,
                // but the package p is already opened, thus its children are not recomputed
                // and it appears empty.
                close(element);

                currentDelta().added(element);
            }
        } else {
            // element is moved
            addToParentInfo(element);
            close(element);

            IPath movedFromPath = delta.getMovedFromPath();
            File res = delta.getFile();
            File movedFromRes;
            if (res.isFile()) {
                movedFromRes = movedFromPath.toFile();
            } else {
                movedFromRes = movedFromPath.toFile();
            }

            // find the element type of the moved from element
            IPath rootPath = externalPath(movedFromRes);
            RootInfo movedFromInfo = enclosingRootInfo(rootPath, IResourceDelta.REMOVED);
            int movedFromType = elementType(movedFromRes, IResourceDelta.REMOVED,
                    element.getParent().getElementType(), movedFromInfo);

            // reset current element as it might be inside a nested root (popUntilPrefixOf() may use the outer root)
            this.currentElement = null;

            // create the moved from element
            Openable movedFromElement = elementType != IJavaElement.JAVA_PROJECT
                    && movedFromType == IJavaElement.JAVA_PROJECT ? null : // outside classpath
                            createElement(movedFromRes, movedFromType, movedFromInfo);
            if (movedFromElement == null) {
                // moved from outside classpath
                currentDelta().added(element);
            } else {
                currentDelta().movedTo(element, movedFromElement);
            }
        }

        switch (elementType) {
        case IJavaElement.PACKAGE_FRAGMENT_ROOT:
            // when a root is added, and is on the classpath, the project must be updated
            JavaProject project = (JavaProject) element.getJavaProject();

            // remember that the project's cache must be reset
            this.projectCachesToReset.add(project);

            break;
        case IJavaElement.PACKAGE_FRAGMENT:
            // reset project's package fragment cache
            project = (JavaProject) element.getJavaProject();
            this.projectCachesToReset.add(project);

            break;
        }
    }
}

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

License:Open Source License

private void elementRemoved(Openable element, IResourceDelta delta, RootInfo rootInfo) {

    int elementType = element.getElementType();
    if (delta == null || (delta.getFlags() & IResourceDelta.MOVED_TO) == 0) {
        // regular element removal
        if (isPrimaryWorkingCopy(element, elementType)) {
            // 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 {/*www. j a v a  2  s  . c o  m*/
            close(element);
            removeFromParentInfo(element);
            currentDelta().removed(element);
        }
    } else {
        // element is moved
        close(element);
        removeFromParentInfo(element);
        IPath movedToPath = delta.getMovedToPath();
        File res = delta.getFile();
        File movedToRes;
        movedToRes = movedToPath.toFile();
        //         switch (res.getType()) {
        //            case IResource.PROJECT:
        //               movedToRes = res.getWorkspace().getRoot().getProject(movedToPath.lastSegment());
        //               break;
        //            case IResource.FOLDER:
        //               movedToRes = res.getWorkspace().getRoot().getFolder(movedToPath);
        //               break;
        //            case IResource.FILE:
        //               movedToRes = res.getWorkspace().getRoot().getFile(movedToPath);
        //               break;
        //            default:
        //               return;
        //         }

        // find the element type of the moved from element
        IPath rootPath = externalPath(movedToRes);
        RootInfo movedToInfo = enclosingRootInfo(rootPath, IResourceDelta.ADDED);
        int movedToType = elementType(movedToRes, IResourceDelta.ADDED, element.getParent().getElementType(),
                movedToInfo);

        // reset current element as it might be inside a nested root (popUntilPrefixOf() may use the outer root)
        this.currentElement = null;

        // create the moved To element
        Openable movedToElement = elementType != IJavaElement.JAVA_PROJECT
                && movedToType == IJavaElement.JAVA_PROJECT ? null : // outside classpath
                        createElement(movedToRes, movedToType, movedToInfo);
        if (movedToElement == null) {
            // moved outside classpath
            currentDelta().removed(element);
        } else {
            currentDelta().movedFrom(element, movedToElement);
        }
    }

    switch (elementType) {
    case IJavaElement.JAVA_MODEL:
        this.manager.indexManager.reset();
        break;
    case IJavaElement.JAVA_PROJECT:
        this.state.updateRoots(element.getPath(), delta, this);

        // remember that the project's cache must be reset
        this.projectCachesToReset.add(element);

        break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        JavaProject project = (JavaProject) element.getJavaProject();

        // remember that the project's cache must be reset
        this.projectCachesToReset.add(project);

        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        // reset package fragment cache
        project = (JavaProject) element.getJavaProject();
        this.projectCachesToReset.add(project);

        break;
    }
}

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 w w.ja v 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:org.eclipse.edt.debug.core.java.filters.WorkspaceProjectClassFilter.java

License:Open Source License

protected void compilationUnitChanged(IJavaElementDelta delta, ICompilationUnit cu) throws JavaModelException {
    if ((delta.getFlags() & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0) {
        // Inner classes might have changed - remove and then re-add.
        compilationUnitRemoved(delta, cu);
        compilationUnitAdded(delta, cu);
    }/*from w  ww  .  j  ava  2  s .c  om*/
}

From source file:org.eclipse.jem.internal.adapters.jdom.JavaReflectionSynchronizer.java

License:Open Source License

/**
 * Handle the change for a single element, children will be handled separately.
 *
 *//*from w ww .  j a  va2  s  .c o  m*/
protected void processJavaElementChanged(ICompilationUnit element, IJavaElementDelta delta) {
    switch (delta.getKind()) {
    case IJavaElementDelta.CHANGED: {
        // A file save had occurred. It doesn't matter if currently working copy or not.
        // It means something has changed to the file on disk, but don't know what.
        if ((delta.getFlags() & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0) {
            flush(element); // Flush everything, including inner classes.               
        } else if ((delta.getFlags() & IJavaElementDelta.F_CONTENT) == 0
                && (delta.getFlags() & IJavaElementDelta.F_CHILDREN) != 0) //A type may have been added or removed.
            processChildren(element, delta);
        break;
    }
    case IJavaElementDelta.REMOVED:
    case IJavaElementDelta.ADDED:
        if (!element.isWorkingCopy())
            disAssociateSourcePlusInner(getFullNameFromElement(element));
        break;
    }
}

From source file:org.eclipse.jem.internal.beaninfo.adapters.BeaninfoModelSynchronizer.java

License:Open Source License

/**
 * Handle the change for a single element, children will be handled separately.
 * If a working copy, then ignore it because we don't care about changes until
 * they are committed. Else, if the CU has changed content then mark all of the
 * types in this CU (such as inner classes) as stale.
 * If it is not a content change then process the children.
 *///from  w  w  w . j a v a  2s. c  om
protected void processJavaElementChanged(ICompilationUnit element, IJavaElementDelta delta) {
    switch (delta.getKind()) {
    case IJavaElementDelta.CHANGED:
        // A file save had occurred. It doesn't matter if currently working copy or not.
        // It means something has changed to the file on disk, but don't know what.
        if ((delta.getFlags() & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0) {
            getAdapterFactory().markStaleIntrospectionPlusInner(getFullNameFromElement(element), false); // Flush everything, including inner classes.
        }

        break;
    case IJavaElementDelta.ADDED:
    case IJavaElementDelta.REMOVED:
        // Need to know for add because we optimize the beaninfo such that once found as undefined, it won't
        // introspect again until we mark it stale. So we need to mark it stale to refresh it.

        // It doesn't matter if totally removed or just moved somewhere else, we will clear out
        // adapter because there could be a rename which would be a different class.
        // Currently the element is already deleted or added and there is no way to find the types in the unit to flush.
        // So instead we ask factory to flush all it any that start with it plus for inner classes.            
        getAdapterFactory().markStaleIntrospectionPlusInner(getFullNameFromElement(element), true); // Flush everything, including inner classes.
        break;
    }
}

From source file:org.eclipse.jpt.jpa.core.internal.AbstractJpaProject.java

License:Open Source License

protected static boolean javaCompilationUnitDeltaIsRelevant(IJavaElementDelta delta) {
    // ignore Java notification for ADDED or REMOVED;
    // these are handled via resource notification
    if (delta.getKind() != IJavaElementDelta.CHANGED) {
        return false;
    }//from  w  ww . jav a  2  s.com

    // ignore changes to/from primary working copy - no content has changed;
    // and make sure there are no other flags set that indicate *both* a
    // change to/from primary working copy *and* content has changed
    if (BitTools.onlyFlagIsSet(delta.getFlags(), IJavaElementDelta.F_PRIMARY_WORKING_COPY)) {
        return false;
    }

    // ignore when the compilation unit's resource is deleted;
    // because the AST parser will log an exception for the missing file. 
    // IJavaElementDelta.F_PRIMARY_RESOURCE is the only flag set when refactor
    // renaming a type directly in the java editor when the file is modified..
    // IJavaElementDelta.F_AST_AFFECTED is the only flag set when I refactor
    // rename a type directly in the java editor and the file is *not* modified.
    if (BitTools.onlyFlagIsSet(delta.getFlags(), IJavaElementDelta.F_PRIMARY_RESOURCE)
            || BitTools.onlyFlagIsSet(delta.getFlags(), IJavaElementDelta.F_AST_AFFECTED)) {
        ICompilationUnit compilationUnit = (ICompilationUnit) delta.getElement();
        if (!compilationUnitResourceExists(compilationUnit)) {
            return false;
        }
    }

    return true;
}

From source file:org.eclipse.jst.jee.model.internal.common.AbstractAnnotationModelProvider.java

License:Open Source License

public void recursevilyProcessCompilationUnits(IModelProviderEvent modelEvent, IJavaElementDelta delta) {
    if (delta.getElement() instanceof ICompilationUnit) {
        if (!isProjectRelative(delta.getElement().getJavaProject()))
            return;
        try {//from  w  w  w .ja va 2 s  .  c o  m
            final ICompilationUnit unit = (ICompilationUnit) delta.getElement();

            if (delta.getKind() == IJavaElementDelta.ADDED) {
                processAddedCompilationUnit(modelEvent, unit);
            }
            if (delta.getKind() == IJavaElementDelta.REMOVED) {
                processRemovedCompilationUnit(modelEvent, unit);
            }
            if (delta.getKind() == IJavaElementDelta.CHANGED) {
                if (((delta.getFlags() & IJavaElementDelta.F_PRIMARY_RESOURCE) == 0)
                        || ((delta.getFlags() & IJavaElementDelta.F_PRIMARY_WORKING_COPY) == 0)) {
                    modelEvent.setEventCode(
                            IModelProviderEvent.KNOWN_RESOURCES_CHANGED | modelEvent.getEventCode());
                    processChangedCompilationUnit(modelEvent, unit);
                }
            }
        } catch (CoreException e) {
            JEEPlugin.getDefault().getLog()
                    .log(new Status(IStatus.ERROR, JEEPlugin.getDefault().getPluginID(), e.getMessage(), e));
        }
    } else {
        for (IJavaElementDelta childDelta : delta.getAffectedChildren()) {
            recursevilyProcessCompilationUnits(modelEvent, childDelta);
        }
    }
}

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

License:Open Source License

/**
 * Update classpath for appropriate loader.
 * @see org.eclipse.jdt.core.IElementChangedListener#elementChanged(org.eclipse.jdt.core.ElementChangedEvent)
 *//*from  www .ja  v a 2s  .co m*/
public void elementChanged(ElementChangedEvent event) {
    // handle classpath changes
    IJavaElementDelta delta = event.getDelta();
    if (delta.getElement().getElementType() == IJavaElement.JAVA_MODEL) {
        IJavaElementDelta[] changed = delta.getChangedChildren();
        for (int i = 0; i < changed.length; i++) {
            if ((changed[i].getFlags() & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0
                    || (changed[i].getFlags() & IJavaElementDelta.F_REORDER) != 0
                    || (changed[i].getFlags() & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0
                    || (changed[i].getFlags() & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0) {
                IJavaElement proj = changed[i].getElement();
                handleClasspathChange(changed, i, proj);
            }
        }
    } else if (delta.getElement().getElementType() == IJavaElement.COMPILATION_UNIT) {
        IJavaElementDelta[] changed = delta.getChangedChildren();
        for (int i = 0; i < changed.length; i++) {
            if ((changed[i].getFlags() & IJavaElementDelta.F_SUPER_TYPES) != 0) {
                IJavaElement element = changed[i].getElement();
                handleSuperTypeChange(element);
            }
        }
    }
}