41
41
import org .eclipse .jdt .core .IJarEntryResource ;
42
42
import org .eclipse .jdt .core .IJavaElement ;
43
43
import org .eclipse .jdt .core .IJavaProject ;
44
+ import org .eclipse .jdt .core .IModuleDescription ;
44
45
import org .eclipse .jdt .core .IPackageFragment ;
45
46
import org .eclipse .jdt .core .IPackageFragmentRoot ;
46
47
import org .eclipse .jdt .core .IType ;
@@ -125,8 +126,8 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
125
126
if (typeRoot != null && typeRoot .findPrimaryType () != null ) {
126
127
// Add project node:
127
128
result .add (PackageNode .createNodeForProject (typeRoot ));
128
- IPackageFragment packageFragment = (IPackageFragment ) typeRoot .getParent ( );
129
- IPackageFragmentRoot pkgRoot = (IPackageFragmentRoot ) packageFragment .getParent ( );
129
+ IPackageFragment packageFragment = (IPackageFragment ) typeRoot .getAncestor ( IJavaElement . PACKAGE_FRAGMENT );
130
+ IPackageFragmentRoot pkgRoot = (IPackageFragmentRoot ) packageFragment .getAncestor ( IJavaElement . PACKAGE_FRAGMENT_ROOT );
130
131
// TODO: Let the client handle the display instead. Server side should always
131
132
// provide the container node.
132
133
boolean isClassFile = typeRoot instanceof IClassFile ;
@@ -280,6 +281,7 @@ private static List<PackageNode> getPackageFragmentRoots(PackageParams query, IP
280
281
displayName = ExtUtils .removeProjectSegment (javaProject .getElementName (), fragmentRoot .getPath ()).toPortableString ();
281
282
}
282
283
PackageRootNode node = new PackageRootNode (fragmentRoot , displayName , NodeKind .PACKAGEROOT );
284
+ node .setHandlerIdentifier (fragmentRoot .getHandleIdentifier ());
283
285
children .add (node );
284
286
if (fragmentRoot instanceof JrtPackageFragmentRoot ) {
285
287
node .setModuleName (fragmentRoot .getModuleDescription ().getElementName ());
@@ -317,117 +319,103 @@ private static List<PackageNode> getPackageFragmentRoots(PackageParams query, IP
317
319
}
318
320
319
321
private static List <PackageNode > getPackages (PackageParams query , IProgressMonitor pm ) {
320
- IJavaProject javaProject = getJavaProject (query .getProjectUri ());
321
- if (javaProject != null ) {
322
- try {
323
- IPackageFragmentRoot packageRoot = javaProject .findPackageFragmentRoot (Path .fromPortableString (query .getRootPath ()));
324
- if (packageRoot == null ) {
325
- throw new CoreException (
326
- new Status (IStatus .ERROR , JdtlsExtActivator .PLUGIN_ID , String .format ("No package root found for %s" , query .getPath ())));
327
- }
328
- Object [] result = getPackageFragmentRootContent (packageRoot , pm );
329
- return convertToPackageNode (result , packageRoot );
330
- } catch (CoreException e ) {
331
- JdtlsExtActivator .logException ("Problem load project package " , e );
322
+ try {
323
+ IPackageFragmentRoot packageRoot = (IPackageFragmentRoot ) JavaCore .create (query .getHandlerIdentifier ());
324
+ if (packageRoot == null ) {
325
+ throw new CoreException (
326
+ new Status (IStatus .ERROR , JdtlsExtActivator .PLUGIN_ID , String .format ("No package root found for %s" , query .getPath ())));
332
327
}
328
+ Object [] result = getPackageFragmentRootContent (packageRoot , pm );
329
+ return convertToPackageNode (result , packageRoot );
330
+ } catch (CoreException e ) {
331
+ JdtlsExtActivator .logException ("Problem load project package " , e );
333
332
}
334
333
return Collections .emptyList ();
335
334
}
336
335
337
336
private static List <PackageNode > getRootTypes (PackageParams query , IProgressMonitor pm ) {
338
- IJavaProject javaProject = getJavaProject (query .getProjectUri ());
339
- if (javaProject != null ) {
340
- try {
341
- IPackageFragmentRoot packageRoot = javaProject .findPackageFragmentRoot (Path .fromPortableString (query .getRootPath ()));
342
- if (packageRoot == null ) {
343
- throw new CoreException (
344
- new Status (IStatus .ERROR , JdtlsExtActivator .PLUGIN_ID , String .format ("No package root found for %s" , query .getPath ())));
345
- }
346
- IPackageFragment packageFragment = packageRoot
347
- .getPackageFragment (PackageNode .DEFAULT_PACKAGE_DISPLAYNAME .equals (query .getPath ()) ? "" : query .getPath ());
348
- if (packageFragment != null ) {
349
- List <IType > primaryTypes = new ArrayList <>();
350
- for (IJavaElement element : packageFragment .getChildren ()) {
351
- if (element instanceof ITypeRoot ) {
352
- // Filter out the inner class files
353
- if (element instanceof IClassFile && element .getElementName ().contains ("$" )) {
354
- continue ;
355
- }
356
- IType primaryType = ((ITypeRoot ) element ).findPrimaryType ();
357
- if (primaryType != null ) {
358
- primaryTypes .add (primaryType );
359
- }
337
+ try {
338
+ IPackageFragment packageFragment = (IPackageFragment ) JavaCore .create (query .getHandlerIdentifier ());
339
+ if (packageFragment != null ) {
340
+ List <IType > primaryTypes = new ArrayList <>();
341
+ for (IJavaElement element : packageFragment .getChildren ()) {
342
+ if (element instanceof ITypeRoot ) {
343
+ // Filter out the inner class files
344
+ if (element instanceof IClassFile && element .getElementName ().contains ("$" )) {
345
+ continue ;
346
+ }
347
+ IType primaryType = ((ITypeRoot ) element ).findPrimaryType ();
348
+ if (primaryType != null ) {
349
+ primaryTypes .add (primaryType );
360
350
}
361
351
}
362
- Object [] nonJavaResources = packageFragment .getNonJavaResources ();
363
- List <PackageNode > rootTypeNodes = primaryTypes .stream ()
364
- .map (PackageNode ::createNodeForPrimaryType )
365
- .collect (Collectors .toList ());
366
- if (nonJavaResources .length == 0 ) {
367
- return rootTypeNodes ;
368
- }
369
- // when .java files and other .properties files are mixed up
370
- rootTypeNodes .addAll (
371
- Arrays .stream (nonJavaResources ).filter (resource -> resource instanceof IFile || resource instanceof JarEntryFile ).map (resource -> {
372
- if (resource instanceof IFile ) {
373
- IFile file = (IFile ) resource ;
374
- PackageNode item = new PackageNode (file .getName (), file .getFullPath ().toPortableString (), NodeKind .FILE );
375
- item .setUri (JDTUtils .getFileURI (file ));
376
- return item ;
377
- } else {
378
- JarEntryFile file = (JarEntryFile ) resource ;
379
- PackageNode entry = new PackageNode (file .getName (), file .getFullPath ().toPortableString (), NodeKind .FILE );
380
- entry .setUri (ExtUtils .toUri ((JarEntryFile ) resource ));
381
- return entry ;
382
- }
383
-
384
- }).collect (Collectors .toList ()));
352
+ }
353
+ Object [] nonJavaResources = packageFragment .getNonJavaResources ();
354
+ List <PackageNode > rootTypeNodes = primaryTypes .stream ()
355
+ .map (PackageNode ::createNodeForPrimaryType )
356
+ .collect (Collectors .toList ());
357
+ if (nonJavaResources .length == 0 ) {
385
358
return rootTypeNodes ;
386
359
}
387
- } catch (CoreException e ) {
388
- JdtlsExtActivator .logException ("Problem load project classfile list " , e );
360
+ // when .java files and other .properties files are mixed up
361
+ rootTypeNodes .addAll (
362
+ Arrays .stream (nonJavaResources ).filter (resource -> resource instanceof IFile || resource instanceof JarEntryFile ).map (resource -> {
363
+ if (resource instanceof IFile ) {
364
+ IFile file = (IFile ) resource ;
365
+ PackageNode item = new PackageNode (file .getName (), file .getFullPath ().toPortableString (), NodeKind .FILE );
366
+ item .setUri (JDTUtils .getFileURI (file ));
367
+ return item ;
368
+ } else {
369
+ JarEntryFile file = (JarEntryFile ) resource ;
370
+ PackageNode entry = new PackageNode (file .getName (), file .getFullPath ().toPortableString (), NodeKind .FILE );
371
+ entry .setUri (ExtUtils .toUri ((JarEntryFile ) resource ));
372
+ return entry ;
373
+ }
374
+
375
+ }).collect (Collectors .toList ()));
376
+ return rootTypeNodes ;
389
377
}
378
+ } catch (CoreException e ) {
379
+ JdtlsExtActivator .logException ("Problem load project classfile list " , e );
390
380
}
391
381
return Collections .emptyList ();
392
382
}
393
383
394
384
private static List <PackageNode > getFolderChildren (PackageParams query , IProgressMonitor pm ) {
395
- IJavaProject javaProject = getJavaProject (query .getProjectUri ());
396
- if (javaProject != null ) {
397
- try {
398
- IPackageFragmentRoot packageRoot = javaProject .findPackageFragmentRoot (Path .fromPortableString (query .getRootPath ()));
399
- if (packageRoot == null ) {
400
- throw new CoreException (
401
- new Status (IStatus .ERROR , JdtlsExtActivator .PLUGIN_ID , String .format ("No package root found for %s" , query .getPath ())));
402
- }
403
- if (packageRoot .getKind () == IPackageFragmentRoot .K_BINARY ) {
404
- Object [] resources = packageRoot .getNonJavaResources ();
405
- for (Object resource : resources ) {
406
- if (pm .isCanceled ()) {
407
- throw new OperationCanceledException ();
408
- }
409
- if (resource instanceof JarEntryDirectory ) {
410
- JarEntryDirectory directory = (JarEntryDirectory ) resource ;
411
- Object [] children = findJarDirectoryChildren (directory , query .getPath ());
412
- if (children != null ) {
413
- return convertToPackageNode (children , null );
414
- }
415
- }
385
+ try {
386
+ IPackageFragmentRoot packageRoot = (IPackageFragmentRoot ) JavaCore .create (query .getHandlerIdentifier ());
387
+ if (packageRoot == null ) {
388
+ throw new CoreException (
389
+ new Status (IStatus .ERROR , JdtlsExtActivator .PLUGIN_ID , String .format ("No package root found for %s" , query .getPath ())));
390
+ }
391
+ if (packageRoot .getKind () == IPackageFragmentRoot .K_BINARY ) {
392
+ Object [] resources = packageRoot .getNonJavaResources ();
393
+ for (Object resource : resources ) {
394
+ if (pm .isCanceled ()) {
395
+ throw new OperationCanceledException ();
416
396
}
417
- } else {
418
- IFolder folder = javaProject .getProject ().getFolder (new Path (query .getPath ()).makeRelativeTo (javaProject .getProject ().getFullPath ()));
419
- if (folder != null && folder .exists ()) {
420
- Object [] children = JavaCore .create (folder ) != null ? Arrays .stream (folder .members ()).filter (t -> t instanceof IFile ).toArray ()
421
- : folder .members ();
397
+ if (resource instanceof JarEntryDirectory ) {
398
+ JarEntryDirectory directory = (JarEntryDirectory ) resource ;
399
+ Object [] children = findJarDirectoryChildren (directory , query .getPath ());
422
400
if (children != null ) {
423
401
return convertToPackageNode (children , null );
424
402
}
425
403
}
426
404
}
427
-
428
- } catch (CoreException e ) {
429
- JdtlsExtActivator .logException ("Problem load project classfile list " , e );
405
+ } else {
406
+ IJavaProject javaProject = packageRoot .getJavaProject ();
407
+ IFolder folder = javaProject .getProject ().getFolder (new Path (query .getPath ()).makeRelativeTo (javaProject .getProject ().getFullPath ()));
408
+ if (folder != null && folder .exists ()) {
409
+ Object [] children = JavaCore .create (folder ) != null ? Arrays .stream (folder .members ()).filter (t -> t instanceof IFile ).toArray ()
410
+ : folder .members ();
411
+ if (children != null ) {
412
+ return convertToPackageNode (children , null );
413
+ }
414
+ }
430
415
}
416
+
417
+ } catch (CoreException e ) {
418
+ JdtlsExtActivator .logException ("Problem load project classfile list " , e );
431
419
}
432
420
return Collections .emptyList ();
433
421
}
@@ -446,6 +434,14 @@ private static Object[] getPackageFragmentRootContent(IPackageFragmentRoot root,
446
434
}
447
435
Object [] nonJavaResources = root .getNonJavaResources ();
448
436
Collections .addAll (result , nonJavaResources );
437
+
438
+ IModuleDescription moduleDescription = root .getModuleDescription ();
439
+ if (moduleDescription != null ) {
440
+ IClassFile moduleInfo = moduleDescription .getClassFile ();
441
+ if (moduleInfo != null ) {
442
+ result .add (moduleDescription .getClassFile ());
443
+ }
444
+ }
449
445
return result .toArray ();
450
446
}
451
447
@@ -463,7 +459,7 @@ private static List<PackageNode> convertToPackageNode(Object[] rootContent, IPac
463
459
result .add (entry );
464
460
} else if (root instanceof IClassFile ) {
465
461
IClassFile classFile = (IClassFile ) root ;
466
- PackageNode entry = new PackageNode (classFile .getElementName (), null , NodeKind .PRIMARYTYPE );
462
+ PackageNode entry = new PackageNode (classFile .getElementName (), null , NodeKind .FILE );
467
463
entry .setUri (JDTUtils .toUri (classFile ));
468
464
result .add (entry );
469
465
} else if (root instanceof JarEntryResource ) {
0 commit comments