diff --git a/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java b/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java index 70bcfeeb4524..0d93a8fd4eba 100644 --- a/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/PatternVariableCanBeUsedInspection.java @@ -28,10 +28,14 @@ public class PatternVariableCanBeUsedInspection extends AbstractBaseJavaLocalIns if (identifier == null) return; PsiTypeCastExpression cast = ObjectUtils.tryCast(PsiUtil.skipParenthesizedExprDown(variable.getInitializer()), PsiTypeCastExpression.class); - if (cast == null || cast.getOperand() == null || cast.getCastType() == null) return; + if (cast == null || cast.getCastType() == null) return; + PsiExpression operand = cast.getOperand(); + if (operand == null) return; PsiType castType = cast.getCastType().getType(); if (castType instanceof PsiPrimitiveType) return; if (!variable.getType().equals(castType)) return; + PsiType operandType = operand.getType(); + if (operandType == null || castType.isAssignableFrom(operandType)) return; PsiElement scope = PsiUtil.getVariableCodeBlock(variable, null); if (scope == null) return; PsiDeclarationStatement declaration = ObjectUtils.tryCast(variable.getParent(), PsiDeclarationStatement.class); diff --git a/java/java-tests/testData/inspection/patternVariableCanBeUsed/beforeUpcast.java b/java/java-tests/testData/inspection/patternVariableCanBeUsed/beforeUpcast.java new file mode 100644 index 000000000000..2c75ab34e093 --- /dev/null +++ b/java/java-tests/testData/inspection/patternVariableCanBeUsed/beforeUpcast.java @@ -0,0 +1,9 @@ +// "Replace 'obj' with pattern variable" "false" +class X { + void test(String s) { + if (s instanceof Object) { + Object obj = (Object) s; + System.out.println(obj); + } + } +} \ No newline at end of file