  Line 41) Arrays.stream(ctClass.getDeclaredMethods()).map(m -> new JavassistMethodDeclaration(m, typeSolver)).collect(Collectors.toSet()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 41) Arrays.stream(ctClass.getDeclaredMethods()).map(m -> new JavassistMethodDeclaration(m, typeSolver)) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 41) Arrays.stream(ctClass.getDeclaredMethods()) ==> java.util.Arrays.stream(T[])
  Line 41) ctClass.getDeclaredMethods() ==> javassist.CtClass.getDeclaredMethods()
  Line 42) Collectors.toSet() ==> java.util.stream.Collectors.toSet()
  Line 46) Arrays.stream(ctClass.getConstructors()).map(m -> new JavassistConstructorDeclaration(m, typeSolver)).collect(Collectors.toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 46) Arrays.stream(ctClass.getConstructors()).map(m -> new JavassistConstructorDeclaration(m, typeSolver)) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 46) Arrays.stream(ctClass.getConstructors()) ==> java.util.Arrays.stream(T[])
  Line 46) ctClass.getConstructors() ==> javassist.CtClass.getConstructors()
  Line 47) Collectors.toList() ==> java.util.stream.Collectors.toList()
  Line 52) collectDeclaredFields(ctClass, fieldDecls) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistTypeDeclarationAdapter.collectDeclaredFields(javassist.CtClass, java.util.List<com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration>)
  Line 58) Arrays.stream(ctClass.getDeclaredFields()).forEach(f -> fieldDecls.add(new JavassistFieldDeclaration(f, typeSolver))) ==> java.util.stream.Stream.forEach(java.util.function.Consumer<? super T>)
  Line 58) Arrays.stream(ctClass.getDeclaredFields()) ==> java.util.Arrays.stream(T[])
  Line 58) ctClass.getDeclaredFields() ==> javassist.CtClass.getDeclaredFields()
  Line 59) fieldDecls.add(new JavassistFieldDeclaration(f, typeSolver)) ==> java.util.List.add(E)
  Line 61) collectDeclaredFields(ctClass.getSuperclass(), fieldDecls) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistTypeDeclarationAdapter.collectDeclaredFields(javassist.CtClass, java.util.List<com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration>)
  Line 61) ctClass.getSuperclass() ==> javassist.CtClass.getSuperclass()
  Line 69) ctClass.getGenericSignature() ==> javassist.CtClass.getGenericSignature()
  Line 70) Collections.emptyList() ==> java.util.Collections.emptyList()
  Line 74) SignatureAttribute.toClassSignature(ctClass.getGenericSignature()) ==> javassist.bytecode.SignatureAttribute.toClassSignature(java.lang.String)
  Line 74) ctClass.getGenericSignature() ==> javassist.CtClass.getGenericSignature()
  Line 75) Arrays.<SignatureAttribute.TypeParameter>stream(classSignature.getParameters()).map((tp) -> new JavassistTypeParameter(tp, JavassistFactory.toTypeDeclaration(ctClass, typeSolver), typeSolver)).collect(Collectors.toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 75) Arrays.<SignatureAttribute.TypeParameter>stream(classSignature.getParameters()).map((tp) -> new JavassistTypeParameter(tp, JavassistFactory.toTypeDeclaration(ctClass, typeSolver), typeSolver)) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 75) Arrays.<SignatureAttribute.TypeParameter>stream(classSignature.getParameters()) ==> java.util.Arrays.stream(T[])
  Line 75) classSignature.getParameters() ==> javassist.bytecode.SignatureAttribute.ClassSignature.getParameters()
  Line 76) JavassistFactory.toTypeDeclaration(ctClass, typeSolver) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistFactory.toTypeDeclaration(javassist.CtClass, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 77) Collectors.toList() ==> java.util.stream.Collectors.toList()
  Line 86) ctClass.getDeclaringClass() ==> javassist.CtClass.getDeclaringClass()
  Line 87) Optional.empty() ==> java.util.Optional.empty()
  Line 88) Optional.of(JavassistFactory.toTypeDeclaration(ctClass.getDeclaringClass(), typeSolver)) ==> java.util.Optional.of(T)
  Line 88) JavassistFactory.toTypeDeclaration(ctClass.getDeclaringClass(), typeSolver) ==> com.github.javaparser.symbolsolver.javassistmodel.JavassistFactory.toTypeDeclaration(javassist.CtClass, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 88) ctClass.getDeclaringClass() ==> javassist.CtClass.getDeclaringClass()
