[java-highlighting] checkLabelSelectorCompatibility extracted and moved to SwitchChecker

Part of IDEA-365344 Create a new Java error highlighter with minimal dependencies (PSI only)

GitOrigin-RevId: bec076c5bff67e22d06e64e573d3219a4c89dd4d
This commit is contained in:
Tagir Valeev
2025-02-19 17:57:38 +00:00
committed by intellij-monorepo-bot
parent 7bb33c7a68
commit 9e458c909c
23 changed files with 278 additions and 497 deletions
@@ -33,7 +33,7 @@ public class Incompatible {
case PrimitiveRecord(int x) when true -> {}
case IntegerRecord(Integer x) when true -> {}
case IntegerRecord(<error descr="Primitive types in patterns, instanceof and switch are not supported at language level '21'">int x</error>) when true -> {}
case <error descr="'Object' cannot be safely cast to 'T'">T(Integer x)</error> -> {}
case <error descr="'Object' cannot be safely cast to 'T'"><error descr="Deconstruction pattern can only be applied to a record, 'T' is not a record">T</error>(Integer x)</error> -> {}
}
switch (integer){
@@ -22,7 +22,7 @@ class Test {
enum E{A}
public void test4() {
switch (null) {
case <error descr="Incompatible types. Found: 'Test.E', required: 'null'">E.A</error> -> System.out.println("2"); //error
case E.<error descr="Incompatible types. Found: 'Test.E', required: 'null'">A</error> -> System.out.println("2"); //error
}
}
public void test5() {
@@ -241,8 +241,11 @@ class Main {
System.out.println("ok");
};
str = switch (d) {
case MONDAY, TUESDAY -> <error descr="Bad type in switch expression: void cannot be converted to java.lang.String">System.out.println("ok")</error>;
};
str = switch (<error descr="'switch' expression does not cover all possible input values">d</error>) {
case MONDAY, TUESDAY -> System.out.println("ok");
case MONDAY, TUESDAY -> "ok";
};
str = switch (d) {
case MONDAY, TUESDAY, WEDNESDAY -> "ok";
@@ -246,8 +246,8 @@ class Main {
System.out.println("ok");
}
str = switch (<error descr="'switch' expression does not cover all possible input values">d</error>) {
case MONDAY, TUESDAY -> System.out.println("ok");
str = switch (d) {
case MONDAY, TUESDAY -> <error descr="Bad type in switch expression: void cannot be converted to java.lang.String">System.out.println("ok")</error>;
};
str = switch (d) {
case MONDAY, TUESDAY, WEDNESDAY -> "ok";
@@ -1,58 +1,6 @@
class IncompleteSwitch {
public void testStatement(char o) {
switch (o) {
case
<error descr="':' or '->' expected"><error descr="Expression, pattern, 'default' or 'null' expected">}</error></error>
switch (o) {
case '1'<EOLError descr="':' or '->' expected"></EOLError>
}
switch (o) {
case '1' when<EOLError descr="Expression expected"></EOLError><EOLError descr="':' or '->' expected"></EOLError>
}
switch (o) {
case <error descr="Primitive types in patterns, instanceof and switch are not supported at language level '21'">char a</error> when a == '1'<EOLError descr="':' or '->' expected"></EOLError>
}
switch (o) {
case '2' -> System.out.println("1");
case
<error descr="':' or '->' expected"><error descr="Expression, pattern, 'default' or 'null' expected">}</error></error>
switch (o) {
case '2' -> System.out.println("1");
case '1'<EOLError descr="':' or '->' expected"></EOLError>
}
switch (o) {
case '2' -> System.out.println("1");
case '1' when<EOLError descr="Expression expected"></EOLError><EOLError descr="':' or '->' expected"></EOLError>
}
switch (o) {
case '2' -> System.out.println("1");
case <error descr="Primitive types in patterns, instanceof and switch are not supported at language level '21'">char a</error> when a == '1'<EOLError descr="':' or '->' expected"></EOLError>
}
}
public void testExpression(char o) {
int i = switch (<error descr="'switch' expression does not cover all possible input values">o</error>) {
case '2':
yield 1;
case
<error descr="':' or '->' expected"><error descr="Expression, pattern, 'default' or 'null' expected">}</error></error>;
i = switch (<error descr="'switch' expression does not cover all possible input values">o</error>) {
case '2':
yield 2;
case '1'<EOLError descr="':' or '->' expected"></EOLError>
};
i = switch (<error descr="'switch' expression does not cover all possible input values">o</error>) {
case '2':
yield 2;
case '1' when<EOLError descr="Expression expected"></EOLError><EOLError descr="':' or '->' expected"></EOLError>
};
i = switch (o) {
int i = switch (o) {
case '2':
yield 2;
case <error descr="Primitive types in patterns, instanceof and switch are not supported at language level '21'">char a</error> when a == '1'<EOLError descr="':' or '->' expected"></EOLError>
@@ -47,13 +47,13 @@ class C {
}
void defaultBranchAlwaysThrows(int n) {
String s = <error descr="Switch expression does not have any result expressions">switch</error> (n) {
String s = <error descr="'switch' expression does not have any result expressions">switch</error> (n) {
default: throw new RuntimeException();
};
}
void defaultRuleAlwaysThrows(int n) {
String s = <error descr="Switch expression does not have any result expressions">switch</error> (n) {
String s = <error descr="'switch' expression does not have any result expressions">switch</error> (n) {
default -> throw new RuntimeException();
};
}
@@ -10,9 +10,9 @@ class SwitchExpressions {
System.out.println(switch (<error descr="'switch' expression does not have any case clauses">new Random().nextInt()</error>) { });
System.out.println(switch (<error descr="'switch' expression does not cover all possible input values">new Random().nextInt()</error>) {
System.out.println(switch (new Random().nextInt()) {
case 0 -> throw new IllegalStateException("no args");
case 1: yield "lone";
<error descr="Different 'case' kinds used in 'switch'">case 1:</error> yield "lone";
});
System.out.println(
@@ -1,12 +1,12 @@
class Test {
void test() {
int i = <error descr="Switch expression does not have any result expressions">switch</error>(0) {
int i = <error descr="'switch' expression does not have any result expressions">switch</error>(0) {
default -> throw new NullPointerException();
};
}
void test2() {
int i = <error descr="Switch expression does not have any result expressions">switch</error>(0) {
int i = <error descr="'switch' expression does not have any result expressions">switch</error>(0) {
case 0 -> {while(true);}
case 1 -> {
throw new RuntimeException();