Use something like JavaParser . From what I see, the Node class has references to the start and end indices of columns and rows. MethodDeclaration is a subclass of Node, so parse the source file and look for MethodDeclaration that contains your line number.
Code example
, src . .
package grimbo.test;
import japa.parser.JavaParser;
import japa.parser.ParseException;
import japa.parser.ast.CompilationUnit;
import japa.parser.ast.body.MethodDeclaration;
import japa.parser.ast.visitor.VoidVisitorAdapter;
import java.io.File;
import java.io.IOException;
public class TestMethodLineNumber {
public static void method1() {
int i = 1;
System.out.println(i);
}
public static void method2() {
String s = "hello";
System.out.println(s);
}
public static void main(String[] args) throws ParseException, IOException {
File f = new File(".").getAbsoluteFile();
File srcRoot = new File(f, "src/main/java");
String srcFilename = TestMethodLineNumber.class.getName().replaceAll("\\.", "/") + ".java";
File src = new File(srcRoot, srcFilename);
System.out.println(f);
System.out.println(srcRoot);
System.out.println(src);
getMethodLineNumbers(src);
}
private static void getMethodLineNumbers(File src) throws ParseException, IOException {
CompilationUnit cu = JavaParser.parse(src);
new MethodVisitor().visit(cu, null);
}
private static class MethodVisitor extends VoidVisitorAdapter {
@Override
public void visit(MethodDeclaration m, Object arg) {
System.out.println("From [" + m.getBeginLine() + "," + m.getBeginColumn() + "] to [" + m.getEndLine() + ","
+ m.getEndColumn() + "] is method:");
System.out.println(m);
}
}
}
From [13,5] to [16,5] is method:
public static void method1() {
int i = 1;
System.out.println(i);
}
From [18,5] to [21,5] is method:
public static void method2() {
String s = "hello";
System.out.println(s);
}
From [23,5] to [32,5] is method:
public static void main(String[] args) throws ParseException, IOException {
File f = new File(".").getAbsoluteFile();
File srcRoot = new File(f, "src/main/java");
String srcFilename = TestMethodLineNumber.class.getName().replaceAll("\\.", "/") + ".java";
File src = new File(srcRoot, srcFilename);
System.out.println(f);
System.out.println(srcRoot);
System.out.println(src);
getMethodLineNumbers(src);
}
From [34,5] to [37,5] is method:
private static void getMethodLineNumbers(File src) throws ParseException, IOException {
CompilationUnit cu = JavaParser.parse(src);
new MethodVisitor().visit(cu, null);
}
From [43,9] to [48,9] is method:
@Override
public void visit(MethodDeclaration m, Object arg) {
System.out.println("From [" + m.getBeginLine() + "," + m.getBeginColumn() + "] to [" + m.getEndLine() + "," + m.getEndColumn() + "] is method:");
System.out.println(m);
}