void (@NotNull PsiInstanceOfExpression expression) { if (LOG.isDebugEnabled()) { LOG.debug("visitInstanceOfExpression " + expression); } PsiElement parentOfType = PsiTreeUtil.getParentOfType(expression, PsiWhileStatement.class, PsiIfStatement.class, PsiPolyadicExpression.class, PsiConditionalExpression.class); CodeFragmentEvaluator oldFragmentEvaluator = parentOfType != null ? myCurrentFragmentEvaluator : setNewCodeFragmentEvaluator(); try { PsiTypeElement checkType = expression.getCheckType(); PsiPrimaryPattern pattern = expression.getPattern(); if (checkType == null && pattern == null) { throw expressionInvalid(expression); } expression.getOperand().accept(this); Evaluator operandEvaluator = myResult; PatternEvaluator patternEvaluator; if (checkType != null) { PsiType type = checkType.getType(); patternEvaluator = new PatternEvaluator(new TypeEvaluator(JVMNameUtil.getJVMQualifiedName(type)), null); } else { patternEvaluator = createPatternEvaluator(pattern); if (patternEvaluator == null) { throw expressionInvalid(expression); } } myResult = new InstanceofEvaluator(operandEvaluator, patternEvaluator); } finally { myCurrentFragmentEvaluator = oldFragmentEvaluator; } }