2013-06-26 63 views
4

我在這裏遇到了一個小問題。儘管它與Xtext有關,我認爲解決方案可能與Java更相關。無法在Xtext中向AbstractJavaValidator添加新的驗證器類

我使用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是自動生成的驗證,並且默認情況下只有那些驗證工作。您希望添加另一個名爲FreqValueValidator的驗證程序,該驗證程序僅適用於在src-gen文件夾中操作抽象類時使用下一個內置程序將覆蓋的抽象類。

您可以分割你的校驗,並在「主」驗證你的情況定義它們,BufferValidator,與@ComposedChecks註解。在子驗證器中,您必須覆蓋register方法。它不是必需的,不應該調用超級方法,只需留下空白並留下評論即可。

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