如何从SearchMatch对象获取行号?

时间:2010-02-01 12:03:05

标签: java eclipse-plugin

在我执行搜索后的插件中,每个匹配都被发送到acceptsearchmatch(搜索匹配)函数作为searchmatch的对象。我想获取匹配发生的行号。使用getoffset因为它给出了相对于源缓冲区的函数。我可以获得行号吗?帮助

感谢

2 个答案:

答案 0 :(得分:1)

诀窍是:SearchMatch给你一个SearchRange,这意味着该范围中可能包含几行。

解决方案是解析与SearchMatch返回的对象关联的 Document ,以便计算这些行号。
相关方法是getLineOfOffset(int offset)

在对象为IMember

的情况下,您有here an example
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;
}