Skip to content

Commit ae4c113

Browse files
committed
add json adapter
1 parent c6a59dc commit ae4c113

File tree

8 files changed

+74
-10
lines changed

8 files changed

+74
-10
lines changed

analyzer/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ dependencies {
1313
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
1414
}
1515

16-
1716
tasks.test {
1817
useJUnitPlatform()
19-
}
18+
}

analyzer/src/main/java/com/quicklybly/itmo/bytecodeanalyzer/Analyzer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static void main(String[] args) throws IOException {
2222
var analyzer = new Analyzer();
2323

2424
var statistic = analyzer.analyzeJar(path);
25-
statistic.printStatistic();
25+
System.out.println(statistic);
2626
}
2727

2828
public Statistic analyzeJar(Path path) throws IOException {

analyzer/src/main/java/com/quicklybly/itmo/bytecodeanalyzer/api/Statistic.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,34 @@ public void writeOverriddenCount(int overriddenCount) {
2424
averageOverriddenCountHolder.updateAverage(overriddenCount);
2525
}
2626

27-
public void printStatistic() {
28-
System.out.println("Average field count: " + fieldAverageHolder.getAverage());
29-
System.out.println("ABC: " + abcMetric.getAbc());
30-
System.out.println("Inheritance max depth: " + maxInheritanceDepth);
31-
System.out.println("Inheritance average depth: " + averageInheritanceDepthHolder.getAverage());
32-
System.out.println("Average override count: " + averageOverriddenCountHolder.getAverage());
27+
@Override
28+
public String toString() {
29+
return "Statistic{" +
30+
"fieldAverageHolder=" + fieldAverageHolder +
31+
", averageInheritanceDepthHolder=" + averageInheritanceDepthHolder +
32+
", averageOverriddenCountHolder=" + averageOverriddenCountHolder +
33+
", maxInheritanceDepth=" + maxInheritanceDepth +
34+
", abcMetric=" + abcMetric +
35+
'}';
3336
}
3437

3538
public AbcMetric getAbcMetric() {
3639
return abcMetric;
3740
}
41+
42+
public double getAverageFieldCount() {
43+
return fieldAverageHolder.getAverage();
44+
}
45+
46+
public double getAverageInheritanceDepth() {
47+
return averageInheritanceDepthHolder.getAverage();
48+
}
49+
50+
public double getAverageOverriddenCount() {
51+
return averageOverriddenCountHolder.getAverage();
52+
}
53+
54+
public int getMaxInheritanceDepth() {
55+
return maxInheritanceDepth;
56+
}
3857
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.quicklybly.itmo.bytecodeanalyzer.api;
2+
3+
public class StatisticMapper {
4+
5+
private StatisticMapper() {
6+
throw new IllegalStateException("Utility class");
7+
}
8+
9+
public static String toJson(Statistic statistic) {
10+
return String.format(
11+
"{"
12+
+ "\"fieldAverage\":%s,"
13+
+ "\"averageInheritanceDepth\":%s,"
14+
+ "\"averageOverriddenCountHolder\":%s,"
15+
+ "\"maxInheritanceDepth\":%d,"
16+
+ "\"abc\":%s"
17+
+ "}",
18+
statistic.getAverageFieldCount(),
19+
statistic.getAverageInheritanceDepth(),
20+
statistic.getAverageOverriddenCount(),
21+
statistic.getMaxInheritanceDepth(),
22+
statistic.getAbcMetric().getAbc()
23+
);
24+
}
25+
}

analyzer/src/main/java/com/quicklybly/itmo/bytecodeanalyzer/model/AbcMetric.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,11 @@ public int hashCode() {
5858
result = 31 * result + Long.hashCode(condition);
5959
return result;
6060
}
61+
62+
@Override
63+
public String toString() {
64+
return "AbcMetric{" +
65+
"abc=" + getAbc() +
66+
'}';
67+
}
6168
}

analyzer/src/main/java/com/quicklybly/itmo/bytecodeanalyzer/model/AverageHolder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,11 @@ public void updateAverage(Integer value) {
1515
count++;
1616
}
1717
}
18+
19+
@Override
20+
public String toString() {
21+
return "AverageHolder{" +
22+
"average=" + getAverage() +
23+
'}';
24+
}
1825
}

example/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ dependencies {
88
implementation(project(":analyzer"))
99

1010
testImplementation(platform("org.junit:junit-bom:5.10.0"))
11+
testImplementation("org.assertj:assertj-core:3.24.2")
1112
testImplementation("org.junit.jupiter:junit-jupiter")
1213
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
1314
}

example/src/test/java/com/quicklybly/itmo/bytecodeanalizer/example/IntegrationTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.nio.file.Path;
88
import org.junit.jupiter.api.Assertions;
99
import org.junit.jupiter.api.Test;
10+
import static org.assertj.core.api.Assertions.assertThat;
1011

1112
public class IntegrationTest {
1213

@@ -25,6 +26,11 @@ public void analyzeComplexClass() throws IOException {
2526
Analyzer analyzer = new Analyzer();
2627

2728
Statistic stats = analyzer.analyzeJar(jarPath);
28-
stats.printStatistic(); // todo
29+
30+
assertThat(stats.getMaxInheritanceDepth()).isEqualTo(4);
31+
assertThat(stats.getAverageInheritanceDepth()).isEqualTo(4.0);
32+
assertThat(stats.getAverageFieldCount()).isEqualTo(2.0);
33+
assertThat(stats.getAverageOverriddenCount()).isEqualTo(1.0);
34+
assertThat(stats.getAbcMetric().getAbc()).isBetween(9.0, 10.0);
2935
}
3036
}

0 commit comments

Comments
 (0)