in remoting/server/web/web.ui/src/org/netbeans/modules/jackpot30/backend/ui/UI.java [267:341]
public String searchUsages(@Context UriInfo uriInfo, @QueryParam("path") List<String> paths, @QueryParam("signature") final String signature) throws URISyntaxException, IOException {
String urlBase = URL_BASE_OVERRIDE != null ? URL_BASE_OVERRIDE : uriInfo.getBaseUri().toString();
Map<String, Map<?, ?>> segment2Result = new HashMap<String, Map<?, ?>>();
if (paths == null) {
Map<String,Map<String, String>> pathsList = list(urlBase);
paths = new ArrayList<String>(pathsList.keySet());
}
for (String path : paths) {
Map<String, Map<String, Object>> usageFile2Flags = new HashMap<String, Map<String, Object>>();
URI usagesURI = new URI(urlBase + "index/usages/search?path=" + escapeForQuery(path) + "&signatures=" + escapeForQuery(signature));
List<String> files = new ArrayList<String>(WebUtilities.requestStringArrayResponse(usagesURI));
for (String file : files) {
Map<String, Object> flags = usageFile2Flags.get(file);
if (flags == null) {
usageFile2Flags.put(file, flags = new HashMap<String, Object>());
}
flags.put("usage", "true");
}
if (signature.startsWith("CLASS:") || signature.startsWith("INTERFACE:") || signature.startsWith("ENUM:") || signature.startsWith("ANNOTATION_TYPE:")) {
final String type = strip(signature, "CLASS:", "INTERFACE:", "ENUM:", "ANNOTATION_TYPE:");
URI u = new URI(urlBase + "index/implements/search?path=" + escapeForQuery(path) + "&type=" + escapeForQuery(type));
Map<String, List<Map<String, String>>> data = Pojson.load(HashMap.class, u);
for (Entry<String, List<Map<String, String>>> relpath2ImplementorsE : data.entrySet()) {
for (Map<String, String> implementorData : relpath2ImplementorsE.getValue()) {
String file = implementorData.get("file");
Map<String, Object> flags = usageFile2Flags.get(file);
if (flags == null) {
usageFile2Flags.put(file, flags = new HashMap<String, Object>());
}
List<String> implementors = (List<String>) flags.get("subtypes");
if (implementors == null) {
flags.put("subtypes", implementors = new ArrayList<String>());
}
implementors.add(implementorData.get("class"));
}
}
} else if (signature.startsWith("METHOD:")) {
URI u = new URI(urlBase + "index/implements/search?path=" + escapeForQuery(path) + "&method=" + escapeForQuery(signature));
Map<String, List<Map<String, String>>> data = Pojson.load(HashMap.class, u);
for (Entry<String, List<Map<String, String>>> relpath2ImplementorsE : data.entrySet()) {
for (Map<String, String> implementorData : relpath2ImplementorsE.getValue()) {
String file = implementorData.get("file");
Map<String, Object> flags = usageFile2Flags.get(file);
if (flags == null) {
usageFile2Flags.put(file, flags = new HashMap<String, Object>());
}
List<String> overridersParents = (List<String>) flags.get("overridersParents");
if (overridersParents == null) {
flags.put("overridersParents", overridersParents = new ArrayList<String>());
}
overridersParents.add(implementorData.get("enclosingFQN"));
}
}
}
segment2Result.put(path, usageFile2Flags);
}
return Pojson.save(segment2Result);
}