Example usage for org.eclipse.jdt.core IJavaElement PACKAGE_FRAGMENT_ROOT

List of usage examples for org.eclipse.jdt.core IJavaElement PACKAGE_FRAGMENT_ROOT

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IJavaElement PACKAGE_FRAGMENT_ROOT.

Prototype

int PACKAGE_FRAGMENT_ROOT

To view the source code for org.eclipse.jdt.core IJavaElement PACKAGE_FRAGMENT_ROOT.

Click Source Link

Document

Constant representing a package fragment root.

Usage

From source file:com.blackducksoftware.integration.eclipseplugin.internal.listeners.ProjectDependenciesChangedListenerTest.java

License:Apache License

private void setUpAllStubs() throws CoreException, MalformedURLException {
    Mockito.when(model.getElementType()).thenReturn(IJavaElement.JAVA_MODEL);
    Mockito.when(project.getElementType()).thenReturn(IJavaElement.JAVA_PROJECT);
    Mockito.when(mavenRoot.getElementType()).thenReturn(IJavaElement.PACKAGE_FRAGMENT_ROOT);
    Mockito.when(gradleRoot.getElementType()).thenReturn(IJavaElement.PACKAGE_FRAGMENT_ROOT);
    Mockito.when(nonBinaryRoot.getElementType()).thenReturn(IJavaElement.PACKAGE_FRAGMENT_ROOT);
    Mockito.when(e.getDelta()).thenReturn(modelDelta);
    Mockito.when(modelDelta.getElement()).thenReturn(model);
    Mockito.when(projectDelta.getElement()).thenReturn(project);
    Mockito.when(mavenRootDelta.getElement()).thenReturn(mavenRoot);
    Mockito.when(gradleRootDelta.getElement()).thenReturn(gradleRoot);
    Mockito.when(nonBinaryRootDelta.getElement()).thenReturn(nonBinaryRoot);
    Mockito.when(modelDelta.getAffectedChildren()).thenReturn(new IJavaElementDelta[] { projectDelta });
    Mockito.when(projectDelta.getAffectedChildren())
            .thenReturn(new IJavaElementDelta[] { mavenRootDelta, gradleRootDelta, nonBinaryRootDelta });
    Mockito.when(mavenRoot.getJavaProject()).thenReturn(project);
    Mockito.when(gradleRoot.getJavaProject()).thenReturn(project);
    Mockito.when(nonBinaryRoot.getJavaProject()).thenReturn(project);
    Mockito.when(project.getProject()).thenReturn(parentProject);
    Mockito.when(parentProject.getDescription()).thenReturn(projectDescription);
    Mockito.when(projectDescription.getName()).thenReturn(PROJECT_NAME);
    Mockito.when(gradleRoot.getPath()).thenReturn(gradlePath);
    Mockito.when(mavenRoot.getPath()).thenReturn(mavenPath);
    Mockito.when(nonBinaryRoot.getPath()).thenReturn(nonBinaryPath);
    Mockito.when(gradlePath.toFile().toURI().toURL()).thenReturn(GRADLE_PATH_URL);
    Mockito.when(mavenPath.toFile().toURI().toURL()).thenReturn(MAVEN_PATH_URL);
    Mockito.when(nonBinaryPath.toFile().toURI().toURL()).thenReturn(NON_BINARY_PATH_URL);
    Mockito.when(depService.isMavenDependency(GRADLE_PATH_URL)).thenReturn(false);
    Mockito.when(depService.isGradleDependency(GRADLE_PATH_URL)).thenReturn(true);
    Mockito.when(depService.isMavenDependency(MAVEN_PATH_URL)).thenReturn(true);
    Mockito.when(depService.isGradleDependency(MAVEN_PATH_URL)).thenReturn(false);
    Mockito.when(depService.isMavenDependency(NON_BINARY_PATH_URL)).thenReturn(false);
    Mockito.when(depService.isGradleDependency(NON_BINARY_PATH_URL)).thenReturn(false);
    PowerMockito.mockStatic(JavaCore.class);
    Mockito.when(JavaCore.getClasspathVariable(ClasspathVariables.MAVEN)).thenReturn(mavenRepoPath);
    Mockito.when(mavenRepoPath.toFile().toURI().toURL()).thenReturn(MAVEN_REPO_PATH_URL);
    Mockito.when(extractor.getMavenPathGav(MAVEN_PATH_URL, MAVEN_REPO_PATH_URL)).thenReturn(mavenGav);
    Mockito.when(extractor.getGradlePathGav(GRADLE_PATH_URL)).thenReturn(gradleGav);
    Mockito.when(mavenGav.getGroupId()).thenReturn(MAVEN_GROUP_STRING);
    Mockito.when(mavenGav.getArtifactId()).thenReturn(MAVEN_ARTIFACT_STRING);
    Mockito.when(mavenGav.getVersion()).thenReturn(MAVEN_VERSION_STRING);
    Mockito.when(gradleGav.getGroupId()).thenReturn(GRADLE_GROUP_STRING);
    Mockito.when(gradleGav.getArtifactId()).thenReturn(GRADLE_ARTIFACT_STRING);
    Mockito.when(gradleGav.getVersion()).thenReturn(GRADLE_VERSION_STRING);
}

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

