コード例 #1
0
ファイル: DefaultIndex.java プロジェクト: eSh3m4/sonarqube
 Set<Dependency> getDependenciesBetweenProjects() {
   Set<Dependency> result = Sets.newLinkedHashSet();
   for (Dependency dependency : dependencies) {
     if (ResourceUtils.isSet(dependency.getFrom()) || ResourceUtils.isSet(dependency.getTo())) {
       result.add(dependency);
     }
   }
   return result;
 }
コード例 #2
0
  @Override
  public void decorate(Resource resource, DecoratorContext context) {
    if (ResourceUtils.isPersistable(resource) && !ResourceUtils.isUnitTestFile(resource)) {
      Long developmentCost = getDevelopmentCost(context);
      context.saveMeasure(
          new Measure(CoreMetrics.DEVELOPMENT_COST, Long.toString(developmentCost)));

      long debt = getMeasureValue(context, CoreMetrics.TECHNICAL_DEBT);
      double density = computeDensity(debt, developmentCost);
      context.saveMeasure(CoreMetrics.SQALE_DEBT_RATIO, 100.0 * density);

      SqaleRatingGrid ratingGrid = new SqaleRatingGrid(sqaleRatingSettings.getRatingGrid());
      context.saveMeasure(createRatingMeasure(ratingGrid.getRatingForDensity(density)));
    }
  }
コード例 #3
0
ファイル: DefaultIndex.java プロジェクト: eSh3m4/sonarqube
  /** Keep only project stuff */
  public void clear() {
    Iterator<Map.Entry<Resource, Bucket>> it = buckets.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<Resource, Bucket> entry = it.next();
      Resource resource = entry.getKey();
      if (!ResourceUtils.isSet(resource)) {
        entry.getValue().clear();
        it.remove();
      }
    }

    // store dependencies
    for (Dependency dep : dependencies) {
      dependencyPersister.saveDependency(currentProject, dep);
    }

    // Keep only inter module dependencies
    Set<Dependency> projectDependencies = getDependenciesBetweenProjects();
    dependencies.clear();
    incomingDependenciesByResource.clear();
    outgoingDependenciesByResource.clear();
    for (Dependency projectDependency : projectDependencies) {
      projectDependency.setId(null);
      registerDependency(projectDependency);
    }
  }
コード例 #4
0
 @VisibleForTesting
 static boolean shouldPersistMeasure(@Nullable Resource resource, @Nullable Measure measure) {
   if (resource == null || measure == null) {
     return false;
   }
   return measure.getPersistenceMode().useDatabase()
       && !(ResourceUtils.isEntity(resource) && measure.isBestValue())
       && isMeasureNotEmpty(measure);
 }
コード例 #5
0
 private void saveOnRequirement(
     DecoratorContext context, Map<TechnicalDebtRequirement, Double> requirementCosts) {
   for (Map.Entry<TechnicalDebtRequirement, Double> entry : requirementCosts.entrySet()) {
     saveCost(
         context,
         entry.getKey().toCharacteristic(),
         entry.getValue(),
         ResourceUtils.isEntity(context.getResource()));
   }
 }
コード例 #6
0
 /** Keep only project stuff */
 public void clear() {
   Iterator<Map.Entry<Resource, Bucket>> it = buckets.entrySet().iterator();
   while (it.hasNext()) {
     Map.Entry<Resource, Bucket> entry = it.next();
     Resource resource = entry.getKey();
     if (!ResourceUtils.isSet(resource)) {
       entry.getValue().clear();
       it.remove();
     }
   }
 }
コード例 #7
0
 @Override
 public void decorate(Resource resource, DecoratorContext context) {
   if (!ResourceUtils.isPersistable(resource)) {
     return;
   }
   File path = null;
   if (ResourceUtils.isProject(resource)) {
     path = fs.baseDir();
   } else if (resource.getPath() != null) {
     path = new File(fs.baseDir(), resource.getPath());
   }
   ResourceNode resourceNode = new ResourceNode(resource, path, fs.sourceCharset());
   RESOURCE_BY_KEY.put(resource.getEffectiveKey(), resourceNode);
   for (DecoratorContext childContext : context.getChildren()) {
     Resource child = childContext.getResource();
     ResourceNode childNode = RESOURCE_BY_KEY.get(child.getEffectiveKey());
     if (childNode != null) {
       resourceNode.addChild(childNode);
     }
   }
 }
