@Override public void addViolation(Violation violation, boolean force) { Resource resource = violation.getResource(); if (resource == null) { violation.setResource(currentProject); } else if (!Scopes.isHigherThanOrEquals(resource, Scopes.FILE)) { throw new IllegalArgumentException( "Violations are only supported on files, directories and project"); } Rule rule = violation.getRule(); if (rule == null) { LOG.warn("Rule is null. Ignoring violation {}", violation); return; } Bucket bucket = getBucket(resource); if (bucket == null) { LOG.warn("Resource is not indexed. Ignoring violation {}", violation); return; } // keep a limitation (bug?) of deprecated violations api : severity is always // set by sonar. The severity set by plugins is overridden. // This is not the case with issue api. violation.setSeverity(null); violation.setResource(bucket.getResource()); moduleIssues.initAndAddViolation(violation); }
/** {@inheritDoc} */ @Override public List<Violation> getViolations(ViolationQuery violationQuery) { Resource resource = violationQuery.getResource(); if (resource == null) { throw new IllegalArgumentException( "A resource must be set on the ViolationQuery in order to search for violations."); } if (!Scopes.isHigherThanOrEquals(resource, Scopes.FILE)) { return Collections.emptyList(); } Bucket bucket = buckets.get(resource); if (bucket == null) { return Collections.emptyList(); } List<Violation> violations = deprecatedViolations.get(bucket.getResource().getEffectiveKey()); if (violationQuery.getSwitchMode() == ViolationQuery.SwitchMode.BOTH) { return violations; } List<Violation> filteredViolations = Lists.newArrayList(); for (Violation violation : violations) { if (isFiltered(violation, violationQuery.getSwitchMode())) { filteredViolations.add(violation); } } return filteredViolations; }
@Override public <R extends Resource> R getResource(R reference) { Bucket bucket = buckets.get(reference); if (bucket != null) { return (R) bucket.getResource(); } return null; }
@Override @CheckForNull public <R extends Resource> R getResource(@Nullable R reference) { Bucket bucket = getBucket(reference); if (bucket != null) { return (R) bucket.getResource(); } return null; }
@Override public List<Resource> getChildren(Resource resource) { List<Resource> children = Lists.newLinkedList(); Bucket bucket = getBucket(resource); if (bucket != null) { for (Bucket childBucket : bucket.getChildren()) { children.add(childBucket.getResource()); } } return children; }
public List<Resource> getChildren(Resource resource, boolean acceptExcluded) { List<Resource> children = Lists.newLinkedList(); Bucket bucket = getBucket(resource, acceptExcluded); if (bucket != null) { for (Bucket childBucket : bucket.getChildren()) { if (acceptExcluded || !childBucket.isExcluded()) { children.add(childBucket.getResource()); } } } return children; }
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; }
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; }
/** Does nothing if the resource is already registered. */ @Override public Resource addResource(Resource resource) { Bucket bucket = doIndex(resource); return bucket != null ? bucket.getResource() : null; }