How to read method parameters from a method call defined in a .java file? -
i want read parameters passed particular method of java class. here 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 want parameter values supplied setworkinglinewithserviceid();
output should 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 not aware of apis used reading .java files java code. project constraint use java 5
you can use javaparser
maven dependency
<dependency> <groupid>com.google.code.javaparser</groupid> <artifactid>javaparser</artifactid> <version>1.0.8</version> </dependency>
parser:
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.methodcallexpr; import japa.parser.ast.stmt.blockstmt; import japa.parser.ast.visitor.genericvisitoradapter; import java.io.inputstream; import java.util.list; public class app { public static void main(string[] args) throws exception { // creates input stream file parsed inputstream in = app.class.getresourceasstream("abc.java"); // if want use absolute path try // inputstream in = fileinputstream("/path/to/file/abc.java"); compilationunit cu; try { // parse file cu = javaparser.parse(in); } { in.close(); } // prints resulting compilation unit default system output visit(cu); } private static void visit(compilationunit cu) { list<typedeclaration> types = cu.gettypes(); (typedeclaration type : types) { list<bodydeclaration> members = type.getmembers(); (bodydeclaration member : members) { if (member instanceof methoddeclaration) { methoddeclaration method = (methoddeclaration) member; if ("domessagedataoverrides".equals(method.getname())) { blockstmt body = method.getbody(); body.accept(new myvisitor(), null); } } } } } private static class myvisitor extends genericvisitoradapter { public object visit(methodcallexpr n, object arg) { if ("setonemoreworkinglinewithserviceid".equals(n.getname())){ system.out.println(n.getargs()); } return super.visit(n, arg); } } }
output:
--- update ---
project files:
1) maven project. abc.java file should in src/main/resources folder. if want use absolute path try fileinputstream below.
inputstream in = fileinputstream("/path/to/file/abc.java");
2) n.getargs() java.util.list. can per argument. try new myvisitor.
private static class myvisitor extends genericvisitoradapter { public object visit(methodcallexpr n, object arg) { if ("setonemoreworkinglinewithserviceid".equals(n.getname())){ (expression expression : n.getargs()) { system.out.println(expression.tostring()); } } return super.visit(n, arg); } }
Comments
Post a Comment