Skip to content

Commit 414bf9c

Browse files
authored
Support toggling awt development in help center (#886)
Signed-off-by: sheche <[email protected]>
1 parent d4e2b81 commit 414bf9c

File tree

5 files changed

+55
-6
lines changed

5 files changed

+55
-6
lines changed

src/commands/handler.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { validateAndRecommendExtension } from "../recommendation";
77
import { sendInfo } from "vscode-extension-telemetry-wrapper";
88
import { getReleaseNotesEntries, findLatestReleaseNotes } from "../utils";
99
import { gt, eq } from "semver";
10+
import { fetchInitProps } from "../welcome/index";
1011

1112
export async function createMavenProjectCmdHandler(_context: vscode.ExtensionContext) {
1213
if (!await validateAndRecommendExtension("vscjava.vscode-maven", "Maven extension is recommended to help create Java projects and work with custom goals.", true)) {
@@ -104,3 +105,25 @@ export async function showReleaseNotesHandler(context: vscode.ExtensionContext,
104105

105106
return await showReleaseNotes(context, operationId, version);
106107
}
108+
109+
export async function toggleAwtDevelopmentHandler(context: vscode.ExtensionContext, _operationId: string, enable: boolean) {
110+
const workspaceConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.completion");
111+
const disabledList: string[] = workspaceConfig.get<string[]>("filteredTypes") || [];
112+
const filteredTypes: string[] = disabledList.filter((type) => {
113+
return !type.startsWith("java.awt.");
114+
});
115+
116+
if (!enable) {
117+
filteredTypes.push("java.awt.*");
118+
}
119+
120+
try {
121+
await workspaceConfig.update("filteredTypes", filteredTypes, vscode.ConfigurationTarget.Workspace);
122+
} catch (e) {
123+
vscode.window.showErrorMessage((e as Error).message);
124+
return;
125+
}
126+
127+
fetchInitProps(context);
128+
vscode.window.showInformationMessage(`Java AWT development is ${enable ? "enabled" : "disabled"}.`);
129+
}

src/commands/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { javaRuntimeCmdHandler } from "../java-runtime";
1212
import { overviewCmdHandler } from "../overview";
1313
import { webviewCmdLinkHandler } from "../utils";
1414
import { showWelcomeWebview, showWelcomeWebviewBeside } from "../welcome";
15-
import { createMavenProjectCmdHandler, createMicroProfileStarterProjectCmdHandler, createQuarkusProjectCmdHandler, createSpringBootProjectCmdHandler, installExtensionCmdHandler, openUrlCmdHandler, showExtensionCmdHandler, showReleaseNotesHandler } from "./handler";
15+
import { createMavenProjectCmdHandler, createMicroProfileStarterProjectCmdHandler, createQuarkusProjectCmdHandler, createSpringBootProjectCmdHandler, installExtensionCmdHandler, openUrlCmdHandler, showExtensionCmdHandler, showReleaseNotesHandler, toggleAwtDevelopmentHandler } from "./handler";
1616

1717
export function initialize(context: vscode.ExtensionContext) {
1818
registerCommandHandler(context, "java.overview", overviewCmdHandler);
@@ -35,6 +35,7 @@ export function initialize(context: vscode.ExtensionContext) {
3535
registerCommandHandler(context, "java.classpathConfiguration", showClasspathConfigurationPage);
3636
registerCommandHandler(context, "java.installJdk", showInstallJdkWebviewBeside);
3737
registerCommandHandler(context, "java.installJdk.fromWalkthrough", showInstallJdkWebview);
38+
registerCommandHandler(context, "java.toggleAwtDevelopment", toggleAwtDevelopmentHandler);
3839
}
3940

4041
type CommandHandler = (context: vscode.ExtensionContext, operationId: string, ...args: any[]) => any;

src/welcome/assets/components/GetStartedPage.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import TourPage from "./TourPage";
1313
export class GetStartedPage extends React.Component<{
1414
showWhenUsingJava: boolean,
1515
firstTimeRun: boolean,
16+
isAwtDisabled: boolean,
1617
}> {
1718

1819
render() {
@@ -25,7 +26,7 @@ export class GetStartedPage extends React.Component<{
2526
}
2627

2728
renderWelcomePage() {
28-
const {showWhenUsingJava} = this.props;
29+
const {showWhenUsingJava, isAwtDisabled} = this.props;
2930
return (
3031
<Container fluid className="root">
3132
<Row className="mb-4">
@@ -40,7 +41,7 @@ export class GetStartedPage extends React.Component<{
4041
</Row>
4142
<Row className="mb-4">
4243
<Col>
43-
<NavigationPanel />
44+
<NavigationPanel isAwtDisabled={isAwtDisabled}/>
4445
</Col>
4546
</Row>
4647
<Row className="mb-4 footer">

src/welcome/assets/components/NavigationPanel.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
import * as _ from "lodash";
45
import Tabs from "react-bootstrap/Tabs";
56
import Tab from "react-bootstrap/Tab";
67
import React from "react";
@@ -13,7 +14,9 @@ import { ListGroup } from "react-bootstrap";
1314
import { reportTabSwitch, WEBVIEW_ID } from "../utils";
1415
import { encodeCommandUriWithTelemetry } from "../../../utils/webview";
1516

16-
export default class NavigationPanel extends React.Component {
17+
export default class NavigationPanel extends React.Component<{
18+
isAwtDisabled: boolean;
19+
}> {
1720
private groups = [
1821
{
1922
name: "General",
@@ -42,14 +45,26 @@ export default class NavigationPanel extends React.Component {
4245
{ name: "Tutorial: Running and Debugging", command: "java.helper.openUrl", args: ["https://code.visualstudio.com/docs/java/java-debugging"] },
4346
{ name: "Tutorial: Testing", command: "java.helper.openUrl", args: ["https://code.visualstudio.com/docs/java/java-testing"] },
4447
{ name: "Configure Sources, Dependencies, Output Folder...", command: "java.classpathConfiguration" },
45-
{ name: "Quick Start: Jupyter Notebook for Java", command: "java.helper.openUrl", args: ["https://github.com/microsoft/vscode-java-pack/wiki/Quick-Start:-Jupyter-Notebook-for-Java"] }
48+
{ name: "Quick Start: Jupyter Notebook for Java", command: "java.helper.openUrl", args: ["https://github.com/microsoft/vscode-java-pack/wiki/Quick-Start:-Jupyter-Notebook-for-Java"] },
49+
{ name: "Enable AWT Development", command: "java.toggleAwtDevelopment", args: [true] },
4650
]
4751
},
4852
];
4953

5054
private currentTab: string = this.groups[0].name;
5155

5256
render() {
57+
const {isAwtDisabled} = this.props;
58+
const studentSection = _.find(this.groups, {name: "Student"});
59+
if (studentSection) {
60+
for (const action of studentSection.actions) {
61+
if (action.command === "java.toggleAwtDevelopment") {
62+
action.name = `${isAwtDisabled ? "Enable" : "Disable"} AWT Development`;
63+
action.args = [isAwtDisabled];
64+
}
65+
}
66+
}
67+
5368
const itemIcon = <Icon className="codicon" icon={rocketIcon} />;
5469
const tabItems = this.groups.map(group => {
5570
const actionItems = group.actions.map(action => (

src/welcome/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,13 @@ const setFirstTimeRun = (context: vscode.ExtensionContext, firstTimeRun: boolean
124124
context.globalState.update(KEY_IS_WELCOME_PAGE_VIEWED, !firstTimeRun);
125125
};
126126

127-
const fetchInitProps = async (context: vscode.ExtensionContext) => {
127+
export const fetchInitProps = async (context: vscode.ExtensionContext) => {
128128
welcomeView?.webview.postMessage({
129129
command: "onDidFetchInitProps",
130130
props: {
131131
showWhenUsingJava: context.globalState.get(KEY_SHOW_WHEN_USING_JAVA),
132132
firstTimeRun: context.globalState.get(KEY_IS_WELCOME_PAGE_VIEWED) !== true,
133+
isAwtDisabled: isAwtDisabled(),
133134
}
134135
});
135136
setFirstTimeRun(context, false);
@@ -141,7 +142,15 @@ const showTourPage = async (context: vscode.ExtensionContext) => {
141142
props: {
142143
showWhenUsingJava: context.globalState.get(KEY_SHOW_WHEN_USING_JAVA),
143144
firstTimeRun: true,
145+
isAwtDisabled: isAwtDisabled(),
144146
}
145147
});
146148
setFirstTimeRun(context, false);
147149
};
150+
151+
function isAwtDisabled(): boolean {
152+
const filteredTypes: string[] = vscode.workspace.getConfiguration("java.completion").get<string[]>("filteredTypes") || [];
153+
return filteredTypes.some((type: string) => {
154+
return type.startsWith("java.awt.");
155+
});
156+
}

0 commit comments

Comments
 (0)