【问题标题】:Get line number from file snippet从文件片段中获取行号
【发布时间】:2015-09-29 16:17:16
【问题描述】:

我想用IMarker 标记文件中的EObject。我只能使用作为一行的一部分出现的唯一标识符。

如何获取包含此标识符的行号?

所以我有这个文件,其中包含几个 bibtex 条目,如

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

我有我的对象

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

我是否必须使用IFile#getContents() 检查并计算每一行?

谢谢。

【问题讨论】:

    标签: java eclipse rcp emf


    【解决方案1】:

    您没有详细说明 EObject(内存中的 Java 对象)和磁盘上的持久文件之间的关系。默认情况下,某些 XML 序列化将保留您的模型,而看起来您使用其他一些文本序列化。也许Xtext?根据序列化,行号可能非常不同。但是,对于仅创建标记,您可能根本不需要行号。

    您可以查看 org.eclipse.emf.edit.ui.action.ValidateAction,了解 EMF 本身如何为验证结果创建标记。

    EMF 通常将其 EObject URI 存储为 Marker 而不是 line Numer,因此您可以像从 Marker 中获取它

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

    可以从ResourceSet中获取对应的对象

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

    反过来,您可以创建一个新的标记,并将 EValidator.URI_ATTRIBUTE 设置为包含资源中的 EObject 的 URI。你可以通过

    resource.getURIFragment(myEObject)
    

    我认为 EMF URI 应该独立于序列化,因此独立于具体的行号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 2019-03-12
      • 2017-07-28
      相关资源
      最近更新 更多