提交 6ceead68 authored 作者: 马晨俊's avatar 马晨俊

mcj:

补充注释
上级 1a3256dd
......@@ -154,10 +154,10 @@ public class Inspector {
public ReportVo inspect() {
//初始化成员变量
initData();
//扫描文件,进行文件分类
HashMap<String, String> map = new HashMap<>();
map.put("msg","开始扫描文件");
asyncTask.sendMessageToAll(map);
//扫描文件,进行文件分类
scanFiles();
map.put("msg","文件扫描结束");
asyncTask.sendMessageToAll(map);
......@@ -168,18 +168,17 @@ public class Inspector {
log.info("inspect:源代码扫描完成,统计各个文件后缀完成");
//统计项目语言
setReportLanguageAndFrame();
//根据扫描结果以及用户配置得出需要使用的规则及技术
//根据扫描结果以及用户配置得出需要使用的规则及技术(如用户只是适配则只需要前端技术以及规则就可以了)
ruleTransform(inspectParameter.getRecastMethod());
//扫描源代码文件
map.put("msg","开始扫描源代码文件");
asyncTask.sendMessageToAll(map);
//扫描源代码文件
forEachFilesMap();
map.put("msg","源代码文件扫描结束");
asyncTask.sendMessageToAll(map);
//将得到的告警信息根据技术id进行转换
Set<String> technologyIds = warns.stream().map(Warn::getTechnologyId).collect(Collectors.toSet());
List<Technology> technologies = technologyDao.findAllById(technologyIds);
//计算技术金额
Integer technologyFund = 0;
for (Technology tech : technologies) {
......@@ -207,6 +206,7 @@ public class Inspector {
/**
* 遍历操作扫描文件后得出的文件
* 目前只统计pom.xml文件中的依赖
*/
private void forEachFilesMap() {
//解析配置文件集合
......@@ -222,6 +222,7 @@ public class Inspector {
try {
// TODO: 2020-02-28 解析maven树文件,设置依赖保存到redis
report.setManager(DependenceManagement.MAVEN.getStatus());
//解析pom文件变成对象
ProjectPom projectPom = analysisFile.analysisPom(path);
StringBuilder stringBuilder = new StringBuilder();
for (PomDependency dependency : projectPom.getDependencies()) {
......@@ -230,6 +231,7 @@ public class Inspector {
List<String> lines;
lines = Files.readAllLines(path);
for (int i = 0; i < lines.size(); i++) {
//验证文件内是否匹配配置的规则
valiWarn(rules, path, lines.get(i), i + 1);
}
dependencyVo.add(projectPom);
......@@ -240,6 +242,7 @@ public class Inspector {
}
}
}
//用来填充发送的消息(websocket)
HashMap<String, String> map = new HashMap<>();
//指定后缀到文件匹配关键字
int fileNum = 0;
......@@ -257,12 +260,12 @@ public class Inspector {
try {
fileNum = fileNum + 1;
map.put("msg", fileNum + "/" + fileSize);
System.out.println(fileNum + "/" + fileSize);
asyncTask.sendMessageToAll(map);
//如果文件类型为jar活着class则不读取
//如果文件类型为jar或者class则不读取
if (path1.toAbsolutePath().toString().endsWith("jar") || path1.toAbsolutePath().toString().endsWith("class")) {
continue;
}
//验证当前文件名称是否匹配配置的规则并记录
valiWarn(rules, path1, path1.getFileName().toString(), 0);
//将文件的每一行都与规则匹配
List<String> strings = Files.readAllLines(path1);
......@@ -287,7 +290,7 @@ public class Inspector {
String most = null;
int mostStatus = 0;
int maxnum = 0;
//统计文件最多的
//统计语言文件最多的
for (Map.Entry<String, Counter> entry : languageMatchMap.entrySet()) {
if (entry.getValue().getNumber() > maxnum) {
LanguageEnum language = suffixLanguageMapping.get(entry.getKey());
......@@ -300,7 +303,7 @@ public class Inspector {
languageEnums.add(language);
}
}
//设置是否需要重构
//根据得出的语言判断是否需要重构
List<LanguageEnum> newLanguageEnums = languageEnums.stream()
.filter(e -> e.getCode() != 4 & e.getCode() != 5 & e.getCode() != 6)
.collect(Collectors.toList());
......@@ -326,12 +329,12 @@ public class Inspector {
//设置语言
report.setLanguage(most == null ? LanguageEnum.NONE.getCode() : mostStatus);
report.setLanguages(languageCodes);
//设置架构
//设置架构为分离型还是融合型
report.setFramework(languageMatchMap.get("jsp").i > 0 ? Framework.MIXTURE.getStatus() : Framework.SEPARATE.getStatus());
}
/**
* rule所需要数据装配
* 根据用户评估方式需要指定规则查询
*
* @param status 状态
* 1:改造
......@@ -342,7 +345,7 @@ public class Inspector {
if (status == 1) {
this.ruleList = ruleService.findRules();
} else {
//只查询前端技术
//用户只是适配则只查询前端技术
List<Technology> front = technologyDao.findAllByBackorfrontEquals(1);
List<String> technologyIds = front.stream().map(Technology::getId).collect(Collectors.toList());
this.ruleList = ruleService.findAllByTechnologyIdIn(technologyIds);
......@@ -354,7 +357,7 @@ public class Inspector {
for (Technology technology : technologies) {
technologyHashMap.put(technology.getId(), technology);
}
//根据后缀名进行规则收集
//根据匹配文件的后缀名进行规则统计
for (Rule rule : ruleList) {
if (!ruleSuffixMap.containsKey(rule.getSuffix())) {
ruleSuffixMap.put(rule.getSuffix(), new ArrayList<>());
......@@ -380,24 +383,41 @@ public class Inspector {
private void initData() {
//查询技术,构造支持与非支持技术对象,3个对象
//配置语言 map结构
//初始化代码大小
codeSize = 0;
//初始化文件行数
fileLine = 0;
//初始化文件个数
fileNum = 0;
//初始化pom文件依赖对象
dependencyVo = new DependencyVo();
//清空规则与后缀文件map
ruleSuffixFilePathMap.clear();
//清空规则map
ruleSuffixMap.clear();
//清空技术map
technologyHashMap.clear();
//清空支持的依赖
supportWarns.clear();
//清空已经统计的依赖
warns.clear();
//清空规则
rules.clear();
//配置 config文件 结构
statisticsConfigFile();
//初始化核心技术
initTechnology();
//初始化语言统计个数
statisticsLanguage();
//查询存在的技术
findExistTechnology();
//初始化规则
initRule();
}
/**
* 初始化一个具有各种配置文件的map
*/
private void statisticsConfigFile() {
this.configFileTypePathsMapping.clear();
configFileTypePathsMapping.put("xml", new ArrayList<>());
......@@ -407,6 +427,9 @@ public class Inspector {
configFileTypePathsMapping.put("yml", new ArrayList<>());
}
/**
* 初始化各种语言的map
*/
private void statisticsLanguage() {
for (String languageName : suffixLanguageMapping.keySet()) {
//配置如:java,0
......@@ -491,7 +514,6 @@ public class Inspector {
*/
private void setRule(StringBuilder stringBuilder, PomDependency dependency) {
stringBuilder.append(dependency.getGroupId()).append(":").append(dependency.getArtifactId());
Rule rule = new Rule();
Rule rule1 = new Rule();
if (inspectParameter.getAdmin() == 1) {
......@@ -521,7 +543,6 @@ public class Inspector {
rules.add(rule1);
ruleMap.put(dependency.getArtifactId() + ":" + rule1.getSuffix(), rule1);
}
stringBuilder.delete(0, stringBuilder.length());
}
......@@ -577,6 +598,7 @@ public class Inspector {
/**
* 扫描源文件
* 根据表达式匹配
*
* @throws IOException
*/
......@@ -599,7 +621,6 @@ public class Inspector {
ruleSuffixMap.put(aDefault.getPathMatcher("glob:**/*." + s), s);
}
//文件读取
if (inspectParameter.getSourceAddress() != null) {
try {
Files.walkFileTree(Paths.get(inspectParameter.getSourceAddress()), new FileVisitor<Path>() {
......@@ -657,7 +678,7 @@ public class Inspector {
}
for (Map.Entry<String, PathMatcher> entry : languageSuffixMatcherMapping.entrySet()) {
//通过正则表达式匹配.java类型后缀文件,并+1
//通过正则表达式匹配.java类型后缀文件,并+1
if (entry.getValue().matches(file)) {
long length = file.toFile().length();
codeSize += length / 1024;
......@@ -665,7 +686,7 @@ public class Inspector {
}
}
for (Map.Entry<PathMatcher, String> entry : configFileMatcherSuffixMapping.entrySet()) {
//通过配置文件正则表达式匹配.xml文件,记录文件地址
//通过配置文件正则表达式匹配.xml文件,记录文件地址
if (entry.getKey().matches(file)) {
configFileTypePathsMapping.get(entry.getValue()).add(file);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论