无法将新的验证器类添加到Xtext中的AbstractJavaValidator

无法将新的验证器类添加到Xtext中的AbstractJavaValidator,java,xtext,Java,Xtext,我这里有个小问题。尽管它与Xtext相关,但我认为该解决方案可能更与java相关 我正在使用Xtext创建一个语法,它可以很好地工作。对于语法,存在一个名为BufferValidator的现有验证。其正确定义为 public class BufferValidator extends AbstractSPJavaValidator { // Validation methods which work fine } 我又加了一个 public class FreqValueValidato

我这里有个小问题。尽管它与Xtext相关,但我认为该解决方案可能更与java相关

我正在使用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验证器的列表中。现在,如果我自己在文件中添加我的验证器(理想情况下,我不应该这样做,因为这个文件是自动生成的),它会按预期工作


你知道我会错过什么吗。首先,在添加新的验证类之后,我确实重新创建/重新生成了语法符号

我希望我正确理解了你的情况:

BufferValidator
是自动生成的验证器,默认情况下只有那些验证有效。您希望添加另一个名为
FreqValueValidator
的验证器,该验证器仅在您操作
src gen
文件夹中的抽象类时起作用,该类将被下一个构建的类覆盖

您可以使用
@ComposedChecks
注释拆分验证器,并在“主”验证器中定义它们。在子验证器中,您必须覆盖
register
方法。它不是必需的,也不应该调用super方法,只需将其保留为空并添加注释即可

缓冲验证器:

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

// Validation methods which work fine 

}
public class FreqValueValidator extends AbstractDeclarativeValidator {

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

    // Some new validation methods
}
FreqValueValidator:

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

// Validation methods which work fine 

}
public class FreqValueValidator extends AbstractDeclarativeValidator {

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

    // Some new validation methods
}

我从官方的xtext支持论坛上得到了这个解决方案,但不幸的是,我没有再次找到这个线程。我正在使用它,它就像一个符咒。我希望我在上面的代码中得到了正确的东西,它未经测试。但这应该能让你走了。

我本不希望有更好的书面回答。格式良好,概念解释清楚。非常感谢。工作起来很有魅力。