diff --git a/src/main/java/analyzer/exercises/leap/AvoidConditionalLogic.java b/src/main/java/analyzer/exercises/leap/AvoidIfStatements.java similarity index 59% rename from src/main/java/analyzer/exercises/leap/AvoidConditionalLogic.java rename to src/main/java/analyzer/exercises/leap/AvoidIfStatements.java index 161de18f..0d95b006 100644 --- a/src/main/java/analyzer/exercises/leap/AvoidConditionalLogic.java +++ b/src/main/java/analyzer/exercises/leap/AvoidIfStatements.java @@ -3,12 +3,12 @@ import analyzer.Comment; /** - * @see Markdown Template + * @see Markdown Template */ -class AvoidConditionalLogic extends Comment { +class AvoidIfStatements extends Comment { @Override public String getKey() { - return "java.leap.avoid_conditional_logic"; + return "java.leap.avoid_if_statements"; } @Override diff --git a/src/main/java/analyzer/exercises/leap/AvoidMultipleTernary.java b/src/main/java/analyzer/exercises/leap/AvoidMultipleTernary.java new file mode 100644 index 00000000..6fe649ec --- /dev/null +++ b/src/main/java/analyzer/exercises/leap/AvoidMultipleTernary.java @@ -0,0 +1,18 @@ +package analyzer.exercises.leap; + +import analyzer.Comment; + +/** + * @see Markdown Template + */ +class AvoidMultipleTernary extends Comment { + @Override + public String getKey() { + return "java.leap.avoid_multiple_ternary"; + } + + @Override + public Type getType() { + return Type.ACTIONABLE; + } +} diff --git a/src/main/java/analyzer/exercises/leap/LeapAnalyzer.java b/src/main/java/analyzer/exercises/leap/LeapAnalyzer.java index c161221f..be8d86b0 100644 --- a/src/main/java/analyzer/exercises/leap/LeapAnalyzer.java +++ b/src/main/java/analyzer/exercises/leap/LeapAnalyzer.java @@ -70,13 +70,15 @@ public void visit(IntegerLiteralExpr node, OutputCollector output) { @Override public void visit(IfStmt node, OutputCollector output) { - output.addComment(new AvoidConditionalLogic()); + output.addComment(new AvoidIfStatements()); super.visit(node, output); } @Override public void visit(ConditionalExpr node, OutputCollector output) { - output.addComment(new AvoidConditionalLogic()); + if (node.getThenExpr().isConditionalExpr() || node.getElseExpr().isConditionalExpr()) { + output.addComment(new AvoidMultipleTernary()); + } super.visit(node, output); } diff --git a/src/test/java/analyzer/AnalyzerIntegrationTest.java b/src/test/java/analyzer/AnalyzerIntegrationTest.java index 26315c72..4b8cccde 100644 --- a/src/test/java/analyzer/AnalyzerIntegrationTest.java +++ b/src/test/java/analyzer/AnalyzerIntegrationTest.java @@ -68,10 +68,11 @@ void lasagna(String scenario) throws IOException { @ValueSource(strings = { "HardCodedTestCases", "OptimalSolution", + "OptimalTernary", "UsingGregorianCalendar", "UsingIfStatements", "UsingJavaTime", - "UsingTernary", + "UsingMultipleTernary", "UsingTooManyChecks", }) void leap(String scenario) throws IOException { diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.OptimalTernary.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.OptimalTernary.approved.txt new file mode 100644 index 00000000..22116aca --- /dev/null +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.OptimalTernary.approved.txt @@ -0,0 +1,3 @@ +{ + "comments": [] +} \ No newline at end of file diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingIfStatements.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingIfStatements.approved.txt index 675b1c3a..f649bc25 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingIfStatements.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingIfStatements.approved.txt @@ -1,7 +1,7 @@ { "comments": [ { - "comment": "java.leap.avoid_conditional_logic", + "comment": "java.leap.avoid_if_statements", "params": {}, "type": "actionable" }, diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingTernary.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingMultipleTernary.approved.txt similarity index 78% rename from src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingTernary.approved.txt rename to src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingMultipleTernary.approved.txt index 675b1c3a..293be9f1 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingTernary.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.leap.UsingMultipleTernary.approved.txt @@ -1,7 +1,7 @@ { "comments": [ { - "comment": "java.leap.avoid_conditional_logic", + "comment": "java.leap.avoid_multiple_ternary", "params": {}, "type": "actionable" }, diff --git a/src/test/resources/scenarios/leap/OptimalTernary.java b/src/test/resources/scenarios/leap/OptimalTernary.java new file mode 100644 index 00000000..b44ffda0 --- /dev/null +++ b/src/test/resources/scenarios/leap/OptimalTernary.java @@ -0,0 +1,5 @@ +class Leap { + boolean isLeapYear(int year) { + return (year % 100 == 0) ? (year % 400 == 0) : (year % 4 == 0); + } +} diff --git a/src/test/resources/scenarios/leap/UsingTernary.java b/src/test/resources/scenarios/leap/UsingMultipleTernary.java similarity index 100% rename from src/test/resources/scenarios/leap/UsingTernary.java rename to src/test/resources/scenarios/leap/UsingMultipleTernary.java