Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dsl 如何弃用生成的Xtext元素?_Dsl_Xtext_Xtend - Fatal编程技术网

Dsl 如何弃用生成的Xtext元素?

Dsl 如何弃用生成的Xtext元素?,dsl,xtext,xtend,Dsl,Xtext,Xtend,我正在用Xtext开发一个dsl。我想不推荐一些语言元素。我有一个Xtext文件,从中生成语言元素。我希望这些元素显示为不推荐使用 遗憾的是,在元素上添加@Deprecated没有任何作用,即使编辑器没有抱怨。我找不到任何关于deprecation和Xtext的信息 validator = { generateDeprecationValidation = true } 在工作流中没有帮助吗 Model: greetings+=

我正在用Xtext开发一个dsl。我想不推荐一些语言元素。我有一个Xtext文件,从中生成语言元素。我希望这些元素显示为不推荐使用

遗憾的是,在元素上添加@Deprecated没有任何作用,即使编辑器没有抱怨。我找不到任何关于deprecation和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);
    }
}
公共抽象类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中?因为那里没有任何东西,也没有它生成到验证器中。您应该能够通过单元测试重现这一点(您也可以轻松地在那里进行调试)