コード例 #8
0
ファイル: DefaultIndex.java プロジェクト: eSh3m4/sonarqube
  private Bucket doIndex(Resource resource, @Nullable Resource parentReference) {
    Bucket bucket = getBucket(resource);
    if (bucket != null) {
      return bucket;
    }

    if (StringUtils.isBlank(resource.getKey())) {
      LOG.warn("Unable to index a resource without key " + resource);
      return null;
    }

    Resource parent = null;
    if (!ResourceUtils.isLibrary(resource)) {
      // a library has no parent
      parent = (Resource) ObjectUtils.defaultIfNull(parentReference, currentProject);
    }

    Bucket parentBucket = getBucket(parent);
    if (parentBucket == null && parent != null) {
      LOG.warn("Resource ignored, parent is not indexed: " + resource);
      return null;
    }

    if (ResourceUtils.isProject(resource)
        || /* For technical projects */ ResourceUtils.isRootProject(resource)) {
      resource.setEffectiveKey(resource.getKey());
    } else {
      resource.setEffectiveKey(ComponentKeys.createEffectiveKey(currentProject, resource));
    }
    bucket = new Bucket(resource).setParent(parentBucket);
    addBucket(resource, bucket);

    Resource parentResource = parentBucket != null ? parentBucket.getResource() : null;
    resourceCache.add(resource, parentResource);

    return bucket;
  }
コード例 #9
0
ファイル: DefaultIndex.java プロジェクト: ratlsun/view_sonar
  private Bucket doIndex(Resource resource, Resource parentReference) {
    Bucket bucket = buckets.get(resource);
    if (bucket != null) {
      return bucket;
    }

    checkLock(resource);

    Resource parent = null;
    if (!ResourceUtils.isLibrary(resource)) {
      // a library has no parent
      parent = (Resource) ObjectUtils.defaultIfNull(parentReference, currentProject);
    }

    Bucket parentBucket = getBucket(parent, true);
    if (parentBucket == null && parent != null) {
      LOG.warn("Resource ignored, parent is not indexed: " + resource);
      return null;
    }

    resource.setEffectiveKey(createUID(currentProject, resource));
    bucket = new Bucket(resource).setParent(parentBucket);
    buckets.put(resource, bucket);

    boolean excluded = checkExclusion(resource, parentBucket);
    if (!excluded) {
      Snapshot snapshot =
          persistence.saveResource(
              currentProject, resource, (parentBucket != null ? parentBucket.getResource() : null));
      if (ResourceUtils.isPersistable(resource)
          && !Qualifiers.LIBRARY.equals(resource.getQualifier())) {
        graph.addComponent(resource, snapshot);
      }
    }

    return bucket;
  }
コード例 #10
0
 /** {@inheritDoc} */
 @SuppressWarnings("rawtypes")
 public void decorate(Resource resource, DecoratorContext context) {
   if (ResourceUtils.isFile(resource) && context.getMeasure(testMetric) == null) {
     if (isExcludedFromCoverage(resource)) {
       return;
     }
     // for LINES_TO_COVER and UNCOVERED_LINES, we use NCLOC and STATEMENTS as an approximation
     Measure ncloc = context.getMeasure(CoreMetrics.NCLOC);
     if (ncloc != null) {
       Measure sts = context.getMeasure(CoreMetrics.STATEMENTS);
       double lines = Math.min(ncloc.getValue(), sts.getValue());
       if (lines > 0d) {
         LOG.debug(
             "Coverage metrics have not been set on '{}': default values will be inserted.",
             resource.getName());
         handleUncoveredResource(context, lines);
       }
     }
   }
 }
