我有一个java文件,我想在throw关键字
之后获得异常类型的异常消息// this is the code of D:\ProjectFile\AST\Test\000001\test.java
if (len < 0 || offset < 0 || len + offset > b.length) {
String str = "index out of bounds";
throw new IndexOutOfBoundsException(s);
}
例如,我想获取字符串"index out of bounds";在"D:ProjectFileASTTest 00001 Test .java"中,因为他是IndexOutOfBoundsException的属性
所以,当我使用spoon时,我找不到足够的例子来教我
public static void main(String[] args) {
Launcher launcher = new Launcher();
launcher.addInputResource("D:\ProjectFile\AST\Test\000001\test.java");
launcher.buildModel();
CtModel model = launcher.getModel();
List<CtThrow> throwList = model.getElements(new TypeFilter<>(CtThrow.class));
for (int i = 0; i < throwList.size();i++) {
System.out.println(throwList.get(i).getThrownExpression());
}
}
使用上面的代码,我只能得到以下内容:
new java.lang.IndexOutOfBoundsException(s)
我无法得到s
的值。
我希望能够检查此异常类型的构造函数并获得其属性值,我该如何做到这一点?
试一试:
IndexOutOfBoundsException e = new java.lang.IndexOutOfBoundsException(s);
Field[] field = e.getClass().getDeclaredFields();
for(int i = 0 ; i<field.length ; i++)
java.lang.System.out.print(field[i].get(e));
但是它无法获得声明为private的值
你需要一些数据流分析。
在Spoon中,这不是在Spoon -core中,而是在子模块https://github.com/INRIA/spoon/tree/master/spoon-dataflow
中