List<Location> (@NotNull String protocol, @NotNull String path, @NotNull Project project, @NotNull GlobalSearchScope scope) { if (!PROTOCOL_ID.equals(protocol)) { return Collections.emptyList(); } final List<String> list = StringUtil.split(path, "."); if (list.isEmpty()) { return Collections.emptyList(); } final int listSize = list.size(); // parse path as [ns.]*fileName.className[.methodName] if (listSize == 2) { return findLocations(project, list.get(0), list.get(1), null); } if (listSize > 2) { final String className = list.get(listSize - 2); final String methodName = list.get(listSize - 1); String fileName = list.get(listSize - 3); final List<Location> locations = findLocations(project, fileName, className, methodName); if (locations.size() > 0) { return locations; } return findLocations(project, list.get(listSize-2), list.get(listSize-1), null); } return Collections.emptyList(); }