@@ -134,7 +134,12 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
134134 if (isClassFile ) {
135135 result .add (PackageNode .createNodeForVirtualContainer (pkgRoot ));
136136 }
137- result .add (PackageNode .createNodeForPackageFragmentRoot (pkgRoot ));
137+ // for invisible project, removing the '_' link name may cause an empty named package root
138+ // in this case, we will avoid that 'empty' node from displaying
139+ PackageNode pkgRootNode = PackageNode .createNodeForPackageFragmentRoot (pkgRoot );
140+ if (StringUtils .isNotBlank (pkgRootNode .getName ())) {
141+ result .add (pkgRootNode );
142+ }
138143 result .add (PackageNode .createNodeForPackageFragment (packageFragment ));
139144 result .add (PackageNode .createNodeForPrimaryType (typeRoot .findPrimaryType ()));
140145 } else if (ExtUtils .isJarResourceUri (uri )) {
@@ -171,15 +176,16 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
171176 IJavaElement parentJavaElement = JavaCore .create (parent );
172177 if (parent instanceof IFolder && parentJavaElement instanceof IPackageFragment ) {
173178 IPackageFragment packageFragment = (IPackageFragment ) parentJavaElement ;
174- IPackageFragmentRoot pkgRoot = (IPackageFragmentRoot ) packageFragment .getParent ();
175- PackageNode rootNode = null ;
176-
177- rootNode = new PackageRootNode (pkgRoot ,
178- ExtUtils .removeProjectSegment (packageFragment .getJavaProject ().getElementName (), pkgRoot .getPath ()).toPortableString (),
179- NodeKind .PACKAGEROOT );
180179
181180 result .add (PackageNode .createNodeForProject (packageFragment ));
182- result .add (rootNode );
181+
182+ IPackageFragmentRoot pkgRoot = (IPackageFragmentRoot ) packageFragment .getAncestor (IJavaElement .PACKAGE_FRAGMENT_ROOT );
183+ // for invisible project, removing the '_' link name may cause an empty named package root
184+ // in this case, we will avoid that 'empty' node from displaying
185+ PackageNode pkgRootNode = PackageNode .createNodeForPackageFragmentRoot (pkgRoot );
186+ if (StringUtils .isNotBlank (pkgRootNode .getName ())) {
187+ result .add (pkgRootNode );
188+ }
183189 result .add (PackageNode .createNodeForPackageFragment (packageFragment ));
184190
185191 PackageNode item = new PackageNode (resource .getName (), resource .getFullPath ().toPortableString (), NodeKind .FILE );
@@ -276,24 +282,30 @@ private static List<PackageNode> getPackageFragmentRoots(PackageParams query, IP
276282 if (containerEntry != null ) {
277283 IPackageFragmentRoot [] packageFragmentRoots = javaProject .findPackageFragmentRoots (containerEntry );
278284 for (IPackageFragmentRoot fragmentRoot : packageFragmentRoots ) {
279- String displayName = fragmentRoot .getElementName ();
280- if (fragmentRoot .getKind () == IPackageFragmentRoot .K_SOURCE ) {
281- displayName = ExtUtils .removeProjectSegment (javaProject .getElementName (), fragmentRoot .getPath ()).toPortableString ();
282- }
283- PackageRootNode node = new PackageRootNode (fragmentRoot , displayName , NodeKind .PACKAGEROOT );
284- node .setHandlerIdentifier (fragmentRoot .getHandleIdentifier ());
285- children .add (node );
286- if (fragmentRoot instanceof JrtPackageFragmentRoot ) {
287- node .setModuleName (fragmentRoot .getModuleDescription ().getElementName ());
288- }
289-
290- IClasspathEntry resolvedClasspathEntry = fragmentRoot .getResolvedClasspathEntry ();
291- if (resolvedClasspathEntry != null ) {
292- Map <String , String > attributes = new HashMap <>();
293- for (IClasspathAttribute attribute : resolvedClasspathEntry .getExtraAttributes ()) {
294- attributes .put (attribute .getName (), attribute .getValue ());
285+ PackageRootNode node = PackageNode .createNodeForPackageFragmentRoot (fragmentRoot );
286+ if (StringUtils .isNotBlank (node .getName ())) {
287+ node .setHandlerIdentifier (fragmentRoot .getHandleIdentifier ());
288+ if (fragmentRoot instanceof JrtPackageFragmentRoot ) {
289+ node .setModuleName (fragmentRoot .getModuleDescription ().getElementName ());
295290 }
296- node .setAttributes (attributes );
291+
292+ IClasspathEntry resolvedClasspathEntry = fragmentRoot .getResolvedClasspathEntry ();
293+ if (resolvedClasspathEntry != null ) {
294+ Map <String , String > attributes = new HashMap <>();
295+ for (IClasspathAttribute attribute : resolvedClasspathEntry .getExtraAttributes ()) {
296+ attributes .put (attribute .getName (), attribute .getValue ());
297+ }
298+ node .setAttributes (attributes );
299+ }
300+
301+ children .add (node );
302+ } else {
303+ // for invisible project, the package root name may become empty after removing the '_',
304+ // in this case, we skip this root node from showing in the explorer and keep finding its children.
305+ PackageParams subQuery = new PackageParams (NodeKind .PACKAGEROOT , query .getProjectUri (),
306+ query .getPath (), fragmentRoot .getHandleIdentifier ());
307+ List <PackageNode > packageNodes = getPackages (subQuery , pm );
308+ children .addAll (packageNodes );
297309 }
298310 }
299311 return children ;
0 commit comments