public FindUsagesResult findUsages()

in server/src/jetbrains/buildServer/sharedResources/server/analysis/ResourceUsageAnalyzer.java [40:74]


  public FindUsagesResult findUsages(@NotNull final SProject project,
                                     @NotNull final Resource resource) { // <- here we look at a single resource.
    // start at project, go down the tree, look for overrides

    final Map<SBuildType, List<Lock>> buildTypes = new HashMap<>();
    final Map<BuildTypeTemplate, List<Lock>> templates = new HashMap<>();

    final Map<String, Map<String, Resource>> treeResources = new HashMap<>();
    final List<BuildTypeSettings> lookupScope = getLookupScope(project);
    for (BuildTypeSettings btSettings: lookupScope) {
      Map<String, Resource> currentBtResources = treeResources.computeIfAbsent(btSettings.getProject().getProjectId(), myResources::getResourcesMap);
      // check that resource available for buildType
      if (currentBtResources.containsValue(resource)) {
        // if it is -> search for usages
        final Collection<SharedResourcesFeature> features = myFeatures.searchForFeatures(btSettings);
        for (SharedResourcesFeature feature: features) {
          // for each feature
          //  get locked resources
          final Map<String, Lock> lockedResources = feature.getLockedResources();
          //  collect usages of current resource
          if (!lockedResources.isEmpty() && lockedResources.containsKey(resource.getName())) { // <- for now assume single feature has _single_ lock on resource
            List<Lock> storedUsages;
            if (btSettings instanceof SBuildType) {
              storedUsages = buildTypes.computeIfAbsent((SBuildType)btSettings, k -> new ArrayList<>());
            } else {
              storedUsages = templates.computeIfAbsent((BuildTypeTemplate)btSettings, k-> new ArrayList<>());
            }
            storedUsages.add(lockedResources.get(resource.getName()));
          }
        }
      }
    }

    return new FindUsagesResult(buildTypes, templates);
  }