6
6
import analyzer .comments .ExemplarSolution ;
7
7
import analyzer .comments .PreferStringConcatenation ;
8
8
import com .github .javaparser .ast .body .MethodDeclaration ;
9
+ import com .github .javaparser .ast .body .Parameter ;
9
10
import com .github .javaparser .ast .expr .MethodCallExpr ;
10
11
import com .github .javaparser .ast .visitor .VoidVisitorAdapter ;
11
12
@@ -22,6 +23,9 @@ public class WizardsAndWarriors2Analyzer extends VoidVisitorAdapter<OutputCollec
22
23
private static final String GAME_MASTER = "GameMaster" ;
23
24
private static final String DESCRIBE = "describe" ;
24
25
private static final String FORMAT = "format" ;
26
+ private static final String DESTINATION = "Destination" ;
27
+ private static final String TRAVEL_METHOD = "TravelMethod" ;
28
+ private static final String CHARACTER = "Character" ;
25
29
26
30
@ Override
27
31
public void analyze (Solution solution , OutputCollector output ) {
@@ -42,39 +46,33 @@ public void visit(MethodDeclaration node, OutputCollector output) {
42
46
return ;
43
47
}
44
48
45
- if (node .getParameters ().size () == 2 && !reuseMethod (node )) {
46
-
49
+ if (node .getParameters ().size () == 2 && !reuseMethod (node , 2 )) {
47
50
output .addComment (new ReuseCodeHardcodedTwoParameters ());
48
-
49
51
}
50
52
51
- if (node .getParameters ().size () == 3 && !reuseMethod (node )) {
52
-
53
+ if (node .getParameters ().size () == 3 && !reuseMethod (node , 3 )) {
53
54
output .addComment (new ReuseCodeHardcodedThreeParameters ());
54
-
55
55
}
56
56
57
57
if (useStringFormat (node )) {
58
-
59
58
output .addComment (new PreferStringConcatenation ());
60
-
61
59
}
62
60
63
61
super .visit (node , output );
64
62
}
65
63
66
- private static boolean reuseMethod (MethodDeclaration node ) {
67
-
68
- int paramCount = node .getParameters ().size ();
64
+ private static boolean reuseMethod (MethodDeclaration node , int paramCount ) {
69
65
66
+ List <String > params = node .getParameters ().stream ().map (Parameter ::getTypeAsString ).toList ();
70
67
List <MethodCallExpr > describeCalls = node .findAll (MethodCallExpr .class ).stream ()
71
68
.filter (m -> m .getNameAsString ().equals (DESCRIBE ))
72
69
.toList ();
73
70
74
- if (paramCount == 2 ) {
71
+ if (paramCount == 2 && params . contains ( DESTINATION ) && params . contains ( CHARACTER ) ) {
75
72
return describeCalls .size () == 1 || describeCalls .size () == 3 ;
76
73
}
77
- if (paramCount == 3 ) {
74
+
75
+ if (paramCount == 3 && params .contains (DESTINATION ) && params .contains (TRAVEL_METHOD ) && params .contains (CHARACTER )) {
78
76
return describeCalls .size () == 3 ;
79
77
}
80
78
0 commit comments