Search in sources :

Example 6 with Index

use of org.eclipse.jdt.internal.core.index.Index in project che by eclipse.

the class IndexManager method jobWasCancelled.

public synchronized void jobWasCancelled(IPath containerPath) {
    IndexLocation indexLocation = computeIndexLocation(containerPath);
    Index index = getIndex(indexLocation);
    if (index != null) {
        index.monitor = null;
        this.indexes.removeKey(indexLocation);
    }
    updateIndexState(indexLocation, UNKNOWN_STATE);
}
Also used : FileIndexLocation(org.eclipse.jdt.internal.core.index.FileIndexLocation) IndexLocation(org.eclipse.jdt.internal.core.index.IndexLocation) DiskIndex(org.eclipse.jdt.internal.core.index.DiskIndex) Index(org.eclipse.jdt.internal.core.index.Index)

Example 7 with Index

use of org.eclipse.jdt.internal.core.index.Index in project che by eclipse.

the class IndexManager method getIndex.

/**
     * Returns the index for a given project, according to the following algorithm:
     * - if index is already in memory: answers this one back
     * - if (reuseExistingFile) then read it and return this index and record it in memory
     * - if (createIfMissing) then create a new empty index and record it in memory
     * <p/>
     * Warning: Does not check whether index is consistent (not being used)
     */
public synchronized Index getIndex(IPath containerPath, IndexLocation indexLocation, boolean reuseExistingFile, boolean createIfMissing) {
    // Path is already canonical per construction
    Index index = getIndex(indexLocation);
    if (index == null) {
        Object state = getIndexStates().get(indexLocation);
        Integer currentIndexState = state == null ? UNKNOWN_STATE : (Integer) state;
        if (currentIndexState == UNKNOWN_STATE) {
            // should only be reachable for query jobs
            // IF you put an index in the cache, then AddJarFileToIndex fails because it thinks there is nothing to do
            rebuildIndex(indexLocation, containerPath);
            return null;
        }
        // index isn't cached, consider reusing an existing index file
        String containerPathString = containerPath.getDevice() == null ? containerPath.toString() : containerPath.toOSString();
        if (reuseExistingFile) {
            if (indexLocation.exists()) {
                // check before creating index so as to avoid creating a new empty index if file is missing
                try {
                    index = new Index(indexLocation, containerPathString, true);
                    this.indexes.put(indexLocation, index);
                    return index;
                } catch (IOException e) {
                    // failed to read the existing file or its no longer compatible
                    if (currentIndexState != REBUILDING_STATE && currentIndexState != REUSE_STATE) {
                        // corrupt, unless the index is already being rebuilt
                        if (JobManager.VERBOSE)
                            Util.verbose("-> cannot reuse existing index: " + indexLocation + " path: " + //$NON-NLS-1$ //$NON-NLS-2$
                            containerPathString);
                        rebuildIndex(indexLocation, containerPath);
                        return null;
                    }
                /*index = null;*/
                // will fall thru to createIfMissing & create a empty index for the rebuild all job to populate
                }
            }
            if (currentIndexState == SAVED_STATE) {
                // rebuild index if existing file is missing
                rebuildIndex(indexLocation, containerPath);
                return null;
            }
            if (currentIndexState == REUSE_STATE) {
                // supposed to be in reuse state but error in the index file, so reindex.
                if (JobManager.VERBOSE)
                    Util.verbose("-> cannot reuse given index: " + indexLocation + " path: " + //$NON-NLS-1$ //$NON-NLS-2$
                    containerPathString);
                this.indexLocations.put(containerPath, null);
                indexLocation = computeIndexLocation(containerPath);
                rebuildIndex(indexLocation, containerPath);
                return null;
            }
        }
        // index wasn't found on disk, consider creating an empty new one
        if (createIfMissing) {
            try {
                if (JobManager.VERBOSE)
                    Util.verbose(//$NON-NLS-1$ //$NON-NLS-2$
                    "-> create empty index: " + indexLocation + " path: " + containerPathString);
                index = new Index(indexLocation, containerPathString, false);
                this.indexes.put(indexLocation, index);
                return index;
            } catch (IOException e) {
                if (JobManager.VERBOSE)
                    Util.verbose("-> unable to create empty index: " + indexLocation + " path: " + //$NON-NLS-1$ //$NON-NLS-2$
                    containerPathString);
                // The file could not be created. Possible reason: the project has been deleted.
                return null;
            }
        }
    }
    //System.out.println(" index name: " + path.toOSString() + " <----> " + index.getIndexFile().getName());
    return index;
}
Also used : DiskIndex(org.eclipse.jdt.internal.core.index.DiskIndex) Index(org.eclipse.jdt.internal.core.index.Index) IOException(java.io.IOException)

