diff --git a/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java b/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java index 4ba1fd6f..8287a4af 100644 --- a/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java +++ b/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java @@ -27,7 +27,8 @@ public class LogLevelsAnalyzer extends VoidVisitorAdapter imple private static final String REFORMAT = "reformat"; private static final String MESSAGE = "message"; private static final String LOG_LEVEL = "logLevel"; - private static final String FORMAT = "format"; + private static final String STRING_FORMAT = "format"; + private static final String STRING_FORMATTED = "formatted"; private static List EXPECTED_METHODS = List.of("substring", "split"); @Override @@ -61,7 +62,8 @@ public void visit(MethodDeclaration node, OutputCollector output) { output.addComment(new ReuseCode(REFORMAT, LOG_LEVEL)); } - if (node.getNameAsString().equals(REFORMAT) && callsMethod(node, FORMAT)) { + if (node.getNameAsString().equals(REFORMAT) + && (callsMethod(node, STRING_FORMAT) || callsMethod(node, STRING_FORMATTED))) { output.addComment(new PreferStringConcatenation()); } diff --git a/src/test/java/analyzer/AnalyzerIntegrationTest.java b/src/test/java/analyzer/AnalyzerIntegrationTest.java index 087538e2..8d6ba421 100644 --- a/src/test/java/analyzer/AnalyzerIntegrationTest.java +++ b/src/test/java/analyzer/AnalyzerIntegrationTest.java @@ -159,7 +159,8 @@ void needforspeed(String scenario) throws IOException { "NotUsingExpectedMethodsOnLogLevel", "NotUsingExpectedMethodsOnMessage", "NotUsingExpectedMethodsOnLogLevelAndMessage", - "UsingStringFormat" + "UsingStringFormat", + "UsingStringFormatted" }) void loglevels(String scenario) throws IOException { var path = Path.of("log-levels", scenario + ".java"); diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.UsingStringFormatted.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.UsingStringFormatted.approved.txt new file mode 100644 index 00000000..06cb2b60 --- /dev/null +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.UsingStringFormatted.approved.txt @@ -0,0 +1,14 @@ +{ + "comments": [ + { + "comment": "java.general.prefer_string_concatenation", + "params": {}, + "type": "informative" + }, + { + "comment": "java.general.feedback_request", + "params": {}, + "type": "informative" + } + ] +} diff --git a/src/test/resources/scenarios/log-levels/UsingStringFormatted.java b/src/test/resources/scenarios/log-levels/UsingStringFormatted.java new file mode 100644 index 00000000..3f2c648d --- /dev/null +++ b/src/test/resources/scenarios/log-levels/UsingStringFormatted.java @@ -0,0 +1,15 @@ +package scenarios.loglevels; + +public class LogLevels { + public static String message(String logLine) { + return logLine.substring(logLine.indexOf(":") + 1).trim(); + } + + public static String logLevel(String logLine) { + return logLine.substring(1, logLine.indexOf("]")).toLowerCase(); + } + + public static String reformat(String logLine) { + return "%s (%s)".formatted(message(logLine), logLevel(logLine)); + } +}