Skip to content

Commit 9c85a88

Browse files
committed
Adapter to latest sprotty, add mandatory code
1 parent d1fb458 commit 9c85a88

10 files changed

+1022
-2423
lines changed

theia-version.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ function setTheiaVersion(pkgJsonFile, version) {
99
const content = fs.readFileSync(pkgJsonFile).toString()
1010
const newContent = content
1111
.replace(/("@theia\/[^"]*":)\s*"(latest|next)"/g, `$1 "${version}"`)
12-
.replace(/("theia-sprotty":)\s*"(latest|next)"/g, `$1 "${version}"`)
12+
.replace(/("sprotty-theia":)\s*"(latest|next)"/g, `$1 "${version}"`)
1313
fs.writeFileSync(pkgJsonFile, newContent)
1414
}
1515
}

theia-yang-extension/package.json

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,9 @@
99
],
1010
"dependencies": {
1111
"@theia/core": "next",
12-
"@theia/editor": "next",
13-
"@theia/filesystem": "next",
14-
"@theia/languages": "next",
15-
"@theia/monaco": "next",
16-
"@types/node": "^8.0.14",
17-
"theia-sprotty": "next",
18-
"yang-sprotty": "0.1.9"
12+
"sprotty": "next",
13+
"sprotty-theia": "next",
14+
"yang-sprotty": "0.2.0"
1915
},
2016
"scripts": {
2117
"prepare": "yarn run clean && yarn install:languageserver && yarn run build",

theia-yang-extension/src/frontend/language/frontend-extension.ts

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,18 @@ import { ContainerModule, interfaces } from 'inversify'
99
import { CommandContribution } from '@theia/core/lib/common'
1010
import { LanguageClientContribution } from '@theia/languages/lib/browser'
1111
import { YangLanguageClientContribution } from './yang-language-client-contribution'
12-
import { DiagramConfiguration } from 'theia-sprotty/lib'
12+
import { DiagramConfiguration } from 'sprotty-theia/lib'
1313
import { YangDiagramConfiguration } from '../yangdiagram/di.config'
14-
import { DiagramManager, DiagramManagerProvider } from 'theia-sprotty/lib'
14+
import { DiagramManager, DiagramManagerProvider } from 'sprotty-theia/lib'
1515
import { YangDiagramManager } from '../yangdiagram/yang-diagram-manager'
16-
import { FrontendApplicationContribution, OpenHandler } from '@theia/core/lib/browser'
16+
import { FrontendApplicationContribution, OpenHandler, WidgetFactory } from '@theia/core/lib/browser'
1717
import { configuration } from './yang-monaco-language'
1818
import { YangCommandContribution } from './yang-commands'
19+
import { YangDiagramLanguageClient } from '../yangdiagram/yang-diagram-language-client'
1920
import { MonacoEditorProvider } from '@theia/monaco/lib/browser/monaco-editor-provider'
2021
import { YangMonacoEditorProvider } from "../monaco/yang-monaco-editor-provider"
21-
import 'sprotty/css/sprotty.css'
22-
import 'theia-sprotty/css/theia-sprotty.css'
2322
import { ContextMenuCommands } from './dynamic-commands'
24-
import { ThemeManager } from '../yangdiagram/theme-manager';
23+
import { ThemeManager } from '../yangdiagram/theme-manager'
2524
import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate/textmate-contribution'
2625
import { YangTextmateContribution } from './yang-textmate-contribution'
2726

@@ -35,22 +34,29 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
3534
monaco.languages.onLanguage('yang', () => {
3635
monaco.languages.setLanguageConfiguration('yang', configuration)
3736
});
38-
bind(CommandContribution).to(YangCommandContribution).inSingletonScope();
3937
bind(YangLanguageClientContribution).toSelf().inSingletonScope()
40-
bind(LanguageClientContribution).toDynamicValue(ctx => ctx.container.get(YangLanguageClientContribution))
41-
bind(DiagramConfiguration).to(YangDiagramConfiguration).inSingletonScope()
42-
bind(DiagramManagerProvider).toProvider<DiagramManager>(context => {
43-
return () => {
44-
return new Promise<DiagramManager>((resolve) =>
45-
resolve(context.container.get(YangDiagramManager))
46-
)
47-
}
48-
}).whenTargetNamed('yang-diagram')
49-
bind(YangDiagramManager).toSelf().inSingletonScope()
50-
bind(FrontendApplicationContribution).toDynamicValue(context => context.container.get(YangDiagramManager))
51-
bind(OpenHandler).toDynamicValue(context => context.container.get(YangDiagramManager))
38+
bind(LanguageClientContribution).toService(YangLanguageClientContribution)
39+
bind(LanguageGrammarDefinitionContribution).to(YangTextmateContribution).inSingletonScope()
40+
41+
bind(CommandContribution).to(YangCommandContribution).inSingletonScope();
5242
bind(ContextMenuCommands).to(ContextMenuCommands).inSingletonScope()
5343
rebind(MonacoEditorProvider).to(YangMonacoEditorProvider).inSingletonScope()
44+
45+
bind(DiagramConfiguration).to(YangDiagramConfiguration).inSingletonScope()
46+
bind(YangDiagramLanguageClient).toSelf().inSingletonScope()
47+
bind(YangDiagramManager).toSelf().inSingletonScope()
48+
49+
bind(FrontendApplicationContribution).toService(YangDiagramManager)
50+
bind(OpenHandler).toService(YangDiagramManager)
51+
bind(WidgetFactory).toService(YangDiagramManager)
5452
bind(ThemeManager).toSelf().inSingletonScope()
55-
bind(LanguageGrammarDefinitionContribution).to(YangTextmateContribution).inSingletonScope()
53+
bind(DiagramManagerProvider).toProvider<DiagramManager>((context) => {
54+
return () => {
55+
return new Promise<DiagramManager>((resolve) => {
56+
let diagramManager = context.container.get<YangDiagramManager>(YangDiagramManager)
57+
resolve(diagramManager);
58+
})
59+
}
60+
})
61+
5662
})

