检查项目中的方法用法

时间:2018-02-17 07:02:48

标签: java

我已从几个git存储库中克隆了几个Java项目,我想知道具体的方法是使用的,以及使用频率。

当我在网上搜索所有我能找到的问题是关于在运行时调用方法的频率,或者对唯一方法有多少引用,而不是有多少引用相同的方法。

编辑在Eclipse中使用搜索功能是不可能的,因为虽然它显示我使用某种方法的位置,但我需要在相当多的界面中搜索400多种方法。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是首先将项目编译为类文件,然后使用javap解析这些类文件。 然后,您可以使用grep和sed等工具来解析javap的输出。

public class WorkThread extends Thread {
    private int[] vec;
    private int id;
    private int result;
    private static int[] doneArr;
    private static int progress = 0;

    public WorkThread(int[] vec, int id) {
        this.vec = vec;
        this.id = id;
        doneArr = new int[vec.length];
        for(int i = 0; i < doneArr.length; i++) {
            doneArr[i] = -1; //default value
        }
    }
    private boolean finishedUpToMe() {
        for(int i = 0; i < id; i++) {
            if(doneArr[i] == -1)
                return false;
        }
        return true;
    }
    private synchronized void waitForThread() throws InterruptedException {
        while(!finishedUpToMe() && id > 0)
            this.wait();
        progress++;
    }
    private synchronized void finished() throws IllegalMonitorStateException {
        this.notifyAll();
    }
    public int process(int[] vec, int id) {
        int result = 0;
        System.out.format("id = %d\n", this.id);
        for(int i = 0; i < vec.length; i++) {
            vec[i] = vec[i] + 1;
            result = result + vec[i];
        }
        return result;
    }
    public void run() {
        try {
            this.waitForThread();
        }catch (InterruptedException e) {
            System.out.println("waitForThread exception");
        }
        result = process(vec, id);
        doneArr[id] = id;
        System.out.format("id = %d, result = %d\n", id, result);
        try{
            this.finished();
        }catch (IllegalMonitorStateException e) {
            System.out.format("finished exception\n");
        }
    }
    public static void main(String[] args) {
        int[] vec = {1,2,3,4};
        WorkThread[] workers = new WorkThread[3];
        for(int i = 0; i < workers.length; i++) {
            workers[i] = new WorkThread(vec, i);
        }
        for(int i = 0; i < workers.length; i++) {
            workers[i].start();
        }
        System.out.format("main\n");
    }
}

您现在将拥有一个方法列表以及它们在项目中的使用频率。