boolean (final PsiType type, final PsiInstanceOfExpression instanceOfExpression, final PsiStatement statement) { boolean negated = isNegated(instanceOfExpression); PsiElement anchor = null; if (negated) { PsiElement parent = statement.getParent(); if (parent instanceof PsiCodeBlock) { PsiStatement[] statements = ((PsiCodeBlock)parent).getStatements(); int i = ArrayUtil.find(statements, statement); anchor = i != -1 && i < statements.length - 1 ? statements[i+1] : null; } } else { anchor = statement instanceof PsiIfStatement ? ((PsiIfStatement)statement).getThenBranch() : ((PsiWhileStatement)statement).getBody(); } if (anchor instanceof PsiBlockStatement) { anchor = ((PsiBlockStatement)anchor).getCodeBlock(); } if (anchor instanceof PsiCodeBlock) { PsiStatement[] statements = ((PsiCodeBlock)anchor).getStatements(); if (statements.length == 0) return false; anchor = statements[0]; } if (anchor instanceof PsiDeclarationStatement) { PsiElement[] declaredElements = ((PsiDeclarationStatement)anchor).getDeclaredElements(); for (PsiElement element : declaredElements) { if (!(element instanceof PsiLocalVariable)) continue; PsiExpression initializer = ((PsiLocalVariable)element).getInitializer(); if (!(initializer instanceof PsiTypeCastExpression typeCastExpression)) continue; final PsiExpression operand = typeCastExpression.getOperand(); if (operand != null && !EquivalenceChecker.getCanonicalPsiEquivalence().expressionsAreEquivalent(operand, instanceOfExpression.getOperand())) continue; PsiTypeElement castTypeElement = typeCastExpression.getCastType(); if (castTypeElement == null) continue; PsiType castType = castTypeElement.getType(); if (castType.equals(type)) return true; } } return false; }