Dsl 如何弃用生成的Xtext元素?
我正在用Xtext开发一个dsl。我想不推荐一些语言元素。我有一个Xtext文件,从中生成语言元素。我希望这些元素显示为不推荐使用 遗憾的是,在元素上添加@Deprecated没有任何作用,即使编辑器没有抱怨。我找不到任何关于deprecation和Xtext的信息Dsl 如何弃用生成的Xtext元素?,dsl,xtext,xtend,Dsl,Xtext,Xtend,我正在用Xtext开发一个dsl。我想不推荐一些语言元素。我有一个Xtext文件,从中生成语言元素。我希望这些元素显示为不推荐使用 遗憾的是,在元素上添加@Deprecated没有任何作用,即使编辑器没有抱怨。我找不到任何关于deprecation和Xtext的信息 validator = { generateDeprecationValidation = true } 在工作流中没有帮助吗 Model: greetings+=
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);
}
}
公共抽象类AbstractMyDslValidator扩展了AbstractDeclarativeValidator{
@凌驾
受保护的列表getEPackages(){
列表结果=新建ArrayList();
add(org.xtext.example.mydsl.mydsl.MyDslPackage.eINSTANCE);
返回结果;
}
@检查
public void checkDeprecatedGreeting(问候语元素){
addIssue(“该语言的这一部分被标记为不推荐使用的,将来可能会被删除!”,元素,MyDSLConfigurableSissueCodeProvider.Deprocated_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
}
}
@ExtendWith(InjectionExtension)
@InjectWith(MyDslInjectorProvider)
类MyDlsParsingTest{
@注入ParseHelper ParseHelper
@注入扩展验证TestHelper
@试验
def void loadModel(){
val result=parseHelper.parse(“”)
你好,Xtext!
''')
assertNotNull(结果)
val errors=result.eResource.errors
Assertions.assertTrue(errors.isEmpty,“意外错误:«errors.join(“,”)”))
结果.资产噪音
}
}
导致
在language=XtextGeneratorLanguage{validator={generatedeproductionvalidation=true}中?不,不幸的是,这似乎没什么用。在.xtext文件中的定义上添加@Deprecated可能是错误的吗?不,这样可以。你能给出你正在做的事情的详细步骤吗?还有:你使用哪个Xtext版本?我们使用2.17版本。我们正在为dsl和dsl创建VSCode扩展。扩展应该将某些元素显示为已弃用。我已将此
@Deprecated Button:{Button}
放在语言xtext文件中,并将验证程序放在Generator.mwe2文件的xtextgenerator语言中。但是VSCode什么都没有显示。如果这只是VSCode的一个问题,我应该能够在生成的文件中看到“Button”的某些内容吗?是在接口中还是在impl中?因为那里没有任何东西,也没有它生成到验证器中。您应该能够通过单元测试重现这一点(您也可以轻松地在那里进行调试)