Skip to content

Commit 55e8dd9

Browse files
committed
refactor: Move java specific code to java feature
1 parent 0bf3f36 commit 55e8dd9

File tree

3 files changed

+40
-16
lines changed

3 files changed

+40
-16
lines changed

src/extensions/java.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import {
2+
DisposableCollection, MonacoLanguageClient
3+
} from 'monaco-languageclient'
4+
import { StaticFeature, FeatureState } from 'vscode-languageclient/lib/common/api'
5+
import { WorkspaceEdit } from 'vscode-languageserver-protocol'
6+
import * as vscode from 'vscode'
7+
8+
export class JavaExtensionFeature implements StaticFeature {
9+
private disposables: DisposableCollection
10+
constructor (private languageClient: MonacoLanguageClient) {
11+
this.disposables = new DisposableCollection()
12+
}
13+
14+
fillClientCapabilities (): void {}
15+
16+
initialize (): void {
17+
// Comes from https://github.com/redhat-developer/vscode-java/blob/9b6046eecc65fd47507f309a3ccc9add45c6d3be/src/standardLanguageClient.ts#L321
18+
this.disposables.push(vscode.commands.registerCommand('java.apply.workspaceEdit', async (obj: WorkspaceEdit) => {
19+
const edit = await this.languageClient.protocol2CodeConverter.asWorkspaceEdit(obj)
20+
return vscode.workspace.applyEdit(edit)
21+
}))
22+
}
23+
24+
getState (): FeatureState {
25+
return {
26+
kind: 'static'
27+
}
28+
}
29+
30+
dispose (): void {
31+
this.disposables.dispose()
32+
}
33+
}

src/services.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11

22
import { Services } from 'vscode/services'
3-
import { WorkspaceEdit, Disposable } from 'vscode-languageserver-protocol'
4-
import * as vscode from 'vscode'
5-
import { createConverter as createProtocolConverter } from 'vscode-languageclient/lib/common/protocolConverter'
63
import WatchableConsoleWindow from './services/WatchableConsoleWindow'
74
import CodinGameMonacoWorkspace from './services/CodinGameMonacoWorkspace'
85
import { Infrastructure } from './infrastructure'
@@ -13,25 +10,13 @@ interface CgMonacoServices extends Services {
1310
window: WatchableConsoleWindow
1411
}
1512

16-
function installCommands (): Disposable {
17-
// Comes from https://github.com/redhat-developer/vscode-java/blob/9b0f0aca80cbefabad4c034fb5dd365d029f6170/src/extension.ts#L155-L160
18-
// Other commands needs to be implemented as well?
19-
// (https://github.com/eclipse/eclipse.jdt.ls/issues/376#issuecomment-333923685)
20-
const protocolConverter = createProtocolConverter(undefined, true, true)
21-
return vscode.commands.registerCommand('java.apply.workspaceEdit', async (obj: WorkspaceEdit) => {
22-
const edit = await protocolConverter.asWorkspaceEdit(obj)
23-
return vscode.workspace.applyEdit(edit)
24-
})
25-
}
26-
2713
const services = {
2814
workspace: new CodinGameMonacoWorkspace('file:///tmp/project'),
2915
window: new WatchableConsoleWindow(),
3016
env: new CodinGameMonacoEnv()
3117
}
3218

3319
Services.install(services)
34-
installCommands()
3520

3621
function updateServices (infrastructure: Infrastructure): void {
3722
services.workspace.initialize(

src/staticOptions.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as vscode from 'vscode'
22
import * as monaco from 'monaco-editor'
33
import type { LanguageClientOptions } from './languageClientOptions'
44
import { CobolResolveSubroutineFeature } from './extensions/cobol'
5+
import { JavaExtensionFeature } from './extensions/java'
56

67
type LanguageClientOptionsById<T extends string> = Record<T, LanguageClientOptions>
78
const asLanguageClientOptionsById = <K extends string> (options: LanguageClientOptionsById<K>): LanguageClientOptionsById<K> => options
@@ -117,7 +118,12 @@ const staticOptions = asLanguageClientOptionsById({
117118
configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize']
118119
},
119120
mutualizable: true,
120-
vscodeExtensionIds: ['java']
121+
vscodeExtensionIds: ['java'],
122+
createAdditionalFeatures (client) {
123+
return [
124+
new JavaExtensionFeature(client)
125+
]
126+
}
121127
},
122128
javascript: {
123129
documentSelector: [

0 commit comments

Comments
 (0)