Example 8 with Index

use of org.eclipse.jdt.internal.core.index.Index in project che by eclipse.

the class IndexManager method removeIndex.

/**
     * Removes the index for a given path.
     * This is a no-op if the index did not exist.
     */
public synchronized void removeIndex(IPath containerPath) {
    if (JobManager.VERBOSE || DEBUG)
        //$NON-NLS-1$
        Util.verbose("removing index " + containerPath);
    IndexLocation indexLocation = computeIndexLocation(containerPath);
    Index index = getIndex(indexLocation);
    File indexFile = null;
    if (index != null) {
        index.monitor = null;
        indexFile = index.getIndexFile();
    }
    if (indexFile == null)
        // index is not cached yet, but still want to delete the file
        indexFile = indexLocation.getIndexFile();
    if (this.indexStates.get(indexLocation) == REUSE_STATE) {
        indexLocation.close();
        this.indexLocations.put(containerPath, null);
    } else if (indexFile != null && indexFile.exists()) {
        if (DEBUG)
            //$NON-NLS-1$
            Util.verbose("removing index file " + indexFile);
        indexFile.delete();
    }
    this.indexes.removeKey(indexLocation);
    if (IS_MANAGING_PRODUCT_INDEXES_PROPERTY) {
        this.indexLocations.removeKey(containerPath);
    }
    updateIndexState(indexLocation, null);
}
Also used : FileIndexLocation(org.eclipse.jdt.internal.core.index.FileIndexLocation) IndexLocation(org.eclipse.jdt.internal.core.index.IndexLocation) DiskIndex(org.eclipse.jdt.internal.core.index.DiskIndex) Index(org.eclipse.jdt.internal.core.index.Index) IFile(org.eclipse.core.resources.IFile) File(java.io.File)

Example 9 with Index

use of org.eclipse.jdt.internal.core.index.Index in project che by eclipse.

the class IndexManager method getIndexes.

/**
     * Returns all the existing indexes for a list of index locations.
     * Note that this may trigger some indexes recreation work
     *
     * @param locations
     *         The list of of the index files path
     * @return The corresponding indexes list.
     */
