diff --git a/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java b/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java index 79970d4d4e73..63cd59f7f18f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java @@ -2,6 +2,7 @@ package com.intellij.codeInspection; import com.intellij.codeInsight.PsiEquivalenceUtil; +import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil; import com.intellij.openapi.project.Project; import com.intellij.psi.*; @@ -38,6 +39,8 @@ public class PatternVariableCanBeUsedInspection extends AbstractBaseJavaLocalIns if (scope == null) return; PsiDeclarationStatement declaration = ObjectUtils.tryCast(variable.getParent(), PsiDeclarationStatement.class); if (declaration == null) return; + if (!variable.hasModifierProperty(PsiModifier.FINAL) && + !HighlightControlFlowUtil.isEffectivelyFinal(variable, scope, null)) return; PsiElement context = declaration; PsiElement parent = context.getParent(); if (parent instanceof PsiCodeBlock) { diff --git a/java/java-tests/testData/inspection/patternVariableCanBeUsed/beforeReassigned.java b/java/java-tests/testData/inspection/patternVariableCanBeUsed/beforeReassigned.java new file mode 100644 index 000000000000..a5ec61e98ad6 --- /dev/null +++ b/java/java-tests/testData/inspection/patternVariableCanBeUsed/beforeReassigned.java @@ -0,0 +1,10 @@ +// "Replace 's' with pattern variable" "false" +class X { + void test(Object obj) { + if (obj instanceof String) { + String s = (String)obj; + System.out.println(s); + s = s.trim(); + } + } +} \ No newline at end of file