我正在尝试使用INRIA开发的SPOON来检索程序中的所有方法以及所有方法调用。我可以为普通方法这样做,但是,我不能检索嵌套方法,也不能检索嵌套的方法调用。
这是我正在分析的一段代码,在这种情况下,我想用勺子收集嵌套的没有main的方法run((,我还想检索从run到类ElbowLiner构造函数的调用,你能告诉我如何实现这一点吗。我使用getAll(true(来检索包括嵌套方法调用在内的所有内容,但它不起作用,我无法在下面的代码片段中检索run((,也无法检索从run((到ElbowLiner 构造函数的方法调用
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Create the two text areas
TextAreaFigure ta = new TextAreaFigure();
ta.setBounds(new Point2D.Double(10,10),new Point2D.Double(100,100));
TextAreaFigure tb = new TextAreaFigure();
tb.setBounds(new Point2D.Double(210,110),new Point2D.Double(300,200));
// Create an elbow connection
ConnectionFigure cf = new LineConnectionFigure();
cf.setLiner(new ElbowLiner());
// Connect the figures
cf.setStartConnector(ta.findConnector(Geom.center(ta.getBounds()), cf));
cf.setEndConnector(tb.findConnector(Geom.center(tb.getBounds()), cf));
// Add all figures to a drawing
Drawing drawing = new DefaultDrawing();
drawing.add(ta);
drawing.add(tb);
drawing.add(cf);
// Show the drawing
JFrame f = new JFrame("My Drawing");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,300);
DrawingView view = new DefaultDrawingView();
view.setDrawing(drawing);
f.getContentPane().add(view.getComponent());
f.setVisible(true);
}
});
}
Spoon中从模型中检索所有方法的最简单方法是使用CtMethod
处理器。您可以尝试这样的代码:
public class MyProcessForMethods extends AbstractProcessor<CtMethod> {
public void process(CtMethod myMethod) {
System.out.println(mymethod.getSimpleName());
}
}
并使用它:
Launcher launcher = new Launcher();
launcher.addInputResource("/path/to/your/source");
launcher.addProcessor(new MyProcessForMethods());
launcher.run();
每次在模型中找到新的CtMethod
时,都会调用方法process()
:然后它也会处理从内部类型和普通方法嵌套的方法。
不要犹豫,在Spoon Github存储库上打开一个问题,并提供更多关于您现在如何使用Spoon的见解。