private static List getRootTypes()

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