Skip to content

Commit 76f18df

Browse files
authored
Directly show children under default package (#316)
1 parent f646ea6 commit 76f18df

File tree

5 files changed

+29
-22
lines changed

5 files changed

+29
-22
lines changed

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

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
140140
if (StringUtils.isNotBlank(pkgRootNode.getName())) {
141141
result.add(pkgRootNode);
142142
}
143-
result.add(PackageNode.createNodeForPackageFragment(packageFragment));
143+
if (!packageFragment.isDefaultPackage()) {
144+
result.add(PackageNode.createNodeForPackageFragment(packageFragment));
145+
}
144146
result.add(PackageNode.createNodeForPrimaryType(typeRoot.findPrimaryType()));
145147
} else if (ExtUtils.isJarResourceUri(uri)) {
146148
IJarEntryResource resource = ExtUtils.getJarEntryResource(uri);
@@ -150,7 +152,9 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
150152
result.add(PackageNode.createNodeForPackageFragmentRoot(pkgRoot));
151153
if (resource.getParent() instanceof IPackageFragment) {
152154
IPackageFragment packageFragment = (IPackageFragment) resource.getParent();
153-
result.add(PackageNode.createNodeForPackageFragment(packageFragment));
155+
if (!packageFragment.isDefaultPackage()) {
156+
result.add(PackageNode.createNodeForPackageFragment(packageFragment));
157+
}
154158
} else {
155159
int currentSize = result.size();
156160
// visit back from file to the top folder
@@ -186,7 +190,9 @@ public static List<PackageNode> resolvePath(List<Object> arguments, IProgressMon
186190
if (StringUtils.isNotBlank(pkgRootNode.getName())) {
187191
result.add(pkgRootNode);
188192
}
189-
result.add(PackageNode.createNodeForPackageFragment(packageFragment));
193+
if (!packageFragment.isDefaultPackage()) {
194+
result.add(PackageNode.createNodeForPackageFragment(packageFragment));
195+
}
190196

191197
PackageNode item = new PackageNode(resource.getName(), resource.getFullPath().toPortableString(), NodeKind.FILE);
192198
item.setUri(JDTUtils.getFileURI(resource));
@@ -338,7 +344,7 @@ private static List<PackageNode> getPackages(PackageParams query, IProgressMonit
338344
new Status(IStatus.ERROR, JdtlsExtActivator.PLUGIN_ID, String.format("No package root found for %s", query.getPath())));
339345
}
340346
Object[] result = getPackageFragmentRootContent(packageRoot, pm);
341-
return convertToPackageNode(result, packageRoot);
347+
return convertToPackageNode(result, packageRoot, pm);
342348
} catch (CoreException e) {
343349
JdtlsExtActivator.logException("Problem load project package ", e);
344350
}
@@ -410,7 +416,7 @@ private static List<PackageNode> getFolderChildren(PackageParams query, IProgres
410416
JarEntryDirectory directory = (JarEntryDirectory) resource;
411417
Object[] children = findJarDirectoryChildren(directory, query.getPath());
412418
if (children != null) {
413-
return convertToPackageNode(children, null);
419+
return convertToPackageNode(children, null, pm);
414420
}
415421
}
416422
}
@@ -421,7 +427,7 @@ private static List<PackageNode> getFolderChildren(PackageParams query, IProgres
421427
Object[] children = JavaCore.create(folder) != null ? Arrays.stream(folder.members()).filter(t -> t instanceof IFile).toArray()
422428
: folder.members();
423429
if (children != null) {
424-
return convertToPackageNode(children, null);
430+
return convertToPackageNode(children, null, pm);
425431
}
426432
}
427433
}
@@ -457,18 +463,26 @@ private static Object[] getPackageFragmentRootContent(IPackageFragmentRoot root,
457463
return result.toArray();
458464
}
459465

