Lines 52-58
Link Here
|
52 |
import java.net.URI; |
52 |
import java.net.URI; |
53 |
import java.net.URISyntaxException; |
53 |
import java.net.URISyntaxException; |
54 |
import java.net.URL; |
54 |
import java.net.URL; |
55 |
import java.security.InvalidParameterException; |
|
|
56 |
import java.util.ArrayList; |
55 |
import java.util.ArrayList; |
57 |
import java.util.Arrays; |
56 |
import java.util.Arrays; |
58 |
import java.util.Collection; |
57 |
import java.util.Collection; |
Lines 146-151
Link Here
|
146 |
import org.openide.util.Parameters; |
145 |
import org.openide.util.Parameters; |
147 |
import org.openide.util.RequestProcessor; |
146 |
import org.openide.util.RequestProcessor; |
148 |
import org.openide.util.TopologicalSortException; |
147 |
import org.openide.util.TopologicalSortException; |
|
|
148 |
import org.openide.util.Union2; |
149 |
import org.openide.util.lookup.ServiceProvider; |
149 |
import org.openide.util.lookup.ServiceProvider; |
150 |
|
150 |
|
151 |
/** |
151 |
/** |
Lines 345-358
Link Here
|
345 |
if (LOGGER.isLoggable(Level.FINE)) { |
345 |
if (LOGGER.isLoggable(Level.FINE)) { |
346 |
LOGGER.fine("addIndexingJob: indexerName=" + indexerName); //NOI18N |
346 |
LOGGER.fine("addIndexingJob: indexerName=" + indexerName); //NOI18N |
347 |
} |
347 |
} |
348 |
|
348 |
|
349 |
Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos = IndexerCache.getCifCache().getIndexersByName(indexerName); |
349 |
Work w = new RefreshCifIndices(indexerName, scannedRoots2Dependencies.keySet(), sourcesForBinaryRoots); |
350 |
if (cifInfos == null) { |
350 |
scheduleWork(w, false); |
351 |
throw new InvalidParameterException("No CustomIndexerFactory with name: '" + indexerName + "'"); //NOI18N |
|
|
352 |
} else { |
353 |
Work w = new RefreshCifIndices(cifInfos, scannedRoots2Dependencies, sourcesForBinaryRoots); |
354 |
scheduleWork(w, false); |
355 |
} |
356 |
} |
351 |
} |
357 |
|
352 |
|
358 |
public void refreshAll(boolean fullRescan, boolean wait, boolean logStatistics, Object... filesOrFileObjects) { |
353 |
public void refreshAll(boolean fullRescan, boolean wait, boolean logStatistics, Object... filesOrFileObjects) { |
Lines 688-702
Link Here
|
688 |
if (evt.getPropertyName() != null && evt.getPropertyName().equals(CustomIndexerFactory.class.getName())) { |
683 |
if (evt.getPropertyName() != null && evt.getPropertyName().equals(CustomIndexerFactory.class.getName())) { |
689 |
if (!ignoreIndexerCacheEvents) { |
684 |
if (!ignoreIndexerCacheEvents) { |
690 |
@SuppressWarnings("unchecked") |
685 |
@SuppressWarnings("unchecked") |
691 |
Set<IndexerCache.IndexerInfo<CustomIndexerFactory>> changedIndexers = (Set<IndexerInfo<CustomIndexerFactory>>) evt.getNewValue(); |
686 |
Pair<URL,Set<IndexerCache.IndexerInfo<CustomIndexerFactory>>> changedIndexers = (Pair<URL,Set<IndexerInfo<CustomIndexerFactory>>>) evt.getNewValue(); |
692 |
scheduleWork(new RefreshCifIndices(changedIndexers, scannedRoots2Dependencies, sourcesForBinaryRoots), false); |
687 |
scheduleWork(new RefreshCifIndices(changedIndexers.second, Collections.<URL>singleton(changedIndexers.first), sourcesForBinaryRoots), false); |
693 |
} |
688 |
} |
694 |
return; |
689 |
return; |
695 |
} else if (evt.getPropertyName() != null && evt.getPropertyName().equals(EmbeddingIndexerFactory.class.getName())) { |
690 |
} else if (evt.getPropertyName() != null && evt.getPropertyName().equals(EmbeddingIndexerFactory.class.getName())) { |
696 |
if (!ignoreIndexerCacheEvents) { |
691 |
if (!ignoreIndexerCacheEvents) { |
697 |
@SuppressWarnings("unchecked") |
692 |
@SuppressWarnings("unchecked") |
698 |
Set<IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> changedIndexers = (Set<IndexerInfo<EmbeddingIndexerFactory>>) evt.getNewValue(); |
693 |
Pair<URL,Set<IndexerCache.IndexerInfo<EmbeddingIndexerFactory>>> changedIndexers = (Pair<URL,Set<IndexerInfo<EmbeddingIndexerFactory>>>) evt.getNewValue(); |
699 |
scheduleWork(new RefreshEifIndices(changedIndexers, scannedRoots2Dependencies, sourcesForBinaryRoots), false); |
694 |
scheduleWork(new RefreshEifIndices(changedIndexers.second, Collections.<URL>singleton(changedIndexers.first), sourcesForBinaryRoots), false); |
700 |
} |
695 |
} |
701 |
return; |
696 |
return; |
702 |
} |
697 |
} |
Lines 973-1001
Link Here
|
973 |
|
968 |
|
974 |
Collection<? extends Indexable> dirty = Collections.singleton(SPIAccessor.getInstance().create(new FileObjectIndexable(root.second, docFile))); |
969 |
Collection<? extends Indexable> dirty = Collections.singleton(SPIAccessor.getInstance().create(new FileObjectIndexable(root.second, docFile))); |
975 |
String mimeType = DocumentUtilities.getMimeType(document); |
970 |
String mimeType = DocumentUtilities.getMimeType(document); |
976 |
|
971 |
try { |
977 |
Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos = IndexerCache.getCifCache().getIndexersFor(mimeType); |
972 |
final FileObject cacheFolder = CacheFolder.getDataFolder(root.first); |
978 |
for(IndexerCache.IndexerInfo<CustomIndexerFactory> info : cifInfos) { |
973 |
final URL cacheFolderURL = cacheFolder.getURL(); |
979 |
try { |
974 |
Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos = IndexerCache.getCifCache().getIndexersFor(cacheFolderURL, mimeType); |
980 |
CustomIndexerFactory factory = info.getIndexerFactory(); |
975 |
for(IndexerCache.IndexerInfo<CustomIndexerFactory> info : cifInfos) { |
981 |
Context ctx = SPIAccessor.getInstance().createContext(CacheFolder.getDataFolder(root.first), root.first, |
976 |
try { |
982 |
factory.getIndexerName(), factory.getIndexVersion(), null, false, true, false, null); |
977 |
CustomIndexerFactory factory = info.getIndexerFactory(); |
983 |
factory.filesDirty(dirty, ctx); |
978 |
Context ctx = SPIAccessor.getInstance().createContext(cacheFolder, root.first, |
984 |
} catch (IOException ex) { |
979 |
factory.getIndexerName(), factory.getIndexVersion(), null, false, true, false, null); |
985 |
LOGGER.log(Level.WARNING, null, ex); |
980 |
factory.filesDirty(dirty, ctx); |
|
|
981 |
} catch (IOException ex) { |
982 |
LOGGER.log(Level.WARNING, null, ex); |
983 |
} |
986 |
} |
984 |
} |
987 |
} |
985 |
|
988 |
|
986 |
Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos = IndexerCache.getEifCache().getIndexersFor(cacheFolderURL, mimeType); |
989 |
Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos = IndexerCache.getEifCache().getIndexersFor(mimeType); |
987 |
for(IndexerCache.IndexerInfo<EmbeddingIndexerFactory> info : eifInfos) { |
990 |
for(IndexerCache.IndexerInfo<EmbeddingIndexerFactory> info : eifInfos) { |
988 |
try { |
991 |
try { |
989 |
EmbeddingIndexerFactory factory = info.getIndexerFactory(); |
992 |
EmbeddingIndexerFactory factory = info.getIndexerFactory(); |
990 |
Context ctx = SPIAccessor.getInstance().createContext(cacheFolder, root.first, |
993 |
Context ctx = SPIAccessor.getInstance().createContext(CacheFolder.getDataFolder(root.first), root.first, |
991 |
factory.getIndexerName(), factory.getIndexVersion(), null, false, true, false, null); |
994 |
factory.getIndexerName(), factory.getIndexVersion(), null, false, true, false, null); |
992 |
factory.filesDirty(dirty, ctx); |
995 |
factory.filesDirty(dirty, ctx); |
993 |
} catch (IOException ex) { |
996 |
} catch (IOException ex) { |
994 |
LOGGER.log(Level.WARNING, null, ex); |
997 |
LOGGER.log(Level.WARNING, null, ex); |
995 |
} |
998 |
} |
996 |
} |
|
|
997 |
} catch (IOException ioe) { |
998 |
LOGGER.log(Level.WARNING, null, ioe); |
999 |
} |
999 |
} |
1000 |
} |
1000 |
} |
1001 |
} else { |
1001 |
} else { |
Lines 1703-1709
Link Here
|
1703 |
try { |
1703 |
try { |
1704 |
FileObject cacheRoot = CacheFolder.getDataFolder(root); |
1704 |
FileObject cacheRoot = CacheFolder.getDataFolder(root); |
1705 |
|
1705 |
|
1706 |
Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos = IndexerCache.getCifCache().getIndexers(null); |
1706 |
Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos = IndexerCache.getCifCache().getIndexers(cacheRoot.getURL(), null); |
1707 |
for(IndexerCache.IndexerInfo<CustomIndexerFactory> cifInfo : cifInfos) { |
1707 |
for(IndexerCache.IndexerInfo<CustomIndexerFactory> cifInfo : cifInfos) { |
1708 |
CustomIndexerFactory factory = cifInfo.getIndexerFactory(); |
1708 |
CustomIndexerFactory factory = cifInfo.getIndexerFactory(); |
1709 |
Context ctx = SPIAccessor.getInstance().createContext(cacheRoot, root, factory.getIndexerName(), factory.getIndexVersion(), null, followUpJob, checkEditor, false, null); |
1709 |
Context ctx = SPIAccessor.getInstance().createContext(cacheRoot, root, factory.getIndexerName(), factory.getIndexVersion(), null, followUpJob, checkEditor, false, null); |
Lines 1711-1717
Link Here
|
1711 |
factory.filesDeleted(ci.getIndexablesFor(null), ctx); |
1711 |
factory.filesDeleted(ci.getIndexablesFor(null), ctx); |
1712 |
} |
1712 |
} |
1713 |
|
1713 |
|
1714 |
Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos = IndexerCache.getEifCache().getIndexers(null); |
1714 |
Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos = IndexerCache.getEifCache().getIndexers(cacheRoot.getURL(), null); |
1715 |
for(IndexerCache.IndexerInfo<EmbeddingIndexerFactory> eifInfo : eifInfos) { |
1715 |
for(IndexerCache.IndexerInfo<EmbeddingIndexerFactory> eifInfo : eifInfos) { |
1716 |
EmbeddingIndexerFactory factory = eifInfo.getIndexerFactory(); |
1716 |
EmbeddingIndexerFactory factory = eifInfo.getIndexerFactory(); |
1717 |
Context ctx = SPIAccessor.getInstance().createContext(cacheRoot, root, factory.getIndexerName(), factory.getIndexVersion(), null, followUpJob, checkEditor, false, null); |
1717 |
Context ctx = SPIAccessor.getInstance().createContext(cacheRoot, root, factory.getIndexerName(), factory.getIndexVersion(), null, followUpJob, checkEditor, false, null); |
Lines 2102-2108
Link Here
|
2102 |
if (crawler.isFinished()) { |
2102 |
if (crawler.isFinished()) { |
2103 |
final Map<SourceIndexerFactory,Boolean> invalidatedMap = new IdentityHashMap<SourceIndexerFactory, Boolean>(); |
2103 |
final Map<SourceIndexerFactory,Boolean> invalidatedMap = new IdentityHashMap<SourceIndexerFactory, Boolean>(); |
2104 |
final Map<Pair<String,Integer>,Pair<SourceIndexerFactory,Context>> ctxToFinish = new HashMap<Pair<String,Integer>,Pair<SourceIndexerFactory,Context>>(); |
2104 |
final Map<Pair<String,Integer>,Pair<SourceIndexerFactory,Context>> ctxToFinish = new HashMap<Pair<String,Integer>,Pair<SourceIndexerFactory,Context>>(); |
2105 |
final SourceIndexers indexers = SourceIndexers.load(false); |
2105 |
final SourceIndexers indexers = SourceIndexers.load(root, false); |
2106 |
invalidateSources(resources); |
2106 |
invalidateSources(resources); |
2107 |
scanStarted (root, sourceForBinaryRoot, indexers, invalidatedMap, ctxToFinish); |
2107 |
scanStarted (root, sourceForBinaryRoot, indexers, invalidatedMap, ctxToFinish); |
2108 |
delete(crawler.getDeletedResources(), root); |
2108 |
delete(crawler.getDeletedResources(), root); |
Lines 2442-2461
Link Here
|
2442 |
|
2442 |
|
2443 |
private static class RefreshCifIndices extends Work { |
2443 |
private static class RefreshCifIndices extends Work { |
2444 |
|
2444 |
|
2445 |
private final Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos; |
2445 |
private final Union2<String,Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>>> cifUnion; |
2446 |
private final Map<URL, List<URL>> scannedRoots2Dependencies; |
2446 |
private final Set<URL> rootsToRefresh; |
2447 |
private final Set<URL> sourcesForBinaryRoots; |
2447 |
private final Set<URL> sourcesForBinaryRoots; |
2448 |
|
2448 |
|
2449 |
public RefreshCifIndices(Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos, Map<URL, List<URL>> scannedRoots2Depencencies, Set<URL> sourcesForBinaryRoots) { |
2449 |
public RefreshCifIndices(Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos, Set<URL> rootsToRefresh, Set<URL> sourcesForBinaryRoots) { |
2450 |
super(false, false, NbBundle.getMessage(RepositoryUpdater.class, "MSG_RefreshingIndices"),true); //NOI18N |
2450 |
super(false, false, NbBundle.getMessage(RepositoryUpdater.class, "MSG_RefreshingIndices"),true); //NOI18N |
2451 |
this.cifInfos = cifInfos; |
2451 |
this.cifUnion = Union2.<String,Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>>>createSecond(cifInfos); |
2452 |
this.scannedRoots2Dependencies = scannedRoots2Depencencies; |
2452 |
this.rootsToRefresh = rootsToRefresh; |
2453 |
this.sourcesForBinaryRoots = sourcesForBinaryRoots; |
2453 |
this.sourcesForBinaryRoots = sourcesForBinaryRoots; |
2454 |
} |
2454 |
} |
2455 |
|
2455 |
|
|
|
2456 |
public RefreshCifIndices(String indexerName, Set<URL> rootsToRefresh, Set<URL> sourcesForBinaryRoots) { |
2457 |
super(false, false, NbBundle.getMessage(RepositoryUpdater.class, "MSG_RefreshingIndices"),true); //NOI18N |
2458 |
this.cifUnion = Union2.<String,Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>>>createFirst(indexerName); |
2459 |
this.rootsToRefresh = rootsToRefresh; |
2460 |
this.sourcesForBinaryRoots = sourcesForBinaryRoots; |
2461 |
} |
2462 |
|
2456 |
protected @Override boolean getDone() { |
2463 |
protected @Override boolean getDone() { |
2457 |
switchProgressToDeterminate(scannedRoots2Dependencies.size()); |
2464 |
switchProgressToDeterminate(rootsToRefresh.size()); |
2458 |
for(URL root : scannedRoots2Dependencies.keySet()) { |
2465 |
for(URL root : rootsToRefresh) { |
2459 |
if (getShuttdownRequest().isRaised()) { |
2466 |
if (getShuttdownRequest().isRaised()) { |
2460 |
// XXX: this only happens when the IDE is shutting down |
2467 |
// XXX: this only happens when the IDE is shutting down |
2461 |
return true; |
2468 |
return true; |
Lines 2480-2485
Link Here
|
2480 |
final LinkedList<Iterable<Indexable>> allIndexblesSentToIndexers = new LinkedList<Iterable<Indexable>>(); |
2487 |
final LinkedList<Iterable<Indexable>> allIndexblesSentToIndexers = new LinkedList<Iterable<Indexable>>(); |
2481 |
try { |
2488 |
try { |
2482 |
ClusteredIndexables ci = new ClusteredIndexables(resources); |
2489 |
ClusteredIndexables ci = new ClusteredIndexables(resources); |
|
|
2490 |
final FileObject cacheRoot = CacheFolder.getDataFolder(root); |
2491 |
Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cifInfos = |
2492 |
cifUnion.hasSecond() ? cifUnion.second() : IndexerCache.getCifCache().getIndexersByName(cacheRoot.getURL(), cifUnion.first()); |
2483 |
for(IndexerCache.IndexerInfo<CustomIndexerFactory> cifInfo : cifInfos) { |
2493 |
for(IndexerCache.IndexerInfo<CustomIndexerFactory> cifInfo : cifInfos) { |
2484 |
List<Iterable<Indexable>> indexerIndexablesList = new LinkedList<Iterable<Indexable>>(); |
2494 |
List<Iterable<Indexable>> indexerIndexablesList = new LinkedList<Iterable<Indexable>>(); |
2485 |
for(String mimeType : cifInfo.getMimeTypes()) { |
2495 |
for(String mimeType : cifInfo.getMimeTypes()) { |
Lines 2493-2499
Link Here
|
2493 |
} |
2503 |
} |
2494 |
|
2504 |
|
2495 |
final CustomIndexerFactory factory = cifInfo.getIndexerFactory(); |
2505 |
final CustomIndexerFactory factory = cifInfo.getIndexerFactory(); |
2496 |
final FileObject cacheRoot = CacheFolder.getDataFolder(root); |
2506 |
|
2497 |
final Context ctx = SPIAccessor.getInstance().createContext(cacheRoot, root, factory.getIndexerName(), factory.getIndexVersion(), null, false, false, sourceForBinaryRoot, getShuttdownRequest()); |
2507 |
final Context ctx = SPIAccessor.getInstance().createContext(cacheRoot, root, factory.getIndexerName(), factory.getIndexVersion(), null, false, false, sourceForBinaryRoot, getShuttdownRequest()); |
2498 |
SPIAccessor.getInstance().setAllFilesJob(ctx, true); |
2508 |
SPIAccessor.getInstance().setAllFilesJob(ctx, true); |
2499 |
transactionContexts.add(ctx); |
2509 |
transactionContexts.add(ctx); |
Lines 2534-2548
Link Here
|
2534 |
|
2544 |
|
2535 |
public @Override String toString() { |
2545 |
public @Override String toString() { |
2536 |
StringBuilder sb = new StringBuilder(); |
2546 |
StringBuilder sb = new StringBuilder(); |
2537 |
for(Iterator<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> it = cifInfos.iterator(); it.hasNext(); ) { |
2547 |
if (cifUnion.hasSecond()) { |
2538 |
IndexerCache.IndexerInfo<CustomIndexerFactory> cifInfo = it.next(); |
2548 |
for(Iterator<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> it = cifUnion.second().iterator(); it.hasNext(); ) { |
2539 |
sb.append(" indexer=").append(cifInfo.getIndexerName()).append('/').append(cifInfo.getIndexerVersion()); //NOI18N |
2549 |
IndexerCache.IndexerInfo<CustomIndexerFactory> cifInfo = it.next(); |
2540 |
sb.append(" ("); //NOI18N |
2550 |
sb.append(" indexer=").append(cifInfo.getIndexerName()).append('/').append(cifInfo.getIndexerVersion()); //NOI18N |
2541 |
printMimeTypes(cifInfo.getMimeTypes(), sb); |
2551 |
sb.append(" ("); //NOI18N |
2542 |
sb.append(')'); //NOI18N |
2552 |
printMimeTypes(cifInfo.getMimeTypes(), sb); |
2543 |
if (it.hasNext()) { |
2553 |
sb.append(')'); //NOI18N |
2544 |
sb.append(','); //NOI18N |
2554 |
if (it.hasNext()) { |
|
|
2555 |
sb.append(','); //NOI18N |
2556 |
} |
2545 |
} |
2557 |
} |
|
|
2558 |
} else { |
2559 |
sb.append("indexerName=").append(cifUnion.first()); //NOI18N |
2546 |
} |
2560 |
} |
2547 |
return super.toString() + sb.toString(); |
2561 |
return super.toString() + sb.toString(); |
2548 |
} |
2562 |
} |
Lines 2551-2569
Link Here
|
2551 |
private static class RefreshEifIndices extends Work { |
2565 |
private static class RefreshEifIndices extends Work { |
2552 |
|
2566 |
|
2553 |
private final Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos; |
2567 |
private final Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos; |
2554 |
private final Map<URL, List<URL>> scannedRoots2Dependencies; |
2568 |
private final Set<URL> toRefresh; |
2555 |
private final Set<URL> sourcesForBinaryRoots; |
2569 |
private final Set<URL> sourcesForBinaryRoots; |
2556 |
|
2570 |
|
2557 |
public RefreshEifIndices(Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos, Map<URL, List<URL>> scannedRoots2Depencencies, Set<URL> sourcesForBinaryRoots) { |
2571 |
public RefreshEifIndices(Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> eifInfos, Set<URL> toRefresh, Set<URL> sourcesForBinaryRoots) { |
2558 |
super(false, false, NbBundle.getMessage(RepositoryUpdater.class, "MSG_RefreshingIndices"),true); //NOI18N |
2572 |
super(false, false, NbBundle.getMessage(RepositoryUpdater.class, "MSG_RefreshingIndices"),true); //NOI18N |
2559 |
this.eifInfos = eifInfos; |
2573 |
this.eifInfos = eifInfos; |
2560 |
this.scannedRoots2Dependencies = scannedRoots2Depencencies; |
2574 |
this.toRefresh = toRefresh; |
2561 |
this.sourcesForBinaryRoots = sourcesForBinaryRoots; |
2575 |
this.sourcesForBinaryRoots = sourcesForBinaryRoots; |
2562 |
} |
2576 |
} |
2563 |
|
2577 |
|
2564 |
protected @Override boolean getDone() { |
2578 |
protected @Override boolean getDone() { |
2565 |
switchProgressToDeterminate(scannedRoots2Dependencies.size()); |
2579 |
switchProgressToDeterminate(toRefresh.size()); |
2566 |
for(URL root : scannedRoots2Dependencies.keySet()) { |
2580 |
for(URL root : toRefresh) { |
2567 |
if (getShuttdownRequest().isRaised()) { |
2581 |
if (getShuttdownRequest().isRaised()) { |
2568 |
// XXX: this only happens when the IDE is shutting down |
2582 |
// XXX: this only happens when the IDE is shutting down |
2569 |
return true; |
2583 |
return true; |
Lines 2859-2865
Link Here
|
2859 |
|
2873 |
|
2860 |
boolean finished = scanBinaries(depCtx); |
2874 |
boolean finished = scanBinaries(depCtx); |
2861 |
if (finished) { |
2875 |
if (finished) { |
2862 |
finished = scanSources(depCtx, null,null); |
2876 |
finished = scanSources(depCtx, false, null); |
2863 |
if (finished) { |
2877 |
if (finished) { |
2864 |
finished = scanRootFiles(fullRescanFiles); |
2878 |
finished = scanRootFiles(fullRescanFiles); |
2865 |
if (finished) { |
2879 |
if (finished) { |
Lines 2936-2942
Link Here
|
2936 |
private boolean useInitialState; |
2950 |
private boolean useInitialState; |
2937 |
|
2951 |
|
2938 |
private DependenciesContext depCtx; |
2952 |
private DependenciesContext depCtx; |
2939 |
protected SourceIndexers indexers = null; // is only ever filled by InitialRootsWork |
|
|
2940 |
|
2953 |
|
2941 |
public RootsWork( |
2954 |
public RootsWork( |
2942 |
Map<URL, List<URL>> scannedRoots2Depencencies, |
2955 |
Map<URL, List<URL>> scannedRoots2Depencencies, |
Lines 3076-3082
Link Here
|
3076 |
switchProgressToDeterminate(depCtx.newBinariesToScan.size() + depCtx.newRootsToScan.size()); |
3089 |
switchProgressToDeterminate(depCtx.newBinariesToScan.size() + depCtx.newRootsToScan.size()); |
3077 |
boolean finished = scanBinaries(depCtx); |
3090 |
boolean finished = scanBinaries(depCtx); |
3078 |
if (finished) { |
3091 |
if (finished) { |
3079 |
finished = scanSources(depCtx, indexers, scannedRoots2Dependencies); |
3092 |
finished = scanSources(depCtx, true, scannedRoots2Dependencies); |
3080 |
} |
3093 |
} |
3081 |
|
3094 |
|
3082 |
final List<URL> missingRoots = new LinkedList<URL>(); |
3095 |
final List<URL> missingRoots = new LinkedList<URL>(); |
Lines 3172-3186
Link Here
|
3172 |
} |
3185 |
} |
3173 |
|
3186 |
|
3174 |
if (!sources.isEmpty()) { |
3187 |
if (!sources.isEmpty()) { |
3175 |
final Iterable<? extends URL> roots = Collections.unmodifiableSet(sources); |
3188 |
final IndexerCache<CustomIndexerFactory> cifCache = IndexerCache.getCifCache(); |
3176 |
final Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> customIndexers = IndexerCache.getCifCache().getIndexers(null); |
3189 |
final IndexerCache<EmbeddingIndexerFactory> eifCache = IndexerCache.getEifCache(); |
3177 |
for (IndexerCache.IndexerInfo<CustomIndexerFactory> customIndexer : customIndexers) { |
3190 |
Map<IndexerCache.IndexerInfo<? extends SourceIndexerFactory >,Collection<URL>> rootsByFactories = new HashMap<IndexerInfo<? extends SourceIndexerFactory>, Collection<URL>>(); |
3178 |
customIndexer.getIndexerFactory().rootsRemoved(roots); |
3191 |
for (URL source : sources) { |
|
|
3192 |
try { |
3193 |
final FileObject cacheFolder = CacheFolder.getDataFolder(source, true); |
3194 |
final URL cacheFolderURL = cacheFolder.getURL(); |
3195 |
final Collection<? extends IndexerCache.IndexerInfo<CustomIndexerFactory>> cinfos = cifCache.getIndexers(cacheFolderURL, null); |
3196 |
for (IndexerCache.IndexerInfo<CustomIndexerFactory> info : cinfos) { |
3197 |
Collection<URL> rootsSet = rootsByFactories.get(info); |
3198 |
if (rootsSet == null) { |
3199 |
rootsSet = new HashSet<URL>(); |
3200 |
rootsByFactories.put(info, rootsSet); |
3201 |
} |
3202 |
rootsSet.add(source); |
3203 |
} |
3204 |
final Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> einfos = eifCache.getIndexers(cacheFolderURL, null); |
3205 |
for (IndexerCache.IndexerInfo<EmbeddingIndexerFactory> info : einfos) { |
3206 |
Collection<URL> rootsSet = rootsByFactories.get(info); |
3207 |
if (rootsSet == null) { |
3208 |
rootsSet = new HashSet<URL>(); |
3209 |
rootsByFactories.put(info, rootsSet); |
3210 |
} |
3211 |
rootsSet.add(source); |
3212 |
} |
3213 |
} catch (IOException ioe) { |
3214 |
LOGGER.log(Level.WARNING, null, ioe); |
3215 |
} |
3179 |
} |
3216 |
} |
3180 |
|
3217 |
for (Map.Entry<IndexerCache.IndexerInfo<? extends SourceIndexerFactory>,Collection<URL>> e : rootsByFactories.entrySet()) { |
3181 |
final Collection<? extends IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> embeddingIndexers = IndexerCache.getEifCache().getIndexers(null); |
3218 |
e.getKey().getIndexerFactory().rootsRemoved(Collections.unmodifiableCollection(e.getValue())); |
3182 |
for (IndexerCache.IndexerInfo<EmbeddingIndexerFactory> embeddingIndexer : embeddingIndexers) { |
|
|
3183 |
embeddingIndexer.getIndexerFactory().rootsRemoved(roots); |
3184 |
} |
3219 |
} |
3185 |
RepositoryUpdater.getDefault().rootsListeners.remove(sources, true); |
3220 |
RepositoryUpdater.getDefault().rootsListeners.remove(sources, true); |
3186 |
} |
3221 |
} |
Lines 3301-3307
Link Here
|
3301 |
return false; |
3336 |
return false; |
3302 |
} |
3337 |
} |
3303 |
|
3338 |
|
3304 |
protected final boolean scanSources(DependenciesContext ctx, SourceIndexers indexers, Map<URL, List<URL>> preregisterIn) { |
3339 |
protected final boolean scanSources(DependenciesContext ctx, boolean detectIndexerChanges, Map<URL, List<URL>> preregisterIn) { |
3305 |
assert ctx != null; |
3340 |
assert ctx != null; |
3306 |
long scannedRootsCnt = 0; |
3341 |
long scannedRootsCnt = 0; |
3307 |
long completeTime = 0; |
3342 |
long completeTime = 0; |
Lines 3309-3319
Link Here
|
3309 |
int totalDeletedFiles = 0; |
3344 |
int totalDeletedFiles = 0; |
3310 |
long totalRecursiveListenersTime = 0; |
3345 |
long totalRecursiveListenersTime = 0; |
3311 |
boolean finished = true; |
3346 |
boolean finished = true; |
3312 |
|
3347 |
|
3313 |
if (indexers == null) { |
|
|
3314 |
indexers = SourceIndexers.load(false); |
3315 |
} |
3316 |
|
3317 |
for (URL source : ctx.newRootsToScan) { |
3348 |
for (URL source : ctx.newRootsToScan) { |
3318 |
if (isCancelled()) { |
3349 |
if (isCancelled()) { |
3319 |
finished = false; |
3350 |
finished = false; |
Lines 3333-3338
Link Here
|
3333 |
preregistered = true; |
3364 |
preregistered = true; |
3334 |
} |
3365 |
} |
3335 |
try { |
3366 |
try { |
|
|
3367 |
final SourceIndexers indexers = SourceIndexers.load(source, detectIndexerChanges); |
3336 |
if (scanSource (source, ctx.fullRescanSourceRoots.contains(source), ctx.sourcesForBinaryRoots.contains(source), indexers, outOfDateFiles, deletedFiles, recursiveListenersTime)) { |
3368 |
if (scanSource (source, ctx.fullRescanSourceRoots.contains(source), ctx.sourcesForBinaryRoots.contains(source), indexers, outOfDateFiles, deletedFiles, recursiveListenersTime)) { |
3337 |
ctx.scannedRoots.add(source); |
3369 |
ctx.scannedRoots.add(source); |
3338 |
success = true; |
3370 |
success = true; |
Lines 3488-3497
Link Here
|
3488 |
|
3520 |
|
3489 |
public @Override boolean getDone() { |
3521 |
public @Override boolean getDone() { |
3490 |
try { |
3522 |
try { |
3491 |
if (indexers == null) { |
|
|
3492 |
indexers = SourceIndexers.load(true); |
3493 |
} |
3494 |
|
3495 |
if (waitForProjects) { |
3523 |
if (waitForProjects) { |
3496 |
boolean retry = true; |
3524 |
boolean retry = true; |
3497 |
while (retry) { |
3525 |
while (retry) { |
Lines 3958-3965
Link Here
|
3958 |
|
3986 |
|
3959 |
private static final class SourceIndexers { |
3987 |
private static final class SourceIndexers { |
3960 |
|
3988 |
|
3961 |
public static SourceIndexers load(boolean detectChanges) { |
3989 |
public static SourceIndexers load(final URL sourceRoot, final boolean detectChanges) throws IOException { |
3962 |
return new SourceIndexers(detectChanges); |
3990 |
return new SourceIndexers(sourceRoot, detectChanges); |
3963 |
} |
3991 |
} |
3964 |
|
3992 |
|
3965 |
public final Set<IndexerCache.IndexerInfo<CustomIndexerFactory>> changedCifs; |
3993 |
public final Set<IndexerCache.IndexerInfo<CustomIndexerFactory>> changedCifs; |
Lines 3967-3973
Link Here
|
3967 |
public final Set<IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> changedEifs; |
3995 |
public final Set<IndexerCache.IndexerInfo<EmbeddingIndexerFactory>> changedEifs; |
3968 |
public final Map<String, Set<IndexerCache.IndexerInfo<EmbeddingIndexerFactory>>> eifInfosMap; |
3996 |
public final Map<String, Set<IndexerCache.IndexerInfo<EmbeddingIndexerFactory>>> eifInfosMap; |
3969 |
|
3997 |
|
3970 |
private SourceIndexers(boolean detectChanges) { |
3998 |
private SourceIndexers(final URL sourceRoot, final boolean detectChanges) throws IOException { |
3971 |
final long start = System.currentTimeMillis(); |
3999 |
final long start = System.currentTimeMillis(); |
3972 |
if (detectChanges) { |
4000 |
if (detectChanges) { |
3973 |
changedCifs = new HashSet<IndexerCache.IndexerInfo<CustomIndexerFactory>>(); |
4001 |
changedCifs = new HashSet<IndexerCache.IndexerInfo<CustomIndexerFactory>>(); |
Lines 3976-3983
Link Here
|
3976 |
changedCifs = null; |
4004 |
changedCifs = null; |
3977 |
changedEifs = null; |
4005 |
changedEifs = null; |
3978 |
} |
4006 |
} |
3979 |
cifInfos = IndexerCache.getCifCache().getIndexers(changedCifs); |
4007 |
final URL cacheRootURL = CacheFolder.getDataFolder(sourceRoot).getURL(); |
3980 |
eifInfosMap = IndexerCache.getEifCache().getIndexersMap(changedEifs); |
4008 |
cifInfos = IndexerCache.getCifCache().getIndexers(cacheRootURL, changedCifs); |
|
|
4009 |
eifInfosMap = IndexerCache.getEifCache().getIndexersMap(cacheRootURL, changedEifs); |
3981 |
|
4010 |
|
3982 |
final long delta = System.currentTimeMillis() - start; |
4011 |
final long delta = System.currentTimeMillis() - start; |
3983 |
LOGGER.log(Level.FINE, "Loading indexers took {0} ms.", delta); // NOI18N |
4012 |
LOGGER.log(Level.FINE, "Loading indexers took {0} ms.", delta); // NOI18N |