如何弃用生成的Xtext元素?

时间:2019-05-13 11:03:23

标签: dsl xtext xtend

我正在使用Xtext开发DSL。我想弃用某些语言元素。我有一个Xtext文件,可从中生成语言元素。我希望这些元素被显示为已弃用。

即使编辑器没有抱怨,在元素上添加@Deprecated也无法执行任何操作。我找不到有关弃用和Xtext的任何信息。

1 个答案:

答案 0 :(得分:1)

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

产生

Editor