From 78ba07af745a582f24234045db1215668fd075e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Sp=C3=B6nemann?= Date: Mon, 17 Jun 2024 09:32:07 +0000 Subject: [PATCH] Removed states-xtext example --- .github/workflows/build.yml | 12 +- .gitpod.yml | 4 +- .vscode/launch.json | 15 -- examples/states-langium/extension/esbuild.mjs | 2 +- .../webview}/css/diagram.css | 0 .../webview}/css/popup.css | 0 .../webview}/package.json | 0 .../webview}/src/custom-edge-router.ts | 0 .../webview}/src/di.config.ts | 0 .../webview}/src/html-views.tsx | 0 .../webview}/src/main.ts | 0 .../webview}/src/model.ts | 0 .../webview}/src/views.tsx | 0 .../webview}/tsconfig.json | 2 +- .../webview}/webpack.config.js | 0 examples/states-xtext/README.md | 17 -- examples/states-xtext/extension/.vscodeignore | 5 - examples/states-xtext/extension/README.md | 25 -- examples/states-xtext/extension/icon.png | Bin 11476 -> 0 bytes examples/states-xtext/extension/icon.svg | 42 --- .../extension/language-configuration.json | 30 --- examples/states-xtext/extension/package.json | 172 ------------ .../states-xtext/extension/server/.gitignore | 1 - .../extension/src/states-extension.ts | 68 ----- .../extension/syntaxes/states.tmLanguage.json | 66 ----- examples/states-xtext/extension/tsconfig.json | 16 -- .../states-xtext/extension/webpack.config.js | 41 --- .../states-xtext/language-server/.gitignore | 9 - .../states-xtext/language-server/build.gradle | 42 --- .../gradle/maven-deployment.gradle | 12 - .../gradle/source-layout.gradle | 31 --- .../gradle/wrapper/gradle-wrapper.jar | Bin 53937 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - examples/states-xtext/language-server/gradlew | 249 ------------------ .../states-xtext/language-server/gradlew.bat | 92 ------- .../.launch/StatesSocketServer.launch | 13 - .../org.eclipse.buildship.core.prefs | 8 - .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 7 - .../build.gradle | 29 -- .../theia/states/ide/StatesIdeModule.xtend | 17 -- .../theia/states/ide/StatesIdeSetup.xtend | 21 -- .../ide/diagram/StatesDiagramGenerator.xtend | 82 ------ .../ide/diagram/StatesDiagramModule.xtend | 23 -- .../ide/diagram/StatesDiagramServer.xtend | 18 -- .../diagram/StatesDiagramServerFactory.xtend | 10 - .../ide/diagram/StatesLayoutEngine.xtend | 33 --- .../ide/diagram/StatesReconnectHandler.xtend | 91 ------- .../launch/StatesLanguageServerSetup.xtend | 35 --- .../ide/launch/StatesServerLauncher.xtend | 14 - .../ide/launch/StatesSocketServer.xtend | 14 - .../codeActions/StatesCodeActionService.xtend | 83 ------ ...States (sm) Language Infrastructure.launch | 14 - .../org.eclipse.buildship.core.prefs | 8 - .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 7 - .../build.gradle | 39 --- .../examples/theia/states/GenerateStates.mwe2 | 46 ---- .../examples/theia/states/States.xtext | 16 -- .../theia/states/StatesRuntimeModule.xtend | 11 - .../theia/states/StatesStandaloneSetup.xtend | 15 -- .../states/generator/StatesGenerator.xtend | 75 ------ .../states/scoping/StatesScopeProvider.xtend | 31 --- .../states/validation/StatesValidator.xtend | 48 ---- .../states/tests/StatesParsingTest.xtend | 51 ---- .../language-server/settings.gradle | 2 - package.json | 3 +- tsconfig.json | 3 +- 68 files changed, 7 insertions(+), 1824 deletions(-) rename examples/{states-webview => states-langium/webview}/css/diagram.css (100%) rename examples/{states-webview => states-langium/webview}/css/popup.css (100%) rename examples/{states-webview => states-langium/webview}/package.json (100%) rename examples/{states-webview => states-langium/webview}/src/custom-edge-router.ts (100%) rename examples/{states-webview => states-langium/webview}/src/di.config.ts (100%) rename examples/{states-webview => states-langium/webview}/src/html-views.tsx (100%) rename examples/{states-webview => states-langium/webview}/src/main.ts (100%) rename examples/{states-webview => states-langium/webview}/src/model.ts (100%) rename examples/{states-webview => states-langium/webview}/src/views.tsx (100%) rename examples/{states-webview => states-langium/webview}/tsconfig.json (81%) rename examples/{states-webview => states-langium/webview}/webpack.config.js (100%) delete mode 100644 examples/states-xtext/README.md delete mode 100644 examples/states-xtext/extension/.vscodeignore delete mode 100644 examples/states-xtext/extension/README.md delete mode 100644 examples/states-xtext/extension/icon.png delete mode 100644 examples/states-xtext/extension/icon.svg delete mode 100644 examples/states-xtext/extension/language-configuration.json delete mode 100644 examples/states-xtext/extension/package.json delete mode 100644 examples/states-xtext/extension/server/.gitignore delete mode 100644 examples/states-xtext/extension/src/states-extension.ts delete mode 100644 examples/states-xtext/extension/syntaxes/states.tmLanguage.json delete mode 100644 examples/states-xtext/extension/tsconfig.json delete mode 100644 examples/states-xtext/extension/webpack.config.js delete mode 100644 examples/states-xtext/language-server/.gitignore delete mode 100644 examples/states-xtext/language-server/build.gradle delete mode 100644 examples/states-xtext/language-server/gradle/maven-deployment.gradle delete mode 100644 examples/states-xtext/language-server/gradle/source-layout.gradle delete mode 100644 examples/states-xtext/language-server/gradle/wrapper/gradle-wrapper.jar delete mode 100644 examples/states-xtext/language-server/gradle/wrapper/gradle-wrapper.properties delete mode 100755 examples/states-xtext/language-server/gradlew delete mode 100644 examples/states-xtext/language-server/gradlew.bat delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.launch/StatesSocketServer.launch delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.buildship.core.prefs delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.core.resources.prefs delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.jdt.core.prefs delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/build.gradle delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeModule.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeSetup.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramGenerator.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramModule.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServer.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServerFactory.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesLayoutEngine.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesReconnectHandler.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesLanguageServerSetup.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesServerLauncher.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesSocketServer.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/server/codeActions/StatesCodeActionService.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/.launch/Generate States (sm) Language Infrastructure.launch delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.buildship.core.prefs delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.core.resources.prefs delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.jdt.core.prefs delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/build.gradle delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/GenerateStates.mwe2 delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/States.xtext delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesRuntimeModule.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesStandaloneSetup.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/generator/StatesGenerator.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/scoping/StatesScopeProvider.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/validation/StatesValidator.xtend delete mode 100644 examples/states-xtext/language-server/io.typefox.examples.theia.states/src/test/java/io/typefox/examples/theia/states/tests/StatesParsingTest.xtend delete mode 100644 examples/states-xtext/language-server/settings.gradle diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 96e1eda..79384d9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,17 +19,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: '16' - - name: Set up Java - uses: actions/setup-java@v2 - with: - java-version: 11 - distribution: adopt - - name: Build Xtext Example - shell: bash - run: | - cd examples/states-xtext/language-server - ./gradlew build + node-version: '18' - name: Build Packages shell: bash run: yarn diff --git a/.gitpod.yml b/.gitpod.yml index 37cb68b..ae17c52 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,7 +1,5 @@ tasks: - - init: | - examples/states-xtext/language-server/gradlew -p examples/states-xtext/language-server/ build - yarn + - init: yarn vscode: extensions: diff --git a/.vscode/launch.json b/.vscode/launch.json index ca159cb..fabb502 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -59,21 +59,6 @@ ], "sourceMaps": true }, - { - "name": "States Example (Xtext)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "${workspaceFolder}/examples/workspace", - "--extensionDevelopmentPath=${workspaceFolder}/examples/states-xtext/extension" - ], - "outFiles": [ - "${workspaceFolder}/examples/states-xtext/extension/pack/*.js", - "${workspaceFolder}/packages/sprotty-vscode/lib/**/*.js" - ], - "sourceMaps": true - }, { "name": "Attach to Language Server", "type": "node", diff --git a/examples/states-langium/extension/esbuild.mjs b/examples/states-langium/extension/esbuild.mjs index bb31a1f..81aa09f 100644 --- a/examples/states-langium/extension/esbuild.mjs +++ b/examples/states-langium/extension/esbuild.mjs @@ -45,7 +45,7 @@ const nodeContext = await esbuild.context({ }); const browserContext = await esbuild.context({ - entryPoints: ['../../states-webview/src/main.ts'], + entryPoints: ['../webview/src/main.ts'], outdir: 'pack/diagram', bundle: true, target: 'es6', diff --git a/examples/states-webview/css/diagram.css b/examples/states-langium/webview/css/diagram.css similarity index 100% rename from examples/states-webview/css/diagram.css rename to examples/states-langium/webview/css/diagram.css diff --git a/examples/states-webview/css/popup.css b/examples/states-langium/webview/css/popup.css similarity index 100% rename from examples/states-webview/css/popup.css rename to examples/states-langium/webview/css/popup.css diff --git a/examples/states-webview/package.json b/examples/states-langium/webview/package.json similarity index 100% rename from examples/states-webview/package.json rename to examples/states-langium/webview/package.json diff --git a/examples/states-webview/src/custom-edge-router.ts b/examples/states-langium/webview/src/custom-edge-router.ts similarity index 100% rename from examples/states-webview/src/custom-edge-router.ts rename to examples/states-langium/webview/src/custom-edge-router.ts diff --git a/examples/states-webview/src/di.config.ts b/examples/states-langium/webview/src/di.config.ts similarity index 100% rename from examples/states-webview/src/di.config.ts rename to examples/states-langium/webview/src/di.config.ts diff --git a/examples/states-webview/src/html-views.tsx b/examples/states-langium/webview/src/html-views.tsx similarity index 100% rename from examples/states-webview/src/html-views.tsx rename to examples/states-langium/webview/src/html-views.tsx diff --git a/examples/states-webview/src/main.ts b/examples/states-langium/webview/src/main.ts similarity index 100% rename from examples/states-webview/src/main.ts rename to examples/states-langium/webview/src/main.ts diff --git a/examples/states-webview/src/model.ts b/examples/states-langium/webview/src/model.ts similarity index 100% rename from examples/states-webview/src/model.ts rename to examples/states-langium/webview/src/model.ts diff --git a/examples/states-webview/src/views.tsx b/examples/states-langium/webview/src/views.tsx similarity index 100% rename from examples/states-webview/src/views.tsx rename to examples/states-langium/webview/src/views.tsx diff --git a/examples/states-webview/tsconfig.json b/examples/states-langium/webview/tsconfig.json similarity index 81% rename from examples/states-webview/tsconfig.json rename to examples/states-langium/webview/tsconfig.json index 01b4a6a..e22c720 100644 --- a/examples/states-webview/tsconfig.json +++ b/examples/states-langium/webview/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../configs/base.tsconfig.json", + "extends": "../../../configs/base.tsconfig.json", "compilerOptions": { "jsx": "react", "rootDir": "src", diff --git a/examples/states-webview/webpack.config.js b/examples/states-langium/webview/webpack.config.js similarity index 100% rename from examples/states-webview/webpack.config.js rename to examples/states-langium/webview/webpack.config.js diff --git a/examples/states-xtext/README.md b/examples/states-xtext/README.md deleted file mode 100644 index c33b67a..0000000 --- a/examples/states-xtext/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# States example - -This folder contains an example VS Code extension with an [Xtext](https://www.eclipse.org/Xtext/)-based language server and a Sprotty diagram for a simple domain-specific language for statemachines. - -## Build - -```bash -language-server/gradlew -p language-server/ build -yarn --cwd .. -``` - - -## Publish to VS Code Marketplace - -``` -yarn --cwd extension publish -``` diff --git a/examples/states-xtext/extension/.vscodeignore b/examples/states-xtext/extension/.vscodeignore deleted file mode 100644 index 8bfb146..0000000 --- a/examples/states-xtext/extension/.vscodeignore +++ /dev/null @@ -1,5 +0,0 @@ -tsconfig.json -tslint.json -*.log -node_modules -icon.svg diff --git a/examples/states-xtext/extension/README.md b/examples/states-xtext/extension/README.md deleted file mode 100644 index baeeff6..0000000 --- a/examples/states-xtext/extension/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# A VSCode extension for a textual DSL with diagrams - -![Screenshot](images/screenshot.png) - -Features -* a textual DSL editor based on an Xtext LSP, -* diagrams based on Sprotty, -* animated automatic diagram updates on text changes, -* synchronized selection of text editor and diagram, -* SVG export (ALT-E), animated center selection (ALT-C), animated fit selection to screen (ALT-F). - -## Build it - -```bash -language-server/gradlew -p language-server build # build the language server -yarn --cwd webview # build the bundle.js for the webview -yarn --cwd extension # build the extension -``` - -## Run it -* load the repo into VS Code, -* built it, and -* lanch the extension _states-extension_. - -An example DSL file can be found [here](https://raw.githubusercontent.com/TypeFox/theia-xtext-sprotty-example/master/ws-theia/MrsGrantsSecretCompartment.sm). diff --git a/examples/states-xtext/extension/icon.png b/examples/states-xtext/extension/icon.png deleted file mode 100644 index 2f4c3ab806640d6305d2b22f59b7859cc6ef2cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11476 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 diff --git a/examples/states-xtext/extension/icon.svg b/examples/states-xtext/extension/icon.svg deleted file mode 100644 index 7cdfffb..0000000 --- a/examples/states-xtext/extension/icon.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/states-xtext/extension/language-configuration.json b/examples/states-xtext/extension/language-configuration.json deleted file mode 100644 index aa25710..0000000 --- a/examples/states-xtext/extension/language-configuration.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ "/*", "*/" ] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} \ No newline at end of file diff --git a/examples/states-xtext/extension/package.json b/examples/states-xtext/extension/package.json deleted file mode 100644 index 9ab8742..0000000 --- a/examples/states-xtext/extension/package.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "name": "states-extension", - "displayName": "States Example (Xtext)", - "description": "An example Xtext-based DSL with Sprotty diagrams for statemachines", - "private": true, - "publisher": "TypeFox", - "repository": { - "type": "git", - "url": "https://github.com/TypeFox/sprotty-vscode", - "directory": "examples/states-xtext/extension" - }, - "version": "0.6.0", - "engines": { - "vscode": "^1.46.0" - }, - "categories": [ - "Programming Languages" - ], - "icon": "icon.png", - "contributes": { - "languages": [ - { - "id": "states", - "aliases": [ - "states", - "sm" - ], - "extensions": [ - ".sm" - ], - "configuration": "./language-configuration.json" - } - ], - "grammars": [ - { - "language": "states", - "scopeName": "source.sm", - "path": "./syntaxes/states.tmLanguage.json" - } - ], - "commands": [ - { - "command": "states.diagram.open", - "title": "Open in Diagram", - "icon": "$(symbol-structure)", - "category": "States Diagram" - }, - { - "command": "states.diagram.fit", - "title": "Fit to Screen", - "category": "States Diagram" - }, - { - "command": "states.diagram.center", - "title": "Center selection", - "category": "States Diagram" - }, - { - "command": "states.diagram.delete", - "title": "Delete selected element", - "category": "States Diagram" - }, - { - "command": "states.diagram.export", - "title": "Export diagram to SVG", - "category": "States Diagram" - } - ], - "menus": { - "commandPalette": [ - { - "command": "states.diagram.open", - "when": "editorLangId == 'states'" - }, - { - "command": "states.diagram.fit", - "when": "states-diagram-focused" - }, - { - "command": "states.diagram.center", - "when": "states-diagram-focused" - }, - { - "command": "states.diagram.delete", - "when": "states-diagram-focused" - }, - { - "command": "states.diagram.export", - "when": "states-diagram-focused" - } - ], - "editor/context": [ - { - "command": "states.diagram.open", - "when": "editorLangId == 'states'", - "group": "navigation" - } - ], - "editor/title": [ - { - "command": "states.diagram.open", - "when": "editorLangId == 'states'", - "group": "navigation" - } - ], - "explorer/context": [ - { - "command": "states.diagram.open", - "when": "resourceExtname == '.sm'", - "group": "navigation" - } - ] - }, - "keybindings": [ - { - "key": "alt+f", - "mac": "alt+f", - "command": "states.diagram.fit", - "when": "states-diagram-focused" - }, - { - "key": "alt+c", - "mac": "alt+c", - "command": "states.diagram.center", - "when": "states-diagram-focused" - }, - { - "key": "alt+e", - "mac": "alt+e", - "command": "states.diagram.export", - "when": "states-diagram-focused" - }, - { - "key": "delete", - "mac": "delete", - "command": "states.diagram.delete", - "when": "states-diagram-focused" - } - ] - }, - "activationEvents": [ - "onLanguage:states", - "onCommand:states.diagram.open" - ], - "files": [ - "lib", - "extension", - "server", - "syntaxes", - "webview" - ], - "main": "./pack/states-extension", - "devDependencies": { - "@types/node": "^14.17.3", - "@types/vscode": "1.50.0", - "source-map-loader": "^4.0.1", - "sprotty-vscode": "^1.0.0", - "states-sprotty-webview": "^0.6.0", - "ts-loader": "^9.5.1", - "vscode-languageclient": "^9.0.1", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" - }, - "scripts": { - "prepare": "yarn run clean && yarn run build && yarn run copy-webview", - "clean": "rimraf lib pack", - "build": "webpack --mode=production", - "watch": "webpack --mode=development --watch", - "copy-webview": "shx cp ../../states-webview/out/* pack/", - "publish": "vsce publish" - } -} diff --git a/examples/states-xtext/extension/server/.gitignore b/examples/states-xtext/extension/server/.gitignore deleted file mode 100644 index 72e8ffc..0000000 --- a/examples/states-xtext/extension/server/.gitignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/examples/states-xtext/extension/src/states-extension.ts b/examples/states-xtext/extension/src/states-extension.ts deleted file mode 100644 index 9d9b853..0000000 --- a/examples/states-xtext/extension/src/states-extension.ts +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2018-2022 TypeFox and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ - -import * as path from 'path'; -import { registerDefaultCommands, registerLspEditCommands } from 'sprotty-vscode'; -import { LspWebviewEndpoint, LspWebviewPanelManager } from 'sprotty-vscode/lib/lsp'; -import { addLspLabelEditActionHandler, addWorkspaceEditActionHandler } from 'sprotty-vscode/lib/lsp/editing'; -import * as vscode from 'vscode'; -import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node'; - -let languageClient: LanguageClient; - -export function activate(context: vscode.ExtensionContext) { - languageClient = createLanguageClient(context); - const webviewPanelManager = new LspWebviewPanelManager({ - extensionUri: context.extensionUri, - defaultDiagramType: 'states-diagram', - languageClient, - supportedFileExtensions: ['.sm'], - configureEndpoint: endpoint => { - addWorkspaceEditActionHandler(endpoint as LspWebviewEndpoint); - addLspLabelEditActionHandler(endpoint as LspWebviewEndpoint); - } - }); - registerDefaultCommands(webviewPanelManager, context, { extensionPrefix: 'states' }); - registerLspEditCommands(webviewPanelManager, context, { extensionPrefix: 'states' }); -} - -function createLanguageClient(context: vscode.ExtensionContext): LanguageClient { - const executable = process.platform === 'win32' ? 'states-language-server.bat' : 'states-language-server'; - const languageServerPath = path.join('server', 'states-language-server', 'bin', executable); - const serverLauncher = context.asAbsolutePath(languageServerPath); - const serverOptions: ServerOptions = { - run: { - command: serverLauncher, - args: ['-trace'] - }, - debug: { - command: serverLauncher, - args: ['-trace'] - } - }; - const clientOptions: LanguageClientOptions = { - documentSelector: [{ scheme: 'file', language: 'states' }], - }; - const languageClient = new LanguageClient('statesLanguageClient', 'States Language Server', serverOptions, clientOptions); - languageClient.start(); - return languageClient; -} - -export async function deactivate(): Promise { - if (languageClient) { - await languageClient.stop(); - } -} diff --git a/examples/states-xtext/extension/syntaxes/states.tmLanguage.json b/examples/states-xtext/extension/syntaxes/states.tmLanguage.json deleted file mode 100644 index 1392d4f..0000000 --- a/examples/states-xtext/extension/syntaxes/states.tmLanguage.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "States DSL", - "scopeName": "source.sm", - "fileTypes": [ - "sm" - ], - "patterns": [ - { - "include": "#comments" - }, - { - "name": "keyword.control.states", - "match": "\\b(statemachine|state|event|=>)\\b" - }, - { - "name": "keyword.operator.states", - "match": "\\=\\>" - }, - { - "name": "constant.numeric.states", - "match": "\\b[1-9][0-9]*\\b" - }, - { - "name": "string.quoted.double.states", - "begin": "\"", - "end": "\"" - }, - { - "name": "string.quoted.single.states", - "begin": "'", - "end": "'" - } - ], - "repository": - { - "comments": { - "patterns": [ - { - "name": "comment.block.states", - "begin": "/\\*", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.states" - } - }, - "end": "\\*/", - "endCaptures": { - "0": { - "name": "punctuation.definition.comment.states" - } - } - }, { - "begin": "(^\\s+)?(?=//)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.cs" - } - }, - "end": "(?=$)", - "name":"comment.line.states" - } - ] - } - } - -} \ No newline at end of file diff --git a/examples/states-xtext/extension/tsconfig.json b/examples/states-xtext/extension/tsconfig.json deleted file mode 100644 index 2f836f5..0000000 --- a/examples/states-xtext/extension/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../../configs/base.tsconfig.json", - "compilerOptions": { - "module": "es6", - "rootDir": "src", - "outDir": "lib", - "lib": [ - "es2019" - ], - "declaration": false, - "declarationMap": false - }, - "include": [ - "src" - ] -} \ No newline at end of file diff --git a/examples/states-xtext/extension/webpack.config.js b/examples/states-xtext/extension/webpack.config.js deleted file mode 100644 index 5e689a4..0000000 --- a/examples/states-xtext/extension/webpack.config.js +++ /dev/null @@ -1,41 +0,0 @@ -//@ts-check -'use strict'; - -const path = require('path'); - -/**@type {import('webpack').Configuration}*/ -const config = { - target: 'node', - - entry: path.resolve(__dirname, 'src/states-extension.ts'), - output: { - path: path.resolve(__dirname, 'pack'), - filename: 'states-extension.js', - libraryTarget: "commonjs2", - devtoolModuleFilenameTemplate: "../[resource-path]", - }, - devtool: 'source-map', - externals: { - vscode: "commonjs vscode" - }, - resolve: { - extensions: ['.ts', '.js'] - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: ['ts-loader'] - }, - { - test: /\.js$/, - enforce: 'pre', - use: ['source-map-loader'], - } - ] - }, - ignoreWarnings: [/Failed to parse source map/] -} - -module.exports = config; diff --git a/examples/states-xtext/language-server/.gitignore b/examples/states-xtext/language-server/.gitignore deleted file mode 100644 index a006cde..0000000 --- a/examples/states-xtext/language-server/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -build/ -bin/ -xtext-gen/ -xtend-gen/ -.gradle/ -generated/ -org.eclipse.buildship.core.prefs -.classpath -.project diff --git a/examples/states-xtext/language-server/build.gradle b/examples/states-xtext/language-server/build.gradle deleted file mode 100644 index 1fa7534..0000000 --- a/examples/states-xtext/language-server/build.gradle +++ /dev/null @@ -1,42 +0,0 @@ -buildscript { - repositories { - mavenCentral() - gradlePluginPortal() - } - dependencies { - classpath 'org.xtext:xtext-gradle-plugin:4.0.0' - } -} - -subprojects { - ext.xtextVersion = '2.34.0' - ext.sprottyVersion = '1.1.1' - ext.elkVersion = '0.9.1' - - repositories { - mavenCentral() - } - - apply plugin: 'maven-publish' - apply plugin: 'java-library' - dependencies { - api platform("org.eclipse.xtext:xtext-dev-bom:${xtextVersion}") - } - - apply plugin: 'org.xtext.xtend' - apply from: "${rootDir}/gradle/source-layout.gradle" - apply from: "${rootDir}/gradle/maven-deployment.gradle" - apply plugin: 'eclipse' - - group = 'io.typefox.examples.theia.states' - //version = '1.0.0-SNAPSHOT' - - java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - - configurations.all { - exclude group: 'asm' - } -} diff --git a/examples/states-xtext/language-server/gradle/maven-deployment.gradle b/examples/states-xtext/language-server/gradle/maven-deployment.gradle deleted file mode 100644 index cd547fb..0000000 --- a/examples/states-xtext/language-server/gradle/maven-deployment.gradle +++ /dev/null @@ -1,12 +0,0 @@ -publishing { - publications { - LocalMavenRepo(MavenPublication) { - } - - } - repositories { - maven { - url = "$rootProject.buildDir/localRepo" - } - } -} diff --git a/examples/states-xtext/language-server/gradle/source-layout.gradle b/examples/states-xtext/language-server/gradle/source-layout.gradle deleted file mode 100644 index 044b0c9..0000000 --- a/examples/states-xtext/language-server/gradle/source-layout.gradle +++ /dev/null @@ -1,31 +0,0 @@ -sourceSets { - main { - java.srcDir 'src/main/xtext-gen' - resources.srcDir 'src/main/xtext-gen' - xtend.outputDir = 'src/main/xtend-gen' - } - test { - java.srcDir 'src/test/xtext-gen' - resources.srcDir 'src/test/xtext-gen' - xtend.outputDir = 'src/test/xtend-gen' - } -} - -jar { - from('model') { - into('model') - } - from(sourceSets.main.allSource) { - include '**/*.xtext' - } - manifest { - attributes 'Bundle-SymbolicName': project.name - } -} - - -plugins.withId('war') { - war { - webAppDirectory = file("src/main/webapp") - } -} diff --git a/examples/states-xtext/language-server/gradle/wrapper/gradle-wrapper.jar b/examples/states-xtext/language-server/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e3424a87265f2edb8bd9121d1e552c9d72857e09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53937 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 e?=b$45TBeR$lI(40D$oA@AKP) '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/examples/states-xtext/language-server/gradlew.bat b/examples/states-xtext/language-server/gradlew.bat deleted file mode 100644 index 7101f8e..0000000 --- a/examples/states-xtext/language-server/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.launch/StatesSocketServer.launch b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.launch/StatesSocketServer.launch deleted file mode 100644 index 852776b..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.launch/StatesSocketServer.launch +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.buildship.core.prefs b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index 812beb8..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -connection.arguments= -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.gradle.user.home=null -connection.java.home=null -connection.jvm.arguments= -connection.project.dir=.. -eclipse.preferences.version=1 -project.path=\:io.typefox.examples.theia.states.ide diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.core.resources.prefs b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.jdt.core.prefs b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f4d933e..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 -org.eclipse.jdt.core.compiler.compliance=11 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=11 diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/build.gradle b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/build.gradle deleted file mode 100644 index 54d1ed1..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -dependencies { - api project(':io.typefox.examples.theia.states') - api "org.eclipse.xtext:org.eclipse.xtext.ide:${xtextVersion}" - api "org.eclipse.xtext:org.eclipse.xtext.xbase.ide:${xtextVersion}" - - api "org.eclipse.sprotty:org.eclipse.sprotty.server:${sprottyVersion}" - api "org.eclipse.sprotty:org.eclipse.sprotty.xtext:${sprottyVersion}" - - api "org.eclipse.sprotty:org.eclipse.sprotty.layout:${sprottyVersion}" - api "org.eclipse.elk:org.eclipse.elk.alg.layered:${elkVersion}" -} - -apply plugin: 'application' -application { - mainClass = "io.typefox.examples.theia.states.ide.launch.StatesServerLauncher" - applicationName = 'states-language-server' -} - - - -task unzipServer(type: Copy, dependsOn: distZip) { - def zipFile = file("${buildDir}/distributions/states-language-server.zip") - def outputDir = file("${buildDir}/../../../extension/server") - - from zipTree(zipFile) - into outputDir -} - -build.dependsOn unzipServer \ No newline at end of file diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeModule.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeModule.xtend deleted file mode 100644 index 61294e6..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeModule.xtend +++ /dev/null @@ -1,17 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states.ide - -import io.typefox.examples.theia.states.ide.server.codeActions.StatesCodeActionService -import org.eclipse.xtext.ide.server.codeActions.ICodeActionService2 - -/** - * Use this class to register ide components. - */ -class StatesIdeModule extends AbstractStatesIdeModule { - - def Class bindICodeActionService2() { - StatesCodeActionService - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeSetup.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeSetup.xtend deleted file mode 100644 index 32c1fa9..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/StatesIdeSetup.xtend +++ /dev/null @@ -1,21 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states.ide - -import com.google.inject.Guice -import io.typefox.examples.theia.states.StatesRuntimeModule -import io.typefox.examples.theia.states.StatesStandaloneSetup -import org.eclipse.xtext.util.Modules2 -import io.typefox.examples.theia.states.ide.diagram.StatesDiagramModule - -/** - * Initialization support for running Xtext languages as language servers. - */ -class StatesIdeSetup extends StatesStandaloneSetup { - - override createInjector() { - Guice.createInjector(Modules2.mixin(new StatesRuntimeModule, new StatesIdeModule, new StatesDiagramModule)) - } - -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramGenerator.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramGenerator.xtend deleted file mode 100644 index 6b3981f..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramGenerator.xtend +++ /dev/null @@ -1,82 +0,0 @@ -package io.typefox.examples.theia.states.ide.diagram - -import com.google.inject.Inject -import io.typefox.examples.theia.states.states.State -import io.typefox.examples.theia.states.states.StateMachine -import io.typefox.examples.theia.states.states.StatesPackage -import io.typefox.examples.theia.states.states.Transition -import org.eclipse.emf.ecore.EObject -import org.eclipse.sprotty.LayoutOptions -import org.eclipse.sprotty.SEdge -import org.eclipse.sprotty.SGraph -import org.eclipse.sprotty.SLabel -import org.eclipse.sprotty.SModelElement -import org.eclipse.sprotty.SNode -import org.eclipse.sprotty.SPort -import org.eclipse.sprotty.xtext.IDiagramGenerator -import org.eclipse.sprotty.xtext.SIssueMarkerDecorator -import org.eclipse.sprotty.xtext.tracing.ITraceProvider -import static io.typefox.examples.theia.states.states.StatesPackage.Literals.* - -class StatesDiagramGenerator implements IDiagramGenerator { - - @Inject extension ITraceProvider - @Inject extension SIssueMarkerDecorator - - override generate(Context context) { - (context.resource.contents.head as StateMachine).toSGraph(context) - } - - def toSGraph(StateMachine sm, extension Context context) { - (new SGraph [ - id = idCache.uniqueId(sm, sm?.name ?: "undefined") - children = (sm.states.map[toSNode(context)] - + sm.states.map[transitions].flatten.map[toSEdge(context)] - ).toList - ]).traceAndMark(sm, context) - } - - def SNode toSNode(State state, extension Context context) { - val theId = idCache.uniqueId(state, state.name) - (new SNode [ - id = theId - children = #[ - (new SLabel [ - id = idCache.uniqueId(theId + '.label') - text = state.name - ]).trace(state, STATE__NAME, -1), - new SPort [ - id = idCache.uniqueId(theId + '.newTransition') - ] - ] - layout = 'stack' - layoutOptions = new LayoutOptions [ - paddingTop = 10.0 - paddingBottom = 10.0 - paddingLeft = 10.0 - paddingRight = 10.0 - - ] - ]).traceAndMark(state, context) - } - - def SEdge toSEdge(Transition transition, extension Context context) { - (new SEdge [ - sourceId = idCache.getId(transition.eContainer) - targetId = idCache.getId(transition.state) - val theId = idCache.uniqueId(transition, sourceId + ':' + transition.event.name + ':' + targetId) - id = theId - children = #[ - (new SLabel [ - id = idCache.uniqueId(theId + '.label') - type = 'label:xref' - text = transition.event.name - ]).trace(transition, StatesPackage.Literals.TRANSITION__EVENT, -1) - ] - ]).traceAndMark(transition, context) - } - - def T traceAndMark(T sElement, EObject element, Context context) { - sElement.trace(element).addIssueMarkers(element, context) - } -} \ No newline at end of file diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramModule.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramModule.xtend deleted file mode 100644 index 9147b85..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramModule.xtend +++ /dev/null @@ -1,23 +0,0 @@ -package io.typefox.examples.theia.states.ide.diagram - -import org.eclipse.sprotty.xtext.DefaultDiagramModule -import org.eclipse.sprotty.xtext.IDiagramGenerator - -class StatesDiagramModule extends DefaultDiagramModule { - - def Class bindIDiagramGenerator() { - StatesDiagramGenerator - } - - override bindIDiagramServerFactory() { - StatesDiagramServerFactory - } - - override bindILayoutEngine() { - StatesLayoutEngine - } - - override bindIDiagramServer() { - StatesDiagramServer - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServer.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServer.xtend deleted file mode 100644 index b151c09..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServer.xtend +++ /dev/null @@ -1,18 +0,0 @@ -package io.typefox.examples.theia.states.ide.diagram - -import com.google.inject.Inject -import org.eclipse.sprotty.Action -import org.eclipse.sprotty.xtext.LanguageAwareDiagramServer -import org.eclipse.sprotty.xtext.ReconnectAction - -class StatesDiagramServer extends LanguageAwareDiagramServer { - - @Inject StatesReconnectHandler reconnectHandler - - override protected handleAction(Action action) { - if (action.kind === ReconnectAction.KIND) - reconnectHandler.handle(action as ReconnectAction, this) - else - super.handleAction(action) - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServerFactory.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServerFactory.xtend deleted file mode 100644 index 1a8c078..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesDiagramServerFactory.xtend +++ /dev/null @@ -1,10 +0,0 @@ -package io.typefox.examples.theia.states.ide.diagram - -import org.eclipse.sprotty.xtext.DiagramServerFactory - -class StatesDiagramServerFactory extends DiagramServerFactory { - - override getDiagramTypes() { - #['states-diagram'] - } -} \ No newline at end of file diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesLayoutEngine.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesLayoutEngine.xtend deleted file mode 100644 index 5d4ff3c..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesLayoutEngine.xtend +++ /dev/null @@ -1,33 +0,0 @@ -package io.typefox.examples.theia.states.ide.diagram - -import org.eclipse.sprotty.SGraph -import org.eclipse.sprotty.SModelRoot -import org.eclipse.sprotty.layout.ElkLayoutEngine -import org.eclipse.sprotty.layout.SprottyLayoutConfigurator -import org.eclipse.elk.alg.layered.options.LayeredOptions -import org.eclipse.elk.core.options.CoreOptions -import org.eclipse.elk.core.options.Direction -import org.eclipse.elk.core.options.PortSide -import org.eclipse.elk.core.options.PortAlignment -import org.eclipse.elk.core.options.PortConstraints -import org.eclipse.sprotty.Action - -class StatesLayoutEngine extends ElkLayoutEngine { - - override layout(SModelRoot root, Action cause) { - if (root instanceof SGraph) { - val configurator = new SprottyLayoutConfigurator - configurator.configureByType('graph') - .setProperty(CoreOptions.DIRECTION, Direction.DOWN) - .setProperty(CoreOptions.SPACING_NODE_NODE, 30.0) - .setProperty(LayeredOptions.SPACING_EDGE_NODE_BETWEEN_LAYERS, 30.0) - configurator.configureByType('node') - .setProperty(CoreOptions.PORT_ALIGNMENT_DEFAULT, PortAlignment.CENTER) - .setProperty(CoreOptions.PORT_CONSTRAINTS, PortConstraints.FIXED_SIDE) - configurator.configureByType('port') - .setProperty(CoreOptions.PORT_SIDE, PortSide.EAST) - .setProperty((CoreOptions.PORT_BORDER_OFFSET), 3.0) - layout(root, configurator, cause) - } - } -} \ No newline at end of file diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesReconnectHandler.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesReconnectHandler.xtend deleted file mode 100644 index e312851..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/diagram/StatesReconnectHandler.xtend +++ /dev/null @@ -1,91 +0,0 @@ -package io.typefox.examples.theia.states.ide.diagram - -import com.google.inject.Inject -import io.typefox.examples.theia.states.states.State -import io.typefox.examples.theia.states.states.StateMachine -import org.eclipse.lsp4j.Range -import org.eclipse.lsp4j.TextEdit -import org.eclipse.lsp4j.WorkspaceEdit -import org.eclipse.sprotty.SEdge -import org.eclipse.sprotty.SModelElement -import org.eclipse.sprotty.SModelIndex -import org.eclipse.sprotty.xtext.ILanguageAwareDiagramServer -import org.eclipse.sprotty.xtext.ReconnectAction -import org.eclipse.sprotty.xtext.WorkspaceEditAction -import org.eclipse.sprotty.xtext.tracing.PositionConverter -import org.eclipse.sprotty.xtext.tracing.XtextTrace -import org.eclipse.xtext.ide.server.ILanguageServerAccess -import org.eclipse.xtext.ide.server.UriExtensions -import org.eclipse.xtext.nodemodel.util.NodeModelUtils -import static extension org.eclipse.xtext.EcoreUtil2.* - -class StatesReconnectHandler { - - @Inject UriExtensions uriExtensions - @Inject extension PositionConverter - - def handle(ReconnectAction action, ILanguageAwareDiagramServer server) { - val root = server.diagramState.currentModel - val extension index = new SModelIndex(root) - val routable = action.routableId?.get - val source = action.newSourceId?.get - val target = action.newTargetId?.get - server.diagramLanguageServer.languageServerAccess.doRead(server.sourceUri, [ context | - val sourceElement = source?.resolveElement(context) - val targetElement = target?.resolveElement(context) - if (sourceElement instanceof State && targetElement instanceof State) { - val textEdits = newArrayList - val eventName = sourceElement.getContainerOfType(StateMachine)?.events?.head?.name ?: 'undefined' - val transitionText = '''«'\n\t'»«eventName» => «(targetElement as State).name»''' - val oldRange = getOldRange(routable) - val newRange = getNewRange(sourceElement as State) - if (oldRange !== null) { - if ((routable as SEdge).sourceId !== action.newSourceId) { - textEdits += new TextEdit(oldRange, '') - textEdits += new TextEdit(newRange, transitionText) - } else { - textEdits += new TextEdit(oldRange, transitionText) - } - } else { - textEdits += new TextEdit(newRange, transitionText) - } - val workspaceEdit = new WorkspaceEdit() => [ - changes = #{ server.sourceUri -> textEdits } - ] - server.dispatch(new WorkspaceEditAction => [ - it.workspaceEdit = workspaceEdit - ]); - } - return null - ]) - } - - private def getOldRange(SModelElement routable) { - if (routable?.trace !== null) - new XtextTrace(routable.trace).range - else - null - } - - private def getNewRange(State sourceElement) { - val position = NodeModelUtils.findActualNodeFor(sourceElement).endOffset.toPosition(sourceElement) - return new Range(position, position) - } - - - private def resolveElement(SModelElement sElement, ILanguageServerAccess.Context context) { - if (sElement.trace !== null) { - val connectableURI = sElement.trace.toURI - return context.resource.resourceSet.getEObject(connectableURI, true); - } else { - return null - } - } - - private def toURI(String path) { - val parts = path.split('#') - if(parts.size !== 2) - throw new IllegalArgumentException('Invalid trace URI ' + path) - return uriExtensions.toUri(parts.head).trimQuery.appendFragment(parts.last) - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesLanguageServerSetup.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesLanguageServerSetup.xtend deleted file mode 100644 index 32de0d3..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesLanguageServerSetup.xtend +++ /dev/null @@ -1,35 +0,0 @@ -package io.typefox.examples.theia.states.ide.launch - -import com.google.gson.GsonBuilder -import org.eclipse.elk.alg.layered.options.LayeredMetaDataProvider -import org.eclipse.elk.core.util.persistence.ElkGraphResourceFactory -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.sprotty.layout.ElkLayoutEngine -import org.eclipse.sprotty.server.json.EnumTypeAdapter -import org.eclipse.sprotty.xtext.EditActionTypeAdapterFactory -import org.eclipse.sprotty.xtext.launch.DiagramLanguageServerSetup -import org.eclipse.sprotty.xtext.ls.SyncDiagramServerModule -import org.eclipse.xtext.ide.server.ServerModule -import org.eclipse.xtext.util.Modules2 - -class StatesLanguageServerSetup extends DiagramLanguageServerSetup { - - override setupLanguages() { - ElkLayoutEngine.initialize(new LayeredMetaDataProvider) - Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put('elkg', new ElkGraphResourceFactory) - } - - override configureGson(GsonBuilder gsonBuilder) { - gsonBuilder - .registerTypeAdapterFactory(new EditActionTypeAdapterFactory) - .registerTypeAdapterFactory(new EnumTypeAdapter.Factory) - } - - override getLanguageServerModule() { - Modules2.mixin( - new ServerModule, - new SyncDiagramServerModule - ) - } - -} \ No newline at end of file diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesServerLauncher.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesServerLauncher.xtend deleted file mode 100644 index f75ec39..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesServerLauncher.xtend +++ /dev/null @@ -1,14 +0,0 @@ -package io.typefox.examples.theia.states.ide.launch - -import org.eclipse.sprotty.xtext.launch.DiagramServerLauncher - -class StatesServerLauncher extends DiagramServerLauncher { - - override createSetup() { - new StatesLanguageServerSetup - } - - def static void main(String[] args) { - new StatesServerLauncher().run(args) - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesSocketServer.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesSocketServer.xtend deleted file mode 100644 index 67d4085..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/launch/StatesSocketServer.xtend +++ /dev/null @@ -1,14 +0,0 @@ -package io.typefox.examples.theia.states.ide.launch - -import org.eclipse.sprotty.xtext.launch.DiagramServerSocketLauncher - -class StatesSocketServer extends DiagramServerSocketLauncher { - - override createSetup() { - new StatesLanguageServerSetup - } - - def static void main(String... args) { - new StatesSocketServer().run(args) - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/server/codeActions/StatesCodeActionService.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/server/codeActions/StatesCodeActionService.xtend deleted file mode 100644 index d8ada94..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states.ide/src/main/java/io/typefox/examples/theia/states/ide/server/codeActions/StatesCodeActionService.xtend +++ /dev/null @@ -1,83 +0,0 @@ -package io.typefox.examples.theia.states.ide.server.codeActions - -import io.typefox.examples.theia.states.states.StateMachine -import java.util.List -import org.eclipse.emf.common.util.URI -import org.eclipse.emf.ecore.EObject -import org.eclipse.lsp4j.CodeAction -import org.eclipse.lsp4j.CodeActionParams -import org.eclipse.lsp4j.Command -import org.eclipse.lsp4j.Position -import org.eclipse.lsp4j.Range -import org.eclipse.lsp4j.TextEdit -import org.eclipse.lsp4j.WorkspaceEdit -import org.eclipse.lsp4j.jsonrpc.messages.Either -import org.eclipse.xtext.ide.server.Document -import org.eclipse.xtext.ide.server.codeActions.ICodeActionService2 - -class StatesCodeActionService implements ICodeActionService2 { - - static val CREATE_STATE_KIND = 'sprotty.create.state' - static val CREATE_EVENT_KIND = 'sprotty.create.event' - - - override getCodeActions(Options options) { - var root = options.resource?.contents?.head - if (root instanceof StateMachine) - createCodeActions(root, options.codeActionParams, options.document) - else - emptyList - } - - private def dispatch List> createCodeActions(StateMachine stateMachine, CodeActionParams params, Document document) { - val result = >newArrayList - if (CREATE_STATE_KIND.matchesContext(params)) { - result.add(Either.forRight(new CodeAction => [ - kind = CREATE_STATE_KIND - title = 'new State' - edit = createInsertWorkspaceEdit( - stateMachine.eResource.URI, - document.getPosition(document.contents.length), - '''«'\n'»state «getNewName('state', stateMachine.states.map[name])»''' - ) - ])); - } - if (CREATE_EVENT_KIND.matchesContext(params)) { - result.add(Either.forRight(new CodeAction => [ - kind = CREATE_EVENT_KIND - title = 'new Event' - edit = createInsertWorkspaceEdit( - stateMachine.eResource.URI, - document.getPosition(document.contents.length), - '''«'\n'»event «getNewName('event', stateMachine.events.map[name])»''' - ) - ])); - } - return result - } - - private def matchesContext(String kind, CodeActionParams params) { - if (params.context?.only === null) - return true - else - return params.context.only.exists[kind.startsWith(it)] - } - - private def String getNewName(String prefix, List siblings) { - for(var i = 0;; i++) { - val currentName = prefix + i - if (!siblings.exists[it == currentName]) - return currentName - } - } - - private def dispatch List> createCodeActions(EObject element, CodeActionParams params, Document document) { - return emptyList - } - - private def createInsertWorkspaceEdit(URI uri, Position position, String text) { - new WorkspaceEdit => [ - changes = #{uri.toString -> #[ new TextEdit(new Range(position, position), text) ]} - ] - } -} \ No newline at end of file diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.launch/Generate States (sm) Language Infrastructure.launch b/examples/states-xtext/language-server/io.typefox.examples.theia.states/.launch/Generate States (sm) Language Infrastructure.launch deleted file mode 100644 index 39910f0..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.launch/Generate States (sm) Language Infrastructure.launch +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.buildship.core.prefs b/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index 96f01a5..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -connection.arguments= -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.gradle.user.home=null -connection.java.home=null -connection.jvm.arguments= -connection.project.dir=.. -eclipse.preferences.version=1 -project.path=\:io.typefox.examples.theia.states diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.core.resources.prefs b/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.jdt.core.prefs b/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f4d933e..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 -org.eclipse.jdt.core.compiler.compliance=11 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=11 diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/build.gradle b/examples/states-xtext/language-server/io.typefox.examples.theia.states/build.gradle deleted file mode 100644 index 18eb870..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/build.gradle +++ /dev/null @@ -1,39 +0,0 @@ -dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter-api' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testImplementation "org.eclipse.xtext:org.eclipse.xtext.testing:${xtextVersion}" - api "org.eclipse.xtext:org.eclipse.xtext:${xtextVersion}" - api "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}" -} -configurations { - mwe2 { - extendsFrom compileClasspath - } -} - -dependencies { - mwe2 'org.eclipse.emf:org.eclipse.emf.mwe2.launch' - mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" - mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" - mwe2 'org.eclipse.xtext:xtext-antlr-generator' -} - -task generateXtextLanguage(type: JavaExec) { - mainClass = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher' - classpath = configurations.mwe2 - inputs.file "src/main/java/io/typefox/examples/theia/states/GenerateStates.mwe2" - inputs.file "src/main/java/io/typefox/examples/theia/states/States.xtext" - outputs.dir "src/main/xtext-gen" - args += "src/main/java/io/typefox/examples/theia/states/GenerateStates.mwe2" - args += "-p" - args += "rootPath=/${projectDir}/.." -} - -test { - useJUnitPlatform() -} -processResources.dependsOn(generateXtextLanguage) -generateXtext.dependsOn(generateXtextLanguage) -clean.dependsOn(cleanGenerateXtextLanguage) -eclipse.classpath.plusConfigurations += [configurations.mwe2] diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/GenerateStates.mwe2 b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/GenerateStates.mwe2 deleted file mode 100644 index a54da7b..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/GenerateStates.mwe2 +++ /dev/null @@ -1,46 +0,0 @@ -module io.typefox.examples.theia.states.GenerateStates - -import org.eclipse.xtext.xtext.generator.* -import org.eclipse.xtext.xtext.generator.model.project.* - -var rootPath = ".." - -Workflow { - - component = XtextGenerator { - configuration = { - project = StandardProjectConfig { - baseName = "io.typefox.examples.theia.states" - rootPath = rootPath - runtimeTest = { - enabled = true - } - genericIde = { - enabled = true - } - mavenLayout = true - } - code = { - encoding = "UTF-8" - lineDelimiter = "\n" - fileHeader = "/*\n * generated by Xtext \${version}\n */" - } - } - language = StandardLanguage { - name = "io.typefox.examples.theia.states.States" - fileExtensions = "sm" - - serializer = { - generateStub = false - } - validator = { - // composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" - // Generates checks for @Deprecated grammar annotations, an IssueProvider and a corresponding PropertyPage - generateDeprecationValidation = true - } - junitSupport = { - junitVersion = "5" - } - } - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/States.xtext b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/States.xtext deleted file mode 100644 index 648901e..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/States.xtext +++ /dev/null @@ -1,16 +0,0 @@ -grammar io.typefox.examples.theia.states.States with org.eclipse.xtext.common.Terminals - -generate states "http://www.typefox.io/examples/theia/states/States" - -StateMachine: - 'statemachine' name=ID - (states+=State | events+=Event)*; - -State: - 'state' name=ID transitions+=Transition*; - -Event: - 'event' name=ID; - -Transition: - event=[Event] '=>' state=[State]; diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesRuntimeModule.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesRuntimeModule.xtend deleted file mode 100644 index d7ba38f..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesRuntimeModule.xtend +++ /dev/null @@ -1,11 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states - - -/** - * Use this class to register components to be used at runtime / without the Equinox extension registry. - */ -class StatesRuntimeModule extends AbstractStatesRuntimeModule { -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesStandaloneSetup.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesStandaloneSetup.xtend deleted file mode 100644 index 61adbd2..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/StatesStandaloneSetup.xtend +++ /dev/null @@ -1,15 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states - - -/** - * Initialization support for running Xtext languages without Equinox extension registry. - */ -class StatesStandaloneSetup extends StatesStandaloneSetupGenerated { - - def static void doSetup() { - new StatesStandaloneSetup().createInjectorAndDoEMFRegistration() - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/generator/StatesGenerator.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/generator/StatesGenerator.xtend deleted file mode 100644 index 56aa6fc..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/generator/StatesGenerator.xtend +++ /dev/null @@ -1,75 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states.generator - -import io.typefox.examples.theia.states.states.State -import io.typefox.examples.theia.states.states.StateMachine -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.xtext.generator.AbstractGenerator -import org.eclipse.xtext.generator.IFileSystemAccess2 -import org.eclipse.xtext.generator.IGeneratorContext - -/** - * Generates code from your model files on save. - * - * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation - */ -class StatesGenerator extends AbstractGenerator { - - override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) { - val stateMachine = resource.contents.head as StateMachine - fsa.generateFile(stateMachine.name + ".java", toJavaCode(stateMachine)) - } - - def className(StateMachine statemachine) { - statemachine.name - } - - def toJavaCode(StateMachine sm) ''' - import java.io.BufferedReader; - import java.io.IOException; - import java.io.InputStreamReader; - - public class «sm.className» { - - public static void main(String[] args) { - new «sm.className»().run(); - } - - protected void run() { - String currentState = "«sm.states.head?.name»"; - String lastEvent = null; - while (true) { - «FOR state : sm.states» - «state.generateCode» - «ENDFOR» - } - } - - private String receiveEvent() { - System.out.flush(); - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - try { - return br.readLine(); - } catch (IOException ioe) { - System.out.println("Problem reading input"); - return ""; - } - } - } - ''' - - def generateCode(State state) ''' - if (currentState.equals("«state.name»")) { - System.out.println("Your are now in state '«state.name»'. Possible events are [« - state.transitions.map(t | t.event.name).join(', ')»]."); - lastEvent = receiveEvent(); - «FOR t : state.transitions» - if ("«t.event.name»".equals(lastEvent)) { - currentState = "«t.state.name»"; - } - «ENDFOR» - } - ''' -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/scoping/StatesScopeProvider.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/scoping/StatesScopeProvider.xtend deleted file mode 100644 index bde990a..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/scoping/StatesScopeProvider.xtend +++ /dev/null @@ -1,31 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states.scoping - -import io.typefox.examples.theia.states.states.StateMachine -import io.typefox.examples.theia.states.states.StatesPackage -import org.eclipse.emf.ecore.EObject -import org.eclipse.emf.ecore.EReference -import org.eclipse.xtext.scoping.Scopes - -import static extension org.eclipse.xtext.EcoreUtil2.* - -/** - * This class contains custom scoping description. - * - * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping - * on how and when to use it. - */ -class StatesScopeProvider extends AbstractStatesScopeProvider { - - override getScope(EObject context, EReference reference) { - if (reference == StatesPackage.Literals.TRANSITION__EVENT) { - return Scopes.scopeFor(context.getContainerOfType(StateMachine)?.events ?: emptyList) - } - if (reference == StatesPackage.Literals.TRANSITION__STATE) { - return Scopes.scopeFor(context.getContainerOfType(StateMachine)?.states ?: emptyList) - } - super.getScope(context, reference) - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/validation/StatesValidator.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/validation/StatesValidator.xtend deleted file mode 100644 index 1db02f0..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/main/java/io/typefox/examples/theia/states/validation/StatesValidator.xtend +++ /dev/null @@ -1,48 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states.validation - -import com.google.common.collect.Multimaps -import io.typefox.examples.theia.states.states.StateMachine -import io.typefox.examples.theia.states.states.StatesPackage -import org.eclipse.xtext.validation.Check - -/** - * This class contains custom validation rules. -@@ -11,15 +15,35 @@ package io.typefox.examples.theia.states.validation - */ -class StatesValidator extends AbstractStatesValidator { - - @Check - def checkState(io.typefox.examples.theia.states.states.State state) { - val event2transition = Multimaps.index(state.transitions, [event.name ?: '']) - event2transition.keySet.forEach [ name | - val transitionsWithCommonName = event2transition.get(name) - if (transitionsWithCommonName.size > 1) - transitionsWithCommonName.forEach [ - error('''Multiple transitions on event «name»''', it, StatesPackage.Literals.TRANSITION__EVENT) - ] - ] - } - - @Check - def checkUniqueNames(StateMachine sm) { - val name2state = Multimaps.index(sm.states, [name ?: '']) - name2state.keySet.forEach [ name | - val statesWithCommonName = name2state.get(name) - if (statesWithCommonName.size > 1) - statesWithCommonName.forEach [ - error('''Multiple states named '«name»'«»''', it, StatesPackage.Literals.STATE__NAME) - ] - ] - val name2event = Multimaps.index(sm.events, [name ?: '']) - name2event.keySet.forEach [ name | - val eventsWithCommonName = name2event.get(name) - if (eventsWithCommonName.size > 1) - eventsWithCommonName.forEach [ - error('''Multiple events named '«name»'«»''', it, StatesPackage.Literals.EVENT__NAME) - ] - ] - } -} diff --git a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/test/java/io/typefox/examples/theia/states/tests/StatesParsingTest.xtend b/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/test/java/io/typefox/examples/theia/states/tests/StatesParsingTest.xtend deleted file mode 100644 index 1681359..0000000 --- a/examples/states-xtext/language-server/io.typefox.examples.theia.states/src/test/java/io/typefox/examples/theia/states/tests/StatesParsingTest.xtend +++ /dev/null @@ -1,51 +0,0 @@ -/* - * generated by Xtext 2.16.0 - */ -package io.typefox.examples.theia.states.tests - -import com.google.inject.Inject -import io.typefox.examples.theia.states.states.StateMachine -import org.eclipse.xtext.testing.InjectWith -import org.eclipse.xtext.testing.extensions.InjectionExtension -import org.eclipse.xtext.testing.util.ParseHelper -import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.^extension.ExtendWith - -@ExtendWith(InjectionExtension) -@InjectWith(StatesInjectorProvider) -class StatesParsingTest { - @Inject - ParseHelper parseHelper - - @Test - def void loadModel() { - val result = parseHelper.parse(''' - statemachine MrsGrantsSecretCompartments - - event doorClosed - event drawOpened - event lightOn - event panelClosed - - state active - lightOn => waitingForDraw - drawOpened => waitingForLight - - state idle - doorClosed => active - - state waitingForLight - lightOn => idle - - state waitingForDraw - drawOpened => unlockedPanel - - state unlockedPanel - panelClosed => idle - ''') - Assertions.assertNotNull(result) - val errors = result.eResource.errors - Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''') - } -} diff --git a/examples/states-xtext/language-server/settings.gradle b/examples/states-xtext/language-server/settings.gradle deleted file mode 100644 index 85cd91a..0000000 --- a/examples/states-xtext/language-server/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -include 'io.typefox.examples.theia.states' -include 'io.typefox.examples.theia.states.ide' diff --git a/package.json b/package.json index ec59ed4..6a71d44 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "packages/sprotty-vscode-webview", "examples/states-langium/extension", "examples/states-langium/language-server", - "examples/states-xtext/extension", - "examples/states-webview" + "examples/states-langium/webview" ] } diff --git a/tsconfig.json b/tsconfig.json index 0d6504a..b50ce69 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ "extends": "./configs/base.tsconfig.json", "include": [ "packages/*/src/**/*.ts", - "examples/**/src/**/*.{ts,tsx}" + "examples/states-langium/*/src/**/*.ts", + "examples/states-langium/*/src/**/*.tsx" ] } \ No newline at end of file