Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,13 @@ private boolean validatePotentialCandidate() {
if (patternMatchers.keySet().stream().anyMatch(instanceOf -> instanceOf.getPattern() == null)) {
return false;
}
// Do no harm -> If we do not know how to replace(yet), do not replace
if (patternMatchers.keySet().stream().anyMatch(instanceOf -> {
J clazz = instanceOf.getClazz();
return !(clazz instanceof J.Identifier || clazz instanceof J.FieldAccess || clazz instanceof J.ArrayType || clazz instanceof J.ParameterizedType);
})) {
return false;
}
boolean nullCaseInSwitch = nullCheckedParameter != null && SemanticallyEqual.areEqual(nullCheckedParameter, switchOn.get());
boolean hasLastElseBlock = else_ != null;

Expand Down Expand Up @@ -223,10 +230,9 @@ private Optional<Expression> switchOn() {
private String getClassName(J.InstanceOf statement) {
if (statement.getClazz() instanceof J.Identifier) {
return ((J.Identifier) statement.getClazz()).getSimpleName();
} else if (statement.getClazz() instanceof J.FieldAccess) {
return ((J.FieldAccess) statement.getClazz()).toString();
}
throw new IllegalStateException("Found unsupported statement where clazz is " + statement.getClazz());

return statement.getClazz().toString();
}

private String getPattern(J.InstanceOf statement) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,58 @@ private static class Tester {
);
}

@Test
void worksWithGenericsAndArrays() {
rewriteRun(
//language=java
java(
"""
public class AnotherClass {
public static class SubClass<T> {}
}
"""
),
//language=java
java(
"""
class Test {
static String formatter(Object obj) {
String formatted = "initialValue";
if (obj == null) {
formatted = "null";
} else if (obj instanceof String str)
formatted = String.format("string %s", str);
else if (obj instanceof String[] strings) {
formatted = String.format("strings %s", (Object) strings);
} else if (obj instanceof Class<?> clazz) {
formatted = String.format("class %s", clazz.getSimpleName());
} else if (obj instanceof AnotherClass.SubClass<?> subClazz) {
formatted = String.format("sub-class %s", subClazz);
}
return formatted;
}
}
""",
"""
class Test {
static String formatter(Object obj) {
String formatted = "initialValue";
switch (obj) {
case null -> formatted = "null";
case String str -> formatted = String.format("string %s", str);
case String[] strings -> formatted = String.format("strings %s", (Object) strings);
case Class<?> clazz -> formatted = String.format("class %s", clazz.getSimpleName());
case AnotherClass.SubClass<?> subClazz -> formatted = String.format("sub-class %s", subClazz);
default -> {}
}
return formatted;
}
}
"""
)
);
}

@Test
void defaultSwitchBlockFinalElseStatement() {
rewriteRun(
Expand Down