|
|
@@ -2,41 +2,39 @@ package com.moekr.moocoder.logic.service.impl;
|
|
|
|
|
|
import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException;
|
|
|
import com.moekr.moocoder.logic.api.WalaController;
|
|
|
-import com.moekr.moocoder.logic.service.ProjectService;
|
|
|
import com.moekr.moocoder.logic.vo.CallGraphEdgeVO;
|
|
|
import com.moekr.moocoder.logic.vo.CallGraphNodeVO;
|
|
|
import com.moekr.moocoder.logic.vo.CallGraphVO;
|
|
|
import com.moekr.moocoder.logic.vo.OOPMetricVO;
|
|
|
import com.moekr.moocoder.util.enums.Granularity;
|
|
|
import com.moekr.moocoder.util.enums.Source;
|
|
|
+import lombok.extern.apachecommons.CommonsLog;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.util.Pair;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.io.File;
|
|
|
import java.io.FileNotFoundException;
|
|
|
import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
|
|
|
+import static com.moekr.moocoder.logic.service.impl.ProjectPath.getBytecodeFullPath;
|
|
|
import static com.moekr.moocoder.logic.service.impl.ProjectPath.getOutputFullPath;
|
|
|
-import static com.moekr.moocoder.logic.service.impl.ProjectPath.getProjectFullPath;
|
|
|
-import static java.lang.Double.NaN;
|
|
|
-import static java.lang.Double.parseDouble;
|
|
|
|
|
|
/**
|
|
|
* @author miaomuzhi
|
|
|
* @since 2020/4/23
|
|
|
*/
|
|
|
@Component
|
|
|
+@CommonsLog
|
|
|
public class OOPMetricAnalyzer {
|
|
|
private CallGraphVisualizer visualizer;
|
|
|
private WalaController walaController;
|
|
|
- private ProjectService projectService;
|
|
|
|
|
|
@Autowired
|
|
|
- public OOPMetricAnalyzer(CallGraphVisualizer visualizer, WalaController walaController, ProjectService projectService){
|
|
|
+ public OOPMetricAnalyzer(CallGraphVisualizer visualizer, WalaController walaController){
|
|
|
this.visualizer = visualizer;
|
|
|
this.walaController = walaController;
|
|
|
- this.projectService = projectService;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -47,27 +45,28 @@ public class OOPMetricAnalyzer {
|
|
|
* @return OOP metrics, null if project doesn't exist
|
|
|
*/
|
|
|
OOPMetricVO analyzeMetric(String project, String group) {
|
|
|
- if (!projectService.containsProject(project)){
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
try {
|
|
|
- String srcDir = getProjectFullPath(project);
|
|
|
+ String srcDir = getBytecodeFullPath(project);
|
|
|
String dstDir = getOutputFullPath(project);
|
|
|
|
|
|
+ File srcDirFile = new File(srcDir);
|
|
|
+ if (!srcDirFile.exists()) {
|
|
|
+ throw new FileNotFoundException(project + " doesn't exist!");
|
|
|
+ }
|
|
|
+
|
|
|
Pair<Integer, Integer> pair = walaController.countAbstractness(srcDir, group, Source.CLASS_FILE);
|
|
|
double abstractness = pair.getFirst() / (double)pair.getSecond();
|
|
|
List<String> walaOutput = walaController.getWalaOutput(srcDir, dstDir, Source.CLASS_FILE);
|
|
|
return analyzeMetricExceptAbstractness(walaOutput, group, abstractness);
|
|
|
} catch (IOException|CallGraphBuilderCancelException e){
|
|
|
- e.printStackTrace();
|
|
|
+ log.warn(e);
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<String> getProjectGroups(String project, Granularity g) {
|
|
|
try {
|
|
|
- String srcDir = getProjectFullPath(project);
|
|
|
+ String srcDir = getBytecodeFullPath(project);
|
|
|
String dstDir = getOutputFullPath(project);
|
|
|
List<String> walaOutput = walaController.getWalaOutput(srcDir, dstDir, Source.CLASS_FILE);
|
|
|
CallGraphVO graphVO = visualizer.walaToForceDirected(walaOutput);
|
|
|
@@ -92,7 +91,7 @@ public class OOPMetricAnalyzer {
|
|
|
throw new IllegalArgumentException("granularity of groups can't be " + g);
|
|
|
}
|
|
|
} catch (IOException|CallGraphBuilderCancelException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ log.warn(e);
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
}
|