diff --git a/tools/java/runfiles/AutoBazelRepositoryProcessor.java b/tools/java/runfiles/AutoBazelRepositoryProcessor.java index ae356d800f6d03..51d3a77600b794 100644 --- a/tools/java/runfiles/AutoBazelRepositoryProcessor.java +++ b/tools/java/runfiles/AutoBazelRepositoryProcessor.java @@ -19,7 +19,9 @@ import java.io.IOException; import java.io.PrintWriter; +import java.util.ArrayDeque; import java.util.Collections; +import java.util.Deque; import java.util.List; import java.util.Set; import java.util.stream.Stream; @@ -80,18 +82,14 @@ private void emitClass(TypeElement annotatedClass) { // AutoBazelRepository_Outer_Middle_Inner. // Note: There can be collisions when local classes are involved, but since the definition of a // class depends only on the containing Bazel target, this does not result in ambiguity. - List nestedClassNames = - Stream.iterate( - annotatedClass, - element -> element instanceof TypeElement, - Element::getEnclosingElement) - .map(Element::getSimpleName) - .map(Name::toString) - .collect(toList()); - Collections.reverse(nestedClassNames); - String generatedClassSimpleName = - Stream.concat(Stream.of("AutoBazelRepository"), nestedClassNames.stream()) - .collect(joining("_")); + Deque classNameSegments = new ArrayDeque<>(); + Element element = annotatedClass; + while (element instanceof TypeElement) { + classNameSegments.addFirst(element.getSimpleName().toString()); + element = element.getEnclosingElement(); + } + classNameSegments.addFirst("AutoBazelRepository"); + String generatedClassSimpleName = String.join("_", classNameSegments); String generatedClassPackage = processingEnv.getElementUtils().getPackageOf(annotatedClass).getQualifiedName().toString();