+- CompilationUnit[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ClassDeclaration[@TypeMirror = "IteratorUtilCopy"]
      +- ModifierList[]
      +- ClassBody[]
         +- FieldDeclaration[]
         |  +- ModifierList[]
         |  +- PrimitiveType[@TypeMirror = "int"]
         |  +- VariableDeclarator[]
         |     +- VariableId[@Name = "MATCH_ANY", @TypeMirror = "int"]
         |     +- NumericLiteral[@TypeMirror = "int"]
         +- FieldDeclaration[]
         |  +- ModifierList[]
         |  +- PrimitiveType[@TypeMirror = "int"]
         |  +- VariableDeclarator[]
         |     +- VariableId[@Name = "MATCH_ALL", @TypeMirror = "int"]
         |     +- NumericLiteral[@TypeMirror = "int"]
         +- FieldDeclaration[]
         |  +- ModifierList[]
         |  +- PrimitiveType[@TypeMirror = "int"]
         |  +- VariableDeclarator[]
         |     +- VariableId[@Name = "MATCH_NONE", @TypeMirror = "int"]
         |     +- NumericLiteral[@TypeMirror = "int"]
         +- ConstructorDeclaration[]
         |  +- ModifierList[]
         |  +- FormalParameters[]
         |  +- Block[]
         +- AnnotationTypeDeclaration[@TypeMirror = "IteratorUtilCopy$Nullable"]
         |  +- ModifierList[]
         |  |  +- Annotation[@TypeMirror = "java.lang.annotation.Target"]
         |  |     +- ClassType[@TypeMirror = "java.lang.annotation.Target"]
         |  |     +- AnnotationMemberList[]
         |  |        +- MemberValuePair[]
         |  |           +- FieldAccess[@Name = "TYPE_USE", @TypeMirror = "java.lang.annotation.ElementType"]
         |  |              +- TypeExpression[@TypeMirror = "java.lang.annotation.ElementType"]
         |  |                 +- ClassType[@TypeMirror = "java.lang.annotation.ElementType"]
         |  +- AnnotationTypeBody[]
         +- MethodDeclaration[@Name = "takeWhile"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "predicate", @TypeMirror = "java.util.function.Predicate<? super T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.new() -> IteratorUtilCopy$AbstractIterator<T>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "T"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$1"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- LocalVariableDeclaration[]
         |                       |  +- ModifierList[]
         |                       |  +- ClassType[@TypeMirror = "T"]
         |                       |  +- VariableDeclarator[]
         |                       |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |                       |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<T>.next() -> T", @MethodName = "next", @TypeMirror = "T", @Unchecked = false, @VarargsCall = false]
         |                       |        +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<T>"]
         |                       |        +- ArgumentList[]
         |                       +- IfStatement[]
         |                          +- MethodCall[@Failed = false, @Function = "java.util.function.Predicate<capture#... of ? super T>.test(capture#... of ? super T) -> boolean", @MethodName = "test", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                          |  +- VariableAccess[@Name = "predicate", @TypeMirror = "java.util.function.Predicate<capture#... of ? super T>"]
         |                          |  +- ArgumentList[]
         |                          |     +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                          +- Block[]
         |                          |  +- ExpressionStatement[]
         |                          |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.setNext(T) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                          |        +- ArgumentList[]
         |                          |           +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                          +- Block[]
         |                             +- ExpressionStatement[]
         |                                +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                                   +- ArgumentList[]
         +- MethodDeclaration[@Name = "reverse"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<T>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "java.util.List<T>"]
         |     |  |  +- TypeArguments[]
         |     |  |     +- ClassType[@TypeMirror = "T"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "tmp", @TypeMirror = "java.util.List<T>"]
         |     |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T> toList(java.util.Iterator<? extends T>) -> java.util.List<T>", @MethodName = "toList", @TypeMirror = "java.util.List<T>", @Unchecked = false, @VarargsCall = false]
         |     |        +- ArgumentList[]
         |     |           +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<T>"]
         |     +- ExpressionStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "java.util.Collections.reverse(java.util.List<?>) -> void", @MethodName = "reverse", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |     |     +- TypeExpression[@TypeMirror = "java.util.Collections"]
         |     |     |  +- ClassType[@TypeMirror = "java.util.Collections"]
         |     |     +- ArgumentList[]
         |     |        +- VariableAccess[@Name = "tmp", @TypeMirror = "java.util.List<T>"]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "java.util.List<T>.iterator() -> java.util.Iterator<T>", @MethodName = "iterator", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- VariableAccess[@Name = "tmp", @TypeMirror = "java.util.List<T>"]
         |           +- ArgumentList[]
         +- MethodDeclaration[@Name = "flatMap"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  |  +- TypeParameter[@TypeMirror = "R"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<R>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "R"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Function<? super T, ? extends @Nullable java.util.Iterator<? extends R>>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Function<? super T, ? extends @Nullable java.util.Iterator<? extends R>>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |     |  +- ClassType[@TypeMirror = "T"]
         |  |     |     +- WildcardType[@TypeMirror = "? extends @Nullable java.util.Iterator<? extends R>"]
         |  |     |        +- ClassType[@TypeMirror = "@Nullable java.util.Iterator<? extends R>"]
         |  |     |           +- Annotation[@TypeMirror = "IteratorUtilCopy$Nullable"]
         |  |     |           |  +- ClassType[@TypeMirror = "IteratorUtilCopy$Nullable"]
         |  |     |           +- TypeArguments[]
         |  |     |              +- WildcardType[@TypeMirror = "? extends R"]
         |  |     |                 +- ClassType[@TypeMirror = "R"]
         |  |     +- VariableId[@Name = "f", @TypeMirror = "java.util.function.Function<? super T, ? extends @Nullable java.util.Iterator<? extends R>>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.new() -> IteratorUtilCopy$AbstractIterator<R>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<R>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<R>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "R"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$2"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- FieldDeclaration[]
         |                 |  +- ModifierList[]
         |                 |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends R>"]
         |                 |  |  +- TypeArguments[]
         |                 |  |     +- WildcardType[@TypeMirror = "? extends R"]
         |                 |  |        +- ClassType[@TypeMirror = "R"]
         |                 |  +- VariableDeclarator[]
         |                 |     +- VariableId[@Name = "current", @TypeMirror = "java.util.Iterator<? extends R>"]
         |                 |     +- NullLiteral[@TypeMirror = "null"]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- IfStatement[]
         |                          +- InfixExpression[@TypeMirror = "boolean"]
         |                          |  +- InfixExpression[@TypeMirror = "boolean"]
         |                          |  |  +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                          |  |  +- NullLiteral[@TypeMirror = "null"]
         |                          |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                          |     +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                          |     +- ArgumentList[]
         |                          +- Block[]
         |                          |  +- ExpressionStatement[]
         |                          |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.setNext(R) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                          |        +- ArgumentList[]
         |                          |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.next() -> capture#... of ? extends R", @MethodName = "next", @TypeMirror = "capture#... of ? extends R", @Unchecked = false, @VarargsCall = false]
         |                          |              +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                          |              +- ArgumentList[]
         |                          +- Block[]
         |                             +- WhileStatement[]
         |                             |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                             |  |  +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                             |  |  +- ArgumentList[]
         |                             |  +- Block[]
         |                             |     +- LocalVariableDeclaration[]
         |                             |     |  +- ModifierList[]
         |                             |     |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends R>"]
         |                             |     |  |  +- TypeArguments[]
         |                             |     |  |     +- WildcardType[@TypeMirror = "? extends R"]
         |                             |     |  |        +- ClassType[@TypeMirror = "R"]
         |                             |     |  +- VariableDeclarator[]
         |                             |     |     +- VariableId[@Name = "next", @TypeMirror = "java.util.Iterator<? extends R>"]
         |                             |     |     +- MethodCall[@Failed = false, @Function = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends @Nullable java.util.Iterator<? extends R>>.apply(capture#... of ? super T) -> capture#... of ? extends @Nullable java.util.Iterator<? extends R>", @MethodName = "apply", @TypeMirror = "capture#... of ? extends @Nullable java.util.Iterator<? extends R>", @Unchecked = false, @VarargsCall = false]
         |                             |     |        +- VariableAccess[@Name = "f", @TypeMirror = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends @Nullable java.util.Iterator<? extends R>>"]
         |                             |     |        +- ArgumentList[]
         |                             |     |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                             |     |              +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                             |     |              +- ArgumentList[]
         |                             |     +- IfStatement[]
         |                             |        +- InfixExpression[@TypeMirror = "boolean"]
         |                             |        |  +- InfixExpression[@TypeMirror = "boolean"]
         |                             |        |  |  +- VariableAccess[@Name = "next", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                             |        |  |  +- NullLiteral[@TypeMirror = "null"]
         |                             |        |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                             |        |     +- VariableAccess[@Name = "next", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                             |        |     +- ArgumentList[]
         |                             |        +- Block[]
         |                             |           +- ExpressionStatement[]
         |                             |           |  +- AssignmentExpression[@TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                             |           |     +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<? extends R>"]
         |                             |           |     +- VariableAccess[@Name = "next", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                             |           +- ExpressionStatement[]
         |                             |           |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.setNext(R) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                             |           |     +- ArgumentList[]
         |                             |           |        +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.next() -> capture#... of ? extends R", @MethodName = "next", @TypeMirror = "capture#... of ? extends R", @Unchecked = false, @VarargsCall = false]
         |                             |           |           +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                             |           |           +- ArgumentList[]
         |                             |           +- ReturnStatement[]
         |                             +- ExpressionStatement[]
         |                                +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                                   +- ArgumentList[]
         +- MethodDeclaration[@Name = "flatMapWithSelf"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "R"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<R>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "R"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends R>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends R>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends R"]
         |  |  |  |        +- ClassType[@TypeMirror = "R"]
         |  |  |  +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<? extends R>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Function<? super R, ? extends java.util.Iterator<? extends R>>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Function<? super R, ? extends java.util.Iterator<? extends R>>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super R"]
         |  |     |     |  +- ClassType[@TypeMirror = "R"]
         |  |     |     +- WildcardType[@TypeMirror = "? extends java.util.Iterator<? extends R>"]
         |  |     |        +- ClassType[@TypeMirror = "java.util.Iterator<? extends R>"]
         |  |     |           +- TypeArguments[]
         |  |     |              +- WildcardType[@TypeMirror = "? extends R"]
         |  |     |                 +- ClassType[@TypeMirror = "R"]
         |  |     +- VariableId[@Name = "f", @TypeMirror = "java.util.function.Function<? super R, ? extends java.util.Iterator<? extends R>>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.new() -> IteratorUtilCopy$AbstractIterator<R>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<R>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<R>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "R"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$3"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- FieldDeclaration[]
         |                 |  +- ModifierList[]
         |                 |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends R>"]
         |                 |  |  +- TypeArguments[]
         |                 |  |     +- WildcardType[@TypeMirror = "? extends R"]
         |                 |  |        +- ClassType[@TypeMirror = "R"]
         |                 |  +- VariableDeclarator[]
         |                 |     +- VariableId[@Name = "current", @TypeMirror = "java.util.Iterator<? extends R>"]
         |                 |     +- NullLiteral[@TypeMirror = "null"]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- IfStatement[]
         |                          +- InfixExpression[@TypeMirror = "boolean"]
         |                          |  +- InfixExpression[@TypeMirror = "boolean"]
         |                          |  |  +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                          |  |  +- NullLiteral[@TypeMirror = "null"]
         |                          |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                          |     +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                          |     +- ArgumentList[]
         |                          +- Block[]
         |                          |  +- ExpressionStatement[]
         |                          |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.setNext(R) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                          |        +- ArgumentList[]
         |                          |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.next() -> capture#... of ? extends R", @MethodName = "next", @TypeMirror = "capture#... of ? extends R", @Unchecked = false, @VarargsCall = false]
         |                          |              +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                          |              +- ArgumentList[]
         |                          +- Block[]
         |                             +- ExpressionStatement[]
         |                             |  +- AssignmentExpression[@TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                             |     +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<? extends R>"]
         |                             |     +- NullLiteral[@TypeMirror = "null"]
         |                             +- IfStatement[]
         |                                +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                                |  +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                                |  +- ArgumentList[]
         |                                +- Block[]
         |                                |  +- LocalVariableDeclaration[]
         |                                |  |  +- ModifierList[]
         |                                |  |  +- ClassType[@TypeMirror = "R"]
         |                                |  |  +- VariableDeclarator[]
         |                                |  |     +- VariableId[@Name = "next", @TypeMirror = "R"]
         |                                |  |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends R>.next() -> capture#... of ? extends R", @MethodName = "next", @TypeMirror = "capture#... of ? extends R", @Unchecked = false, @VarargsCall = false]
         |                                |  |        +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                                |  |        +- ArgumentList[]
         |                                |  +- ExpressionStatement[]
         |                                |  |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.setNext(R) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                                |  |     +- ArgumentList[]
         |                                |  |        +- VariableAccess[@Name = "next", @TypeMirror = "R"]
         |                                |  +- ExpressionStatement[]
         |                                |     +- AssignmentExpression[@TypeMirror = "java.util.Iterator<capture#... of ? extends R>"]
         |                                |        +- VariableAccess[@Name = "current", @TypeMirror = "java.util.Iterator<? extends R>"]
         |                                |        +- MethodCall[@Failed = false, @Function = "java.util.function.Function<capture#... of ? super R, capture#... of ? extends java.util.Iterator<? extends R>>.apply(capture#... of ? super R) -> capture#... of ? extends java.util.Iterator<? extends R>", @MethodName = "apply", @TypeMirror = "capture#... of ? extends java.util.Iterator<? extends R>", @Unchecked = false, @VarargsCall = false]
         |                                |           +- VariableAccess[@Name = "f", @TypeMirror = "java.util.function.Function<capture#... of ? super R, capture#... of ? extends java.util.Iterator<? extends R>>"]
         |                                |           +- ArgumentList[]
         |                                |              +- VariableAccess[@Name = "next", @TypeMirror = "R"]
         |                                +- Block[]
         |                                   +- ExpressionStatement[]
         |                                      +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                                         +- ArgumentList[]
         +- MethodDeclaration[@Name = "filterNotNull"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T> filter(java.util.Iterator<? extends T>, java.util.function.Predicate<? super T>) -> java.util.Iterator<T>", @MethodName = "filter", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ArgumentList[]
         |              +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              +- MethodReference[@TypeMirror = "java.util.function.Predicate<T>"]
         |                 +- TypeExpression[@TypeMirror = "java.util.Objects"]
         |                    +- ClassType[@TypeMirror = "java.util.Objects"]
         +- MethodDeclaration[@Name = "mapNotNull"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  |  +- TypeParameter[@TypeMirror = "R"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<R>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "R"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Function<? super T, ? extends R>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Function<? super T, ? extends R>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |     |  +- ClassType[@TypeMirror = "T"]
         |  |     |     +- WildcardType[@TypeMirror = "? extends R"]
         |  |     |        +- ClassType[@TypeMirror = "R"]
         |  |     +- VariableId[@Name = "mapper", @TypeMirror = "java.util.function.Function<? super T, ? extends R>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.new() -> IteratorUtilCopy$AbstractIterator<R>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<R>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<R>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "R"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$4"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- WhileStatement[]
         |                       |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                       |  |  +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |  |  +- ArgumentList[]
         |                       |  +- Block[]
         |                       |     +- LocalVariableDeclaration[]
         |                       |     |  +- ModifierList[]
         |                       |     |  +- ClassType[@TypeMirror = "T"]
         |                       |     |  +- VariableDeclarator[]
         |                       |     |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |                       |     |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                       |     |        +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |     |        +- ArgumentList[]
         |                       |     +- IfStatement[]
         |                       |        +- InfixExpression[@TypeMirror = "boolean"]
         |                       |        |  +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                       |        |  +- NullLiteral[@TypeMirror = "null"]
         |                       |        +- Block[]
         |                       |           +- LocalVariableDeclaration[]
         |                       |           |  +- ModifierList[]
         |                       |           |  +- ClassType[@TypeMirror = "R"]
         |                       |           |  +- VariableDeclarator[]
         |                       |           |     +- VariableId[@Name = "map", @TypeMirror = "R"]
         |                       |           |     +- MethodCall[@Failed = false, @Function = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends R>.apply(capture#... of ? super T) -> capture#... of ? extends R", @MethodName = "apply", @TypeMirror = "capture#... of ? extends R", @Unchecked = false, @VarargsCall = false]
         |                       |           |        +- VariableAccess[@Name = "mapper", @TypeMirror = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends R>"]
         |                       |           |        +- ArgumentList[]
         |                       |           |           +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                       |           +- IfStatement[]
         |                       |              +- InfixExpression[@TypeMirror = "boolean"]
         |                       |              |  +- VariableAccess[@Name = "map", @TypeMirror = "R"]
         |                       |              |  +- NullLiteral[@TypeMirror = "null"]
         |                       |              +- Block[]
         |                       |                 +- ExpressionStatement[]
         |                       |                 |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.setNext(R) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                       |                 |     +- ArgumentList[]
         |                       |                 |        +- VariableAccess[@Name = "map", @TypeMirror = "R"]
         |                       |                 +- ReturnStatement[]
         |                       +- ExpressionStatement[]
         |                          +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<R>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                             +- ArgumentList[]
         +- MethodDeclaration[@Name = "filter"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "filter", @TypeMirror = "java.util.function.Predicate<? super T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.new() -> IteratorUtilCopy$AbstractIterator<T>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "T"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$5"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- WhileStatement[]
         |                       |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                       |  |  +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |  |  +- ArgumentList[]
         |                       |  +- Block[]
         |                       |     +- LocalVariableDeclaration[]
         |                       |     |  +- ModifierList[]
         |                       |     |  +- ClassType[@TypeMirror = "T"]
         |                       |     |  +- VariableDeclarator[]
         |                       |     |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |                       |     |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                       |     |        +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |     |        +- ArgumentList[]
         |                       |     +- IfStatement[]
         |                       |        +- MethodCall[@Failed = false, @Function = "java.util.function.Predicate<capture#... of ? super T>.test(capture#... of ? super T) -> boolean", @MethodName = "test", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                       |        |  +- VariableAccess[@Name = "filter", @TypeMirror = "java.util.function.Predicate<capture#... of ? super T>"]
         |                       |        |  +- ArgumentList[]
         |                       |        |     +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                       |        +- Block[]
         |                       |           +- ExpressionStatement[]
         |                       |           |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.setNext(T) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                       |           |     +- ArgumentList[]
         |                       |           |        +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                       |           +- ReturnStatement[]
         |                       +- ExpressionStatement[]
         |                          +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                             +- ArgumentList[]
         +- MethodDeclaration[@Name = "peek"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Consumer<? super T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Consumer<? super T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "action", @TypeMirror = "java.util.function.Consumer<? super T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T, R> map(java.util.Iterator<? extends T>, java.util.function.Function<? super T, ? extends T>) -> java.util.Iterator<T>", @MethodName = "map", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ArgumentList[]
         |              +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              +- LambdaExpression[@TypeMirror = "java.util.function.Function<T, T>"]
         |                 +- LambdaParameterList[]
         |                 |  +- LambdaParameter[@TypeMirror = "T"]
         |                 |     +- ModifierList[]
         |                 |     +- VariableId[@Name = "it", @TypeMirror = "T"]
         |                 +- Block[]
         |                    +- ExpressionStatement[]
         |                    |  +- MethodCall[@Failed = false, @Function = "java.util.function.Consumer<capture#... of ? super T>.accept(capture#... of ? super T) -> void", @MethodName = "accept", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                    |     +- VariableAccess[@Name = "action", @TypeMirror = "java.util.function.Consumer<capture#... of ? super T>"]
         |                    |     +- ArgumentList[]
         |                    |        +- VariableAccess[@Name = "it", @TypeMirror = "T"]
         |                    +- ReturnStatement[]
         |                       +- VariableAccess[@Name = "it", @TypeMirror = "T"]
         +- MethodDeclaration[@Name = "map"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  |  +- TypeParameter[@TypeMirror = "R"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<R>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "R"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Function<? super T, ? extends R>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Function<? super T, ? extends R>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |     |  +- ClassType[@TypeMirror = "T"]
         |  |     |     +- WildcardType[@TypeMirror = "? extends R"]
         |  |     |        +- ClassType[@TypeMirror = "R"]
         |  |     +- VariableId[@Name = "mapper", @TypeMirror = "java.util.function.Function<? super T, ? extends R>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "java.lang.Object.new() -> java.util.Iterator<R>", @MethodName = "new", @TypeMirror = "java.util.Iterator<R>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "java.util.Iterator<R>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "R"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$6"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- MethodDeclaration[@Name = "hasNext"]
         |                 |  +- ModifierList[]
         |                 |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                 |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                 |  +- PrimitiveType[@TypeMirror = "boolean"]
         |                 |  +- FormalParameters[]
         |                 |  +- Block[]
         |                 |     +- ReturnStatement[]
         |                 |        +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                 |           +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                 |           +- ArgumentList[]
         |                 +- MethodDeclaration[@Name = "next"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- ClassType[@TypeMirror = "R"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- ReturnStatement[]
         |                          +- MethodCall[@Failed = false, @Function = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends R>.apply(capture#... of ? super T) -> capture#... of ? extends R", @MethodName = "apply", @TypeMirror = "capture#... of ? extends R", @Unchecked = false, @VarargsCall = false]
         |                             +- VariableAccess[@Name = "mapper", @TypeMirror = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends R>"]
         |                             +- ArgumentList[]
         |                                +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                                   +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                                   +- ArgumentList[]
         +- MethodDeclaration[@Name = "mapIterator"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  |  +- TypeParameter[@TypeMirror = "R"]
         |  +- ClassType[@TypeMirror = "java.lang.Iterable<R>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "R"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.lang.Iterable<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.lang.Iterable<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iter", @TypeMirror = "java.lang.Iterable<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Function<? super java.util.Iterator<? extends T>, ? extends java.util.Iterator<R>>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Function<? super java.util.Iterator<? extends T>, ? extends java.util.Iterator<R>>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super java.util.Iterator<? extends T>"]
         |  |     |     |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |     |     +- TypeArguments[]
         |  |     |     |        +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |     |           +- ClassType[@TypeMirror = "T"]
         |  |     |     +- WildcardType[@TypeMirror = "? extends java.util.Iterator<R>"]
         |  |     |        +- ClassType[@TypeMirror = "java.util.Iterator<R>"]
         |  |     |           +- TypeArguments[]
         |  |     |              +- ClassType[@TypeMirror = "R"]
         |  |     +- VariableId[@Name = "mapper", @TypeMirror = "java.util.function.Function<? super java.util.Iterator<? extends T>, ? extends java.util.Iterator<R>>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- LambdaExpression[@TypeMirror = "java.lang.Iterable<R>"]
         |           +- LambdaParameterList[]
         |           +- MethodCall[@Failed = false, @Function = "java.util.function.Function<capture#... of ? super java.util.Iterator<? extends T>, capture#... of ? extends java.util.Iterator<R>>.apply(capture#... of ? super java.util.Iterator<? extends T>) -> capture#... of ? extends java.util.Iterator<R>", @MethodName = "apply", @TypeMirror = "capture#... of ? extends java.util.Iterator<R>", @Unchecked = false, @VarargsCall = false]
         |              +- VariableAccess[@Name = "mapper", @TypeMirror = "java.util.function.Function<capture#... of ? super java.util.Iterator<? extends T>, capture#... of ? extends java.util.Iterator<R>>"]
         |              +- ArgumentList[]
         |                 +- MethodCall[@Failed = false, @Function = "java.lang.Iterable<capture#... of ? extends T>.iterator() -> java.util.Iterator<capture#... of ? extends T>", @MethodName = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>", @Unchecked = false, @VarargsCall = false]
         |                    +- VariableAccess[@Name = "iter", @TypeMirror = "java.lang.Iterable<capture#... of ? extends T>"]
         |                    +- ArgumentList[]
         +- MethodDeclaration[@Name = "iterate"]
         |  +- ModifierList[]
         |  |  +- Annotation[@TypeMirror = "java.lang.SafeVarargs"]
         |  |     +- ClassType[@TypeMirror = "java.lang.SafeVarargs"]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "T[]"]
         |  |     +- ModifierList[]
         |  |     +- ArrayType[@TypeMirror = "T[]"]
         |  |     |  +- ClassType[@TypeMirror = "T"]
         |  |     |  +- ArrayDimensions[]
         |  |     |     +- ArrayTypeDim[]
         |  |     +- VariableId[@Name = "elements", @TypeMirror = "T[]"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "java.util.List<T>.iterator() -> java.util.Iterator<T>", @MethodName = "iterator", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- MethodCall[@Failed = false, @Function = "java.util.Arrays.<T> asList(T...) -> java.util.List<T>", @MethodName = "asList", @TypeMirror = "java.util.List<T>", @Unchecked = false, @VarargsCall = false]
         |           |  +- TypeExpression[@TypeMirror = "java.util.Arrays"]
         |           |  |  +- ClassType[@TypeMirror = "java.util.Arrays"]
         |           |  +- ArgumentList[]
         |           |     +- VariableAccess[@Name = "elements", @TypeMirror = "T[]"]
         |           +- ArgumentList[]
         +- MethodDeclaration[@Name = "concat"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "as", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "bs", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- IfStatement[]
         |     |  +- UnaryExpression[@TypeMirror = "boolean"]
         |     |  |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |  |     +- VariableAccess[@Name = "as", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |  |     +- ArgumentList[]
         |     |  +- Block[]
         |     |  |  +- ReturnStatement[]
         |     |  |     +- CastExpression[@TypeMirror = "java.util.Iterator<T>"]
         |     |  |        +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |     |  |        |  +- TypeArguments[]
         |     |  |        |     +- ClassType[@TypeMirror = "T"]
         |     |  |        +- VariableAccess[@Name = "bs", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |  +- IfStatement[]
         |     |     +- UnaryExpression[@TypeMirror = "boolean"]
         |     |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |     |     +- VariableAccess[@Name = "bs", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |     |     +- ArgumentList[]
         |     |     +- Block[]
         |     |        +- ReturnStatement[]
         |     |           +- CastExpression[@TypeMirror = "java.util.Iterator<T>"]
         |     |              +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |     |              |  +- TypeArguments[]
         |     |              |     +- ClassType[@TypeMirror = "T"]
         |     |              +- VariableAccess[@Name = "as", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "java.lang.Object.new() -> java.util.Iterator<T>", @MethodName = "new", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "T"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$7"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- MethodDeclaration[@Name = "hasNext"]
         |                 |  +- ModifierList[]
         |                 |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                 |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                 |  +- PrimitiveType[@TypeMirror = "boolean"]
         |                 |  +- FormalParameters[]
         |                 |  +- Block[]
         |                 |     +- ReturnStatement[]
         |                 |        +- InfixExpression[@TypeMirror = "boolean"]
         |                 |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                 |           |  +- VariableAccess[@Name = "as", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                 |           |  +- ArgumentList[]
         |                 |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                 |              +- VariableAccess[@Name = "bs", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                 |              +- ArgumentList[]
         |                 +- MethodDeclaration[@Name = "next"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- ClassType[@TypeMirror = "T"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- ReturnStatement[]
         |                          +- ConditionalExpression[@TypeMirror = "T"]
         |                             +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                             |  +- VariableAccess[@Name = "as", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                             |  +- ArgumentList[]
         |                             +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                             |  +- VariableAccess[@Name = "as", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                             |  +- ArgumentList[]
         |                             +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                                +- VariableAccess[@Name = "bs", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                                +- ArgumentList[]
         +- MethodDeclaration[@Name = "distinct"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "java.util.Set<T>"]
         |     |  |  +- TypeArguments[]
         |     |  |     +- ClassType[@TypeMirror = "T"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "seen", @TypeMirror = "java.util.Set<T>"]
         |     |     +- ConstructorCall[@Failed = false, @Function = "java.util.HashSet<T>.new() -> java.util.HashSet<T>", @MethodName = "new", @TypeMirror = "java.util.HashSet<T>", @Unchecked = false, @VarargsCall = false]
         |     |        +- ClassType[@TypeMirror = "java.util.HashSet"]
         |     |        |  +- TypeArguments[]
         |     |        +- ArgumentList[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T> filter(java.util.Iterator<? extends T>, java.util.function.Predicate<? super T>) -> java.util.Iterator<T>", @MethodName = "filter", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ArgumentList[]
         |              +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              +- MethodReference[@TypeMirror = "java.util.function.Predicate<T>"]
         |                 +- VariableAccess[@Name = "seen", @TypeMirror = "java.util.Set<T>"]
         +- MethodDeclaration[@Name = "toList"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.List<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "java.util.List<T>"]
         |     |  |  +- TypeArguments[]
         |     |  |     +- ClassType[@TypeMirror = "T"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "list", @TypeMirror = "java.util.List<T>"]
         |     |     +- ConstructorCall[@Failed = false, @Function = "java.util.ArrayList<T>.new() -> java.util.ArrayList<T>", @MethodName = "new", @TypeMirror = "java.util.ArrayList<T>", @Unchecked = false, @VarargsCall = false]
         |     |        +- ClassType[@TypeMirror = "java.util.ArrayList"]
         |     |        |  +- TypeArguments[]
         |     |        +- ArgumentList[]
         |     +- WhileStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |  |  +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |  |  +- ArgumentList[]
         |     |  +- Block[]
         |     |     +- ExpressionStatement[]
         |     |        +- MethodCall[@Failed = false, @Function = "java.util.List<T>.add(T) -> boolean", @MethodName = "add", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |           +- VariableAccess[@Name = "list", @TypeMirror = "java.util.List<T>"]
         |     |           +- ArgumentList[]
         |     |              +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |     |                 +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |                 +- ArgumentList[]
         |     +- ReturnStatement[]
         |        +- VariableAccess[@Name = "list", @TypeMirror = "java.util.List<T>"]
         +- MethodDeclaration[@Name = "toNonNullList"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.List<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "java.util.List<T>"]
         |     |  |  +- TypeArguments[]
         |     |  |     +- ClassType[@TypeMirror = "T"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "list", @TypeMirror = "java.util.List<T>"]
         |     |     +- ConstructorCall[@Failed = false, @Function = "java.util.ArrayList<T>.new() -> java.util.ArrayList<T>", @MethodName = "new", @TypeMirror = "java.util.ArrayList<T>", @Unchecked = false, @VarargsCall = false]
         |     |        +- ClassType[@TypeMirror = "java.util.ArrayList"]
         |     |        |  +- TypeArguments[]
         |     |        +- ArgumentList[]
         |     +- WhileStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |  |  +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |  |  +- ArgumentList[]
         |     |  +- Block[]
         |     |     +- LocalVariableDeclaration[]
         |     |     |  +- ModifierList[]
         |     |     |  +- ClassType[@TypeMirror = "T"]
         |     |     |  +- VariableDeclarator[]
         |     |     |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |     |     |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |     |     |        +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |     |        +- ArgumentList[]
         |     |     +- IfStatement[]
         |     |        +- InfixExpression[@TypeMirror = "boolean"]
         |     |        |  +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |     |        |  +- NullLiteral[@TypeMirror = "null"]
         |     |        +- Block[]
         |     |           +- ExpressionStatement[]
         |     |              +- MethodCall[@Failed = false, @Function = "java.util.List<T>.add(T) -> boolean", @MethodName = "add", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |                 +- VariableAccess[@Name = "list", @TypeMirror = "java.util.List<T>"]
         |     |                 +- ArgumentList[]
         |     |                    +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |     +- ReturnStatement[]
         |        +- VariableAccess[@Name = "list", @TypeMirror = "java.util.List<T>"]
         +- MethodDeclaration[@Name = "toIterable"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.lang.Iterable<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- LambdaExpression[@TypeMirror = "java.lang.Iterable<T>"]
         |           +- LambdaParameterList[]
         |           +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<T>"]
         +- MethodDeclaration[@Name = "count"]
         |  +- ModifierList[]
         |  +- PrimitiveType[@TypeMirror = "int"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<?>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<?>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "?"]
         |  |     +- VariableId[@Name = "it", @TypeMirror = "java.util.Iterator<?>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- PrimitiveType[@TypeMirror = "int"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "count", @TypeMirror = "int"]
         |     |     +- NumericLiteral[@TypeMirror = "int"]
         |     +- WhileStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ?>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |  |  +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ?>"]
         |     |  |  +- ArgumentList[]
         |     |  +- Block[]
         |     |     +- ExpressionStatement[]
         |     |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ?>.next() -> capture#... of ?", @MethodName = "next", @TypeMirror = "capture#... of ?", @Unchecked = false, @VarargsCall = false]
         |     |     |     +- VariableAccess[@Name = "it", @TypeMirror = "java.util.Iterator<capture#... of ?>"]
         |     |     |     +- ArgumentList[]
         |     |     +- ExpressionStatement[]
         |     |        +- UnaryExpression[@TypeMirror = "int"]
         |     |           +- VariableAccess[@Name = "count", @TypeMirror = "int"]
         |     +- ReturnStatement[]
         |        +- VariableAccess[@Name = "count", @TypeMirror = "int"]
         +- MethodDeclaration[@Name = "last"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "T"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |     |     +- NullLiteral[@TypeMirror = "null"]
         |     +- WhileStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |  |  +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |  |  +- ArgumentList[]
         |     |  +- Block[]
         |     |     +- ExpressionStatement[]
         |     |        +- AssignmentExpression[@TypeMirror = "T"]
         |     |           +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |     |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |     |              +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |              +- ArgumentList[]
         |     +- ReturnStatement[]
         |        +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         +- MethodDeclaration[@Name = "getNth"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "int"]
         |  |     +- ModifierList[]
         |  |     +- PrimitiveType[@TypeMirror = "int"]
         |  |     +- VariableId[@Name = "n", @TypeMirror = "int"]
         |  +- Block[]
         |     +- ExpressionStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.advance(java.util.Iterator<?>, int) -> void", @MethodName = "advance", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |     |     +- ArgumentList[]
         |     |        +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |        +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         |     +- ReturnStatement[]
         |        +- ConditionalExpression[@TypeMirror = "T"]
         |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |           |  +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |           |  +- ArgumentList[]
         |           +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |           |  +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |           |  +- ArgumentList[]
         |           +- NullLiteral[@TypeMirror = "null"]
         +- MethodDeclaration[@Name = "advance"]
         |  +- ModifierList[]
         |  +- VoidType[@TypeMirror = "void"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<?>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<?>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "?"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<?>"]
         |  |  +- FormalParameter[@TypeMirror = "int"]
         |  |     +- ModifierList[]
         |  |     +- PrimitiveType[@TypeMirror = "int"]
         |  |     +- VariableId[@Name = "n", @TypeMirror = "int"]
         |  +- Block[]
         |     +- WhileStatement[]
         |        +- InfixExpression[@TypeMirror = "boolean"]
         |        |  +- InfixExpression[@TypeMirror = "boolean"]
         |        |  |  +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         |        |  |  +- NumericLiteral[@TypeMirror = "int"]
         |        |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ?>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |        |     +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ?>"]
         |        |     +- ArgumentList[]
         |        +- Block[]
         |           +- ExpressionStatement[]
         |           |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ?>.next() -> capture#... of ?", @MethodName = "next", @TypeMirror = "capture#... of ?", @Unchecked = false, @VarargsCall = false]
         |           |     +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ?>"]
         |           |     +- ArgumentList[]
         |           +- ExpressionStatement[]
         |              +- UnaryExpression[@TypeMirror = "int"]
         |                 +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         +- MethodDeclaration[@Name = "take"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "int"]
         |  |     +- ModifierList[]
         |  |     +- PrimitiveType[@TypeMirror = "int"]
         |  |     +- VariableId[@Name = "n", @TypeMirror = "int"]
         |  +- Block[]
         |     +- IfStatement[]
         |     |  +- InfixExpression[@TypeMirror = "boolean"]
         |     |  |  +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         |     |  |  +- NumericLiteral[@TypeMirror = "int"]
         |     |  +- Block[]
         |     |     +- ReturnStatement[]
         |     |        +- MethodCall[@Failed = false, @Function = "java.util.Collections.<T> emptyIterator() -> java.util.Iterator<T>", @MethodName = "emptyIterator", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |     |           +- TypeExpression[@TypeMirror = "java.util.Collections"]
         |     |           |  +- ClassType[@TypeMirror = "java.util.Collections"]
         |     |           +- ArgumentList[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.new() -> IteratorUtilCopy$AbstractIterator<T>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "T"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$8"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- FieldDeclaration[]
         |                 |  +- ModifierList[]
         |                 |  +- PrimitiveType[@TypeMirror = "int"]
         |                 |  +- VariableDeclarator[]
         |                 |     +- VariableId[@Name = "yielded", @TypeMirror = "int"]
         |                 |     +- NumericLiteral[@TypeMirror = "int"]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- IfStatement[]
         |                       |  +- InfixExpression[@TypeMirror = "boolean"]
         |                       |  |  +- InfixExpression[@TypeMirror = "boolean"]
         |                       |  |  |  +- VariableAccess[@Name = "yielded", @TypeMirror = "int"]
         |                       |  |  |  +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         |                       |  |  +- UnaryExpression[@TypeMirror = "boolean"]
         |                       |  |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                       |  |        +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |  |        +- ArgumentList[]
         |                       |  +- Block[]
         |                       |  |  +- ExpressionStatement[]
         |                       |  |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                       |  |        +- ArgumentList[]
         |                       |  +- Block[]
         |                       |     +- ExpressionStatement[]
         |                       |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.setNext(T) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                       |           +- ArgumentList[]
         |                       |              +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                       |                 +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |                 +- ArgumentList[]
         |                       +- ExpressionStatement[]
         |                          +- UnaryExpression[@TypeMirror = "int"]
         |                             +- VariableAccess[@Name = "yielded", @TypeMirror = "int"]
         +- MethodDeclaration[@Name = "drop"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "source", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "int"]
         |  |     +- ModifierList[]
         |  |     +- PrimitiveType[@TypeMirror = "int"]
         |  |     +- VariableId[@Name = "n", @TypeMirror = "int"]
         |  +- Block[]
         |     +- IfStatement[]
         |     |  +- InfixExpression[@TypeMirror = "boolean"]
         |     |  |  +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         |     |  |  +- NumericLiteral[@TypeMirror = "int"]
         |     |  +- Block[]
         |     |     +- ReturnStatement[]
         |     |        +- CastExpression[@TypeMirror = "java.util.Iterator<T>"]
         |     |           +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |     |           |  +- TypeArguments[]
         |     |           |     +- ClassType[@TypeMirror = "T"]
         |     |           +- VariableAccess[@Name = "source", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.new() -> IteratorUtilCopy$AbstractIterator<T>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "T"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$9"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- FieldDeclaration[]
         |                 |  +- ModifierList[]
         |                 |  +- PrimitiveType[@TypeMirror = "int"]
         |                 |  +- VariableDeclarator[]
         |                 |     +- VariableId[@Name = "yielded", @TypeMirror = "int"]
         |                 |     +- NumericLiteral[@TypeMirror = "int"]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- WhileStatement[]
         |                       |  +- InfixExpression[@TypeMirror = "boolean"]
         |                       |  |  +- InfixExpression[@TypeMirror = "boolean"]
         |                       |  |  |  +- UnaryExpression[@TypeMirror = "int"]
         |                       |  |  |  |  +- VariableAccess[@Name = "yielded", @TypeMirror = "int"]
         |                       |  |  |  +- VariableAccess[@Name = "n", @TypeMirror = "int"]
         |                       |  |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                       |  |     +- VariableAccess[@Name = "source", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |  |     +- ArgumentList[]
         |                       |  +- Block[]
         |                       |     +- ExpressionStatement[]
         |                       |        +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                       |           +- VariableAccess[@Name = "source", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                       |           +- ArgumentList[]
         |                       +- IfStatement[]
         |                          +- UnaryExpression[@TypeMirror = "boolean"]
         |                          |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                          |     +- VariableAccess[@Name = "source", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                          |     +- ArgumentList[]
         |                          +- Block[]
         |                          |  +- ExpressionStatement[]
         |                          |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                          |        +- ArgumentList[]
         |                          +- Block[]
         |                             +- ExpressionStatement[]
         |                                +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.setNext(T) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                                   +- ArgumentList[]
         |                                      +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                                         +- VariableAccess[@Name = "source", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |                                         +- ArgumentList[]
         +- MethodDeclaration[@Name = "generate"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "T"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "seed", @TypeMirror = "T"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Function<? super T, ? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Function<? super T, ? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |     |  +- ClassType[@TypeMirror = "T"]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "stepper", @TypeMirror = "java.util.function.Function<? super T, ? extends T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.new() -> IteratorUtilCopy$AbstractIterator<T>", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator<T>", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
         |           |  +- TypeArguments[]
         |           |     +- ClassType[@TypeMirror = "T"]
         |           +- ArgumentList[]
         |           +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$10"]
         |              +- ModifierList[]
         |              +- ClassBody[]
         |                 +- FieldDeclaration[]
         |                 |  +- ModifierList[]
         |                 |  +- ClassType[@TypeMirror = "T"]
         |                 |  +- VariableDeclarator[]
         |                 |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |                 |     +- VariableAccess[@Name = "seed", @TypeMirror = "T"]
         |                 +- MethodDeclaration[@Name = "computeNext"]
         |                    +- ModifierList[]
         |                    |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    +- VoidType[@TypeMirror = "void"]
         |                    +- FormalParameters[]
         |                    +- Block[]
         |                       +- IfStatement[]
         |                       |  +- InfixExpression[@TypeMirror = "boolean"]
         |                       |  |  +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                       |  |  +- NullLiteral[@TypeMirror = "null"]
         |                       |  +- Block[]
         |                       |     +- ExpressionStatement[]
         |                       |     |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.done() -> void", @MethodName = "done", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                       |     |     +- ArgumentList[]
         |                       |     +- ReturnStatement[]
         |                       +- ExpressionStatement[]
         |                       |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.setNext(T) -> void", @MethodName = "setNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                       |     +- ArgumentList[]
         |                       |        +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                       +- ExpressionStatement[]
         |                          +- AssignmentExpression[@TypeMirror = "T"]
         |                             +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |                             +- MethodCall[@Failed = false, @Function = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends T>.apply(capture#... of ? super T) -> capture#... of ? extends T", @MethodName = "apply", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |                                +- VariableAccess[@Name = "stepper", @TypeMirror = "java.util.function.Function<capture#... of ? super T, capture#... of ? extends T>"]
         |                                +- ArgumentList[]
         |                                   +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         +- MethodDeclaration[@Name = "anyMatch"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- PrimitiveType[@TypeMirror = "boolean"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "pred", @TypeMirror = "java.util.function.Predicate<? super T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T> matches(java.util.Iterator<? extends T>, java.util.function.Predicate<? super T>, int) -> boolean", @MethodName = "matches", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |           +- ArgumentList[]
         |              +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              +- VariableAccess[@Name = "pred", @TypeMirror = "java.util.function.Predicate<capture#... of ? super T>"]
         |              +- VariableAccess[@Name = "MATCH_ANY", @TypeMirror = "int"]
         +- MethodDeclaration[@Name = "allMatch"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- PrimitiveType[@TypeMirror = "boolean"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "pred", @TypeMirror = "java.util.function.Predicate<? super T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T> matches(java.util.Iterator<? extends T>, java.util.function.Predicate<? super T>, int) -> boolean", @MethodName = "matches", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |           +- ArgumentList[]
         |              +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              +- VariableAccess[@Name = "pred", @TypeMirror = "java.util.function.Predicate<capture#... of ? super T>"]
         |              +- VariableAccess[@Name = "MATCH_ALL", @TypeMirror = "int"]
         +- MethodDeclaration[@Name = "noneMatch"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- PrimitiveType[@TypeMirror = "boolean"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? super T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "pred", @TypeMirror = "java.util.function.Predicate<? super T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy.<T> matches(java.util.Iterator<? extends T>, java.util.function.Predicate<? super T>, int) -> boolean", @MethodName = "matches", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |           +- ArgumentList[]
         |              +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              +- VariableAccess[@Name = "pred", @TypeMirror = "java.util.function.Predicate<capture#... of ? super T>"]
         |              +- VariableAccess[@Name = "MATCH_NONE", @TypeMirror = "int"]
         +- MethodDeclaration[@Name = "matches"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- PrimitiveType[@TypeMirror = "boolean"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "iterator", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  |  +- FormalParameter[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |  |  +- ModifierList[]
         |  |  |  +- ClassType[@TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |  |  |  +- TypeArguments[]
         |  |  |  |     +- WildcardType[@TypeMirror = "? super T"]
         |  |  |  |        +- ClassType[@TypeMirror = "T"]
         |  |  |  +- VariableId[@Name = "pred", @TypeMirror = "java.util.function.Predicate<? super T>"]
         |  |  +- FormalParameter[@TypeMirror = "int"]
         |  |     +- ModifierList[]
         |  |     +- PrimitiveType[@TypeMirror = "int"]
         |  |     +- VariableId[@Name = "matchKind", @TypeMirror = "int"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- PrimitiveType[@TypeMirror = "boolean"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "kindAny", @TypeMirror = "boolean"]
         |     |     +- InfixExpression[@TypeMirror = "boolean"]
         |     |        +- VariableAccess[@Name = "matchKind", @TypeMirror = "int"]
         |     |        +- VariableAccess[@Name = "MATCH_ANY", @TypeMirror = "int"]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- PrimitiveType[@TypeMirror = "boolean"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "kindAll", @TypeMirror = "boolean"]
         |     |     +- InfixExpression[@TypeMirror = "boolean"]
         |     |        +- VariableAccess[@Name = "matchKind", @TypeMirror = "int"]
         |     |        +- VariableAccess[@Name = "MATCH_ALL", @TypeMirror = "int"]
         |     +- WhileStatement[]
         |     |  +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |  |  +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |  |  +- ArgumentList[]
         |     |  +- Block[]
         |     |     +- LocalVariableDeclaration[]
         |     |     |  +- ModifierList[]
         |     |     |  +- ClassType[@TypeMirror = "T"]
         |     |     |  +- VariableDeclarator[]
         |     |     |     +- VariableId[@Name = "value", @TypeMirror = "T"]
         |     |     |     +- MethodCall[@Failed = false, @Function = "java.util.Iterator<capture#... of ? extends T>.next() -> capture#... of ? extends T", @MethodName = "next", @TypeMirror = "capture#... of ? extends T", @Unchecked = false, @VarargsCall = false]
         |     |     |        +- VariableAccess[@Name = "iterator", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |     |     |        +- ArgumentList[]
         |     |     +- LocalVariableDeclaration[]
         |     |     |  +- ModifierList[]
         |     |     |  +- PrimitiveType[@TypeMirror = "boolean"]
         |     |     |  +- VariableDeclarator[]
         |     |     |     +- VariableId[@Name = "match", @TypeMirror = "boolean"]
         |     |     |     +- MethodCall[@Failed = false, @Function = "java.util.function.Predicate<capture#... of ? super T>.test(capture#... of ? super T) -> boolean", @MethodName = "test", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |     |        +- VariableAccess[@Name = "pred", @TypeMirror = "java.util.function.Predicate<capture#... of ? super T>"]
         |     |     |        +- ArgumentList[]
         |     |     |           +- VariableAccess[@Name = "value", @TypeMirror = "T"]
         |     |     +- IfStatement[]
         |     |        +- InfixExpression[@TypeMirror = "boolean"]
         |     |        |  +- VariableAccess[@Name = "match", @TypeMirror = "boolean"]
         |     |        |  +- VariableAccess[@Name = "kindAll", @TypeMirror = "boolean"]
         |     |        +- Block[]
         |     |           +- ReturnStatement[]
         |     |              +- InfixExpression[@TypeMirror = "boolean"]
         |     |                 +- VariableAccess[@Name = "kindAny", @TypeMirror = "boolean"]
         |     |                 +- VariableAccess[@Name = "match", @TypeMirror = "boolean"]
         |     +- ReturnStatement[]
         |        +- UnaryExpression[@TypeMirror = "boolean"]
         |           +- VariableAccess[@Name = "kindAny", @TypeMirror = "boolean"]
         +- MethodDeclaration[@Name = "singletonIterator"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "T"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "value", @TypeMirror = "T"]
         |  +- Block[]
         |     +- LocalClassStatement[]
         |     |  +- ClassDeclaration[@TypeMirror = "IteratorUtilCopy#SingletonIterator"]
         |     |     +- ModifierList[]
         |     |     +- ImplementsList[]
         |     |     |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |     |     |     +- TypeArguments[]
         |     |     |        +- ClassType[@TypeMirror = "T"]
         |     |     +- ClassBody[]
         |     |        +- FieldDeclaration[]
         |     |        |  +- ModifierList[]
         |     |        |  +- PrimitiveType[@TypeMirror = "boolean"]
         |     |        |  +- VariableDeclarator[]
         |     |        |     +- VariableId[@Name = "done", @TypeMirror = "boolean"]
         |     |        +- MethodDeclaration[@Name = "hasNext"]
         |     |        |  +- ModifierList[]
         |     |        |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |     |        |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |     |        |  +- PrimitiveType[@TypeMirror = "boolean"]
         |     |        |  +- FormalParameters[]
         |     |        |  +- Block[]
         |     |        |     +- ReturnStatement[]
         |     |        |        +- UnaryExpression[@TypeMirror = "boolean"]
         |     |        |           +- VariableAccess[@Name = "done", @TypeMirror = "boolean"]
         |     |        +- MethodDeclaration[@Name = "next"]
         |     |        |  +- ModifierList[]
         |     |        |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |     |        |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |     |        |  +- ClassType[@TypeMirror = "T"]
         |     |        |  +- FormalParameters[]
         |     |        |  +- Block[]
         |     |        |     +- IfStatement[]
         |     |        |     |  +- VariableAccess[@Name = "done", @TypeMirror = "boolean"]
         |     |        |     |  +- Block[]
         |     |        |     |     +- ThrowStatement[]
         |     |        |     |        +- ConstructorCall[@Failed = false, @Function = "java.util.NoSuchElementException.new() -> java.util.NoSuchElementException", @MethodName = "new", @TypeMirror = "java.util.NoSuchElementException", @Unchecked = false, @VarargsCall = false]
         |     |        |     |           +- ClassType[@TypeMirror = "java.util.NoSuchElementException"]
         |     |        |     |           +- ArgumentList[]
         |     |        |     +- ExpressionStatement[]
         |     |        |     |  +- AssignmentExpression[@TypeMirror = "boolean"]
         |     |        |     |     +- VariableAccess[@Name = "done", @TypeMirror = "boolean"]
         |     |        |     |     +- BooleanLiteral[@TypeMirror = "boolean"]
         |     |        |     +- ReturnStatement[]
         |     |        |        +- VariableAccess[@Name = "value", @TypeMirror = "T"]
         |     |        +- MethodDeclaration[@Name = "forEachRemaining"]
         |     |           +- ModifierList[]
         |     |           |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |     |           |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |     |           +- VoidType[@TypeMirror = "void"]
         |     |           +- FormalParameters[]
         |     |           |  +- FormalParameter[@TypeMirror = "java.util.function.Consumer<? super T>"]
         |     |           |     +- ModifierList[]
         |     |           |     +- ClassType[@TypeMirror = "java.util.function.Consumer<? super T>"]
         |     |           |     |  +- TypeArguments[]
         |     |           |     |     +- WildcardType[@TypeMirror = "? super T"]
         |     |           |     |        +- ClassType[@TypeMirror = "T"]
         |     |           |     +- VariableId[@Name = "action", @TypeMirror = "java.util.function.Consumer<? super T>"]
         |     |           +- Block[]
         |     |              +- ExpressionStatement[]
         |     |                 +- MethodCall[@Failed = false, @Function = "java.util.function.Consumer<capture#... of ? super T>.accept(capture#... of ? super T) -> void", @MethodName = "accept", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |     |                    +- VariableAccess[@Name = "action", @TypeMirror = "java.util.function.Consumer<capture#... of ? super T>"]
         |     |                    +- ArgumentList[]
         |     |                       +- VariableAccess[@Name = "value", @TypeMirror = "T"]
         |     +- ReturnStatement[]
         |        +- ConstructorCall[@Failed = false, @Function = "IteratorUtilCopy#SingletonIterator.new() -> IteratorUtilCopy#SingletonIterator", @MethodName = "new", @TypeMirror = "IteratorUtilCopy#SingletonIterator", @Unchecked = false, @VarargsCall = false]
         |           +- ClassType[@TypeMirror = "IteratorUtilCopy#SingletonIterator"]
         |           +- ArgumentList[]
         +- MethodDeclaration[@Name = "asReversed"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.lang.Iterable<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.List<T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.List<T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "lst", @TypeMirror = "java.util.List<T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- LambdaExpression[@TypeMirror = "java.lang.Iterable<T>"]
         |           +- LambdaParameterList[]
         |           +- ConstructorCall[@Failed = false, @Function = "java.lang.Object.new() -> java.util.Iterator<T>", @MethodName = "new", @TypeMirror = "java.util.Iterator<T>", @Unchecked = false, @VarargsCall = false]
         |              +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |              |  +- TypeArguments[]
         |              |     +- ClassType[@TypeMirror = "T"]
         |              +- ArgumentList[]
         |              +- AnonymousClassDeclaration[@TypeMirror = "IteratorUtilCopy$11"]
         |                 +- ModifierList[]
         |                 +- ClassBody[]
         |                    +- FieldDeclaration[]
         |                    |  +- ModifierList[]
         |                    |  +- ClassType[@TypeMirror = "java.util.ListIterator<T>"]
         |                    |  |  +- TypeArguments[]
         |                    |  |     +- ClassType[@TypeMirror = "T"]
         |                    |  +- VariableDeclarator[]
         |                    |     +- VariableId[@Name = "li", @TypeMirror = "java.util.ListIterator<T>"]
         |                    |     +- MethodCall[@Failed = false, @Function = "java.util.List<T>.listIterator(int) -> java.util.ListIterator<T>", @MethodName = "listIterator", @TypeMirror = "java.util.ListIterator<T>", @Unchecked = false, @VarargsCall = false]
         |                    |        +- VariableAccess[@Name = "lst", @TypeMirror = "java.util.List<T>"]
         |                    |        +- ArgumentList[]
         |                    |           +- MethodCall[@Failed = false, @Function = "java.util.List<T>.size() -> int", @MethodName = "size", @TypeMirror = "int", @Unchecked = false, @VarargsCall = false]
         |                    |              +- VariableAccess[@Name = "lst", @TypeMirror = "java.util.List<T>"]
         |                    |              +- ArgumentList[]
         |                    +- MethodDeclaration[@Name = "hasNext"]
         |                    |  +- ModifierList[]
         |                    |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    |  +- PrimitiveType[@TypeMirror = "boolean"]
         |                    |  +- FormalParameters[]
         |                    |  +- Block[]
         |                    |     +- ReturnStatement[]
         |                    |        +- MethodCall[@Failed = false, @Function = "java.util.ListIterator<T>.hasPrevious() -> boolean", @MethodName = "hasPrevious", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                    |           +- VariableAccess[@Name = "li", @TypeMirror = "java.util.ListIterator<T>"]
         |                    |           +- ArgumentList[]
         |                    +- MethodDeclaration[@Name = "next"]
         |                    |  +- ModifierList[]
         |                    |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                    |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                    |  +- ClassType[@TypeMirror = "T"]
         |                    |  +- FormalParameters[]
         |                    |  +- Block[]
         |                    |     +- ReturnStatement[]
         |                    |        +- MethodCall[@Failed = false, @Function = "java.util.ListIterator<T>.previous() -> T", @MethodName = "previous", @TypeMirror = "T", @Unchecked = false, @VarargsCall = false]
         |                    |           +- VariableAccess[@Name = "li", @TypeMirror = "java.util.ListIterator<T>"]
         |                    |           +- ArgumentList[]
         |                    +- MethodDeclaration[@Name = "remove"]
         |                       +- ModifierList[]
         |                       |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |                       |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |                       +- VoidType[@TypeMirror = "void"]
         |                       +- FormalParameters[]
         |                       +- Block[]
         |                          +- ExpressionStatement[]
         |                             +- MethodCall[@Failed = false, @Function = "java.util.ListIterator<T>.remove() -> void", @MethodName = "remove", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |                                +- VariableAccess[@Name = "li", @TypeMirror = "java.util.ListIterator<T>"]
         |                                +- ArgumentList[]
         +- MethodDeclaration[@Name = "toStream"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ClassType[@TypeMirror = "java.util.stream.Stream<T>"]
         |  |  +- TypeArguments[]
         |  |     +- ClassType[@TypeMirror = "T"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.Iterator<? extends T>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- WildcardType[@TypeMirror = "? extends T"]
         |  |     |        +- ClassType[@TypeMirror = "T"]
         |  |     +- VariableId[@Name = "iter", @TypeMirror = "java.util.Iterator<? extends T>"]
         |  +- Block[]
         |     +- ReturnStatement[]
         |        +- MethodCall[@Failed = false, @Function = "java.util.stream.StreamSupport.<T> stream(java.util.Spliterator<T>, boolean) -> java.util.stream.Stream<T>", @MethodName = "stream", @TypeMirror = "java.util.stream.Stream<T>", @Unchecked = false, @VarargsCall = false]
         |           +- TypeExpression[@TypeMirror = "java.util.stream.StreamSupport"]
         |           |  +- ClassType[@TypeMirror = "java.util.stream.StreamSupport"]
         |           +- ArgumentList[]
         |              +- MethodCall[@Failed = false, @Function = "java.util.Spliterators.<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int) -> java.util.Spliterator<T>", @MethodName = "spliteratorUnknownSize", @TypeMirror = "java.util.Spliterator<T>", @Unchecked = false, @VarargsCall = false]
         |              |  +- TypeExpression[@TypeMirror = "java.util.Spliterators"]
         |              |  |  +- ClassType[@TypeMirror = "java.util.Spliterators"]
         |              |  +- ArgumentList[]
         |              |     +- VariableAccess[@Name = "iter", @TypeMirror = "java.util.Iterator<capture#... of ? extends T>"]
         |              |     +- NumericLiteral[@TypeMirror = "int"]
         |              +- BooleanLiteral[@TypeMirror = "boolean"]
         +- ClassDeclaration[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
         |  +- ModifierList[]
         |  +- TypeParameters[]
         |  |  +- TypeParameter[@TypeMirror = "T"]
         |  +- ImplementsList[]
         |  |  +- ClassType[@TypeMirror = "java.util.Iterator<T>"]
         |  |     +- TypeArguments[]
         |  |        +- ClassType[@TypeMirror = "T"]
         |  +- ClassBody[]
         |     +- FieldDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     +- FieldAccess[@Name = "NOT_READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |        +- TypeExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     +- FieldDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "T"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "next", @TypeMirror = "T"]
         |     |     +- NullLiteral[@TypeMirror = "null"]
         |     +- MethodDeclaration[@Name = "hasNext"]
         |     |  +- ModifierList[]
         |     |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |     |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |     |  +- PrimitiveType[@TypeMirror = "boolean"]
         |     |  +- FormalParameters[]
         |     |  +- Block[]
         |     |     +- SwitchStatement[]
         |     |        +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |        +- SwitchFallthroughBranch[]
         |     |        |  +- SwitchLabel[]
         |     |        |  |  +- VariableAccess[@Name = "DONE", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |        |  +- ReturnStatement[]
         |     |        |     +- BooleanLiteral[@TypeMirror = "boolean"]
         |     |        +- SwitchFallthroughBranch[]
         |     |        |  +- SwitchLabel[]
         |     |        |  |  +- VariableAccess[@Name = "READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |        |  +- ReturnStatement[]
         |     |        |     +- BooleanLiteral[@TypeMirror = "boolean"]
         |     |        +- SwitchFallthroughBranch[]
         |     |           +- SwitchLabel[]
         |     |           +- ExpressionStatement[]
         |     |           |  +- AssignmentExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           |     +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           |     +- NullLiteral[@TypeMirror = "null"]
         |     |           +- ExpressionStatement[]
         |     |           |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.computeNext() -> void", @MethodName = "computeNext", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |     |           |     +- ArgumentList[]
         |     |           +- IfStatement[]
         |     |           |  +- InfixExpression[@TypeMirror = "boolean"]
         |     |           |  |  +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           |  |  +- NullLiteral[@TypeMirror = "null"]
         |     |           |  +- Block[]
         |     |           |     +- ThrowStatement[]
         |     |           |        +- ConstructorCall[@Failed = false, @Function = "java.lang.IllegalStateException.new(java.lang.String) -> java.lang.IllegalStateException", @MethodName = "new", @TypeMirror = "java.lang.IllegalStateException", @Unchecked = false, @VarargsCall = false]
         |     |           |           +- ClassType[@TypeMirror = "java.lang.IllegalStateException"]
         |     |           |           +- ArgumentList[]
         |     |           |              +- StringLiteral[@TypeMirror = "java.lang.String"]
         |     |           +- ReturnStatement[]
         |     |              +- InfixExpression[@TypeMirror = "boolean"]
         |     |                 +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |                 +- FieldAccess[@Name = "READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |                    +- TypeExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |                       +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     +- MethodDeclaration[@Name = "next"]
         |     |  +- ModifierList[]
         |     |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |     |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |     |  +- ClassType[@TypeMirror = "T"]
         |     |  +- FormalParameters[]
         |     |  +- Block[]
         |     |     +- IfStatement[]
         |     |     |  +- UnaryExpression[@TypeMirror = "boolean"]
         |     |     |  |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.hasNext() -> boolean", @MethodName = "hasNext", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |     |     |  |     +- ArgumentList[]
         |     |     |  +- Block[]
         |     |     |     +- ThrowStatement[]
         |     |     |        +- ConstructorCall[@Failed = false, @Function = "java.util.NoSuchElementException.new() -> java.util.NoSuchElementException", @MethodName = "new", @TypeMirror = "java.util.NoSuchElementException", @Unchecked = false, @VarargsCall = false]
         |     |     |           +- ClassType[@TypeMirror = "java.util.NoSuchElementException"]
         |     |     |           +- ArgumentList[]
         |     |     +- ExpressionStatement[]
         |     |     |  +- AssignmentExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     |     +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     |     +- FieldAccess[@Name = "NOT_READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     |        +- TypeExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     |           +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     +- ReturnStatement[]
         |     |        +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |     +- MethodDeclaration[@Name = "setNext"]
         |     |  +- ModifierList[]
         |     |  +- VoidType[@TypeMirror = "void"]
         |     |  +- FormalParameters[]
         |     |  |  +- FormalParameter[@TypeMirror = "T"]
         |     |  |     +- ModifierList[]
         |     |  |     +- ClassType[@TypeMirror = "T"]
         |     |  |     +- VariableId[@Name = "t", @TypeMirror = "T"]
         |     |  +- Block[]
         |     |     +- ExpressionStatement[]
         |     |     |  +- AssignmentExpression[@TypeMirror = "T"]
         |     |     |     +- VariableAccess[@Name = "next", @TypeMirror = "T"]
         |     |     |     +- VariableAccess[@Name = "t", @TypeMirror = "T"]
         |     |     +- ExpressionStatement[]
         |     |        +- AssignmentExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           +- FieldAccess[@Name = "READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |              +- TypeExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |                 +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     +- MethodDeclaration[@Name = "done"]
         |     |  +- ModifierList[]
         |     |  +- VoidType[@TypeMirror = "void"]
         |     |  +- FormalParameters[]
         |     |  +- Block[]
         |     |     +- ExpressionStatement[]
         |     |        +- AssignmentExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           +- VariableAccess[@Name = "state", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |           +- FieldAccess[@Name = "DONE", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |              +- TypeExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |                 +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     +- MethodDeclaration[@Name = "computeNext"]
         |     |  +- ModifierList[]
         |     |  +- VoidType[@TypeMirror = "void"]
         |     |  +- FormalParameters[]
         |     +- EnumDeclaration[@TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |  +- ModifierList[]
         |     |  +- EnumBody[]
         |     |     +- EnumConstant[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator$State.new() -> IteratorUtilCopy$AbstractIterator$State", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State", @Unchecked = false, @VarargsCall = false]
         |     |     |  +- ModifierList[]
         |     |     |  +- VariableId[@Name = "READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     +- EnumConstant[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator$State.new() -> IteratorUtilCopy$AbstractIterator$State", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State", @Unchecked = false, @VarargsCall = false]
         |     |     |  +- ModifierList[]
         |     |     |  +- VariableId[@Name = "NOT_READY", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     |     +- EnumConstant[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator$State.new() -> IteratorUtilCopy$AbstractIterator$State", @MethodName = "new", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State", @Unchecked = false, @VarargsCall = false]
         |     |        +- ModifierList[]
         |     |        +- VariableId[@Name = "DONE", @TypeMirror = "IteratorUtilCopy$AbstractIterator$State"]
         |     +- MethodDeclaration[@Name = "remove"]
         |        +- ModifierList[]
         |        |  +- Annotation[@TypeMirror = "java.lang.Deprecated"]
         |        |  |  +- ClassType[@TypeMirror = "java.lang.Deprecated"]
         |        |  +- Annotation[@TypeMirror = "java.lang.Override"]
         |        |     +- ClassType[@TypeMirror = "java.lang.Override"]
         |        +- VoidType[@TypeMirror = "void"]
         |        +- FormalParameters[]
         |        +- Block[]
         |           +- ThrowStatement[]
         |              +- ConstructorCall[@Failed = false, @Function = "java.lang.UnsupportedOperationException.new() -> java.lang.UnsupportedOperationException", @MethodName = "new", @TypeMirror = "java.lang.UnsupportedOperationException", @Unchecked = false, @VarargsCall = false]
         |                 +- ClassType[@TypeMirror = "java.lang.UnsupportedOperationException"]
         |                 +- ArgumentList[]
         +- ClassDeclaration[@TypeMirror = "IteratorUtilCopy$AbstractPausingIterator<T>"]
            +- ModifierList[]
            +- TypeParameters[]
            |  +- TypeParameter[@TypeMirror = "T"]
            +- ExtendsList[]
            |  +- ClassType[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
            |     +- TypeArguments[]
            |        +- ClassType[@TypeMirror = "T"]
            +- ClassBody[]
               +- FieldDeclaration[]
               |  +- ModifierList[]
               |  +- PrimitiveType[@TypeMirror = "int"]
               |  +- VariableDeclarator[]
               |     +- VariableId[@Name = "numYielded", @TypeMirror = "int"]
               |     +- NumericLiteral[@TypeMirror = "int"]
               +- FieldDeclaration[]
               |  +- ModifierList[]
               |  +- ClassType[@TypeMirror = "T"]
               |  +- VariableDeclarator[]
               |     +- VariableId[@Name = "currentValue", @TypeMirror = "T"]
               +- MethodDeclaration[@Name = "next"]
               |  +- ModifierList[]
               |  |  +- Annotation[@TypeMirror = "java.lang.Override"]
               |  |     +- ClassType[@TypeMirror = "java.lang.Override"]
               |  +- ClassType[@TypeMirror = "T"]
               |  +- FormalParameters[]
               |  +- Block[]
               |     +- LocalVariableDeclaration[]
               |     |  +- ModifierList[]
               |     |  +- ClassType[@TypeMirror = "T"]
               |     |  +- VariableDeclarator[]
               |     |     +- VariableId[@Name = "next", @TypeMirror = "T"]
               |     |     +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractIterator<T>.next() -> T", @MethodName = "next", @TypeMirror = "T", @Unchecked = false, @VarargsCall = false]
               |     |        +- SuperExpression[@TypeMirror = "IteratorUtilCopy$AbstractIterator<T>"]
               |     |        +- ArgumentList[]
               |     +- ExpressionStatement[]
               |     |  +- AssignmentExpression[@TypeMirror = "T"]
               |     |     +- VariableAccess[@Name = "currentValue", @TypeMirror = "T"]
               |     |     +- VariableAccess[@Name = "next", @TypeMirror = "T"]
               |     +- ExpressionStatement[]
               |     |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractPausingIterator<T>.prepareViewOn(T) -> void", @MethodName = "prepareViewOn", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
               |     |     +- ArgumentList[]
               |     |        +- VariableAccess[@Name = "next", @TypeMirror = "T"]
               |     +- ExpressionStatement[]
               |     |  +- UnaryExpression[@TypeMirror = "int"]
               |     |     +- VariableAccess[@Name = "numYielded", @TypeMirror = "int"]
               |     +- ReturnStatement[]
               |        +- VariableAccess[@Name = "next", @TypeMirror = "T"]
               +- MethodDeclaration[@Name = "prepareViewOn"]
               |  +- ModifierList[]
               |  +- VoidType[@TypeMirror = "void"]
               |  +- FormalParameters[]
               |  |  +- FormalParameter[@TypeMirror = "T"]
               |  |     +- ModifierList[]
               |  |     +- ClassType[@TypeMirror = "T"]
               |  |     +- VariableId[@Name = "current", @TypeMirror = "T"]
               |  +- Block[]
               +- MethodDeclaration[@Name = "getIterationCount"]
               |  +- ModifierList[]
               |  +- PrimitiveType[@TypeMirror = "int"]
               |  +- FormalParameters[]
               |  +- Block[]
               |     +- ReturnStatement[]
               |        +- VariableAccess[@Name = "numYielded", @TypeMirror = "int"]
               +- MethodDeclaration[@Name = "getCurrentValue"]
               |  +- ModifierList[]
               |  +- ClassType[@TypeMirror = "T"]
               |  +- FormalParameters[]
               |  +- Block[]
               |     +- ExpressionStatement[]
               |     |  +- MethodCall[@Failed = false, @Function = "IteratorUtilCopy$AbstractPausingIterator<T>.ensureReadable() -> void", @MethodName = "ensureReadable", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
               |     |     +- ArgumentList[]
               |     +- ReturnStatement[]
               |        +- VariableAccess[@Name = "currentValue", @TypeMirror = "T"]
               +- MethodDeclaration[@Name = "ensureReadable"]
                  +- ModifierList[]
                  +- VoidType[@TypeMirror = "void"]
                  +- FormalParameters[]
                  +- Block[]
                     +- IfStatement[]
                        +- InfixExpression[@TypeMirror = "boolean"]
                        |  +- VariableAccess[@Name = "numYielded", @TypeMirror = "int"]
                        |  +- NumericLiteral[@TypeMirror = "int"]
                        +- Block[]
                           +- ThrowStatement[]
                              +- ConstructorCall[@Failed = false, @Function = "java.lang.IllegalStateException.new(java.lang.String) -> java.lang.IllegalStateException", @MethodName = "new", @TypeMirror = "java.lang.IllegalStateException", @Unchecked = false, @VarargsCall = false]
                                 +- ClassType[@TypeMirror = "java.lang.IllegalStateException"]
                                 +- ArgumentList[]
                                    +- StringLiteral[@TypeMirror = "java.lang.String"]