theia-yang-extension/src/frontend/language/yang-language-client-contribution.ts

Lines changed: 13 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,22 @@
55
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
66
*/
77

8-
import { inject, injectable, named } from 'inversify'
9-
import { FrontendApplication, KeybindingRegistry } from '@theia/core/lib/browser'
10-
import URI from '@theia/core/lib/common/uri'
11-
import {
12-
BaseLanguageClientContribution,
13-
LanguageClientFactory,
14-
Languages,
15-
Workspace,
16-
ILanguageClient
17-
} from '@theia/languages/lib/browser'
18-
import { MessageConnection } from 'vscode-jsonrpc';
19-
import { DiagramManagerProvider, DiagramManager } from 'theia-sprotty/lib'
20-
import { CommandRegistry, Disposable } from '@theia/core/lib/common';
21-
import { SemanticHighlightingService } from '@theia/editor/lib/browser/semantic-highlight/semantic-highlighting-service';
22-
import { ContextMenuCommands } from './dynamic-commands';
8+
import { inject, injectable, multiInject } from 'inversify'
9+
import { LanguageClientFactory, Languages, Workspace } from '@theia/languages/lib/browser'
10+
import { DiagramLanguageClientContribution, DiagramManagerProvider } from 'sprotty-theia/lib'
2311