License:Open Source License

/**
 * Returns the package fragment root of the stored type.
 * Package fragment root cannot be null and <strong>does</strong> exist.
 *
 * @see #getType()//from   w w  w. j  ava 2s  .  c o m
 * @see org.eclipse.jdt.core.IJavaElement#getAncestor(int)
 *
 * @throws NullPointerException if matched type is <code> null</code>
 * @return the existing java model package fragment root (i.e. cannot be <code>null</code>
 *    and will return <code>true</code> to <code>exists()</code> message).
 */
public IPackageFragmentRoot getPackageFragmentRoot() {
    return (IPackageFragmentRoot) getType().getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
}

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

License:Open Source License

/**
 * @see org.eclipse.jdt.core.IClassFile/*from   www  . ja v  a  2 s . c o m*/
 */
public IJavaElement getElementAt(int position) throws JavaModelException {
    IJavaElement parentElement = getParent();
    while (parentElement.getElementType() != IJavaElement.PACKAGE_FRAGMENT_ROOT) {
        parentElement = parentElement.getParent();
    }
    PackageFragmentRoot root = (PackageFragmentRoot) parentElement;
    SourceMapper mapper = root.getSourceMapper();
    if (mapper == null) {
        return null;
    } else {
        // ensure this class file's buffer is open so that source ranges are computed
        getBuffer();

        IType type = getType();
        return findElement(type, position, mapper);
    }
}

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

License:Open Source License

public IJavaElement getElementAtConsideringSibling(int position) throws JavaModelException {
    IPackageFragment fragment = (IPackageFragment) getParent();
    PackageFragmentRoot root = (PackageFragmentRoot) fragment.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
    SourceMapper mapper = root.getSourceMapper();
    if (mapper == null) {
        return null;
    } else {//from w  w  w  .j a  v a 2  s . c  o  m
        int index = this.name.indexOf('$');
        int prefixLength = index < 0 ? this.name.length() : index;

        IType type = null;
        int start = -1;
        int end = Integer.MAX_VALUE;
        IJavaElement[] children = fragment.getChildren();
        for (int i = 0; i < children.length; i++) {
            String childName = children[i].getElementName();

            int childIndex = childName.indexOf('$');
            int childPrefixLength = childIndex < 0 ? childName.indexOf('.') : childIndex;
            if (prefixLength == childPrefixLength && this.name.regionMatches(0, childName, 0, prefixLength)) {
                IClassFile classFile = (IClassFile) children[i];

                // ensure this class file's buffer is open so that source ranges are computed
                classFile.getBuffer();

                SourceRange range = mapper.getSourceRange(classFile.getType());
                if (range == SourceMapper.UNKNOWN_RANGE)
                    continue;
                int newStart = range.getOffset();
                int newEnd = newStart + range.getLength() - 1;
                if (newStart > start && newEnd < end && newStart <= position && newEnd >= position) {
                    type = classFile.getType();
                    start = newStart;
                    end = newEnd;
                }
            }
        }
        if (type != null) {
            return findElement(type, position, mapper);
        }
        return null;
    }
}

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

