2013-06-26 3 views
4

У меня здесь небольшая проблема. Хотя это связано с Xtext, я думаю, что решение может быть более связанным с Java.Невозможно добавить новый класс проверки для AbstractJavaValidator в Xtext

Я использую Xtext для создания грамматики, которая отлично работает. Для грамматики существовала существующая валидация, называемая BufferValidator. Его правильно определены как

public class BufferValidator extends AbstractSPJavaValidator { 

// Validation methods which work fine 

} 

Я добавил еще один.

public class FreqValueValidator extends AbstractSPJavaValidator{ 

    // Some new validation methods 

} 

Теперь, когда я запустить проект папку SRC-GEN/автоматически создается и содержит информацию о проверке в файле с именем AbstractSPJavaValidator.

**Snip** 
@ComposedChecks(validators= {gem.demo.validation.BufferValidator.class}) 
public class AbstractSPJavaValidator extends AbstractDeclarativeValidator { 

      // Methods here 
     } 

} 

Очевидно, мой новый валидатор не добавляется в список @ComposedChecks validators. Теперь, если я сам добавлю свой валидатор в файл (который в идеале не должен, поскольку этот файл будет автоматически сгенерирован), он работает так, как ожидалось.

Любая идея о том, что мне здесь не хватает. Для начала я повторно создал/повторно сгенерировал символы грамматики после добавления нового класса проверки.

ответ

3

Я надеюсь, что я понять ситуацию правильно:

BufferValidator является автоматически Validator, и по умолчанию только те валидация работы. Вы хотите добавить еще один валидатор с именем FreqValueValidator и это работает только при манипуляции абстрактным классом в папке src-gen, которая будет перезаписана следующей построенной.

Вы можете разделить валидаторы и определить их в «основном» валидаторе, BufferValidator в вашем случае, с аннотацией @ComposedChecks. В вспомогательных валидаторах вы должны перезаписать метод register. он не требуется и не должен вызывать метод super, просто оставьте его пустым с комментарием.

BufferValidator:

@ComposedChecks(validators = { FreqValueValidator.class }) 
public class BufferValidator extends AbstractSPJavaValidator { 

// Validation methods which work fine 

} 

FreqValueValidator:

public class FreqValueValidator extends AbstractDeclarativeValidator { 

    @Override 
    @Inject 
    public void register(EValidatorRegistrar registrar) { 
     // nothing to do 
    } 

    // Some new validation methods 
} 

Я получил это решение от официального форума поддержки XText, но, к сожалению, не нашли нить снова. Я использую его, и он работает как шарм. Надеюсь, что я получил что-то в этом коде, это непроверено. Но это должно заставить вас идти.

+0

Я не мог надеяться на лучший письменный ответ. Хорошо отформатированные, понятные понятия. Огромное спасибо . Работает как шарм. – rockstar

Смежные вопросы