code: private ResolvedReferenceType toReferenceType(ClassOrInterfaceType classOrInterfaceType) {
          SymbolReference<? extends ResolvedTypeDeclaration> ref = null;
          if (classOrInterfaceType.toString().indexOf('.') > -1) {
              ref = typeSolver.tryToSolveType(classOrInterfaceType.toString());
          }
          if (ref == null || !ref.isSolved()) {
              ref = solveType(classOrInterfaceType.toString(), typeSolver);
          }
          if (!ref.isSolved()) {
              ref = solveType(classOrInterfaceType.getName().getId(), typeSolver);
          }
          if (!ref.isSolved()) {
              throw new UnsolvedSymbolException(classOrInterfaceType.getName().getId());
          }
          if (!classOrInterfaceType.getTypeArguments().isPresent()) {
              return new ReferenceTypeImpl(ref.getCorrespondingDeclaration().asReferenceType(), typeSolver);
          }
          List<ResolvedType> superClassTypeParameters = classOrInterfaceType.getTypeArguments().get()
                  .stream().map(ta -> new LazyType(v -> JavaParserFacade.get(typeSolver).convert(ta, ta)))
                  .collect(Collectors.toList());
          return new ReferenceTypeImpl(ref.getCorrespondingDeclaration().asReferenceType(), superClassTypeParameters, typeSolver);
      }
docs: /