public static ErrorDescription hint()

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());
    }