无法将新的验证器类添加到Xtext中的AbstractJavaValidator
我这里有个小问题。尽管它与Xtext相关,但我认为该解决方案可能更与java相关 我正在使用Xtext创建一个语法,它可以很好地工作。对于语法,存在一个名为BufferValidator的现有验证。其正确定义为无法将新的验证器类添加到Xtext中的AbstractJavaValidator,java,xtext,Java,Xtext,我这里有个小问题。尽管它与Xtext相关,但我认为该解决方案可能更与java相关 我正在使用Xtext创建一个语法,它可以很好地工作。对于语法,存在一个名为BufferValidator的现有验证。其正确定义为 public class BufferValidator extends AbstractSPJavaValidator { // Validation methods which work fine } 我又加了一个 public class FreqValueValidato
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支持论坛上得到了这个解决方案,但不幸的是,我没有再次找到这个线程。我正在使用它,它就像一个符咒。我希望我在上面的代码中得到了正确的东西,它未经测试。但这应该能让你走了。我本不希望有更好的书面回答。格式良好,概念解释清楚。非常感谢。工作起来很有魅力。