code: @Override
      public synchronized Map<URI, MatchResult> listMatchesWithinRange(URI origin, MatchType minType, MatchType maxType) {
  
          if (origin == null || minType == null | maxType == null) {
              return ImmutableMap.of();
          }
  
          Function<MatchResult, MatchType> getTypeFunction = new Function<MatchResult, MatchType>() {
              @Override
              public MatchType apply(@Nullable MatchResult matchResult) {
                  if (matchResult != null) {
                      return matchResult.getMatchType();
                  }
                  return null;
              }
          };
  
          // Get all the matches
          Map<URI, MatchResult> matches = this.indexedMatches.get(origin);
          // Return an immutable map out of the filtered view. Drop copyOf to obtain a live view
          if (matches != null) {
              return ImmutableMap.copyOf(Maps.filterValues(matches, MatchResultPredicates.withinRange(minType, BoundType.CLOSED, maxType, BoundType.CLOSED)));
          } else {
              return ImmutableMap.of();
          }
  
      }
docs: Obtain all the matching resources with the URI of {@code origin} within the range of MatchTypes provided, both inclusive.
  
  @param origin  URI to match
  @param minType the minimum MatchType we want to obtain
  @param maxType the maximum MatchType we want to obtain
  @return a Map containing indexed by the URI of the matching resource and containing the particular {@code MatchResult}. If no
  result is found the Map should be empty not null.