@Override public void clear() throws StorageException { final StubIndexImpl stubIndex = StubIndexImpl.getInstanceOrInvalidate(); final Collection<StubIndexKey> allStubIndexKeys = stubIndex != null ? stubIndex.getAllStubIndexKeys() : Collections.<StubIndexKey>emptyList(); try { for (StubIndexKey key : allStubIndexKeys) { //noinspection ConstantConditions stubIndex.getWriteLock(key).lock(); } getWriteLock().lock(); if (stubIndex != null) { stubIndex.clearAllIndices(); } super.clear(); } finally { getWriteLock().unlock(); for (StubIndexKey key : allStubIndexKeys) { //noinspection ConstantConditions stubIndex.getWriteLock(key).unlock(); } } }
private void dropUnregisteredIndices() { final Set<String> indicesToDrop = new HashSet<String>( myPreviouslyRegistered != null ? myPreviouslyRegistered.registeredIndices : Collections.<String>emptyList()); for (ID<?, ?> key : myIndices.keySet()) { indicesToDrop.remove(key.toString()); } for (String s : indicesToDrop) { FileUtil.delete(IndexInfrastructure.getIndexRootDir(ID.create(s))); } }
@Override public <K> Collection<K> getAllKeys(final StubIndexKey<K, ?> indexKey, @NotNull Project project) { FileBasedIndex.getInstance() .ensureUpToDate(StubUpdatingIndex.INDEX_ID, project, GlobalSearchScope.allScope(project)); final MyIndex<K> index = (MyIndex<K>) myIndices.get(indexKey); try { return index.getAllKeys(); } catch (StorageException e) { forceRebuild(e); } catch (RuntimeException e) { final Throwable cause = e.getCause(); if (cause instanceof IOException || cause instanceof StorageException) { forceRebuild(e); } throw e; } return Collections.emptyList(); }