繁体   English   中英

如何弃用生成的Xtext元素?

[英]How to deprecate generated Xtext elements?

我正在用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
    }
}

结果是

编辑

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM