@@ -134,7 +134,12 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
134
134
if (isClassFile ) {
135
135
result .add (PackageNode .createNodeForVirtualContainer (pkgRoot ));
136
136
}
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
+ }
138
143
result .add (PackageNode .createNodeForPackageFragment (packageFragment ));
139
144
result .add (PackageNode .createNodeForPrimaryType (typeRoot .findPrimaryType ()));
140
145
} else if (ExtUtils .isJarResourceUri (uri )) {
@@ -171,15 +176,16 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
171
176
IJavaElement parentJavaElement = JavaCore .create (parent );
172
177
if (parent instanceof IFolder && parentJavaElement instanceof IPackageFragment ) {
173
178
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 );
180
179
181
180
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
+ }
183
189
result .add (PackageNode .createNodeForPackageFragment (packageFragment ));
184
190
185
191
PackageNode item = new PackageNode (resource .getName (), resource .getFullPath ().toPortableString (), NodeKind .FILE );
@@ -276,24 +282,30 @@ private static List<PackageNode> getPackageFragmentRoots(PackageParams query, IP
276
282
if (containerEntry != null ) {
277
283
IPackageFragmentRoot [] packageFragmentRoots = javaProject .findPackageFragmentRoots (containerEntry );
278
284
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 ());
295
290
}
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 );
297
309
}
298
310
}
299
311
return children ;
0 commit comments