I want to read parameters passed to a particular method of a java class. Here is the java file:
package config;
public class ABC extends LineAvailabilityNew
{
public ABC(Message msg)
throws MessageHandlerExcection
{
super(msg);
}
public void doMessageDataOverrides()
throws MessageHandlerExcection
{
super.doMessageDataOverrides();
setWorkingLineQty("21");
setStoppedLineQty("10");
setworkingLineExchangeGroupCode("GOL");
setWorkingLineWithServiceID("01014013024", "24", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", "");
setOneMoreWorkingLineWithServiceID("01014013025", "25", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", "");
setOneMoreWorkingLineWithServiceID("01014013026", "26", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", "");
setOneMoreStoppedLineWithServiceID("01014013015", "15", "PSTN Single Line", "N", "N", "", "NTE", "GOL", "", "Standard", "");
}
}
Here I want parameter values supplied to setWorkingLineWithServiceID();
So my output should be something like this:
1> "01014013024", "24", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", ""
2> "01014013026", "26", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", ""
I am not aware of APIs used for reading .java files from java code. Also my project constraint is to use Java 5
Thanks bhdrk
I modified your code a bit to suit my requirement and it worked. Thanks :)
Here's the file:
package test;
import japa.parser.JavaParser;
import japa.parser.ast.CompilationUnit;
import japa.parser.ast.body.BodyDeclaration;
import japa.parser.ast.body.MethodDeclaration;
import japa.parser.ast.body.TypeDeclaration;
import japa.parser.ast.expr.Expression;
import japa.parser.ast.expr.MethodCallExpr;
import japa.parser.ast.stmt.BlockStmt;
import japa.parser.ast.visitor.GenericVisitorAdapter;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class JavaFileParser {
static String strFilePath = null;
static String strMainMethod = null;
static String strMethodName = null;
private static void dataSetter(String pFilePath, String pMainMethod, String pMethodName) {
strFilePath = pFilePath;
strMainMethod = pMainMethod;
strMethodName = pMethodName;
}
public static ArrayList getMethodParameters(String pFilePath, String pMainMethod, String pMethodName) throws Exception {
// creates an input stream for the file to be parsed
ArrayList args1 = null;
dataSetter(pFilePath,pMainMethod, pMethodName);
InputStream in = new FileInputStream(strFilePath);
CompilationUnit cu;
try {
// parse the file
cu = JavaParser.parse(in);
} finally {
in.close();
}
// prints the resulting compilation unit to default system output
args1 = visit(cu);
return args1;
}
private static ArrayList visit(CompilationUnit cu) {
ArrayList paramatersList = null;
List<TypeDeclaration> types = cu.getTypes();
for (TypeDeclaration type : types) {
List<BodyDeclaration> members = type.getMembers();
for (BodyDeclaration member : members) {
if (member instanceof MethodDeclaration) {
MethodDeclaration method = (MethodDeclaration) member;
if (strMainMethod.equals(method.getName())) {
BlockStmt body = method.getBody();
MyVisitor myVisitor = new MyVisitor();
body.accept(myVisitor, null);
paramatersList = myVisitor.getParamatersList();
}
}
}
}
return paramatersList;
}
private static class MyVisitor extends GenericVisitorAdapter {
private ArrayList paramatersList= new ArrayList();
public Object visit(MethodCallExpr n, Object arg) {
if (strMethodName.equals(n.getName())){
List<Expression> expressionList = n.getArgs();
paramatersList.add(expressionList) ;
}
return super.visit(n, arg);
}
public ArrayList getParamatersList() {
return paramatersList;
}
}
}