From 1f33b7342018654b2a3395f7e469dc20ce981125 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Thu, 23 Jan 2025 08:38:21 +0100 Subject: [PATCH] Use new `J.SwitchExpression` constructor --- .../EqualsAvoidsNullVisitor.java | 6 ++- .../TernaryOperatorsShouldNotBeNested.java | 7 +-- .../staticanalysis/EqualsAvoidsNullTest.java | 52 +++++++++++++++++++ 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/EqualsAvoidsNullVisitor.java b/src/main/java/org/openrewrite/staticanalysis/EqualsAvoidsNullVisitor.java index d2d35fb7b..ad9941279 100644 --- a/src/main/java/org/openrewrite/staticanalysis/EqualsAvoidsNullVisitor.java +++ b/src/main/java/org/openrewrite/staticanalysis/EqualsAvoidsNullVisitor.java @@ -49,6 +49,8 @@ public class EqualsAvoidsNullVisitor

extends JavaVisitor

{ private static final String JAVA_LANG_STRING = "java.lang.String "; private static final MethodMatcher EQUALS = new MethodMatcher(JAVA_LANG_STRING + "equals(java.lang.Object)"); private static final MethodMatcher EQUALS_IGNORE_CASE = new MethodMatcher(JAVA_LANG_STRING + "equalsIgnoreCase(java.lang.String)"); + private static final MethodMatcher COMPARE_TO = new MethodMatcher(JAVA_LANG_STRING + "compareTo(java.lang.String)"); + private static final MethodMatcher COMPARE_TO_IGNORE_CASE = new MethodMatcher(JAVA_LANG_STRING + "compareToIgnoreCase(java.lang.String)"); private static final MethodMatcher CONTENT_EQUALS = new MethodMatcher(JAVA_LANG_STRING + "contentEquals(java.lang.CharSequence)"); EqualsAvoidsNullStyle style; @@ -90,7 +92,9 @@ private boolean hasCompatibleArgument(J.MethodInvocation m) { private boolean isStringComparisonMethod(J.MethodInvocation methodInvocation) { return EQUALS.matches(methodInvocation) || (!style.getIgnoreEqualsIgnoreCase() && EQUALS_IGNORE_CASE.matches(methodInvocation)) || - CONTENT_EQUALS.matches(methodInvocation); + CONTENT_EQUALS.matches(methodInvocation) || + COMPARE_TO.matches(methodInvocation) || + COMPARE_TO_IGNORE_CASE.matches(methodInvocation); } private void maybeHandleParentBinary(J.MethodInvocation m) { diff --git a/src/main/java/org/openrewrite/staticanalysis/TernaryOperatorsShouldNotBeNested.java b/src/main/java/org/openrewrite/staticanalysis/TernaryOperatorsShouldNotBeNested.java index 1aa8d4979..002a8a732 100644 --- a/src/main/java/org/openrewrite/staticanalysis/TernaryOperatorsShouldNotBeNested.java +++ b/src/main/java/org/openrewrite/staticanalysis/TernaryOperatorsShouldNotBeNested.java @@ -159,7 +159,7 @@ public J visitTernary(final J.Ternary ternary, final ExecutionContext ctx) { if (nestList.size() < 2) { return null; } - return autoFormat(toSwitch(switchVar, nestList), ctx); + return autoFormat(toSwitch(switchVar, nestList, ternary.getType()), ctx); }).map(J.class::cast) .orElseGet(() -> super.visitTernary(ternary, ctx)); } @@ -194,7 +194,7 @@ private static boolean isEqualVariable(final J.Identifier switchVar, @Nullable f return Objects.equals(foundVar.getFieldType(), switchVar.getFieldType()); } - private J.SwitchExpression toSwitch(final J.Identifier switchVar, final List nestList) { + private J.SwitchExpression toSwitch(final J.Identifier switchVar, final List nestList, @Nullable JavaType type) { J.Ternary last = nestList.get(nestList.size() - 1); return new J.SwitchExpression( Tree.randomId(), @@ -210,7 +210,8 @@ private J.SwitchExpression toSwitch(final J.Identifier switchVar, final List toCase(switchVar, ternary)), Stream.of(toDefault(last)) ).collect(Collectors.toList())) - .withPrefix(Space.SINGLE_SPACE) + .withPrefix(Space.SINGLE_SPACE), + type ); } diff --git a/src/test/java/org/openrewrite/staticanalysis/EqualsAvoidsNullTest.java b/src/test/java/org/openrewrite/staticanalysis/EqualsAvoidsNullTest.java index 47e95519f..1f6ee26e6 100644 --- a/src/test/java/org/openrewrite/staticanalysis/EqualsAvoidsNullTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/EqualsAvoidsNullTest.java @@ -64,6 +64,58 @@ public class A { ); } + @DocumentExample + @Test + void invertConditional_compareTo() { + rewriteRun( + //language=java + java( + """ + public class A { + { + String s = null; + if(s.compareTo("test")) {} + } + } + """, + """ + public class A { + { + String s = null; + if("test".compareTo(s)) {} + } + } + """ + ) + ); + } + + @DocumentExample + @Test + void invertConditional_compareToIgnoreCase() { + rewriteRun( + //language=java + java( + """ + public class A { + { + String s = null; + if(s.compareToIgnoreCase("test")) {} + } + } + """, + """ + public class A { + { + String s = null; + if("test".compareToIgnoreCase(s)) {} + } + } + """ + ) + ); + } + @Test void removeUnnecessaryNullCheck() { rewriteRun(