mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 23:39:39 +07:00
[java-highlighting] IDEA-324625 Highlight using non-final variable in guard
GitOrigin-RevId: 0cedf700c6960e15104409b9cc411e8a5bd15fea
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5237df5eb3
commit
6f2c4ec3f3
@@ -99,7 +99,7 @@ class Test {
|
||||
// try-with-resources
|
||||
try (<error descr="Variable used as a try-with-resources resource should be final or effectively final">in</error>) {
|
||||
switch (o) {
|
||||
case AutoCloseable ii when (<error descr="Variable used in guarded pattern should be final or effectively final">in</error> = ii) != null: break;
|
||||
case AutoCloseable ii when (<error descr="Cannot assign a value to variable 'in', because it is declared outside the guard">in</error> = 1) != null: break;
|
||||
default: break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -171,4 +171,14 @@ class Test {
|
||||
break;
|
||||
}
|
||||
}
|
||||
public static void testWhenReassigned() {
|
||||
Object object = "1234";
|
||||
switch (object) {
|
||||
case String s when <error descr="Variable used in guarded pattern should be final or effectively final">s</error>.length()==2 -> {
|
||||
s = null;
|
||||
}
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
import java.util.function.*;
|
||||
|
||||
class Test {
|
||||
void test1(Object o, int mode) {
|
||||
switch (o) {
|
||||
case Integer i when i == <error descr="Variable used in guarded pattern should be final or effectively final">mode</error> -> System.out.println();
|
||||
default -> {}
|
||||
}
|
||||
|
||||
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;
|
||||
default -> 1;
|
||||
}) == <error descr="Variable used in guarded pattern should be final or effectively final">mode</error> -> System.out.println();
|
||||
default -> {}
|
||||
}
|
||||
|
||||
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 -> {}
|
||||
}
|
||||
mode = 0;
|
||||
}
|
||||
|
||||
void test2(Object o, final int mode) {
|
||||
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;
|
||||
default -> 1;
|
||||
}) == mode -> o = null;
|
||||
default -> {}
|
||||
}
|
||||
switch (o) {
|
||||
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 -> {}
|
||||
}
|
||||
}
|
||||
|
||||
void test3(Object o, int mode) {
|
||||
switch (o) {
|
||||
case Integer i when i == mode -> System.out.println();
|
||||
default -> {}
|
||||
}
|
||||
switch (o) {
|
||||
case Integer i when (switch (o) {
|
||||
case Integer ii when ii != mode -> 2;
|
||||
default -> 1;
|
||||
}) == mode -> System.out.println();
|
||||
default -> {}
|
||||
}
|
||||
}
|
||||
|
||||
void testNested(Object o, Integer in) {
|
||||
switch (o) {
|
||||
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();
|
||||
}
|
||||
default : break;
|
||||
}
|
||||
String str;
|
||||
str = switch (o) {
|
||||
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 -> "";
|
||||
};
|
||||
default -> "";
|
||||
};
|
||||
str = switch (o) {
|
||||
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 -> "";
|
||||
};
|
||||
default: yield "";
|
||||
};
|
||||
// lambdas
|
||||
str = switch (o) {
|
||||
case Integer i when (i = <error descr="Variable used in guarded pattern should be final or effectively final">in</error>) > 0:
|
||||
yield ((Function<Integer, String>)(x) -> (<error descr="Variable used in lambda expression should be final or effectively final">in</error> = 5) > 0 ? "" : null).apply(in);
|
||||
default:
|
||||
yield "";
|
||||
};
|
||||
Consumer<Integer> c = (mode) -> {
|
||||
switch (o) {
|
||||
case Integer i when (i = <error descr="Variable used in guarded pattern should be final or effectively final">in</error>) > 0 -> System.out.println();
|
||||
default -> System.out.println();
|
||||
}
|
||||
<error descr="Variable used in lambda expression should be final or effectively final">in</error> = 1;
|
||||
};
|
||||
// try-with-resources
|
||||
try (<error descr="Variable used as a try-with-resources resource should be final or effectively final">in</error>) {
|
||||
switch (o) {
|
||||
case AutoCloseable ii when (<error descr="Variable used in guarded pattern should be final or effectively final">in</error> = ii) != null: break;
|
||||
default: break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
// double nested
|
||||
switch (o) {
|
||||
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) {
|
||||
case Integer ii when ii > <error descr="Variable used in guarded pattern should be final or effectively final">mode</error>:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
default -> System.out.println();
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
str = switch (o) {
|
||||
case Integer mode when (mode) > 9:
|
||||
yield switch (o) {
|
||||
case Integer i -> {
|
||||
yield switch (o) {
|
||||
case Integer ii when ii > mode: yield "";
|
||||
default: yield "";
|
||||
};
|
||||
}
|
||||
default -> "";
|
||||
};
|
||||
default: yield "";
|
||||
};
|
||||
}
|
||||
|
||||
void declaredInWhenExpression(Object obj) {
|
||||
switch (obj) {
|
||||
case Integer i when new Function<Integer, Boolean>() {
|
||||
@Override
|
||||
public Boolean apply(Integer integer) {
|
||||
System.out.println(integer++);
|
||||
int num = 0;
|
||||
System.out.println(++num);
|
||||
return true;
|
||||
}
|
||||
}.apply(42) -> {}
|
||||
default -> {}
|
||||
}
|
||||
|
||||
switch (obj) {
|
||||
case Integer i when switch (i) {
|
||||
case 1 -> {
|
||||
int num = 0;
|
||||
++num;
|
||||
yield num;
|
||||
}
|
||||
default -> 42;
|
||||
} == 42 -> {}
|
||||
default -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,13 +35,13 @@ class Main {
|
||||
void nestedStatement(Object o, Object o2, int p) {
|
||||
int m = 0;
|
||||
switch (o) {
|
||||
case Integer n when n < 1:
|
||||
case Integer n when <error descr="Variable used in guarded pattern should be final or effectively final">n</error> < 1:
|
||||
n ++;
|
||||
case Integer n when n > 1:
|
||||
switch(o2) {
|
||||
case Integer <error descr="Variable 'm' is already defined in the scope">m</error> when m > 0:
|
||||
case Integer <error descr="Variable 'm' is already defined in the scope">m</error> when <error descr="Variable used in guarded pattern should be final or effectively final">m</error> > 0:
|
||||
m += n;
|
||||
case Integer <error descr="Variable 'p' is already defined in the scope">p</error> when p > 0:
|
||||
case Integer <error descr="Variable 'p' is already defined in the scope">p</error> when <error descr="Variable used in guarded pattern should be final or effectively final">p</error> > 0:
|
||||
p += n + m;
|
||||
break;
|
||||
case Integer p1:
|
||||
|
||||
Reference in New Issue
Block a user