Search in sources :

Example 6 with InputComponent

use of org.sonar.api.batch.fs.InputComponent in project sonarqube by SonarSource.

the class DefaultIndex method getParent.

/**
   * @param key Effective key, without branch
   */
@CheckForNull
public Resource getParent(String key) {
    InputComponent component = componentStore.getByKey(key);
    if (component == null) {
        return null;
    }
    InputComponent parent = tree.getParent(component);
    if (parent == null) {
        return null;
    }
    return toResource(parent);
}
Also used : InputComponent(org.sonar.api.batch.fs.InputComponent) CheckForNull(javax.annotation.CheckForNull)

Example 7 with InputComponent

use of org.sonar.api.batch.fs.InputComponent in project sonarqube by SonarSource.

the class DefaultIndex method getChildren.

/**
   * @param key Effective key, without branch
   */
public Collection<Resource> getChildren(String key) {
    InputComponent component = componentStore.getByKey(key);
    Collection<InputComponent> children = tree.getChildren(component);
    return children.stream().map(this::toResource).collect(Collectors.toList());
}
Also used : InputComponent(org.sonar.api.batch.fs.InputComponent)

Example 8 with InputComponent

use of org.sonar.api.batch.fs.InputComponent in project sonarqube by SonarSource.

the class MeasuresPublisher method publish.

@Override
public void publish(ScannerReportWriter writer) {
    final ScannerReport.Measure.Builder builder = ScannerReport.Measure.newBuilder();
    for (final InputComponent c : componentStore.all()) {
        DefaultInputComponent component = (DefaultInputComponent) c;
        if (component.isFile()) {
            DefaultInputFile file = (DefaultInputFile) component;
            // Recompute all coverage measures from line data to take into account the possible merge of several reports
            updateCoverageFromLineData(file);
            // Recompute test execution measures from MutableTestPlan to take into account the possible merge of several reports
            updateTestExecutionFromTestPlan(file);
        }
        Iterable<DefaultMeasure<?>> scannerMeasures = measureCache.byComponentKey(component.key());
        if (scannerMeasures.iterator().hasNext()) {
            writer.writeComponentMeasures(component.batchId(), StreamSupport.stream(scannerMeasures.spliterator(), false).map(input -> {
                if (input.value() == null) {
                    throw new IllegalArgumentException(String.format("Measure on metric '%s' and component '%s' has no value, but it's not allowed", input.metric().key(), component.key()));
                }
                builder.clear();
                builder.setMetricKey(input.metric().key());
                setValueAccordingToType(builder, input);
                return builder.build();
            }).collect(Collectors.toList()));
        }
    }
}
Also used : DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent) InputComponent(org.sonar.api.batch.fs.InputComponent) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) DefaultMeasure(org.sonar.api.batch.sensor.measure.internal.DefaultMeasure) DefaultMeasure(org.sonar.api.batch.sensor.measure.internal.DefaultMeasure) DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent)

Example 9 with InputComponent

use of org.sonar.api.batch.fs.InputComponent in project sonarqube by SonarSource.

the class ComponentsPublisher method recursiveWriteComponent.

/**
   * Writes the tree of components recursively, deep-first. 
   * @return true if component was written (not skipped)
   */
