首页 > 解决方案 > 如何弃用生成的 Xtext 元素?

问题描述

我正在用 Xtext 开发一个 dsl。我想弃用一些语言元素。我有一个生成语言元素的 Xtext 文件。我希望显示这些元素已被弃用。

在元素上添加 @Deprecated 很遗憾,即使编辑器没有抱怨。我找不到任何关于弃用和 Xtext 的信息。

标签: dslxtextxtend

解决方案


        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
    }
}

结果是

编辑


推荐阅读