2015-07-10 40 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应该是序列化独立的,因此独立于具体的行号。