开源CodeStats核心模块:手撕代码分析工具,设计模式+高并发+依赖分析完整实现!
一款完全自研、可插拔的代码统计与依赖分析引擎,基于 CodeStats 开源 JavaWeb 平台,30+语言识别、多线程并行、循环依赖检测,GUI/CLI/Web三端通用!
💡 痛点直击
商业工具收费高、开源工具定制难、IDE插件分析浅?CodeStats代码分析模块作为开源JavaWeb平台的核心子模块,从零打造了轻量级代码分析引擎——代码行统计 + 依赖图构建 + 循环检测,全部自研,无第三方依赖,可独立运行也可嵌入任何Java项目!
🧠 四大设计模式实战(完整源码)
1. Pipeline模式——分析流程解耦
java
Pipeline<Path, Void> pipeline = new Pipeline<>(); pipeline.addStage(new CollectStage(filterChain)) // 采集文件 .addStage(new ParallelAnalyzeStage(threads)) // 并行分析 .addStage(new AggregateStage(sortBy)) // 聚合结果 .addStage(new OutputStage(config)); // 输出格式化
各阶段零耦合,新增语言识别或复杂度算法只需添加Stage。
2. 策略模式——多格式输出
JSON格式:保留完整数据结构,便于二次处理
CSV格式:表格化,Excel直接打开
Console格式:可读文本,实时预览
3. 组合模式——过滤器链
java
CompositeFilter filter = new CompositeFilter() .add(new ExtensionFilter(Arrays.asList("java", "py", "js"))) .add(new ExcludePathFilter(Arrays.asList("test", "target"))) .add(new GitIgnoreFilter(rootDir));扩展名过滤 + 排除路径 + GitIgnore,支持运行时动态配置。
4. 模板方法模式——30+语言识别
通过扩展名或shebang自动识别语言,统一注释解析规则,新增语言只需3分钟实现具体子类。
⚙️ 核心亮点(完整实现细节)
多线程并行分析引擎
java
List<CompletableFuture<FileInfo>> futures = paths.stream() .map(path -> CompletableFuture.supplyAsync(() -> { FileInfo info = analyzeStage.process(path); monitor.incrementWithFile(path); return info; }, executor)) .collect(Collectors.toList());文件I/O与CPU密集型分析分离
线程数可配置(默认CPU核心数)
进度实时上报,支持SwingWorker界面更新
自研Java依赖提取(无编译,纯词法扫描)
java
public class JavaDependencyExtractor { public ExtractedResult extract(Path file) throws IOException { // 词法扫描 → 识别包名、导入、类声明 // 收集字段类型、方法返回值、参数类型 // 通过同包、导入、java.lang隐式规则解析全限定名 return new ExtractedResult(classInfo, resolvedDeps); } }Tarjan算法循环依赖检测
java
public List<Set<String>> detectCycles() { // 一次DFS找出所有强连通分量 // O(V+E)线性时间复杂度 // 过滤单节点,精准定位循环依赖组 }智能代码行统计
准确区分单行注释、块注释开头/中间/结束、空行、有效代码行,排除注释后统计数据更真实。
🚀 三端运行(完整使用方式)
GUI桌面版(Swing)
bash
java -jar codestats.jar --gui # 或运行主类 java com.omni.framework.codestats.gui.CodeStatsGUI
实时进度条 + 当前文件显示
结果表格可排序、导出CSV
支持合并文件下载
命令行版(CI/CD集成)
bash
# 参数:-d 目录 -e 扩展名 -x 排除路径 -t 线程数 # -o 输出格式(json/csv/console) -f 输出文件 java -jar codestats.jar -d ./src -e java,py -x test,target -o json -f report.json
Web版(嵌入CodeStats平台)
bash
# 启动完整CodeStats服务 java com.omni.Bootstrap # 访问 http://localhost:28080/omni/demo/code/codeStats.html
后端REST API:/code/api/analyze、/code/api/dependencies、/code/api/download
📦 开源地址与CSDN教程
CodeStats 完整 JavaWeb 项目(含代码分析模块):
🔗 https://gitee.com/zhouzuoli/code-stats.gitWWAIC(全周AI编程)范式详解:
🔗 https://blog.csdn.net/zhouzuoli/article/details/14508832
(若链接失效,请在CSDN搜索“新型AI编程范式 全周 AI 编程(Whole-Week AI Coding,WWAIC)”)
📈 运行效果示例
text
========== Code Statistics ========== src/main/java/.../UserController.java : 120 lines src/main/java/.../UserService.java : 85 lines ... ---------- Summary ---------- Total files: 187 Total code lines: 15234 Total comment lines: 1245 Time: 2.3s ---------- Dependencies ---------- Total classes: 156 Average outgoing dependencies: 3.2 Cyclic groups found: 2
🎯 总结
CodeStats代码分析模块是一个功能完善、架构清晰、可扩展性强的代码分析工具,通过四大设计模式实现了高度解耦,三端支持满足不同场景,自研依赖分析引擎展示了Java词法解析与图算法的实战能力。作为开源JavaWeb项目CodeStats的核心子模块,既可独立运行,也可嵌入任何Java项目,是学习设计模式、多线程、图算法的绝佳实战项目。
如果对设计模式、高并发、依赖分析感兴趣,欢迎Star⭐和Fork!一起打造更好用的开发工具箱。
