|
|
@ -172,7 +172,6 @@ public class CodeBlockAnalysisTask extends IAnalysisTask { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//保存所有匹配的特征代码块MD5信息,方便统计总的匹配行数
|
|
|
|
//保存所有匹配的特征代码块MD5信息,方便统计总的匹配行数
|
|
|
|
Set<String> matchingTraitLineSet = new HashSet<>(); |
|
|
|
Set<String> matchingTraitLineSet = new HashSet<>(); |
|
|
|
|
|
|
|
|
|
|
@ -190,8 +189,11 @@ public class CodeBlockAnalysisTask extends IAnalysisTask { |
|
|
|
matchCodeBlockLineCount += traitsFeatureMd5AndFeatureLineNumMap.get(matchFeatureMd5); |
|
|
|
matchCodeBlockLineCount += traitsFeatureMd5AndFeatureLineNumMap.get(matchFeatureMd5); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//特征行总数
|
|
|
|
|
|
|
|
int totalFeatureLineCount = traitsFeatureMd5AndFeatureLineNumMap.values().stream().mapToInt(Integer::intValue).sum(); |
|
|
|
|
|
|
|
|
|
|
|
//计算文件的总体特征相似度
|
|
|
|
//计算文件的总体特征相似度
|
|
|
|
BigDecimal featureSimilarity = new BigDecimal(matchCodeBlockLineCount).divide(new BigDecimal(analysisFile.getCodeRowNum()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); |
|
|
|
BigDecimal featureSimilarity = new BigDecimal(matchCodeBlockLineCount).divide(new BigDecimal(totalFeatureLineCount), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); |
|
|
|
|
|
|
|
|
|
|
|
//计算文件的总体开源率
|
|
|
|
//计算文件的总体开源率
|
|
|
|
BigDecimal openRate = new BigDecimal(matchedLineRowsNum.size()).divide(new BigDecimal(analysisFile.getCodeRowNum()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); |
|
|
|
BigDecimal openRate = new BigDecimal(matchedLineRowsNum.size()).divide(new BigDecimal(analysisFile.getCodeRowNum()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); |
|
|
@ -344,12 +346,13 @@ public class CodeBlockAnalysisTask extends IAnalysisTask { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 或者特征代码块的md5 和 当前md5包含的特征行数 |
|
|
|
* 获取每个特征代码块包含的特征行数 |
|
|
|
* |
|
|
|
* |
|
|
|
* @param codeBlockInfos |
|
|
|
* @param codeBlockInfos |
|
|
|
* @return |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private Map<String, Integer> getTraitsFeatureMd5AndFeatureLineNumMap(List<LineModel> codeBlockInfos) { |
|
|
|
private Map<String, Integer> getTraitsFeatureMd5AndFeatureLineNumMap(List<LineModel> codeBlockInfos) { |
|
|
|
|
|
|
|
//按照特征代码块的md5进行分组
|
|
|
|
Map<String, List<LineModel>> traitMd5GroupMap = codeBlockInfos.stream().collect(Collectors.groupingBy(LineModel::getTraitLineMd5)); |
|
|
|
Map<String, List<LineModel>> traitMd5GroupMap = codeBlockInfos.stream().collect(Collectors.groupingBy(LineModel::getTraitLineMd5)); |
|
|
|
Map<String, Integer> resultMap = new HashMap<>(); |
|
|
|
Map<String, Integer> resultMap = new HashMap<>(); |
|
|
|
for (String traitMd5 : traitMd5GroupMap.keySet()) { |
|
|
|
for (String traitMd5 : traitMd5GroupMap.keySet()) { |
|
|
|