@Override
    public void visitForeachStatement(@NotNull PsiForeachStatement statement) {
      if (shouldVisit(statement)) {
        myIndexStack.push(myCurrentSlotIndex);
        try {
          PsiExpression value = statement.getIteratedValue();
          if (value != null && value.getType() instanceof PsiArrayType) {
            appendName("", 1); // array copy
            appendName("<length>", 1);
            appendName("<index>", 1);
          }
          else {
            appendName("<iterator>", 1);
          }
          appendName(statement.getIterationParameter());
          super.visitForeachStatement(statement);
        }
        finally {
          myCurrentSlotIndex = myIndexStack.pop();
        }
      }
    }
@Override
    public void visitForeachStatement(@NotNull PsiForeachStatement statement)