in jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/PackageCommand.java [519:572]
private static List<PackageNode> convertToPackageNode(Object[] rootContent, IPackageFragmentRoot packageRoot,
IProgressMonitor pm) throws JavaModelException {
List<PackageNode> result = new ArrayList<>();
for (Object root : rootContent) {
if (root instanceof IPackageFragment) {
IPackageFragment fragment = (IPackageFragment) root;
if (fragment.isDefaultPackage()) {
// directly show root types under default package
PackageParams subQuery = new PackageParams(NodeKind.PACKAGE, packageRoot.getJavaProject().getProject().getLocationURI().toString(),
fragment.getPath().toPortableString(), fragment.getHandleIdentifier());
List<PackageNode> packageNodes = getRootTypes(subQuery, pm);
result.addAll(packageNodes);
} else {
PackageNode entry = PackageNode.createNodeForPackageFragment(fragment);
if (fragment.getResource() != null) {
entry.setUri(fragment.getResource().getLocationURI().toString());
} else {
entry.setUri(fragment.getPath().toFile().toURI().toString());
}
result.add(entry);
}
} else if (root instanceof IClassFile) {
IClassFile classFile = (IClassFile) root;
PackageNode entry = new PackageNode(classFile.getElementName(), null, NodeKind.FILE);
entry.setUri(JDTUtils.toUri(classFile));
result.add(entry);
} else if (root instanceof JarEntryResource) {
PackageNode jarNode = getJarEntryResource((JarEntryResource) root);
if (jarNode != null) {
result.add(jarNode);
}
} else if (root instanceof IFile) {
IFile file = (IFile) root;
PackageNode entry = new PackageNode(file.getName(), file.getFullPath().toPortableString(), NodeKind.FILE);
entry.setUri(JDTUtils.getFileURI(file));
result.add(entry);
} else if (root instanceof IFolder) {
IFolder folder = (IFolder) root;
String displayName = folder.getName();
if (packageRoot != null) {
// together with package list, we need to provide full folder name relative to
// package root
IPath path = folder.getFullPath().makeRelativeTo(packageRoot.getPath());
displayName = StringUtils.replace(path.toPortableString(), "/", ".");
}
PackageNode entry = new PackageNode(displayName, folder.getFullPath().toPortableString(), NodeKind.FOLDER);
entry.setUri(JDTUtils.getFileURI(folder));
result.add(entry);
}
}
return result;
}