无法在Xtext中向AbstractJavaValidator添加新的验证器类

时间:2013-06-26 09:54:09

标签: java xtext

我这里有一个小问题。即使它与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 validators列表中。现在如果我自己在文件中添加我的验证器(理想情况下我不应该自动生成此文件),它按预期工作。

知道我在这里可能缺少什么。对于初学者,我在添加新的验证类后重新创建/重新生成语法符号。

1 个答案:

答案 0 :(得分:3)

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

BufferValidator是自动生成的Validator,默认情况下只有那些验证有效。您希望添加另一个名为FreqValueValidator的Validator,它仅在您操作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支持论坛得到了这个解决方案,但遗憾的是没有再找到该主题。我正在使用它,它就像一个魅力。我希望我在上面的代码中得到了任何正确的信息,这是未经测试的。但它应该让你去。