License:Open Source License

public synchronized void updateRoots(IPath containerPath, IResourceDelta containerDelta,
        DeltaProcessor deltaProcessor) {
    Map updatedRoots;/*from  w ww .  ja v  a  2 s .  c  o  m*/
    Map otherUpdatedRoots;
    if (containerDelta.getKind() == IResourceDelta.REMOVED) {
        updatedRoots = this.oldRoots;
        otherUpdatedRoots = this.oldOtherRoots;
    } else {
        updatedRoots = this.roots;
        otherUpdatedRoots = this.otherRoots;
    }
    int containerSegmentCount = containerPath.segmentCount();
    boolean containerIsProject = containerSegmentCount == 1;
    Iterator iterator = updatedRoots.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry entry = (Map.Entry) iterator.next();
        IPath path = (IPath) entry.getKey();
        if (containerPath.isPrefixOf(path) && !containerPath.equals(path)) {
            IResourceDelta rootDelta = (IResourceDelta) containerDelta
                    .findMember(path.removeFirstSegments(containerSegmentCount));
            if (rootDelta == null)
                continue;
            DeltaProcessor.RootInfo rootInfo = (DeltaProcessor.RootInfo) entry.getValue();

            if (!containerIsProject || !rootInfo.project.getPath().isPrefixOf(path)) { // only consider folder roots that are not included in the container
                deltaProcessor.updateCurrentDeltaAndIndex(rootDelta, IJavaElement.PACKAGE_FRAGMENT_ROOT,
                        rootInfo);
            }

            ArrayList rootList = (ArrayList) otherUpdatedRoots.get(path);
            if (rootList != null) {
                Iterator otherProjects = rootList.iterator();
                while (otherProjects.hasNext()) {
                    rootInfo = (DeltaProcessor.RootInfo) otherProjects.next();
                    if (!containerIsProject || !rootInfo.project.getPath().isPrefixOf(path)) { // only consider folder roots that are not included in the container
                        deltaProcessor.updateCurrentDeltaAndIndex(rootDelta, IJavaElement.PACKAGE_FRAGMENT_ROOT,
                                rootInfo);
                    }
                }
            }
        }
    }
}

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

License:Open Source License

