[java] effectively final: ensure checks are performed on the same variable

GitOrigin-RevId: 77dc60e5a5119eecdd73268e192bd52390dff342
This commit is contained in:
Anna Kozlova
2022-02-10 11:02:52 +01:00
committed by intellij-monorepo-bot
parent d3f5af9da9
commit 8bb3536c11
2 changed files with 12 additions and 1 deletions

View File

@@ -788,7 +788,9 @@ public final class HighlightControlFlowUtil {
codeBlock.accept(new JavaRecursiveElementWalkingVisitor() {
@Override
public void visitReferenceExpression(PsiReferenceExpression expression) {
if (PsiUtil.isAccessedForWriting(expression) && ControlFlowUtil.isVariableAssignedInLoop(expression, variable)) {
if (expression.isReferenceTo(variable) &&
PsiUtil.isAccessedForWriting(expression) &&
ControlFlowUtil.isVariableAssignedInLoop(expression, variable)) {
stopWalking();
stopped.set(true);
}

View File

@@ -69,6 +69,15 @@ public class XXX {
int y;
foo(() -> <error descr="Variable used in lambda expression should be final or effectively final">y</error>=1);
}
void m9() {
int x = 42;
for (int i = 0; i < 2; i++) {
x = x + 42;
}
int y = 5;
foo(() -> y);
}
}
class Sample {