mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
[java-highlighting] IDEA-324586 Highlight duplicated values with casts in java 21. Fix for null
GitOrigin-RevId: 85c0a0e8608267502c300b150fa9c5df23521efb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
45d3ec5af9
commit
d64809acc7
@@ -1957,9 +1957,6 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
// And even if the "case default" syntax was allowed not only in outdated preview versions of Java, using "case default:"
|
||||
// instead of "default:" looks weird. Therefore, for this case, we do not check the feature availability and do not
|
||||
// suggest increasing the language level.
|
||||
if (!(element.getParent() instanceof PsiCaseLabelElementList labelElementList) || labelElementList.getElementCount() != 1) {
|
||||
add(checkFeature(element, HighlightingFeature.PATTERNS_IN_SWITCH));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -713,6 +713,9 @@ public class SwitchBlockHighlightingModel {
|
||||
if (operand != null) {
|
||||
elements.putValue(ConstantExpressionUtil.computeCastTo(operand, mySelectorType), labelElement);
|
||||
}
|
||||
if (labelElement instanceof PsiLiteralExpression literalExpression && literalExpression.getType() == PsiTypes.nullType()) {
|
||||
elements.putValue(null, labelElement);
|
||||
}
|
||||
}
|
||||
else if (JavaPsiPatternUtil.isUnconditionalForType(labelElement, mySelectorType)) {
|
||||
elements.putValue(myUnconditionalPattern, labelElement);
|
||||
|
||||
@@ -6,7 +6,7 @@ class Main {
|
||||
System.out.println();
|
||||
case null:
|
||||
System.out.println(<error descr="Cannot resolve symbol 'i'">i</error>);
|
||||
case default:
|
||||
default:
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ class Main {
|
||||
case null:
|
||||
throw new RuntimeException();
|
||||
default: {}
|
||||
case default:
|
||||
case null:
|
||||
System.out.println(<error descr="Cannot resolve symbol 'i'">i</error>);
|
||||
}
|
||||
@@ -41,7 +40,6 @@ class Main {
|
||||
default: {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
case default:
|
||||
case null:
|
||||
System.out.println(<error descr="Cannot resolve symbol 'i'">i</error>);
|
||||
}
|
||||
@@ -53,7 +51,7 @@ class Main {
|
||||
case Integer i:
|
||||
System.out.println();
|
||||
case null:
|
||||
case default:
|
||||
default:
|
||||
continue;
|
||||
case null:
|
||||
System.out.println(<error descr="Cannot resolve symbol 'i'">i</error>);
|
||||
|
||||
@@ -10,7 +10,7 @@ class Test {
|
||||
switch (o) {
|
||||
case Integer i when (switch (o) {
|
||||
case Integer ii when ii != <error descr="Variable used in guarded pattern should be final or effectively final">mode</error> -> 2;
|
||||
case default -> 1;
|
||||
default -> 1;
|
||||
}) == <error descr="Variable used in guarded pattern should be final or effectively final">mode</error> -> System.out.println();
|
||||
default -> {}
|
||||
}
|
||||
@@ -26,12 +26,12 @@ class Test {
|
||||
switch (o) {
|
||||
case Integer i when (switch (<error descr="Variable used in guarded pattern should be final or effectively final">o</error>) {
|
||||
case Integer ii when ii != mode -> 2;
|
||||
case default -> 1;
|
||||
default -> 1;
|
||||
}) == mode -> o = null;
|
||||
default -> {}
|
||||
}
|
||||
switch (o) {
|
||||
case Integer i when (i = mode) > 0 -> System.out.println();
|
||||
case Integer i when (<error descr="Cannot assign a value to variable 'i', because it is declared outside the guard">i</error> = mode) > 0 -> System.out.println();
|
||||
default -> {}
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,7 @@ class Test {
|
||||
|
||||
void testNested(Object o, Integer in) {
|
||||
switch (o) {
|
||||
case Integer mode when (mode = 42) > 9:
|
||||
case Integer mode when (<error descr="Cannot assign a value to variable 'mode', because it is declared outside the guard">mode</error> = 42) > 9:
|
||||
switch (o) {
|
||||
case Integer i when (i = <error descr="Variable used in guarded pattern should be final or effectively final">mode</error>) > 0 -> System.out.println();
|
||||
default -> System.out.println();
|
||||
@@ -61,7 +61,7 @@ class Test {
|
||||
}
|
||||
String str;
|
||||
str = switch (o) {
|
||||
case Integer mode when (mode = 42) > 9 ->
|
||||
case Integer mode when (<error descr="Cannot assign a value to variable 'mode', because it is declared outside the guard">mode</error> = 42) > 9 ->
|
||||
switch (o) {
|
||||
case Integer i when (i = <error descr="Variable used in guarded pattern should be final or effectively final">mode</error>) > 0 -> "";
|
||||
default -> "";
|
||||
@@ -69,7 +69,7 @@ class Test {
|
||||
default -> "";
|
||||
};
|
||||
str = switch (o) {
|
||||
case Integer mode when (mode = 42) > 9:
|
||||
case Integer mode when (<error descr="Cannot assign a value to variable 'mode', because it is declared outside the guard">mode</error> = 42) > 9:
|
||||
yield switch (o) {
|
||||
case Integer i when (i = <error descr="Variable used in guarded pattern should be final or effectively final">mode</error>) > 0 -> "";
|
||||
default -> "";
|
||||
@@ -100,7 +100,7 @@ class Test {
|
||||
}
|
||||
// double nested
|
||||
switch (o) {
|
||||
case Integer mode when (mode = 42) > 9:
|
||||
case Integer mode when (<error descr="Cannot assign a value to variable 'mode', because it is declared outside the guard">mode</error> = 42) > 9:
|
||||
switch (o) {
|
||||
case Integer i -> {
|
||||
switch (o) {
|
||||
|
||||
@@ -9,5 +9,10 @@ class DuplicatedWithCast {
|
||||
case <error descr="Duplicate label '127'">b</error> -> System.out.println("b=" + b + ";");
|
||||
case <error descr="Duplicate label '127'">127</error>-> System.out.println("sweet spot");
|
||||
}
|
||||
switch (args[0]) {
|
||||
case <error descr="Duplicate label 'null'">null</error> -> System.out.println("null1");
|
||||
case <error descr="Duplicate label 'null'">null</error> -> System.out.println("null2");
|
||||
default -> System.out.println("default");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user