Skip to content

Commit 1ad592b

Browse files
authored
Reveal dependency node from opened Java files. (#48)
1 parent 4eb99df commit 1ad592b

22 files changed

+583
-600
lines changed

jdtls.ext/com.microsoft.jdtls.ext.core/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<delegateCommandHandler class="com.microsoft.jdtls.ext.core.CommandHandler">
66
<command id="java.project.list"/>
77
<command id="java.getPackageData"/>
8+
<command id="java.resolvePath" />
89
</delegateCommandHandler>
910
</extension>
1011
<extension

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/CommandHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public Object executeCommand(String commandId, List<Object> arguments, IProgress
2727
return ProjectCommand.execute(arguments, monitor);
2828
case "java.getPackageData":
2929
return PackageCommand.getChildren(arguments, monitor);
30+
case "java.resolvePath":
31+
return PackageCommand.resolvePath(arguments, monitor);
3032
default:
3133
break;
3234
}

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/PackageCommand.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public class PackageCommand {
8888
*/
8989
public static List<PackageNode> getChildren(List<Object> arguments, IProgressMonitor pm) throws CoreException {
9090
if (arguments == null || arguments.size() < 1) {
91-
throw new IllegalArgumentException("Should have at least one arugments for getChildren");
91+
throw new IllegalArgumentException("Should have at least one arugment for getChildren");
9292
}
9393
PackageParams params = gson.fromJson(gson.toJson(arguments.get(0)), PackageParams.class);
9494

@@ -100,6 +100,48 @@ public static List<PackageNode> getChildren(List<Object> arguments, IProgressMon
100100
return result;
101101
}
102102

103+
/**
104+
* Resolve the path for Java file URI
105+
*
106+
* @param arguments
107+
* List of the arguments which contain one entry of the target
108+
* compilation unit URI.
109+
*
110+
* @return the list of the path
111+
* @throws CoreException
112+
*/
113+
public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMonitor pm) throws CoreException {
114+
if (arguments == null || arguments.size() < 1) {
115+
throw new IllegalArgumentException("Should have one arugment for resolvePath");
116+
}
117+
String typeRootUri = (String) arguments.get(0);
118+
119+
List<PackageNode> result = new ArrayList<>();
120+
121+
ICompilationUnit cu = JDTUtils.resolveCompilationUnit(typeRootUri);
122+
123+
// Add project node:
124+
IProject proj = cu.getJavaProject().getProject();
125+
PackageNode projectNode = new PackageNode(proj.getName(), proj.getFullPath().toPortableString(), NodeKind.PROJECT);
126+
projectNode.setUri(proj.getLocationURI().toString());
127+
result.add(projectNode);
128+
129+
IPackageFragment packageFragment = (IPackageFragment) cu.getParent();
130+
String packageName = packageFragment.isDefaultPackage() ? DEFAULT_PACKAGE_DISPLAYNAME : packageFragment.getElementName();
131+
PackageNode packageNode = new PackageNode(packageName, packageFragment.getPath().toPortableString(), NodeKind.PACKAGE);
132+
IPackageFragmentRoot pkgRoot = (IPackageFragmentRoot) packageFragment.getParent();
133+
PackageNode rootNode = new PackageRootNode(ExtUtils.removeProjectSegment(cu.getJavaProject().getElementName(), pkgRoot.getPath()).toPortableString(),
134+
pkgRoot.getPath().toPortableString(), NodeKind.PACKAGEROOT, pkgRoot.getKind());
135+
result.add(rootNode);
136+
result.add(packageNode);
137+
138+
PackageNode item = new TypeRootNode(cu.getElementName(), cu.getPath().toPortableString(), NodeKind.TYPEROOT, TypeRootNode.K_SOURCE);
139+
item.setUri(JDTUtils.toURI(cu));
140+
result.add(item);
141+
142+
return result;
143+
}
144+
103145
/**
104146
* Get the class path container list.
105147
*/

0 commit comments

Comments
 (0)