public Index[] getIndexes(IndexLocation[] locations, IProgressMonitor progressMonitor) {
    // acquire the in-memory indexes on the fly
    int length = locations.length;
    Index[] locatedIndexes = new Index[length];
    int count = 0;
    if (this.javaLikeNamesChanged) {
        this.javaLikeNamesChanged = hasJavaLikeNamesChanged();
    }
    for (int i = 0; i < length; i++) {
        if (progressMonitor != null && progressMonitor.isCanceled()) {
            throw new OperationCanceledException();
        }
        // may trigger some index recreation work
        IndexLocation indexLocation = locations[i];
        Index index = getIndex(indexLocation);
        if (index == null) {
            // only need containerPath if the index must be built
            IPath containerPath = (IPath) this.indexLocations.keyForValue(indexLocation);
            if (containerPath != null) {
                // sanity check
                index = getIndex(containerPath, indexLocation, true, /*reuse index file*/
                false);
                if (index != null && this.javaLikeNamesChanged && !index.isIndexForJar()) {
                    // When a change in java like names extension has been detected, all
                    // non jar files indexes (i.e. containing sources) need to be rebuilt.
                    // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=286379
                    File indexFile = index.getIndexFile();
                    if (indexFile.exists()) {
                        if (DEBUG)
                            //$NON-NLS-1$
                            Util.verbose("Change in javaLikeNames - removing index file for " + containerPath);
                        indexFile.delete();
                    }
                    this.indexes.put(indexLocation, null);
                    rebuildIndex(indexLocation, containerPath);
                    index = null;
                }
            } else {
                if (indexLocation.isParticipantIndex() && indexLocation.exists()) {
                    // the index belongs to non-jdt search participant
                    try {
                        IPath container = getParticipantsContainer(indexLocation);
                        if (container != null) {
                            index = new Index(indexLocation, container.toOSString(), true);
                            this.indexes.put(indexLocation, index);
                        }
                    } catch (IOException e) {
                    // ignore
                    }
                }
            }
        }
        if (index != null)
            // only consider indexes which are ready
            locatedIndexes[count++] = index;
    }
    if (this.javaLikeNamesChanged) {
        writeJavaLikeNamesFile();
        this.javaLikeNamesChanged = false;
    }
    if (count < length) {
        System.arraycopy(locatedIndexes, 0, locatedIndexes = new Index[count], 0, count);
    }
    return locatedIndexes;
}
Also used : IPath(org.eclipse.core.runtime.IPath) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) FileIndexLocation(org.eclipse.jdt.internal.core.index.FileIndexLocation) IndexLocation(org.eclipse.jdt.internal.core.index.IndexLocation) DiskIndex(org.eclipse.jdt.internal.core.index.DiskIndex) Index(org.eclipse.jdt.internal.core.index.Index) IOException(java.io.IOException) IFile(org.eclipse.core.resources.IFile) File(java.io.File)

Example 10 with Index

use of org.eclipse.jdt.internal.core.index.Index in project che by eclipse.

the class IndexManager method addIndex.

synchronized boolean addIndex(IPath containerPath, IndexLocation indexFile) {
    getIndexStates().put(indexFile, REUSE_STATE);
    this.indexLocations.put(containerPath, indexFile);
    Index index = getIndex(containerPath, indexFile, true, false);
    if (index == null) {
        indexFile.close();
        this.indexLocations.put(containerPath, null);
        return false;
    }
    writeIndexMapFile();
    return true;
}
Also used : DiskIndex(org.eclipse.jdt.internal.core.index.DiskIndex) Index(org.eclipse.jdt.internal.core.index.Index)

Aggregations

Index (org.eclipse.jdt.internal.core.index.Index)12 DiskIndex (org.eclipse.jdt.internal.core.index.DiskIndex)11 FileIndexLocation (org.eclipse.jdt.internal.core.index.FileIndexLocation)7 IndexLocation (org.eclipse.jdt.internal.core.index.IndexLocation)7 IOException (java.io.IOException)6 IFile (org.eclipse.core.resources.IFile)3 File (java.io.File)2 IPath (org.eclipse.core.runtime.IPath)2 URI (java.net.URI)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 IResource (org.eclipse.core.resources.IResource)1 IResourceProxy (org.eclipse.core.resources.IResourceProxy)1 IResourceProxyVisitor (org.eclipse.core.resources.IResourceProxyVisitor)1 IWorkspaceRoot (org.eclipse.core.resources.IWorkspaceRoot)1 CoreException (org.eclipse.core.runtime.CoreException)1 OperationCanceledException (org.eclipse.core.runtime.OperationCanceledException)1 IClasspathEntry (org.eclipse.jdt.core.IClasspathEntry)1 IJavaSearchScope (org.eclipse.jdt.core.search.IJavaSearchScope)1 SourceElementParser (org.eclipse.jdt.internal.compiler.SourceElementParser)1