Как отказаться от созданных элементов Xtext? - PullRequest
0 голосов
/ 13 мая 2019

Я разрабатываю DSL с Xtext.Я хочу отказаться от некоторых языковых элементов.У меня есть Xtext-файл, из которого создаются языковые элементы.Я хочу, чтобы эти элементы были показаны как устаревшие.

Добавление @Deprecated поверх элемента, к сожалению, ничего не делает, хотя редактор не жалуется.Я не мог найти что-нибудь относительно устаревания и Xtext.

1 Ответ

1 голос
/ 13 мая 2019

        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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...