void (@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(); } } }