2013-08-14 1 views
0

루트 노드의 기본 레이블 텍스트는 filename입니다. test.mydsl이라는 파일 이름을 만든 경우 레이블로 test이 표시됩니다. 하지만 전체 파일 이름을 변경하고 싶습니다. test.mydsl.xtext 윤곽의 루트 노드 레이블 변경

먼저 IXtextDocument 유형의 개체를 얻으려면 createRoot(IXtextDocument document)을 무시하지만 파일 이름 정보가없는 것 같습니다.

두 번째 시도는 원래 텍스트 끝에 .mydsl을 추가하는 것입니다. 내가 예상 한대로 원래 라벨 test을 줄 것이다 서브 클래스

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

_text(Model model)을 무시하면 이상한 일이다. 내가 가진 문자열을 추가하려고한다면, 그것은 filename의 값은 항상 null입니다

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" 

을 실패합니다. _xtext()의 반환 값이 String이 아닌가요?

답변

0

readOnly 작업을 사용하여 문서에 리소스를 쿼리하고 URI에 대해 요청할 수 있습니다. 이 같은 트릭을 수행 할 것입니다 :

myXtextDocument.readOnly(new IUnitOfWork<String, XtextResource>() { 
    public String exec(XtextResource resource) { 
    return resource.getURI().lastSegment(); 
    } 
}); 
+0

def _text(ROOT_NODE_TYPE)에 반환? –

+0

답변에 스 니펫을 추가했습니다. –

0

니스! 여기 개요 공급자 클래스 내 xtend의 ​​코드는

override createRoot(IXtextDocument doc) { 

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

    super.createRoot(doc)  
} 

및 클래스 멤버 변수 filename 나는 문서를 조회하는 데 사용해야하고 어떻게 URI가 해당 문서 리소스에 대한 얻을 수 readOnly 인 동작