in remoting/ide/usages/src/org/netbeans/modules/jackpot30/ide/usages/hints/RemotelyUnused.java [72:128]
public static ErrorDescription hint(HintContext ctx) throws URISyntaxException, IOException {
Element toSearch = ctx.getInfo().getTrees().getElement(ctx.getPath());
if (toSearch == null) return null;
if (!toSearch.getKind().isField() && toSearch.getKind() != ElementKind.METHOD && toSearch.getKind() != ElementKind.CONSTRUCTOR) return null;
if (toSearch.getKind() == ElementKind.METHOD && ctx.getInfo().getElementUtilities().overridesMethod((ExecutableElement) toSearch)) return null;
final String serialized = JavaUtils.serialize(ElementHandle.create(toSearch));
for (RemoteIndex idx : RemoteIndex.loadIndices()) {
String result = LocalCache.runOverLocalCache(idx, new Task<IndexReader, String>() {
@Override
public String run(IndexReader reader, AtomicBoolean cancel) throws IOException {
Query query = new TermQuery(new Term("usagesSignature", serialized));
Searcher s = new IndexSearcher(reader);
BitSet matchingDocuments = new BitSet(reader.maxDoc());
Collector c = new BitSetCollector(matchingDocuments);
s.search(query, c);
for (int docNum = matchingDocuments.nextSetBit(0); docNum >= 0; docNum = matchingDocuments.nextSetBit(docNum + 1)) {
if (cancel.get()) return VAL_UNKNOWN;
final Document doc = reader.document(docNum);
return doc.get("usagesUsages");
}
return VAL_UNKNOWN;
}
}, null, new AtomicBoolean()/*XXX*/);
if (result == null) {
URI resolved = new URI(idx.remote.toExternalForm() + "/usages/search?path=" + WebUtilities.escapeForQuery(idx.remoteSegment) + "&signatures=" + WebUtilities.escapeForQuery(serialized));
String response = WebUtilities.requestStringResponse(resolved, new AtomicBoolean());
if (response != null) {
result = response.trim().isEmpty() ? VAL_UNUSED : VAL_USED;
} else {
result = VAL_UNKNOWN;
}
final String resultFin = result;
LocalCache.saveToLocalCache(idx, new Task<IndexWriter, Void>() {
@Override public Void run(IndexWriter p, AtomicBoolean cancel) throws IOException {
Document doc = new Document();
doc.add(new Field("usagesSignature", serialized, Store.NO, Index.NOT_ANALYZED));
doc.add(new Field("usagesUsages", resultFin, Store.YES, Index.NO));
p.addDocument(doc);
return null;
}
});
}
if (!VAL_UNUSED.equals(result)) return null;
}
return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.ERR_NoUsages());
}