2015-09-30 38 views
0

我們有一個自定義的基於Xtext的DSL,並通過Xtend在此DSL中編寫的文檔生成C++代碼。這裏是DSL的一個簡單的例子:如何在Xtext IDE中顯示錯誤,前提是在聲明類型之前引用類型

component CMP 
{ 
    type A 
    { 
     B member_1; 
    } 

    type B 
    { 
     string member_1; 
    } 
} 

最後,對每component元件產生含有C++結構(基於type元素)的頭文件。現在發生以下問題:在我的DSL AB中可以正確解析(即使B聲明晚於A)。但是當我們生成C++代碼並執行諸如resource.contents.filter(TypeElement)來遍歷所有type元素時,它們將按照文檔中聲明的相同順序傳遞。這會導致編譯器錯誤生成C++頭文件,因爲B聲明晚於A,並且無需前向聲明即無法通過編譯器解析。

我想要的是在這種情況下在IDE中顯示一個錯誤(即如果在文檔後面出現type的引用存在)。有這種場景的標準驗證器嗎?如果不是,處理這個問題最合適的方法是什麼?

預先感謝您!

回答

2

對於前向引用沒有標準的驗證器。您需要根據交叉參考目標的值定義一個自己的。將ILocationInFileProvider注入驗證程序以獲取引用實例的區域,並將其與參考所有者的區域進行比較。這將做竅門來檢測前向引用。

+0

非常感謝您的解釋,Zarnekow先生!這對我很有幫助。 – Vivit