in jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/PackageCommand.java [380:426]
private static List<PackageNode> getRootTypes(PackageParams query, IProgressMonitor pm) {
try {
IPackageFragment packageFragment = (IPackageFragment) JavaCore.create(query.getHandlerIdentifier());
if (packageFragment != null) {
List<IType> primaryTypes = new ArrayList<>();
for (IJavaElement element : packageFragment.getChildren()) {
if (element instanceof ITypeRoot) {
// Filter out the inner class files
if (element instanceof IClassFile && element.getElementName().contains("$")) {
continue;
}
IType primaryType = ((ITypeRoot) element).findPrimaryType();
if (primaryType != null) {
primaryTypes.add(primaryType);
}
}
}
Object[] nonJavaResources = packageFragment.getNonJavaResources();
List<PackageNode> rootTypeNodes = primaryTypes.stream()
.map(PackageNode::createNodeForPrimaryType)
.collect(Collectors.toList());
if (nonJavaResources.length == 0) {
return rootTypeNodes;
}
// when .java files and other .properties files are mixed up
rootTypeNodes.addAll(
Arrays.stream(nonJavaResources).filter(resource -> resource instanceof IFile || resource instanceof JarEntryFile).map(resource -> {
if (resource instanceof IFile) {
IFile file = (IFile) resource;
PackageNode item = new PackageNode(file.getName(), file.getFullPath().toPortableString(), NodeKind.FILE);
item.setUri(JDTUtils.getFileURI(file));
return item;
} else {
JarEntryFile file = (JarEntryFile) resource;
PackageNode entry = new PackageNode(file.getName(), file.getFullPath().toPortableString(), NodeKind.FILE);
entry.setUri(ExtUtils.toUri((JarEntryFile) resource));
return entry;
}
}).collect(Collectors.toList()));
return rootTypeNodes;
}
} catch (CoreException e) {
JdtlsExtActivator.logException("Problem load project classfile list ", e);
}
return Collections.emptyList();
}