我想在IMarker的文件中标记一个EObject。我可以使用的是一个唯一的标识符,它作为一行的一部分出现。
如何获取包含此标识符的行号?
所以我有这个文件,其中包含几个bibtex条目,如
/*md+ DESKTOP */
@media (min-width: 768px) {
.collapse.navbar-collapse .nav.navbar-nav:first-child {
border-bottom: 1px solid grey;
}
.collapse.navbar-collapse .container-fluid {
float:right;
}
.additional-text {
position:absolute;
bottom:0px;
margin-bottom:8px;
margin-left:8px;
font-size:22px;
color:grey;
cursor:arrow;
}
}
/* md- overrides MOBILE */
@media (max-width: 767px) {
.collapse.navbar-collapse .nav.navbar-nav:first-child {
border-bottom: 1px solid lightgrey;
margin-bottom: 0px;
}
.collapse.navbar-collapse .nav.navbar-nav:first-child li:last-child {
border-bottom: 1px solid lightgrey;
margin-bottom: 0px;
}
.collapse.navbar-collapse .nav.navbar-nav:last-child li:first-child a {
padding-top: 0px;
}
.navbar-header img {
max-height:80px;
}
.collapse.navbar-collapse.in .nav.navbar-nav {
float:none !important;
display:block;
}
.additional-text {
position:relative;
font-size:22px;
display:none;
}
}
我有我的对象
@ARTICLE{Author2015,
title={Hello World},
...
}
@BOOK{Author2000,
title={Book Title},
...
}
我是否必须使用BibtexObject bib = ...
String identifier = bib.getIdentifier(); // = "Author2000"
检查并计算每一行?
谢谢。
答案 0 :(得分:0)
您没有详细说明EObject(内存中的Java对象)与磁盘上的持久文件之间的关系。默认情况下,某些XML序列化将保留您的模型,而您似乎使用其他一些文本序列化。也许Xtext?根据序列化,行号可能会有很大差异。但是,对于仅创建标记,您可能根本不需要行号。
您可以查看org.eclipse.emf.edit.ui.action.ValidateAction,了解EMF如何为验证结果创建标记。
EMF通常将其EObject URI存储为Marker而不是Numer行,因此您可以从Marker中获取它,如
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 URI应该是独立于序列化的,因此不依赖于具体的行号。