Search in sources :

Example 6 with DefaultInputComponent

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

the class DefaultComponentTreeTest method test.

@Test
public void test() {
    DefaultInputComponent root = new DefaultInputModule("root");
    DefaultInputComponent mod1 = new DefaultInputModule("mod1");
    DefaultInputComponent mod2 = new DefaultInputModule("mod2");
    DefaultInputComponent mod3 = new DefaultInputModule("mod3");
    DefaultInputComponent mod4 = new DefaultInputModule("mod4");
    tree.index(mod1, root);
    tree.index(mod2, mod1);
    tree.index(mod3, root);
    tree.index(mod4, root);
    assertThat(tree.getChildren(root)).containsOnly(mod1, mod3, mod4);
    assertThat(tree.getChildren(mod4)).isEmpty();
    assertThat(tree.getChildren(mod1)).containsOnly(mod2);
    assertThat(tree.getParent(mod4)).isEqualTo(root);
    assertThat(tree.getParent(mod2)).isEqualTo(mod1);
    assertThat(tree.getParent(mod1)).isEqualTo(root);
    assertThat(tree.getParent(root)).isNull();
}
Also used : DefaultInputModule(org.sonar.api.batch.fs.internal.DefaultInputModule) DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent) Test(org.junit.Test)

Example 7 with DefaultInputComponent

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

the class CpdExecutor method runCpdAnalysis.

@VisibleForTesting
void runCpdAnalysis(ExecutorService executorService, String componentKey, final Collection<Block> fileBlocks, long timeout) {
    DefaultInputComponent component = (DefaultInputComponent) componentStore.getByKey(componentKey);
    if (component == null) {
        LOG.error("Resource not found in component store: {}. Skipping CPD computation for it", componentKey);
        return;
    }
    InputFile inputFile = (InputFile) component;
    LOG.debug("Detection of duplications for {}", inputFile.absolutePath());
    progressReport.message(String.format("%d/%d - current file: %s", count, total, inputFile.absolutePath()));
    List<CloneGroup> duplications;
    Future<List<CloneGroup>> futureResult = executorService.submit(() -> SuffixTreeCloneDetectionAlgorithm.detect(index, fileBlocks));
    try {
        duplications = futureResult.get(timeout, TimeUnit.MILLISECONDS);
    } catch (TimeoutException e) {
        LOG.warn("Timeout during detection of duplications for " + inputFile.absolutePath());
        futureResult.cancel(true);
        return;
    } catch (Exception e) {
        throw new IllegalStateException("Fail during detection of duplication for " + inputFile.absolutePath(), e);
    }
    List<CloneGroup> filtered;
    if (!"java".equalsIgnoreCase(inputFile.language())) {
        Predicate<CloneGroup> minimumTokensPredicate = DuplicationPredicates.numberOfUnitsNotLessThan(getMinimumTokens(inputFile.language()));
        filtered = from(duplications).filter(minimumTokensPredicate).toList();
    } else {
        filtered = duplications;
    }
    saveDuplications(component, filtered);
}
Also used : DefaultInputComponent(org.sonar.api.batch.fs.internal.DefaultInputComponent) List(java.util.List) CloneGroup(org.sonar.duplications.index.CloneGroup) TimeoutException(java.util.concurrent.TimeoutException) InputFile(org.sonar.api.batch.fs.InputFile) TimeoutException(java.util.concurrent.TimeoutException) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 8 with DefaultInputComponent

use of org.sonar.api.batch.fs.internal.DefaultInputComponent 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 DefaultInputComponent

use of org.sonar.api.batch.fs.internal.DefaultInputComponent 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)

Aggregations

DefaultInputComponent (org.sonar.api.batch.fs.internal.DefaultInputComponent)9 InputComponent (org.sonar.api.batch.fs.InputComponent)4 ScannerReport (org.sonar.scanner.protocol.output.ScannerReport)3 InputFile (org.sonar.api.batch.fs.InputFile)2 DefaultInputFile (org.sonar.api.batch.fs.internal.DefaultInputFile)2 DefaultInputModule (org.sonar.api.batch.fs.internal.DefaultInputModule)2 ScannerReportReader (org.sonar.scanner.protocol.output.ScannerReportReader)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 Collection (java.util.Collection)1 HashSet (java.util.HashSet)1 List (java.util.List)1 TimeoutException (java.util.concurrent.TimeoutException)1 Collectors (java.util.stream.Collectors)1 CheckForNull (javax.annotation.CheckForNull)1 StringUtils (org.apache.commons.lang.StringUtils)1 Test (org.junit.Test)1 CoreProperties (org.sonar.api.CoreProperties)1 ProjectDefinition (org.sonar.api.batch.bootstrap.ProjectDefinition)1 InputDir (org.sonar.api.batch.fs.InputDir)1 InputModule (org.sonar.api.batch.fs.InputModule)1