  Line 55) name.startsWith("java.") ==> java.lang.String.startsWith(java.lang.String)
  Line 55) name.startsWith("javax.") ==> java.lang.String.startsWith(java.lang.String)
  Line 57) ReflectionTypeSolver.class.getClassLoader() ==> java.lang.Class.getClassLoader()
  Line 65) classLoader.loadClass(name) ==> java.lang.ClassLoader.loadClass(java.lang.String)
  Line 66) SymbolReference.solved(ReflectionFactory.typeDeclarationFor(clazz, getRoot())) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 66) ReflectionFactory.typeDeclarationFor(clazz, getRoot()) ==> com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory.typeDeclarationFor(java.lang.Class<?>, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 66) getRoot() ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.getRoot()
  Line 69) name.lastIndexOf('.') ==> java.lang.String.lastIndexOf(int)
  Line 71) SymbolReference.unsolved(ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 73) name.substring(0, lastDot) ==> java.lang.String.substring(int, int)
  Line 74) name.substring(lastDot + 1) ==> java.lang.String.substring(int)
  Line 75) tryToSolveType(parentName) ==> com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver.tryToSolveType(java.lang.String)
  Line 76) parent.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 77) parent.getCorrespondingDeclaration().internalTypes().stream().filter(it -> it.getName().equals(childName)).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 77) parent.getCorrespondingDeclaration().internalTypes().stream().filter(it -> it.getName().equals(childName)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 77) parent.getCorrespondingDeclaration().internalTypes().stream() ==> java.util.Collection.stream()
  Line 77) parent.getCorrespondingDeclaration().internalTypes() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.internalTypes()
  Line 77) parent.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 78) it.getName().equals(childName) ==> java.lang.String.equals(java.lang.Object)
  Line 78) it.getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 79) innerClass.isPresent() ==> java.util.Optional.isPresent()
  Line 80) SymbolReference.solved(innerClass.get()) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 80) innerClass.get() ==> java.util.Optional.get()
  Line 82) SymbolReference.unsolved(ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 85) SymbolReference.unsolved(ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
  Line 90) SymbolReference.unsolved(ReferenceTypeDeclaration.class) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.unsolved(java.lang.Class<S2>)
