0

ルート ノードのデフォルトのラベル テキストはファイル名です。という名前のファイル名を作成すると、ラベルとしてtest.mydsl表示されます。testしかし、変更したいのは完全なファイル名test.mydslです。

最初にオーバーライドcreateRoot(IXtextDocument document)して型オブジェクトを取得しましたIXtextDocumentが、ファイル名情報が存在しないようです。

.mydsl2 番目の試行は、元のテキストの最後に単純に追加することです。奇妙なことは_text(Model model)、サブクラスでオーバーライドする場合です

def _xtext(Model model) { return super._xtext(model) }

期待通りのオリジナルラベルtestをお付けします。ただし、文字列を追加しようとすると失敗します

def _xtext(Model model) {
   val filename = super._xtext(model)
   // or cast it to a string
   val filename = super._xtext(model) as String

   return filename + ".mydsl"

の値filenameは常にnullです。_xtext()以外の何かの戻り値Stringですか?

4

2 に答える 2

0

良い!アウトライン プロバイダー クラスの xtend コード スニペットを次に示します。

override createRoot(IXtextDocument doc) {

  filename = doc.readOnly([res|
    return res.URI.lastSegment
  ]);               

  super.createRoot(doc)     
}

filenameクラスメンバー変数を返すdef _text(ROOT_NODE_TYPE)

于 2013-08-16T17:33:30.713 に答える
0

readOnly 操作を使用して、リソースのドキュメントをクエリし、URI を問い合わせることができます。このような何かがトリックを行います:

myXtextDocument.readOnly(new IUnitOfWork<String, XtextResource>() {
  public String exec(XtextResource resource) {
    return resource.getURI().lastSegment();
  }
});
于 2013-08-15T19:58:57.783 に答える