code: private Set<String> determineReturnTypes(final MethodResult result) {
          final List<Instruction> visitedInstructions = interpretRelevantInstructions(result.getInstructions());
  
          // find project defined methods in invoke occurrences
          final Set<ProjectMethod> projectMethods = findProjectMethods(visitedInstructions);
  
          // add project methods to global method pool
          projectMethods.forEach(MethodPool.getInstance()::addProjectMethod);
  
          final Element returnedElement = simulator.simulate(visitedInstructions);
          if (returnedElement == null) {
              // happens for abstract methods or if there is no return
              return singleton(result.getOriginalMethodSignature().getReturnType());
          }
  
          return returnedElement.getTypes();
      }
docs: Determines the possible return types of the sub-resource-locator by analyzing the bytecode.
  This will analyze the concrete returned types (which then are further analyzed).