  Line 37) Preconditions.checkArgument(node.getAnonymousClassBody().isPresent(), "An anonymous class must have a body") ==> com.google.common.base.Preconditions.checkArgument(boolean, java.lang.Object)
  Line 37) node.getAnonymousClassBody().isPresent() ==> java.util.Optional.isPresent()
  Line 37) node.getAnonymousClassBody() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getAnonymousClassBody()
  Line 47) myDeclaration.getDeclaredMethods().stream().filter(m -> m.getName().equals(name) && (!staticOnly || m.isStatic())).collect(Collectors.toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 47) myDeclaration.getDeclaredMethods().stream().filter(m -> m.getName().equals(name) && (!staticOnly || m.isStatic())) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 47) myDeclaration.getDeclaredMethods().stream() ==> java.util.Collection.stream()
  Line 47) myDeclaration.getDeclaredMethods() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration.getDeclaredMethods()
  Line 50) m.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 50) m.getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 50) m.isStatic() ==> com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration.isStatic()
  Line 51) Collectors.toList() ==> java.util.stream.Collectors.toList()
  Line 53) Object.class.getCanonicalName().equals(myDeclaration.getQualifiedName()) ==> java.lang.String.equals(java.lang.Object)
  Line 53) Object.class.getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 53) myDeclaration.getQualifiedName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration.getQualifiedName()
  Line 54) myDeclaration.getAncestors() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration.getAncestors()
  Line 56) MethodResolutionLogic.solveMethodInType(ancestor.getTypeDeclaration(), name, argumentsTypes, staticOnly, typeSolver) ==> com.github.javaparser.symbolsolver.resolution.MethodResolutionLogic.solveMethodInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 56) ancestor.getTypeDeclaration() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getTypeDeclaration()
  Line 64) res.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 65) candidateMethods.add(res.getCorrespondingDeclaration()) ==> java.util.List.add(E)
  Line 65) res.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 72) candidateMethods.isEmpty() ==> java.util.List.isEmpty()
  Line 74) getParent().solveMethod(name, argumentsTypes, staticOnly, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveMethod(java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 74) getParent() ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.getParent()
  Line 75) parentSolution.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 76) candidateMethods.add(parentSolution.getCorrespondingDeclaration()) ==> java.util.List.add(E)
  Line 76) parentSolution.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 81) candidateMethods.isEmpty() ==> java.util.List.isEmpty()
  Line 81) myDeclaration.getSuperTypeDeclaration().isInterface() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.isInterface()
  Line 81) myDeclaration.getSuperTypeDeclaration() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration.getSuperTypeDeclaration()
  Line 83) MethodResolutionLogic.solveMethodInType(new ReflectionClassDeclaration(Object.class, typeSolver), name, argumentsTypes, false, typeSolver) ==> com.github.javaparser.symbolsolver.resolution.MethodResolutionLogic.solveMethodInType(com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration, java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 89) res.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 90) candidateMethods.add(res.getCorrespondingDeclaration()) ==> java.util.List.add(E)
  Line 90) res.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 94) MethodResolutionLogic.findMostApplicable(candidateMethods, name, argumentsTypes, typeSolver) ==> com.github.javaparser.symbolsolver.resolution.MethodResolutionLogic.findMostApplicable(java.util.List<com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration>, java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 103) myDeclaration.findMembersOfKind(com.github.javaparser.ast.body.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration.findMembersOfKind(java.lang.Class<T>)
  Line 107) typeDeclarations.stream().filter(internalType -> internalType.getName().getId().equals(name)).findFirst().map(internalType -> SymbolReference.solved(JavaParserFacade.get(typeSolver).getTypeDeclaration(internalType))) ==> java.util.Optional.map(java.util.function.Function<? super T, ? extends U>)
  Line 107) typeDeclarations.stream().filter(internalType -> internalType.getName().getId().equals(name)).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 107) typeDeclarations.stream().filter(internalType -> internalType.getName().getId().equals(name)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 107) typeDeclarations.stream() ==> java.util.Collection.stream()
  Line 109) internalType.getName().getId().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 109) internalType.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 109) internalType.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 112) SymbolReference.solved(JavaParserFacade.get(typeSolver).getTypeDeclaration(internalType)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 113) JavaParserFacade.get(typeSolver).getTypeDeclaration(internalType) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 113) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 115) exactMatch.isPresent() ==> java.util.Optional.isPresent()
  Line 116) exactMatch.get() ==> java.util.Optional.get()
  Line 120) typeDeclarations.stream().filter(internalType -> name.startsWith(String.format("%s.", internalType.getName()))).findFirst().map(internalType -> JavaParserFactory.getContext(internalType, typeSolver).solveType(name.substring(internalType.getName().getId().length() + 1), typeSolver)) ==> java.util.Optional.map(java.util.function.Function<? super T, ? extends U>)
  Line 120) typeDeclarations.stream().filter(internalType -> name.startsWith(String.format("%s.", internalType.getName()))).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 120) typeDeclarations.stream().filter(internalType -> name.startsWith(String.format("%s.", internalType.getName()))) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 120) typeDeclarations.stream() ==> java.util.Collection.stream()
  Line 122) name.startsWith(String.format("%s.", internalType.getName())) ==> java.lang.String.startsWith(java.lang.String)
  Line 122) String.format("%s.", internalType.getName()) ==> java.lang.String.format(java.lang.String, java.lang.Object...)
  Line 122) internalType.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 125) JavaParserFactory.getContext(internalType, typeSolver).solveType(name.substring(internalType.getName().getId().length() + 1), typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 125) JavaParserFactory.getContext(internalType, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 127) name.substring(internalType.getName().getId().length() + 1) ==> java.lang.String.substring(int)
  Line 127) internalType.getName().getId().length() ==> java.lang.String.length()
  Line 127) internalType.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 127) internalType.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 130) recursiveMatch.isPresent() ==> java.util.Optional.isPresent()
  Line 131) recursiveMatch.get() ==> java.util.Optional.get()
  Line 135) wrappedNode.getTypeArguments().map(nodes -> ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>())).orElse(new NodeList<>()).stream().filter(type -> type.toString().equals(name)).findFirst().map(matchingType -> SymbolReference.solved(new JavaParserTypeParameter(new TypeParameter(matchingType.toString()), typeSolver))) ==> ERROR
  Line 135) wrappedNode.getTypeArguments().map(nodes -> ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>())).orElse(new NodeList<>()).stream().filter(type -> type.toString().equals(name)).findFirst() ==> ERROR
  Line 135) wrappedNode.getTypeArguments().map(nodes -> ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>())).orElse(new NodeList<>()).stream().filter(type -> type.toString().equals(name)) ==> ERROR
  Line 135) wrappedNode.getTypeArguments().map(nodes -> ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>())).orElse(new NodeList<>()).stream() ==> java.util.Collection.stream()
  Line 135) wrappedNode.getTypeArguments().map(nodes -> ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>())).orElse(new NodeList<>()) ==> java.util.Optional.orElse(T)
  Line 135) wrappedNode.getTypeArguments().map(nodes -> ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>())) ==> java.util.Optional.map(java.util.function.Function<? super T, ? extends U>)
  Line 135) wrappedNode.getTypeArguments() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getTypeArguments()
  Line 138) ((NodeWithTypeArguments<?>) nodes).getTypeArguments().orElse(new NodeList<>()) ==> java.util.Optional.orElse(T)
  Line 138) ((NodeWithTypeArguments<?>) nodes).getTypeArguments() ==> com.github.javaparser.ast.nodeTypes.NodeWithTypeArguments.getTypeArguments()
  Line 142) type.toString().equals(name) ==> ERROR
  Line 142) type.toString() ==> ERROR
  Line 145) SymbolReference.solved(new JavaParserTypeParameter(new TypeParameter(matchingType.toString()), typeSolver)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 146) matchingType.toString() ==> ERROR
  Line 149) typeArgumentsMatch.isPresent() ==> java.util.Optional.isPresent()
  Line 150) typeArgumentsMatch.get() ==> java.util.Optional.get()
  Line 154) myDeclaration.getAncestors() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration.getAncestors()
  Line 156) ancestor.getTypeDeclaration().getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 156) ancestor.getTypeDeclaration().getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 156) ancestor.getTypeDeclaration() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getTypeDeclaration()
  Line 157) SymbolReference.solved(ancestor.getTypeDeclaration()) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 157) ancestor.getTypeDeclaration() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getTypeDeclaration()
  Line 161) ancestor.getTypeDeclaration().internalTypes() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.internalTypes()
  Line 161) ancestor.getTypeDeclaration() ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceType.getTypeDeclaration()
  Line 162) internalTypeDeclaration.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 162) internalTypeDeclaration.getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 163) SymbolReference.solved(internalTypeDeclaration) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 171) getParent().solveType(name, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 171) getParent() ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.getParent()
  Line 177) Preconditions.checkArgument(typeSolver != null) ==> com.google.common.base.Preconditions.checkArgument(boolean)
  Line 179) myDeclaration.hasVisibleField(name) ==> com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.hasVisibleField(java.lang.String)
  Line 180) SymbolReference.solved(myDeclaration.getVisibleField(name)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 180) myDeclaration.getVisibleField(name) ==> com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.getVisibleField(java.lang.String)
  Line 183) getParent().solveSymbol(name, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveSymbol(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 183) getParent() ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.getParent()
