+- CompilationUnit[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ImportDeclaration[]
   +- ClassDeclaration[@TypeMirror = "Foo"]
      +- ModifierList[]
      +- ClassBody[]
         +- MethodDeclaration[@Name = "methodA"]
         |  +- ModifierList[]
         |  +- ClassType[@TypeMirror = "*User"]
         |  +- FormalParameters[]
         |  |  +- FormalParameter[@TypeMirror = "java.util.List<*Item>"]
         |  |     +- ModifierList[]
         |  |     +- ClassType[@TypeMirror = "java.util.List<*Item>"]
         |  |     |  +- TypeArguments[]
         |  |     |     +- ClassType[@TypeMirror = "*Item"]
         |  |     +- VariableId[@Name = "loads", @TypeMirror = "java.util.List<*Item>"]
         |  +- Block[]
         |     +- LocalVariableDeclaration[]
         |     |  +- ModifierList[]
         |     |  +- ClassType[@TypeMirror = "java.util.List<*SummaryDto.ItemDto>"]
         |     |  |  +- TypeArguments[]
         |     |  |     +- ClassType[@TypeMirror = "*SummaryDto.ItemDto"]
         |     |  +- VariableDeclarator[]
         |     |     +- VariableId[@Name = "items", @TypeMirror = "java.util.List<*SummaryDto.ItemDto>"]
         |     |     +- ConstructorCall[@Failed = false, @Function = "java.util.ArrayList<*SummaryDto.ItemDto>.new() -> java.util.ArrayList<*SummaryDto.ItemDto>", @MethodName = "new", @TypeMirror = "java.util.ArrayList<*SummaryDto.ItemDto>", @Unchecked = false, @VarargsCall = false]
         |     |        +- ClassType[@TypeMirror = "java.util.ArrayList"]
         |     |        |  +- TypeArguments[]
         |     |        +- ArgumentList[]
         |     +- ExpressionStatement[]
         |        +- MethodCall[@Failed = false, @Function = "java.util.Map<(*unknown*), java.util.List<*Item>>.forEach(java.util.function.BiConsumer<? super (*unknown*), ? super java.util.List<*Item>>) -> void", @MethodName = "forEach", @TypeMirror = "void", @Unchecked = false, @VarargsCall = false]
         |           +- MethodCall[@Failed = false, @Function = "java.util.stream.Stream<*Item>.<R, A> collect(java.util.stream.Collector<? super *Item, java.lang.Object, java.util.Map<(*unknown*), java.util.List<*Item>>>) -> java.util.Map<(*unknown*), java.util.List<*Item>>", @MethodName = "collect", @TypeMirror = "java.util.Map<(*unknown*), java.util.List<*Item>>", @Unchecked = false, @VarargsCall = false]
         |           |  +- MethodCall[@Failed = false, @Function = "java.util.Collection<*Item>.stream() -> java.util.stream.Stream<*Item>", @MethodName = "stream", @TypeMirror = "java.util.stream.Stream<*Item>", @Unchecked = false, @VarargsCall = false]
         |           |  |  +- VariableAccess[@Name = "loads", @TypeMirror = "java.util.List<*Item>"]
         |           |  |  +- ArgumentList[]
         |           |  +- ArgumentList[]
         |           |     +- MethodCall[@Failed = false, @Function = "java.util.stream.Collectors.<T, K> groupingBy(java.util.function.Function<? super *Item, ? extends (*unknown*)>) -> java.util.stream.Collector<*Item, java.lang.Object, java.util.Map<(*unknown*), java.util.List<*Item>>>", @MethodName = "groupingBy", @TypeMirror = "java.util.stream.Collector<*Item, java.lang.Object, java.util.Map<(*unknown*), java.util.List<*Item>>>", @Unchecked = false, @VarargsCall = false]
         |           |        +- TypeExpression[@TypeMirror = "java.util.stream.Collectors"]
         |           |        |  +- ClassType[@TypeMirror = "java.util.stream.Collectors"]
         |           |        +- ArgumentList[]
         |           |           +- MethodReference[@TypeMirror = "java.util.function.Function<*Item, (*unknown*)>"]
         |           |              +- AmbiguousName[@TypeMirror = "(*unknown*)"]
         |           +- ArgumentList[]
         |              +- LambdaExpression[@TypeMirror = "java.util.function.BiConsumer<(*unknown*), java.util.List<*Item>>"]
         |                 +- LambdaParameterList[]
         |                 |  +- LambdaParameter[@TypeMirror = "(*unknown*)"]
         |                 |  |  +- ModifierList[]
         |                 |  |  +- VariableId[@Name = "a", @TypeMirror = "(*unknown*)"]
         |                 |  +- LambdaParameter[@TypeMirror = "java.util.List<*Item>"]
         |                 |     +- ModifierList[]
         |                 |     +- VariableId[@Name = "b", @TypeMirror = "java.util.List<*Item>"]
         |                 +- MethodCall[@Failed = false, @Function = "java.util.List<*SummaryDto.ItemDto>.add(*SummaryDto.ItemDto) -> boolean", @MethodName = "add", @TypeMirror = "boolean", @Unchecked = false, @VarargsCall = false]
         |                    +- VariableAccess[@Name = "items", @TypeMirror = "java.util.List<*SummaryDto.ItemDto>"]
         |                    +- ArgumentList[]
         |                       +- MethodCall[@Failed = false, @Function = "Foo.buildItem(*BigDecimal, java.util.List<*Item>) -> *SummaryDto.ItemDto", @MethodName = "buildItem", @TypeMirror = "*SummaryDto.ItemDto", @Unchecked = false, @VarargsCall = false]
         |                          +- ArgumentList[]
         |                             +- VariableAccess[@Name = "a", @TypeMirror = "(*unknown*)"]
         |                             +- VariableAccess[@Name = "b", @TypeMirror = "java.util.List<*Item>"]
         +- MethodDeclaration[@Name = "buildItem"]
            +- ModifierList[]
            +- ClassType[@TypeMirror = "*SummaryDto.ItemDto"]
            +- FormalParameters[]
            |  +- FormalParameter[@TypeMirror = "*BigDecimal"]
            |  |  +- ModifierList[]
            |  |  +- ClassType[@TypeMirror = "*BigDecimal"]
            |  |  +- VariableId[@Name = "a", @TypeMirror = "*BigDecimal"]
            |  +- FormalParameter[@TypeMirror = "java.util.List<*Item>"]
            |     +- ModifierList[]
            |     +- ClassType[@TypeMirror = "java.util.List<*Item>"]
            |     |  +- TypeArguments[]
            |     |     +- ClassType[@TypeMirror = "*Item"]
            |     +- VariableId[@Name = "b", @TypeMirror = "java.util.List<*Item>"]
            +- Block[]
               +- ReturnStatement[]
                  +- MethodCall[@Failed = true, @Function = "(*unknown*).(*unknown method*)() -> (*unknown*)", @MethodName = "build", @TypeMirror = "(*unknown*)", @Unchecked = false, @VarargsCall = false]
                     +- MethodCall[@Failed = true, @Function = "(*unknown*).(*unknown method*)() -> (*unknown*)", @MethodName = "builder", @TypeMirror = "(*unknown*)", @Unchecked = false, @VarargsCall = false]
                     |  +- AmbiguousName[@TypeMirror = "(*unknown*)"]
                     |  +- ArgumentList[]
                     +- ArgumentList[]