2412
@injectable()
25-
export class YangLanguageClientContribution extends BaseLanguageClientContribution {
13+
export class YangLanguageClientContribution extends DiagramLanguageClientContribution {
2614

2715
readonly id = 'yang'
2816
readonly name = 'Yang'
2917

3018
constructor(
31-
@inject(Workspace) workspace: Workspace,
32-
@inject(Languages) languages: Languages,
33-
@inject(LanguageClientFactory) languageClientFactory: LanguageClientFactory,
34-
@inject(DiagramManagerProvider)@named('yang-diagram') protected yangDiagramManagerProvider: DiagramManagerProvider,
35-
@inject(KeybindingRegistry) protected keybindingRegistry: KeybindingRegistry,
36-
@inject(CommandRegistry) protected commandRegistry: CommandRegistry,
37-
@inject(ContextMenuCommands) protected commands: ContextMenuCommands,
38-
@inject(SemanticHighlightingService) protected readonly semanticHighlightingService: SemanticHighlightingService
39-
) {
40-
super(workspace, languages, languageClientFactory)
19+
@inject(Workspace) protected readonly workspace: Workspace,
20+
@inject(Languages) protected readonly languages: Languages,
21+
@inject(LanguageClientFactory) protected readonly languageClientFactory: LanguageClientFactory,
22+
@multiInject(DiagramManagerProvider) protected diagramManagerProviders: DiagramManagerProvider[]) {
23+
super(workspace, languages, languageClientFactory, diagramManagerProviders)
4124
}
4225

4326
protected get globPatterns() {
@@ -46,31 +29,9 @@ export class YangLanguageClientContribution extends BaseLanguageClientContributi
4629
]
4730
}
4831

49-
waitForActivation(app: FrontendApplication): Promise<any> {
50-
return Promise.race([
51-
super.waitForActivation(app),
52-
this.waitForOpenDiagrams(this.yangDiagramManagerProvider())
53-
])
54-
}
55-
56-
createLanguageClient(connection: MessageConnection): ILanguageClient {
57-
const client: ILanguageClient & Readonly<{ languageId: string }> = Object.assign(super.createLanguageClient(connection), { languageId: this.id });
58-
client.registerFeature(SemanticHighlightingService.createNewFeature(this.semanticHighlightingService, client));
59-
return client;
60-
}
61-
62-
protected waitForOpenDiagrams(diagramManagerProvider: Promise<DiagramManager>): Promise<any> {
63-
return diagramManagerProvider.then(diagramManager => {
64-
return new Promise<URI>((resolve) => {
65-
const disposable = diagramManager.onDiagramOpened((uri: URI) => {
66-
disposable.dispose()
67-
resolve(uri)
68-
})
69-
})
70-
})
71-
}
72-
73-
registerCommand(id: string, callback: (...args: any[]) => any, thisArg?: any): Disposable {
74-
return this.commands.registerCommand(id, callback, thisArg)
32+
protected get documentSelector(): string[] {
33+
return [
34+
this.id
35+
]
7536
}
7637
}

theia-yang-extension/src/frontend/yangdiagram/di.config.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,32 @@
77

88
import { Container, injectable } from "inversify"
99
import { KeyTool, TYPES } from 'sprotty/lib'
10-
import { DiagramConfiguration } from "theia-sprotty/lib"
11-
import { TheiaDiagramServer } from "theia-sprotty/lib"
12-
import { TheiaKeyTool } from 'theia-sprotty/lib'
10+
import { DiagramConfiguration, EditDiagramLocker } from "sprotty-theia/lib"
11+
import { LSTheiaDiagramServer, LSTheiaDiagramServerProvider, TheiaDiagramServer, TheiaKeyTool } from 'sprotty-theia/lib'
1312
import { createYangDiagramContainer } from 'yang-sprotty/lib'
13+
import { YangDiagramServer } from "./yang-diagram-server"
1414

1515
@injectable()
1616
export class YangDiagramConfiguration implements DiagramConfiguration {
1717
diagramType: string = 'yang-diagram'
1818

1919
createContainer(widgetId: string): Container {
2020
const container = createYangDiagramContainer(widgetId)
21-
container.bind(TYPES.ModelSource).to(TheiaDiagramServer).inSingletonScope()
22-
container.rebind(KeyTool).to(TheiaKeyTool).inSingletonScope()
21+
container.bind(YangDiagramServer).toSelf().inSingletonScope();
22+
container.bind(TheiaDiagramServer).toService(YangDiagramServer);
23+
container.bind(LSTheiaDiagramServer).toService(YangDiagramServer);
24+
container.bind(TYPES.ModelSource).toService(TheiaDiagramServer);
25+
container.bind(EditDiagramLocker).toSelf().inSingletonScope()
26+
container.rebind(KeyTool).to(TheiaKeyTool).inSingletonScope();
27+
28+
container.bind(LSTheiaDiagramServerProvider).toProvider<LSTheiaDiagramServer>((context) => {
29+
return () => {
30+
return new Promise<LSTheiaDiagramServer>((resolve) => {
31+
resolve(context.container.get(LSTheiaDiagramServer));
32+
});
33+
};
34+
});
35+
2336
return container
2437
}
2538
}

theia-yang-extension/src/frontend/yangdiagram/theme-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { Disposable } from "@theia/languages/lib/browser";
22
import { ThemeService, Theme } from "@theia/core/lib/browser/theming";
33
import { injectable } from "inversify";
44

5-
const darkTheme = require('yang-sprotty/css/dark/dark.useable.css')
6-
const lightTheme = require('yang-sprotty/css/light/light.useable.css')
5+
const darkTheme = require('yang-sprotty/css/dark/diagram.css')
6+
const lightTheme = require('yang-sprotty/css/light/diagram.css')
77

88
@injectable()
99
export class ThemeManager implements Disposable {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { EditorManager } from "@theia/editor/lib/browser";
2+
import { inject, injectable } from "inversify";
3+
import { DiagramLanguageClient } from "sprotty-theia/lib";
4+
import { YangLanguageClientContribution } from "../language/yang-language-client-contribution";
5+
6+
@injectable()
7+
export class YangDiagramLanguageClient extends DiagramLanguageClient {
8+
constructor(
9+
@inject(YangLanguageClientContribution) languageClientContribution: YangLanguageClientContribution,
10+
@inject(EditorManager) editorManager: EditorManager) {
11+
super(languageClientContribution, editorManager)
12+
}
13+
}

theia-yang-extension/src/frontend/yangdiagram/yang-diagram-manager.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,30 @@
66
*/
77

88
import { inject, injectable } from 'inversify'
9-
import { LanguageClientContribution } from '@theia/languages/lib/browser'
109
import { EditorManager } from '@theia/editor/lib/browser'
11-
import { YangLanguageClientContribution } from '../language/yang-language-client-contribution'
12-
import { TheiaSprottyConnector, TheiaFileSaver, DiagramManagerImpl, DiagramWidgetRegistry } from 'theia-sprotty/lib'
13-
import { ThemeManager } from './theme-manager';
10+
import { Workspace } from '@theia/languages/lib/browser';
11+
import { QuickPickService, WidgetManager } from '@theia/core/lib/browser';
12+
import { YangDiagramLanguageClient } from './yang-diagram-language-client'
13+
import { LSTheiaSprottyConnector, TheiaSprottyConnector, TheiaFileSaver, DiagramManager } from 'sprotty-theia/lib'
1414

1515
@injectable()
16-
export class YangDiagramManager extends DiagramManagerImpl {
16+
export class YangDiagramManager extends DiagramManager {
1717

1818
readonly diagramType = 'yang-diagram'
1919
readonly iconClass = 'fa fa-microchip'
2020

2121
_diagramConnector: TheiaSprottyConnector
2222

23-
constructor(@inject(YangLanguageClientContribution) languageClientContribution: LanguageClientContribution,
24-
@inject(TheiaFileSaver) theiaFileSaver: TheiaFileSaver,
23+
constructor(@inject(YangDiagramLanguageClient) diagramLanguageClient: YangDiagramLanguageClient,
24+
@inject(TheiaFileSaver) fileSaver: TheiaFileSaver,
25+
@inject(WidgetManager) widgetManager: WidgetManager,
2526
@inject(EditorManager) editorManager: EditorManager,
26-
@inject(DiagramWidgetRegistry) diagramWidgetRegistry: DiagramWidgetRegistry,
27-
@inject(ThemeManager) themeManager: ThemeManager) {
27+
@inject(Workspace) workspace: Workspace,
28+
@inject(QuickPickService) quickPickService: QuickPickService) {
2829
super()
29-
themeManager.initialize()
30-
this._diagramConnector = new TheiaSprottyConnector(languageClientContribution, theiaFileSaver, editorManager, diagramWidgetRegistry)
30+
this._diagramConnector = new LSTheiaSprottyConnector(
31+
{ diagramLanguageClient, fileSaver, editorManager, widgetManager, workspace, quickPickService, diagramManager: this }
32+
)
3133
}
3234

3335
get diagramConnector() {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { inject, injectable } from "inversify"
2+
import { LSTheiaDiagramServer } from "sprotty-theia/lib"
3+
import { Action, ActionHandlerRegistry, IModelFactory, TYPES } from "sprotty";
4+
5+
@injectable()
6+
export class YangDiagramServer extends LSTheiaDiagramServer {
7+
8+
@inject(TYPES.IModelFactory) modelFactory: IModelFactory;
9+
10+
initialize(registry: ActionHandlerRegistry) {
11+
super.initialize(registry);
12+
}
13+
14+
handleLocally(action: Action): boolean {
15+
return super.handleLocally(action);
16+
}
17+
18+
}

0 commit comments

Comments
 (0)