在我执行搜索后的插件中,每个匹配都被发送到acceptsearchmatch(搜索匹配)函数作为searchmatch的对象。我想获取匹配发生的行号。使用getoffset因为它给出了相对于源缓冲区的函数。我可以获得行号吗?帮助
感谢
答案 0 :(得分:1)
诀窍是:SearchMatch
给你一个SearchRange
,这意味着该范围中可能包含几行。
解决方案是解析与SearchMatch返回的对象关联的 Document ,以便计算这些行号。
相关方法是getLineOfOffset(int offset)
在对象为IMember
ISourceRange range = member.getSourceRange();
if (range == null){
return null;
}
IBuffer buf = null;
ISourceModule compilationUnit = member.getSourceModule();
if (!compilationUnit.isConsistent()) {
return null;
}
buf = compilationUnit.getBuffer();
final int start = range.getOffset();
String contents = buf.getContents();
Document doc = new Document(contents);
try {
int line = doc.getLineOfOffset(start);
...
答案 1 :(得分:0)
这应该有效:
private int getLineNumber(SearchMatch match) throws BadLocationException,
IOException, CoreException {
IResource resource = match.getResource();
if (!(resource instanceof IFile)) {
// Log Error
return -1;
}
IFile file = (IFile) resource;
int offset = match.getOffset();
byte[] bytes = new byte[offset];
int read = file.getContents().read(bytes, 0, offset);
if (read != offset) {
// Log error
return -1;
}
String contents = new String(bytes);
Document fileSource = new Document(contents);
return fileSource.getLineOfOffset(offset) + 1;
}