0

我正在尝试使用 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);
        }
    });
}
4

1 回答 1

0

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();

process()每次在模型中找到新方法时都会调用该方法CtMethod:然后它将处理嵌套在内部类型和普通方法中的方法。

不要犹豫,在 Spoon Github 存储库上打开一个问题,并提供有关您现在如何使用 Spoon 的更多见解。

于 2018-08-02T08:05:26.780 回答