コード例 #11
0
 @VisibleForTesting
 void saveCost(
     DecoratorContext context,
     org.sonar.api.qualitymodel.Characteristic characteristic,
     Double value,
     boolean inMemory) {
   // we need the value on projects (root or module) even if value==0 in order to display correctly
   // the SQALE history chart (see SQALE-122)
   // BUT we don't want to save zero-values for non top-characteristics (see SQALE-147)
   if (value > 0.0
       || (ResourceUtils.isProject(context.getResource())
           && characteristic.getDepth() == org.sonar.api.qualitymodel.Characteristic.ROOT_DEPTH)) {
     Measure measure = new Measure(CoreMetrics.TECHNICAL_DEBT);
     measure.setCharacteristic(characteristic);
     measure.setValue(value, DECIMALS_PRECISION);
     if (inMemory) {
       measure.setPersistenceMode(PersistenceMode.MEMORY);
     }
     context.saveMeasure(measure);
   }
 }
コード例 #12
0
ファイル: DefaultIndex.java プロジェクト: ratlsun/view_sonar
  /** Keep only project stuff */
  public void clear() {
    Iterator<Map.Entry<Resource, Bucket>> it = buckets.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<Resource, Bucket> entry = it.next();
      Resource resource = entry.getKey();
      if (!ResourceUtils.isSet(resource)) {
        entry.getValue().clear();
        it.remove();
      }
    }

    Set<Dependency> projectDependencies = getDependenciesBetweenProjects();
    dependencies.clear();
    incomingDependenciesByResource.clear();
    outgoingDependenciesByResource.clear();
    for (Dependency projectDependency : projectDependencies) {
      projectDependency.setId(null);
      registerDependency(projectDependency);
    }

    lock.unlock();
  }
コード例 #13
0
  /** {@inheritDoc} */
  public void decorate(Resource resource, DecoratorContext context) {

    if (ResourceUtils.isProject(resource)) {

      Collection<Measure> childMeasures =
          context.getChildrenMeasures(CodesizeMetrics.CODE_COUNTERS);

      if (!childMeasures.isEmpty()) {
        Measure projectMeasure = context.getMeasure(CodesizeMetrics.CODE_COUNTERS);
        final PropertiesBuilder<String, Integer> counters =
            new PropertiesBuilder<String, Integer>(CodesizeMetrics.CODE_COUNTERS);
        if (projectMeasure != null) {
          Map<String, Integer> map = KeyValueFormat.parseStringInt(projectMeasure.getData());
          counters.addAll(map);
        }

        for (Measure childMeasure : childMeasures) {
          Map<String, Integer> childcounters =
              KeyValueFormat.parseStringInt(childMeasure.getData());
          for (Entry<String, Integer> entry : childcounters.entrySet()) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            if (counters.getProps().containsKey(key)) {
              counters.add(key, value + counters.getProps().get(key));
            } else {
              counters.add(key, value);
            }
          }
        }

        if (projectMeasure != null) {
          projectMeasure.setData(counters.buildData());
        } else {
          context.saveMeasure(counters.build());
        }
      }
    }
  }
コード例 #14
0
 private boolean shouldDecorateResource(Resource resource, DecoratorContext context) {
   return ResourceUtils.isProject(resource)
       && context.getMeasure(CoreMetrics.DEPENDENCY_MATRIX) == null;
 }
コード例 #15
0
 @Override
 public boolean shouldDecorateResource(Resource resource) {
   return !ResourceUtils.isUnitTestClass(resource);
 }
コード例 #16
0
 public void decorate(Resource resource, DecoratorContext context) {
   if (ResourceUtils.isProject(resource)) {
     persistConfiguration();
   }
 }
コード例 #17
0
ファイル: DefaultIndex.java プロジェクト: ratlsun/view_sonar
 private void checkLock(Resource resource) {
   if (lock.isLocked() && !ResourceUtils.isLibrary(resource) && lock.isFailWhenLocked()) {
     throw new SonarException("Index is locked, resource can not be indexed: " + resource);
   }
 }
コード例 #18
0
 public boolean shouldExecuteOnProject(Project project) {
   return profile != null
       && profile.getAlerts() != null
       && profile.getAlerts().size() > 0
       && ResourceUtils.isRootProject(project);
 }
コード例 #19
0
 private boolean shouldDecorateResource(Resource resource) {
   return ResourceUtils.isRootProject(resource);
 }
コード例 #20
0
 protected boolean shouldDecorate(final Resource resource, final DecoratorContext context) {
   return context.getMeasure(getTargetMetric()) == null
       && !ResourceUtils.isUnitTestClass(resource);
 }