Skip to content

Commit afa4661

Browse files
committed
chore(Refactoring): Resolved Insufficent modularization smell in TypeMetrics class
1 parent c00dd53 commit afa4661

File tree

8 files changed

+323
-208
lines changed

8 files changed

+323
-208
lines changed

src/Designite/SourceModel/SM_Package.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.List;
88
import java.util.Map;
99

10+
import Designite.metrics.TypeMetricsExtractor;
1011
import org.eclipse.jdt.core.dom.CompilationUnit;
1112

1213
import Designite.InputArgs;
@@ -117,8 +118,7 @@ public void resolve() {
117118
public void extractTypeMetrics() {
118119
for (SM_Type type : typeList) {
119120
type.extractMethodMetrics();
120-
TypeMetrics metrics = new TypeMetrics(type);
121-
metrics.extractMetrics();
121+
TypeMetrics metrics = new TypeMetricsExtractor(type).extractMetrics();
122122
metricsMapping.put(type, metrics);
123123
exportMetricsToCSV(metrics, type.getName());
124124
updateDependencyGraph(type);

src/Designite/SourceModel/SM_Type.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.List;
88
import java.util.Map;
99

10+
import Designite.metrics.MethodMetricsExtractor;
1011
import org.eclipse.jdt.core.dom.CompilationUnit;
1112
import org.eclipse.jdt.core.dom.ImportDeclaration;
1213
import org.eclipse.jdt.core.dom.Modifier;
@@ -350,8 +351,7 @@ private void addUniqueReference(SM_Type type, SM_Type typeToAdd, boolean invardR
350351

351352
public void extractMethodMetrics() {
352353
for (SM_Method method : methodList) {
353-
MethodMetrics metrics = new MethodMetrics(method);
354-
metrics.extractMetrics();
354+
MethodMetrics metrics = new MethodMetricsExtractor(method).extractMetrics();
355355
metricsMapping.put(method, metrics);
356356
exportMethodMetricsToCSV(metrics, method.getName());
357357
}

src/Designite/metrics/MethodMetrics.java

Lines changed: 23 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,60 +5,14 @@
55
import Designite.SourceModel.SM_Field;
66
import Designite.SourceModel.SM_Method;
77
import Designite.SourceModel.SM_Type;
8-
import Designite.visitors.MethodControlFlowVisitor;
98

10-
public class MethodMetrics implements MetricExtractor {
9+
public class MethodMetrics extends Metrics {
1110

1211
private int numOfParameters;
1312
private int cyclomaticComplexity;
1413
private int numOfLines;
15-
1614
private SM_Method method;
17-
18-
public MethodMetrics(SM_Method method) {
19-
this.method = method;
20-
}
21-
22-
@Override
23-
public void extractMetrics() {
24-
extractNumOfParametersMetrics();
25-
extractCyclomaticComplexity();
26-
extractNumberOfLines();
27-
}
28-
29-
private void extractNumOfParametersMetrics() {
30-
numOfParameters = method.getParameterList().size();
31-
}
32-
33-
private void extractCyclomaticComplexity() {
34-
cyclomaticComplexity = calculateCyclomaticComplexity();
35-
}
36-
37-
private int calculateCyclomaticComplexity() {
38-
MethodControlFlowVisitor visitor = new MethodControlFlowVisitor();
39-
method.getMethodDeclaration().accept(visitor);
40-
return visitor.getNumOfIfStatements()
41-
+ visitor.getNumOfSwitchCaseStatementsWitoutDefault()
42-
+ visitor.getNumOfForStatements()
43-
+ visitor.getNumOfWhileStatements()
44-
+ visitor.getNumOfDoStatements()
45-
+ visitor.getNumOfForeachStatements()
46-
+ 1;
47-
}
48-
49-
private void extractNumberOfLines() {
50-
if (methodHasBody()) {
51-
String body = method.getMethodDeclaration().getBody().toString();
52-
int length = body.length();
53-
// long newlines = body.lines().count();
54-
numOfLines = length - body.replace("\n", "").length();
55-
}
56-
}
57-
58-
private boolean methodHasBody() {
59-
return method.getMethodDeclaration().getBody() != null;
60-
}
61-
15+
6216
public int getNumOfParameters() {
6317
return numOfParameters;
6418
}
@@ -71,16 +25,32 @@ public int getNumOfLines() {
7125
return numOfLines;
7226
}
7327

28+
public void setNumOfParameters(int numOfParameters) {
29+
this.numOfParameters = numOfParameters;
30+
}
31+
32+
public void setCyclomaticComplexity(int cyclomaticComplexity) {
33+
this.cyclomaticComplexity = cyclomaticComplexity;
34+
}
35+
36+
public void setNumOfLines(int numOfLines) {
37+
this.numOfLines = numOfLines;
38+
}
39+
40+
public void setMethod(SM_Method method){
41+
this.method = method;
42+
}
43+
44+
public SM_Method getMethod() {
45+
return method;
46+
}
47+
7448
public List<SM_Field> getDirectFieldAccesses() {
7549
return method.getDirectFieldAccesses();
7650
}
77-
51+
7852
public List<SM_Type> getSMTypesInInstanceOf() {
7953
return method.getSMTypesInInstanceOf();
8054
}
81-
82-
public SM_Method getMethod() {
83-
return method;
84-
}
8555

8656
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package Designite.metrics;
2+
3+
import Designite.SourceModel.SM_Method;
4+
import Designite.SourceModel.SM_Type;
5+
import Designite.visitors.MethodControlFlowVisitor;
6+
7+
import java.util.List;
8+
9+
public class MethodMetricsExtractor implements MetricExtractor{
10+
11+
private SM_Method method;
12+
private MethodMetrics methodMetrics;
13+
14+
public MethodMetricsExtractor(SM_Method method) {
15+
this.method = method;
16+
}
17+
18+
@Override
19+
public MethodMetrics extractMetrics() {
20+
methodMetrics = new MethodMetrics();
21+
extractNumOfParametersMetrics();
22+
extractCyclomaticComplexity();
23+
extractNumberOfLines();
24+
methodMetrics.setMethod(method);
25+
return methodMetrics;
26+
}
27+
28+
29+
private void extractNumOfParametersMetrics() {
30+
methodMetrics.setNumOfParameters(method.getParameterList().size());
31+
}
32+
33+
private void extractCyclomaticComplexity() {
34+
methodMetrics.setCyclomaticComplexity(calculateCyclomaticComplexity());
35+
}
36+
37+
private int calculateCyclomaticComplexity() {
38+
MethodControlFlowVisitor visitor = new MethodControlFlowVisitor();
39+
method.getMethodDeclaration().accept(visitor);
40+
return visitor.getNumOfIfStatements()
41+
+ visitor.getNumOfSwitchCaseStatementsWitoutDefault()
42+
+ visitor.getNumOfForStatements()
43+
+ visitor.getNumOfWhileStatements()
44+
+ visitor.getNumOfDoStatements()
45+
+ visitor.getNumOfForeachStatements()
46+
+ 1;
47+
}
48+
49+
private void extractNumberOfLines() {
50+
if (methodHasBody()) {
51+
String body = method.getMethodDeclaration().getBody().toString();
52+
int length = body.length();
53+
// long newlines = body.lines().count();
54+
methodMetrics.setNumOfLines(length - body.replace("\n", "").length());
55+
}
56+
}
57+
58+
private boolean methodHasBody() {
59+
return method.getMethodDeclaration().getBody() != null;
60+
}
61+
62+
63+
64+
65+
}

src/Designite/metrics/MetricExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
public interface MetricExtractor {
44

5-
void extractMetrics();
5+
Metrics extractMetrics();
66
}

src/Designite/metrics/Metrics.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package Designite.metrics;
2+
3+
public class Metrics {
4+
}

0 commit comments

Comments
 (0)