@Override
    public void visitInstanceOfExpression(@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;
      }
    }
@Override
    public void visitInstanceOfExpression(@NotNull PsiInstanceOfExpression expression)