2015-07-10 75 views
1

我想在IMarker的文件中標記EObject。我可以使用的唯一標識符是作爲行的一部分出現的。從文件片段獲取行號

如何獲取包含此標識符的行號?

所以我有這個文件包含了像

@ARTICLE{Author2015, 
    title={Hello World}, 
    ... 
} 
@BOOK{Author2000, 
    title={Book Title}, 
    ... 
} 

中文提供幾個條目,我有我的目標

BibtexObject bib = ... 
String identifier = bib.getIdentifier(); // = "Author2000" 

我一定要檢查並計數使用IFile#getContents()每一行?

謝謝。

回答

0

您沒有詳細說明EObject(內存中的Java對象)與磁盤上持久文件之間的關係。默認情況下,某些XML序列化將保留模型,而您看​​起來像使用其他文本序列化。也許Xtext?取決於序列號,行號可能會非常不同。但是,對於僅創建標記,您可能根本不需要行號。

您可以在org.eclipse.emf.edit.ui.action.ValidateAction中查看EMF自身爲驗證結果創建標記的方式。

EMF通常存儲其EObject URI的標記,而不是線NUMER,這樣你就可以從標記得到它像

String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null); 

您可以從的ResourceSet

URI uri = URI.createURI(uriAttribute);  
resource.getResourceSet().getEObject(uri, true); 

得到相應的對象反過來,您可以創建一個新的Marker,將EValidator.URI_ATTRIBUTE設置爲其包含的Resource中的EObject的URI。你可以通過

resource.getURIFragment(myEObject) 

我認爲EMF URIs應該是序列化獨立的,因此獨立於具體的行號。