private boolean recursiveWriteComponent(DefaultInputComponent component) {
    Collection<InputComponent> children = componentTree.getChildren(component).stream().filter(c -> recursiveWriteComponent((DefaultInputComponent) c)).collect(Collectors.toList());
    if (shouldSkipComponent(component, children)) {
        return false;
    }
    ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder();
    // non-null fields
    builder.setRef(component.batchId());
    builder.setType(getType(component));
    // Don't set key on directories and files to save space since it can be deduced from path
    if (component instanceof InputModule) {
        DefaultInputModule inputModule = (DefaultInputModule) component;
        // Here we want key without branch
        builder.setKey(inputModule.key());
        // protocol buffers does not accept null values
        String name = getName(inputModule);
        if (name != null) {
            builder.setName(name);
        }
        String description = getDescription(inputModule);
        if (description != null) {
            builder.setDescription(description);
        }
        writeVersion(inputModule, builder);
    }
    if (component.isFile()) {
        DefaultInputFile file = (DefaultInputFile) component;
        builder.setIsTest(file.type() == InputFile.Type.TEST);
        builder.setLines(file.lines());
        String lang = getLanguageKey(file);
        if (lang != null) {
            builder.setLanguage(lang);
        }
    }
    String path = getPath(component);
    if (path != null) {
        builder.setPath(path);
    }
    for (InputComponent child : children) {
        builder.addChildRef(((DefaultInputComponent) child).batchId());
    }
    writeLinks(component, builder);
    writer.writeComponent(builder.build());
    return true;
}
Also used : DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent) InputFile(org.sonar.api.batch.fs.InputFile) StringUtils(org.apache.commons.lang.StringUtils) InputComponent(org.sonar.api.batch.fs.InputComponent) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) CloseableIterator(org.sonar.core.util.CloseableIterator) ScannerReportWriter(org.sonar.scanner.protocol.output.ScannerReportWriter) Collection(java.util.Collection) CoreProperties(org.sonar.api.CoreProperties) DefaultInputModule(org.sonar.api.batch.fs.internal.DefaultInputModule) ScannerReport(org.sonar.scanner.protocol.output.ScannerReport) InputPath(org.sonar.api.batch.fs.InputPath) Collectors(java.util.stream.Collectors) ComponentLinkType(org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType) InputDir(org.sonar.api.batch.fs.InputDir) ScannerReportReader(org.sonar.scanner.protocol.output.ScannerReportReader) ComponentType(org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType) ComponentLink(org.sonar.scanner.protocol.output.ScannerReport.ComponentLink) Issue(org.sonar.scanner.protocol.output.ScannerReport.Issue) InputModule(org.sonar.api.batch.fs.InputModule) InputModuleHierarchy(org.sonar.api.batch.fs.internal.InputModuleHierarchy) CheckForNull(javax.annotation.CheckForNull) ProjectDefinition(org.sonar.api.batch.bootstrap.ProjectDefinition) InputComponentTree(org.sonar.api.batch.fs.internal.InputComponentTree) DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent) InputComponent(org.sonar.api.batch.fs.InputComponent) DefaultInputModule(org.sonar.api.batch.fs.internal.DefaultInputModule) InputModule(org.sonar.api.batch.fs.InputModule) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) DefaultInputModule(org.sonar.api.batch.fs.internal.DefaultInputModule) DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent) InputComponent(org.sonar.api.batch.fs.InputComponent)

Example 10 with InputComponent

use of org.sonar.api.batch.fs.InputComponent in project sonarqube by SonarSource.

the class IssuesReportBuilder method processIssues.

private void processIssues(IssuesReport issuesReport, Iterable<TrackedIssue> issues) {
    for (TrackedIssue issue : issues) {
        Rule rule = findRule(issue);
        RulePriority severity = RulePriority.valueOf(issue.severity());
        InputComponent resource = inputComponentStore.getByKey(issue.componentKey());
        if (!validate(issue, rule, resource)) {
            continue;
        }
        if (issue.resolution() != null) {
            issuesReport.addResolvedIssueOnResource(resource, rule, severity);
        } else {
            issuesReport.addIssueOnResource(resource, issue, rule, severity);
        }
    }
}
Also used : TrackedIssue(org.sonar.scanner.issue.tracking.TrackedIssue) InputComponent(org.sonar.api.batch.fs.InputComponent) Rule(org.sonar.api.batch.rule.Rule) RulePriority(org.sonar.api.rules.RulePriority)

Aggregations

InputComponent (org.sonar.api.batch.fs.InputComponent)15 DefaultInputComponent (org.sonar.api.batch.fs.internal.DefaultInputComponent)6 DefaultInputFile (org.sonar.api.batch.fs.internal.DefaultInputFile)5 DefaultInputModule (org.sonar.api.batch.fs.internal.DefaultInputModule)4 InputFile (org.sonar.api.batch.fs.InputFile)3 DefaultMeasure (org.sonar.api.batch.sensor.measure.internal.DefaultMeasure)3 ScannerReport (org.sonar.scanner.protocol.output.ScannerReport)3 HashSet (java.util.HashSet)2 Collectors (java.util.stream.Collectors)2 CheckForNull (javax.annotation.CheckForNull)2 InputDir (org.sonar.api.batch.fs.InputDir)2 InputPath (org.sonar.api.batch.fs.InputPath)2 TrackedIssue (org.sonar.scanner.issue.tracking.TrackedIssue)2 Serializable (java.io.Serializable)1 Math.max (java.lang.Math.max)1 Path (java.nio.file.Path)1 Collection (java.util.Collection)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1