我用Java编写了一个Java源代码分析工具…
为什么要制作?
我经过一番思考,发现对于我这个完全初学者来说,这太难了。
为了整理思路,我还是先把想法表达出来吧。
目前的趋势可以用三行来概括。
-
- 在现场被要求制作一个简单规格的 Diff 工具
-
- 考虑到规格后,我觉得需要进行源代码分析
- 这语法解析好难啊,怎么会这么复杂
嘛,如果使用库的话可能会轻松一些,但是因为有很多限制,所以我打算暂时使用标准库来完成。
解析工具规格说明
总结
-
- 接收比较源和比较目标的Java文件路径
-
- 进行比较
- 输出差异结果的步骤数
注意:但是,两个Java文件中的方法和字段的顺序可能会互换。
输入和输出
输入
・两个Java文件(绝对路径)
输出:
・包括评论的差异结果的步骤数
目前所考虑的实施方法的执行顺序。
-
- 從接收到的java文件路徑中獲取文件內的字符串。
-
- 將來源和目標java文件分成方法和字段的字符串並存入映射(創建字段和方法映射實例)。
-
- 將來源和目標字段進行排序。
-
- 將來源和目標方法進行排序。
-
- 將來源和目標分配給字符串實例。
-
- 比較來源和目標兩個字符串實例。
- 計算並輸出步數。
我认为是这样的感觉。
那么,你正在为什么而烦恼呢?
烦恼的是上面红色文字的部分。
假设有如下的班级。
public class Main {
public static final String hoge;
public static final String fuga;
public static void main(String[] args){
if (compareStr(args[0], hoge)) {
System.out.println(hoge);
}
}
public static boolean compareStr(String arg1, String arg2) {
if (arg2.equals(arg1)) {
return true;
} else {
return false;
}
}
}
我试图将它分成字段和方法,然后存储在以下地图实例中。
Map<String, Map<String, String>> codeMap;
嗯?要如何将方法和字段分开呢?
我遇到了一个难题…
我这个傻瓜发现以素未涉猎的状态去做是有点勉强?
如果使用库的话,应该没问题的。
比如git diff之类的。