在我的硬盤驅動器,我有如下來源:如何從Eclipse JDT Parser中解析Java源代碼行?
package DAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.CountDownLatch;
public abstract class A {
public class A4{
public String teste4(int i){
return (new String("teste"));
}
}
public class A3{
public String teste3(int i){
return (new String("teste"));
}
public A4 teste33(int i){
return (new A4());
}
}
public class A2{
public A3 teste2(int i){
return (new A3());
}
}
public class A1{
public A2 teste1(int i){
return (new A2());
}
}
public int[] toIntArray(List<Integer> list) {
A1 q=new A1();
Integer t=q.teste1(
(new A1()).
teste1(0).
teste2(0).
teste33(0).
teste4(0).
length()).
teste2(0).
teste3(0).
length();
}
}
注意,在這個文件(A.java)我們有很多的空行,而不一定是寫在同一行一個命令,在別人的話,它的也許分散在許多行中(參見「toIntArray」方法的最後一行)。 當我解析與AST此源代碼,的「CompilationUnit」「的toString」顯示後續的結構(AST STRUCT):
package DAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.CountDownLatch;
public abstract class A {
public class A4 {
public String teste4( int i){
return (new String("teste"));
}
}
public class A3 {
public String teste3( int i){
return (new String("teste"));
}
public A4 teste33( int i){
return (new A4());
}
}
public class A2 {
public A3 teste2( int i){
return (new A3());
}
}
public class A1 {
public A2 teste1( int i){
return (new A2());
}
}
public int[] toIntArray( List<Integer> list){
A1 q=new A1();
Integer t=q.teste1((new A1()).teste1(0).teste2(0).teste33(0).teste4(0).length()).teste2(0).teste3(0).length();
}
}
注意,在這種情況下,所有的空行被移除,並且命令「整數t = q.teste1 ....「寫在同一行。對我來說很好。因此,在訪問「MethodInvocation」時,我想要獲取這些調用的行號。要做到這一點,我做我的astVisitors後續來源:
public boolean visit(final CompilationUnit node) {
this.CompilationUnit=node;
}
public boolean visit(final MethodInvocation node) {
Integer LineInFile=this.CompilationUnit.getLineNumber(node.getStartPosition());
}
但命令「getLineNumber」在源文件中返回行號在我的硬盤驅動器,而不是在AST結構。在這種情況下,在行「q.teste1((new .....」,命令「getLineNumber」返回行44和45,但希望這隻返回行44. 所以,如何得到de行在「AST結構」多少?
爲什麼要在「AST結構」中的「行號」而不是外部文件?外部文件是用戶唯一關心,或已經看到或將會識別的內容。她對AST結構毫無興趣,更不用說它存在的知識了。那麼這有什麼意義呢? –