private Openable createElement(File resource, int elementType, RootInfo rootInfo) {
    if (resource == null)
        return null;

    IPath path = new Path(resource.getPath());
    IJavaElement element = null;//  www  .  j  av a 2 s. co m
    switch (elementType) {
    //
    //         case IJavaElement.JAVA_PROJECT:
    //
    //            // note that non-java resources rooted at the project level will also enter this code with
    //            // an elementType JAVA_PROJECT (see #elementType(...)).
    //            if (resource instanceof IProject){
    //
    //               popUntilPrefixOf(path);
    //
    //               if (this.currentElement != null
    //                  && this.currentElement.getElementType() == IJavaElement.JAVA_PROJECT
    //                  && ((IJavaProject)this.currentElement).getProject().equals(resource)) {
    //                  return this.currentElement;
    //               }
    //               if  (rootInfo != null && rootInfo.project.getProject().equals(resource)){
    //                  element = rootInfo.project;
    //                  break;
    //               }
    //               IProject proj = (IProject)resource;
    //               if (JavaProject.hasJavaNature(proj)) {
    //                  element = JavaCore.create(proj);
    //               } else {
    //                  // java project may have been been closed or removed (look for
    //                  // element amongst old java project s list).
    //                  element =  this.state.findJavaProject(proj.getName());
    //               }
    //            }
    //            break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        element = rootInfo == null ? JavaModelManager.create(resource, manager.getJavaProject())
                : rootInfo.getPackageFragmentRoot(resource);
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        if (rootInfo != null) {
            if (rootInfo.project.contains(resource)) {
                PackageFragmentRoot root = (PackageFragmentRoot) rootInfo.getPackageFragmentRoot(null);
                // create package handle
                IPath pkgPath = path.removeFirstSegments(root.resource().toPath().getNameCount());
                String[] pkgName = pkgPath.segments();
                element = root.getPackageFragment(pkgName);
            }
        } else {
            // find the element that encloses the resource
            popUntilPrefixOf(path);

            if (this.currentElement == null) {
                element = JavaCore.create(resource);
            } else {
                // find the root
                PackageFragmentRoot root = this.currentElement.getPackageFragmentRoot();
                if (root == null) {
                    element = JavaCore.create(resource);
                } else if (((JavaProject) root.getJavaProject()).contains(resource)) {
                    // create package handle
                    IPath pkgPath = path.removeFirstSegments(root.getPath().segmentCount());
                    String[] pkgName = pkgPath.segments();
                    element = root.getPackageFragment(pkgName);
                }
            }
        }
        break;
    case IJavaElement.COMPILATION_UNIT:
    case IJavaElement.CLASS_FILE:
        // find the element that encloses the resource
        popUntilPrefixOf(path);

        if (this.currentElement == null) {
            element = rootInfo == null ? JavaModelManager.create(resource, manager.getJavaProject())
                    : JavaModelManager.create(resource, rootInfo.project);
        } else {
            // find the package
            IPackageFragment pkgFragment = null;
            switch (this.currentElement.getElementType()) {
            case IJavaElement.PACKAGE_FRAGMENT_ROOT:
                PackageFragmentRoot root = (PackageFragmentRoot) this.currentElement;
                IPath rootPath = root.getPath();
                IPath pkgPath = path.removeLastSegments(1);
                String[] pkgName = pkgPath.removeFirstSegments(rootPath.segmentCount()).segments();
                pkgFragment = root.getPackageFragment(pkgName);
                break;
            case IJavaElement.PACKAGE_FRAGMENT:
                Openable pkg = this.currentElement;
                if (pkg.getPath().equals(path.removeLastSegments(1))) {
                    pkgFragment = (IPackageFragment) pkg;
                } // else case of package x which is a prefix of x.y
                break;
            case IJavaElement.COMPILATION_UNIT:
            case IJavaElement.CLASS_FILE:
                pkgFragment = (IPackageFragment) this.currentElement.getParent();
                break;
            }
            if (pkgFragment == null) {
                element = rootInfo == null ? JavaCore.create(resource)
                        : JavaModelManager.create(resource, rootInfo.project);
            } else {
                if (elementType == IJavaElement.COMPILATION_UNIT) {
                    // create compilation unit handle
                    // fileName validation has been done in elementType(IResourceDelta, int, boolean)
                    String fileName = path.lastSegment();
                    element = pkgFragment.getCompilationUnit(fileName);
                } else {
                    // create class file handle
                    // fileName validation has been done in elementType(IResourceDelta, int, boolean)
                    String fileName = path.lastSegment();
                    element = pkgFragment.getClassFile(fileName);
                }
            }
        }
        break;
    }
    if (element == null)
        return null;
    this.currentElement = (Openable) element;
    return this.currentElement;
}

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

License:Open Source License