460-
private static List<PackageNode> convertToPackageNode(Object[] rootContent, IPackageFragmentRoot packageRoot) throws JavaModelException {
466+
private static List<PackageNode> convertToPackageNode(Object[] rootContent, IPackageFragmentRoot packageRoot, IProgressMonitor pm) throws JavaModelException {
461467
List<PackageNode> result = new ArrayList<>();
462468
for (Object root : rootContent) {
463469
if (root instanceof IPackageFragment) {
464470
IPackageFragment fragment = (IPackageFragment) root;
465-
PackageNode entry = PackageNode.createNodeForPackageFragment(fragment);
466-
if (fragment.getResource() != null) {
467-
entry.setUri(fragment.getResource().getLocationURI().toString());
471+
if (fragment.isDefaultPackage()) {
472+
// directly show root types under default package
473+
PackageParams subQuery = new PackageParams(NodeKind.PACKAGE, packageRoot.getJavaProject().getProject().getLocationURI().toString(),
474+
fragment.getPath().toPortableString(), fragment.getHandleIdentifier());
475+
List<PackageNode> packageNodes = getRootTypes(subQuery, pm);
476+
result.addAll(packageNodes);
468477
} else {
469-
entry.setUri(fragment.getPath().toFile().toURI().toString());
478+
PackageNode entry = PackageNode.createNodeForPackageFragment(fragment);
479+
if (fragment.getResource() != null) {
480+
entry.setUri(fragment.getResource().getLocationURI().toString());
481+
} else {
482+
entry.setUri(fragment.getPath().toFile().toURI().toString());
483+
}
484+
result.add(entry);
470485
}
471-
result.add(entry);
472486
} else if (root instanceof IClassFile) {
473487
IClassFile classFile = (IClassFile) root;
474488
PackageNode entry = new PackageNode(classFile.getElementName(), null, NodeKind.FILE);

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ public class PackageNode {
6969
private static final String IMMUTABLE_REFERENCED_LIBRARIES_CONTAINER_NAME = "Referenced Libraries (Read-only)";
7070

7171
public static final String REFERENCED_LIBRARIES_PATH = "REFERENCED_LIBRARIES_PATH";
72-
public static final String DEFAULT_PACKAGE_DISPLAYNAME = "(default package)";
7372
public static final ContainerNode REFERENCED_LIBRARIES_CONTAINER = new ContainerNode(REFERENCED_LIBRARIES_CONTAINER_NAME, REFERENCED_LIBRARIES_PATH,
7473
NodeKind.CONTAINER, IClasspathEntry.CPE_CONTAINER);
7574
public static final ContainerNode IMMUTABLE_REFERENCED_LIBRARIES_CONTAINER = new ContainerNode(IMMUTABLE_REFERENCED_LIBRARIES_CONTAINER_NAME,
@@ -177,8 +176,7 @@ public static PackageNode createNodeForResource(IResource resource) {
177176
}
178177

179178
public static PackageNode createNodeForPackageFragment(IPackageFragment packageFragment) {
180-
String packageName = packageFragment.isDefaultPackage() ? DEFAULT_PACKAGE_DISPLAYNAME : packageFragment.getElementName();
181-
PackageNode fragmentNode = new PackageNode(packageName, packageFragment.getPath().toPortableString(), NodeKind.PACKAGE);
179+
PackageNode fragmentNode = new PackageNode(packageFragment.getElementName(), packageFragment.getPath().toPortableString(), NodeKind.PACKAGE);
182180
fragmentNode.setHandlerIdentifier(packageFragment.getHandleIdentifier());
183181
return fragmentNode;
184182
}

src/constants.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export namespace Context {
66
}
77

88
export namespace Explorer {
9-
export const DEFAULT_PACKAGE_NAME: string = "(default package)";
109
export enum ContextValueType {
1110
WorkspaceFolder = "workspaceFolder",
1211
Project = "project",

src/explorerCommands/new.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import * as fse from "fs-extra";
55
import * as path from "path";
66
import { Uri, window, workspace, WorkspaceEdit } from "vscode";
7-
import { Explorer } from "../constants";
87
import { NodeKind } from "../java/nodeData";
98
import { isJavaIdentifier, isKeyword } from "../utility";
109
import { DataNode } from "../views/dataNode";
@@ -50,7 +49,7 @@ function getNewFilePath(basePath: string, className: string): string {
5049
export async function newPackage(node: DataNode): Promise<void> {
5150
let defaultValue: string;
5251
let packageRootPath: string;
53-
if (node.nodeData.kind === NodeKind.PackageRoot || node.name === Explorer.DEFAULT_PACKAGE_NAME) {
52+
if (node.nodeData.kind === NodeKind.PackageRoot) {
5453
defaultValue = "";
5554
packageRootPath = Uri.parse(node.uri).fsPath;
5655
} else if (node.nodeData.kind === NodeKind.Package) {

src/views/nodeCache/explorerNodeCache.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import * as path from "path";
55
import { Uri } from "vscode";
6-
import { Explorer } from "../../constants";
76
import { DataNode } from "../dataNode";
87
import { ExplorerNode } from "../explorerNode";
98
import { Trie, TrieNode } from "./Trie";
@@ -28,9 +27,7 @@ class ExplorerNodeCache {
2827
}
2928

3029
public saveNode(node: ExplorerNode): void {
31-
// default package has the same uri as the root package,
32-
// we skip default package and store the root package here.
33-
if (node instanceof DataNode && node.uri && node.name !== Explorer.DEFAULT_PACKAGE_NAME) {
30+
if (node instanceof DataNode && node.uri) {
3431
this.mutableNodeCache.insert(node);
3532
}
3633
}

0 commit comments

Comments
 (0)