Skip to content

Commit

Permalink
Adopt the new LightWEight API
Browse files Browse the repository at this point in the history
  • Loading branch information
jdneo committed Jul 6, 2020
1 parent ee0be4c commit fd6ee50
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 11 deletions.
30 changes: 25 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,26 @@
},
"menus": {
"commandPalette": [
{
"command": "java.view.package.refresh",
"when": "java:serverMode != LightWeight"
},
{
"command": "java.view.package.changeToHierarchicalPackageView",
"when": "java:serverMode != LightWeight"
},
{
"command": "java.view.package.changeToFlatPackageView",
"when": "java:serverMode != LightWeight"
},
{
"command": "java.view.package.linkWithFolderExplorer",
"when": "java:serverMode != LightWeight"
},
{
"command": "java.view.package.unlinkWithFolderExplorer",
"when": "java:serverMode != LightWeight"
},
{
"command": "java.view.package.revealFileInOS",
"when": "never"
Expand Down Expand Up @@ -184,27 +204,27 @@
"view/title": [
{
"command": "java.view.package.refresh",
"when": "view == javaDependencyExplorer",
"when": "view == javaDependencyExplorer && java:serverMode != LightWeight",
"group": "navigation@2"
},
{
"command": "java.view.package.changeToHierarchicalPackageView",
"when": "view == javaDependencyExplorer && config.java.dependency.packagePresentation == flat",
"when": "view == javaDependencyExplorer && config.java.dependency.packagePresentation == flat && java:serverMode!= LightWeight",
"group": "navigation@1"
},
{
"command": "java.view.package.changeToFlatPackageView",
"when": "view == javaDependencyExplorer && config.java.dependency.packagePresentation != flat",
"when": "view == javaDependencyExplorer && config.java.dependency.packagePresentation != flat && java:serverMode!= LightWeight",
"group": "navigation@1"
},
{
"command": "java.view.package.linkWithFolderExplorer",
"when": "view == javaDependencyExplorer && config.java.dependency.syncWithFolderExplorer != true",
"when": "view == javaDependencyExplorer && config.java.dependency.syncWithFolderExplorer != true && java:serverMode!= LightWeight",
"group": "navigation@0"
},
{
"command": "java.view.package.unlinkWithFolderExplorer",
"when": "view == javaDependencyExplorer && config.java.dependency.syncWithFolderExplorer == true",
"when": "view == javaDependencyExplorer && config.java.dependency.syncWithFolderExplorer == true && java:serverMode!= LightWeight",
"group": "navigation@0"
}
],
Expand Down
63 changes: 61 additions & 2 deletions src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

import { Extension, ExtensionContext, extensions } from "vscode";
import { dispose as disposeTelemetryWrapper, initializeFromJsonFile, instrumentOperation } from "vscode-extension-telemetry-wrapper";
import { commands, Event, Extension, ExtensionContext, extensions, Uri } from "vscode";
import { dispose as disposeTelemetryWrapper, initializeFromJsonFile, instrumentOperation, instrumentOperationAsVsCodeCommand } from "vscode-extension-telemetry-wrapper";
import { Commands } from "./commands";
import { Context } from "./constants";
import { contextManager } from "./contextManager";
import { LibraryController } from "./controllers/libraryController";
Expand All @@ -17,6 +18,38 @@ export async function activate(context: ExtensionContext): Promise<any> {
}

async function activateExtension(_operationId: string, context: ExtensionContext): Promise<void> {
const extension: Extension<any> | undefined = extensions.getExtension("redhat.java");
if (extension && extension.isActive) {
const extensionApi: any = extension.exports;
if (!extensionApi) {
return;
}

serverMode = extensionApi.serverMode;

if (extensionApi.onDidClasspathUpdate) {
const onDidClasspathUpdate: Event<Uri> = extensionApi.onDidClasspathUpdate;
context.subscriptions.push(onDidClasspathUpdate(async () => {
await commands.executeCommand(Commands.VIEW_PACKAGE_REFRESH, /* debounce = */true);
}));
}

if (extensionApi.onDidServerModeChange) {
const onDidServerModeChange: Event<string> = extensionApi.onDidServerModeChange;
context.subscriptions.push(onDidServerModeChange(async (mode: string) => {
serverMode = mode;
commands.executeCommand(Commands.VIEW_PACKAGE_REFRESH, /* debounce = */false);
}));
}

if (extensionApi.onDidProjectsImport) {
const onDidProjectsImport: Event<Uri[]> = extensionApi.onDidProjectsImport;
context.subscriptions.push(onDidProjectsImport(async () => {
commands.executeCommand(Commands.VIEW_PACKAGE_REFRESH, /* debounce = */true);
}));
}
}

Settings.initialize(context);
contextManager.initialize(context);
setMavenExtensionState();
Expand All @@ -28,6 +61,13 @@ async function activateExtension(_operationId: string, context: ExtensionContext
contextManager.setContextValue(Context.EXTENSION_ACTIVATED, true);

initExpService(context);

context.subscriptions.push(instrumentOperationAsVsCodeCommand("java.dependency.switch.server.mode", async () => {
if (isSwitchingServer()) {
return;
}
await commands.executeCommand("java.server.mode.switch");
}));
}

// determine if the add dependency shortcut will show or not
Expand All @@ -47,3 +87,22 @@ function setMavenExtensionState() {
export async function deactivate() {
await disposeTelemetryWrapper();
}

export function isStandardServerReady(): boolean {
// undefined serverMode indicates an older version language server
if (serverMode === undefined) {
return true;
}

if (serverMode !== "Standard") {
return false;
}

return true;
}

export function isSwitchingServer(): boolean {
return serverMode === "Hybrid";
}

let serverMode: string | undefined;
20 changes: 17 additions & 3 deletions src/views/dependencyDataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@

import * as _ from "lodash";
import {
commands, Event, EventEmitter, ExtensionContext, ProviderResult, Range,
Selection, TextEditorRevealType, TreeDataProvider, TreeItem, Uri, window, workspace,
commands, Event, EventEmitter, ExtensionContext, extensions, ProviderResult,
Range, Selection, TextEditorRevealType, TreeDataProvider, TreeItem, Uri, window, workspace,
} from "vscode";
import { instrumentOperation, instrumentOperationAsVsCodeCommand } from "vscode-extension-telemetry-wrapper";
import { Commands } from "../commands";
import { isStandardServerReady, isSwitchingServer } from "../extension";
import { Jdtls } from "../java/jdtls";
import { INodeData, NodeKind } from "../java/nodeData";
import { Settings } from "../settings";
import { DataNode } from "./dataNode";
import { ExplorerNode } from "./explorerNode";
import { LightWeightNode } from "./lightWeightNode";
import { ProjectNode } from "./projectNode";
import { WorkspaceNode } from "./workspaceNode";

Expand Down Expand Up @@ -87,7 +89,19 @@ export class DependencyDataProvider implements TreeDataProvider<ExplorerNode> {
return element.getTreeItem();
}

public getChildren(element?: ExplorerNode): ProviderResult<ExplorerNode[]> {
public async getChildren(element?: ExplorerNode): Promise<ExplorerNode[]> {
if (isSwitchingServer()) {
await new Promise<void>((resolve: () => void): void => {
extensions.getExtension("redhat.java")!.exports.onDidServerModeChange(resolve);
});
}

if (!isStandardServerReady()) {
return [
new LightWeightNode(),
];
}

if (!this._rootItems || !element) {
return this.getRootNodes();
} else {
Expand Down
6 changes: 5 additions & 1 deletion src/views/dependencyExplorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
// Licensed under the MIT license.

import { Disposable, ExtensionContext, TextEditor, TreeView, TreeViewVisibilityChangeEvent, Uri, window } from "vscode";
import { isStandardServerReady } from "../extension";
import { Jdtls } from "../java/jdtls";
import { INodeData } from "../java/nodeData";
import { Settings } from "../settings";
import { DataNode } from "./dataNode";
import { DependencyDataProvider } from "./dependencyDataProvider";
import { ExplorerNode } from "./explorerNode";

Expand Down Expand Up @@ -51,6 +51,10 @@ export class DependencyExplorer implements Disposable {
}

public async reveal(uri: Uri): Promise<void> {
if (!isStandardServerReady()) {
return;
}

const paths: INodeData[] = await Jdtls.resolvePath(uri.toString());
if (!paths || paths.length === 0) {
return;
Expand Down
29 changes: 29 additions & 0 deletions src/views/lightWeightNode.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

import * as _ from "lodash";
import { ProviderResult, ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode";
import { ExplorerNode } from "./explorerNode";

export class LightWeightNode extends ExplorerNode {
constructor() {
super(null);
}

public getTreeItem(): TreeItem | Promise<TreeItem> {
return {
label: "Click to load dependencies...",
collapsibleState: TreeItemCollapsibleState.None,
command: {
command: "java.dependency.switch.server.mode",
title: "Switch to Standard mode",
},
tooltip: "Switch the Java Language Server to Standard mode to show all the dependencies",
iconPath: new ThemeIcon("info"),
};
}

public getChildren(): ProviderResult<ExplorerNode[]> {
return null;
}
}

0 comments on commit fd6ee50

Please sign in to comment.