Skip to content

Commit da501cd

Browse files
committed
Dynamically remove the Equinox launcher fragment for macOS x86_64.
Signed-off-by: Roland Grunberg <[email protected]>
1 parent 176339e commit da501cd

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/extension.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as fs from 'fs';
55
import * as fse from 'fs-extra';
66
import * as os from 'os';
77
import * as path from 'path';
8+
import * as semver from 'semver';
89
import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, QuickPickItemKind, RelativePattern, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode';
910
import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient';
1011
import { LanguageClient } from 'vscode-languageclient/node';
@@ -13,7 +14,7 @@ import { ClientErrorHandler } from './clientErrorHandler';
1314
import { Commands, CommandTitle } from './commands';
1415
import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api';
1516
import * as fileEventHandler from './fileEventHandler';
16-
import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter';
17+
import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64 } from './javaServerStarter';
1718
import { initializeLogFile, logger } from './log';
1819
import { cleanupLombokCache } from "./lombokSupport";
1920
import { markdownPreviewProvider } from "./markdownPreviewProvider";
@@ -30,6 +31,7 @@ import { JavaClassEditorProvider } from './javaClassEditor';
3031
import { StandardLanguageClient } from './standardLanguageClient';
3132
import { SyntaxLanguageClient } from './syntaxLanguageClient';
3233
import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause } from './utils';
34+
import glob = require('glob');
3335
import { Telemetry } from './telemetry';
3436
import { getMessage } from './errorUtils';
3537
import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib';
@@ -38,7 +40,6 @@ import { loadSupportedJreNames } from './jdkUtils';
3840
import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector';
3941
import { pasteFile } from './pasteAction';
4042
import { ServerStatusKind } from './serverStatus';
41-
import glob = require('glob');
4243

4344
const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient();
4445
const standardClient: StandardLanguageClient = new StandardLanguageClient();
@@ -139,6 +140,17 @@ export async function activate(context: ExtensionContext): Promise<ExtensionAPI>
139140

140141
cleanJavaWorkspaceStorage();
141142

143+
// https://github.com/redhat-developer/vscode-java/issues/3484
144+
if (process.platform === 'darwin' && process.arch === 'x64') {
145+
try {
146+
if (semver.lt(os.release(), '20.0.0')) {
147+
removeEquinoxFragmentOnDarwinX64(context);
148+
}
149+
} catch (error) {
150+
// do nothing
151+
}
152+
}
153+
142154
return requirements.resolveRequirements(context).catch(error => {
143155
// show error
144156
window.showErrorMessage(error.message, error.label).then((selection) => {

src/javaServerStarter.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
import * as fs from 'fs';
3+
import * as fse from 'fs-extra';
34
import * as glob from 'glob';
45
import * as net from 'net';
56
import * as os from 'os';
@@ -9,7 +10,7 @@ import { Executable, ExecutableOptions, StreamInfo, TransportKind } from 'vscode
910
import { logger } from './log';
1011
import { addLombokParam, isLombokSupportEnabled } from './lombokSupport';
1112
import { RequirementsData } from './requirements';
12-
import { getJavaagentFlag, getJavaEncoding, getKey, isInWorkspaceFolder, IS_WORKSPACE_VMARGS_ALLOWED } from './settings';
13+
import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings';
1314
import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } from './utils';
1415

1516
// eslint-disable-next-line no-var
@@ -316,3 +317,13 @@ export function parseVMargs(params: any[], vmargsLine: string) {
316317
}
317318
});
318319
}
320+
321+
export function removeEquinoxFragmentOnDarwinX64(context: ExtensionContext) {
322+
// https://github.com/redhat-developer/vscode-java/issues/3484
323+
const extensionPath = context.extensionPath;
324+
const matches = new glob.GlobSync(`${extensionPath}/server/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64*.jar`).found;
325+
for (const fragment of matches) {
326+
fse.removeSync(fragment);
327+
logger.info(`Removing Equinox launcher fragment : ${fragment}`);
328+
}
329+
}

0 commit comments

Comments
 (0)