private boolean createExternalArchiveDelta(HashSet refreshedElements, IProgressMonitor monitor) {

    HashMap externalArchivesStatus = new HashMap();
    boolean hasDelta = false;

    // find JARs to refresh
    HashSet archivePathsToRefresh = new HashSet();
    Iterator iterator = refreshedElements.iterator();
    while (iterator.hasNext()) {
        IJavaElement element = (IJavaElement) iterator.next();
        switch (element.getElementType()) {
        case IJavaElement.PACKAGE_FRAGMENT_ROOT:
            archivePathsToRefresh.add(element.getPath());
            break;
        case IJavaElement.JAVA_PROJECT:
            JavaProject javaProject = (JavaProject) element;
            if (!JavaProject.hasJavaNature(javaProject.getProject())) {
                // project is not accessible or has lost its Java nature
                break;
            }//from   w  w  w.  ja  va  2  s .co  m
            IClasspathEntry[] classpath;
            try {
                classpath = javaProject.getResolvedClasspath();
                for (int j = 0, cpLength = classpath.length; j < cpLength; j++) {
                    if (classpath[j].getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
                        archivePathsToRefresh.add(classpath[j].getPath());
                    }
                }
            } catch (JavaModelException e) {
                // project doesn't exist -> ignore
            }
            break;
        case IJavaElement.JAVA_MODEL:
            //               Iterator projectNames = this.state.getOldJavaProjecNames().iterator();
            //               while (projectNames.hasNext()) {
            //                  String projectName = (String) projectNames.next();
            //                  IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
            //                  if (!JavaProject.hasJavaNature(project)) {
            //                     // project is not accessible or has lost its Java nature
            //                     continue;
            //                  }
            //                  javaProject = (JavaProject) JavaCore.create(project);
            //                  try {
            //                     classpath = javaProject.getResolvedClasspath();
            //                     for (int k = 0, cpLength = classpath.length; k < cpLength; k++){
            //                        if (classpath[k].getEntryKind() == IClasspathEntry.CPE_LIBRARY){
            //                           archivePathsToRefresh.add(classpath[k].getPath());
            //                        }
            //                     }
            //                  } catch (JavaModelException e2) {
            //                     // project doesn't exist -> ignore
            //                     continue;
            //                  }
            //               }
            throw new UnsupportedOperationException();
            //               break;
        }
    }

    //      // perform refresh
    //      Iterator projectNames = this.state.getOldJavaProjecNames().iterator();
    //      IWorkspaceRoot wksRoot = ResourcesPlugin.getWorkspace().getRoot();
    //      while (projectNames.hasNext()) {
    //
    //         if (monitor != null && monitor.isCanceled()) break;
    //
    //         String projectName = (String) projectNames.next();
    //         IProject project = wksRoot.getProject(projectName);
    //         if (!JavaProject.hasJavaNature(project)) {
    //            // project is not accessible or has lost its Java nature
    //            continue;
    //         }
    //         JavaProject javaProject = (JavaProject) JavaCore.create(project);
    //         IClasspathEntry[] entries;
    //         try {
    //            entries = javaProject.getResolvedClasspath();
    //         } catch (JavaModelException e1) {
    //            // project does not exist -> ignore
    //            continue;
    //         }
    //         boolean deltaContainsModifiedJar = false;
    //         for (int j = 0; j < entries.length; j++){
    //            if (entries[j].getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
    //               IPath entryPath = entries[j].getPath();
    //
    //               if (!archivePathsToRefresh.contains(entryPath)) continue; // not supposed to be refreshed
    //
    //               String status = (String)externalArchivesStatus.get(entryPath);
    //               if (status == null){
    //
    //                  // Clear the external file state for this path, since this method is responsible for updating it.
    //                  this.manager.clearExternalFileState(entryPath);
    //
    //                  // compute shared status
    //                  Object targetLibrary = JavaModel.getTarget(entryPath, true);
    //
    //                  if (targetLibrary == null){ // missing JAR
    //                     if (this.state.getExternalLibTimeStamps().remove(entryPath) != null /* file was known*/
    //                           && this.state.roots.get(entryPath) != null /* and it was on the classpath*/) {
    //                        externalArchivesStatus.put(entryPath, EXTERNAL_JAR_REMOVED);
    //                        // the jar was physically removed: remove the index
    //                        this.manager.indexManager.removeIndex(entryPath);
    //                     }
    //
    //                  } else if (targetLibrary instanceof File){ // external JAR
    //
    //                     File externalFile = (File)targetLibrary;
    //
    //                     // check timestamp to figure if JAR has changed in some way
    //                     Long oldTimestamp =(Long) this.state.getExternalLibTimeStamps().get(entryPath);
    //                     long newTimeStamp = getTimeStamp(externalFile);
    //                     if (oldTimestamp != null){
    //
    //                        if (newTimeStamp == 0){ // file doesn't exist
    //                           externalArchivesStatus.put(entryPath, EXTERNAL_JAR_REMOVED);
    //                           this.state.getExternalLibTimeStamps().remove(entryPath);
    //                           // remove the index
    //                           this.manager.indexManager.removeIndex(entryPath);
    //
    //                        } else if (oldTimestamp.longValue() != newTimeStamp){
    //                           externalArchivesStatus.put(entryPath, EXTERNAL_JAR_CHANGED);
    //                           this.state.getExternalLibTimeStamps().put(entryPath, new Long(newTimeStamp));
    //                           // first remove the index so that it is forced to be re-indexed
    //                           this.manager.indexManager.removeIndex(entryPath);
    //                           // then index the jar
    //                           this.manager.indexManager.indexLibrary(entryPath, project.getProject(), ((ClasspathEntry)entries[j]).getLibraryIndexLocation(), true);
    //                        } else {
    //                           URL indexLocation = ((ClasspathEntry)entries[j]).getLibraryIndexLocation();
    //                           if (indexLocation != null) { // force reindexing, this could be faster rather than maintaining the list
    //                              this.manager.indexManager.indexLibrary(entryPath, project.getProject(), indexLocation);
    //                           }
    //                           externalArchivesStatus.put(entryPath, EXTERNAL_JAR_UNCHANGED);
    //                        }
    //                     } else {
    //                        if (newTimeStamp == 0){ // jar still doesn't exist
    //                           externalArchivesStatus.put(entryPath, EXTERNAL_JAR_UNCHANGED);
    //                        } else {
    //                           externalArchivesStatus.put(entryPath, EXTERNAL_JAR_ADDED);
    //                           this.state.getExternalLibTimeStamps().put(entryPath, new Long(newTimeStamp));
    //                           // index the new jar
    //                           this.manager.indexManager.removeIndex(entryPath);
    //                           this.manager.indexManager.indexLibrary(entryPath, project.getProject(), ((ClasspathEntry)entries[j]).getLibraryIndexLocation());
    //                        }
    //                     }
    //                  } else { // internal JAR
    //                     externalArchivesStatus.put(entryPath, INTERNAL_JAR_IGNORE);
    //                  }
    //               }
    //               // according to computed status, generate a delta
    //               status = (String)externalArchivesStatus.get(entryPath);
    //               if (status != null){
    //                  if (status == EXTERNAL_JAR_ADDED){
    //                     PackageFragmentRoot root = (PackageFragmentRoot) javaProject.getPackageFragmentRoot(entryPath.toString());
    //                     if (VERBOSE){
    //                        System.out.println("- External JAR ADDED, affecting root: "+root.getElementName()); //$NON-NLS-1$
    //                     }
    //                     elementAdded(root, null, null);
    //                     deltaContainsModifiedJar = true;
    //                     this.state.addClasspathValidation(javaProject); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=185733
    //                     hasDelta = true;
    //                  } else if (status == EXTERNAL_JAR_CHANGED) {
    //                     PackageFragmentRoot root = (PackageFragmentRoot) javaProject.getPackageFragmentRoot(entryPath.toString());
    //                     if (VERBOSE){
    //                        System.out.println("- External JAR CHANGED, affecting root: "+root.getElementName()); //$NON-NLS-1$
    //                     }
    //                     contentChanged(root);
    //                     deltaContainsModifiedJar = true;
    //                     hasDelta = true;
    //                  } else if (status == EXTERNAL_JAR_REMOVED) {
    //                     PackageFragmentRoot root = (PackageFragmentRoot) javaProject.getPackageFragmentRoot(entryPath.toString());
    //                     if (VERBOSE){
    //                        System.out.println("- External JAR REMOVED, affecting root: "+root.getElementName()); //$NON-NLS-1$
    //                     }
    //                     elementRemoved(root, null, null);
    //                     deltaContainsModifiedJar = true;
    //                     this.state.addClasspathValidation(javaProject); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=185733
    //                     hasDelta = true;
    //                  }
    //               }
    //            }
    //         }
    //
    //         if (deltaContainsModifiedJar) {
    //            javaProject.resetResolvedClasspath();
    //         }
    //      }
    //
    //      if (hasDelta){
    //         // flush jar type cache
    //         JavaModelManager.getJavaModelManager().resetJarTypeCache();
    //      }
    return hasDelta;
}

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;/*w ww.ja v a  2  s.  c om*/
        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 {/*from   w  w w  . j  a v a2s. c  om*/
            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.DeltaProcessor.java

License:Open Source License

private int elementType(File res, int kind, int parentType, RootInfo rootInfo) {
    Path path = new Path(res.getAbsolutePath());
    switch (parentType) {
    case IJavaElement.JAVA_MODEL:
        // case of a movedTo or movedFrom project (other cases are handled in processResourceDelta(...)
        return IJavaElement.JAVA_PROJECT;

    case NON_JAVA_RESOURCE:
    case IJavaElement.JAVA_PROJECT:
        if (rootInfo == null) {
            rootInfo = enclosingRootInfo(path, kind);
        }//from   w w w  . ja  v a  2s. co m
        if (rootInfo != null && rootInfo.isRootOfProject(path)) {
            return IJavaElement.PACKAGE_FRAGMENT_ROOT;
        }
        // not yet in a package fragment root or root of another project
        // or package fragment to be included (see below)
        // $FALL-THROUGH$

    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
    case IJavaElement.PACKAGE_FRAGMENT:
        if (rootInfo == null) {
            IPath rootPath = externalPath(res);
            rootInfo = enclosingRootInfo(rootPath, kind);
        }
        if (rootInfo == null) {
            return NON_JAVA_RESOURCE;
        }
        if (Util.isExcluded(path, rootInfo.inclusionPatterns, rootInfo.exclusionPatterns, false)) {
            return NON_JAVA_RESOURCE;
        }
        if (res.isDirectory()) {
            if (parentType == NON_JAVA_RESOURCE && !Util.isExcluded(new Path(res.getParent()),
                    rootInfo.inclusionPatterns, rootInfo.exclusionPatterns, false)) {
                // parent is a non-Java resource because it doesn't have a valid package name (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=130982)
                return NON_JAVA_RESOURCE;
            }
            String sourceLevel = rootInfo.project == null ? null
                    : rootInfo.project.getOption(JavaCore.COMPILER_SOURCE, true);
            String complianceLevel = rootInfo.project == null ? null
                    : rootInfo.project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
            if (Util.isValidFolderNameForPackage(res.getName(), sourceLevel, complianceLevel)) {
                return IJavaElement.PACKAGE_FRAGMENT;
            }
            return NON_JAVA_RESOURCE;
        }
        String fileName = res.getName();
        String sourceLevel = rootInfo.project == null ? null
                : rootInfo.project.getOption(JavaCore.COMPILER_SOURCE, true);
        String complianceLevel = rootInfo.project == null ? null
                : rootInfo.project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
        if (Util.isValidCompilationUnitName(fileName, sourceLevel, complianceLevel)) {
            return IJavaElement.COMPILATION_UNIT;
        } else if (Util.isValidClassFileName(fileName, sourceLevel, complianceLevel)) {
            return IJavaElement.CLASS_FILE;
        } else {
            IPath rootPath = externalPath(res);
            if ((rootInfo = rootInfo(rootPath, kind)) != null
                    && rootInfo.project.getProject().getFullPath().isPrefixOf(
                            rootPath) /*ensure root is a root of its project (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=185310) */) {
                // case of proj=src=bin and resource is a jar file on the classpath
                return IJavaElement.PACKAGE_FRAGMENT_ROOT;
            } else {
                return NON_JAVA_RESOURCE;
            }
        }

    default:
        return NON_JAVA_RESOURCE;
    }
}