【发布时间】:2019-05-16 01:09:03
【问题描述】:
我正在用 Xtext 开发一个 dsl。我想弃用一些语言元素。我有一个生成语言元素的 Xtext 文件。我希望显示这些元素已被弃用。
在元素上添加@Deprecated 很遗憾,即使编辑器没有抱怨,也没有任何作用。我找不到任何关于弃用和 Xtext 的信息。
【问题讨论】:
我正在用 Xtext 开发一个 dsl。我想弃用一些语言元素。我有一个生成语言元素的 Xtext 文件。我希望显示这些元素已被弃用。
在元素上添加@Deprecated 很遗憾,即使编辑器没有抱怨,也没有任何作用。我找不到任何关于弃用和 Xtext 的信息。
【问题讨论】:
validator = {
generateDeprecationValidation = true
}
对工作流程没有帮助?
Model:
greetings+=Greeting*;
@Deprecated
Greeting:
'Hello' name=ID '!';
这将生成
public abstract class AbstractMyDslValidator extends AbstractDeclarativeValidator {
@Override
protected List<EPackage> getEPackages() {
List<EPackage> result = new ArrayList<EPackage>();
result.add(org.xtext.example.mydsl.myDsl.MyDslPackage.eINSTANCE);
return result;
}
@Check
public void checkDeprecatedGreeting(Greeting element) {
addIssue("This part of the language is marked as deprecated and might get removed in the future!", element, MyDslConfigurableIssueCodesProvider.DEPRECATED_MODEL_PART);
}
}
这样这个单元测试就会失败
@ExtendWith(InjectionExtension)
@InjectWith(MyDslInjectorProvider)
class MyDslParsingTest {
@Inject ParseHelper<Model> parseHelper
@Inject extension ValidationTestHelper
@Test
def void loadModel() {
val result = parseHelper.parse('''
Hello Xtext!
''')
Assertions.assertNotNull(result)
val errors = result.eResource.errors
Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''')
result.assertNoIssues
}
}
结果
【讨论】:
@Deprecated Button: {Button} 放入语言 xtext 文件中,并将验证器放入 Generator.mwe2 文件中的 XtextGeneratorLanguage 中。但是 VSCode 什么也没告诉我们。如果这只是 VSCode 的问题,我应该能够在生成的文件中看到“按钮”的内容吗?无论是在接口还是实现?因为那里也什么都没有