Browse Source

Fix some quality flaws

tags/6.0-RC1
Julien HENRY 8 years ago
parent
commit
31f83fbcab
20 changed files with 45 additions and 75 deletions
  1. 2
    2
      sonar-plugin-api/src/main/java/org/sonar/api/SonarRuntime.java
  2. 1
    0
      sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java
  3. 0
    2
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java
  4. 1
    0
      sonar-scanner-engine/src/main/java/org/sonar/batch/bootstrapper/LogOutput.java
  5. 8
    9
      sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java
  6. 1
    0
      sonar-scanner-engine/src/main/java/org/sonar/scanner/events/BatchStepHandler.java
  7. 0
    8
      sonar-scanner-engine/src/main/java/org/sonar/scanner/index/DefaultIndex.java
  8. 2
    3
      sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java
  9. 2
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/ScanTaskObserver.java
  10. 6
    4
      sonar-scanner-engine/src/main/java/org/sonar/scanner/phases/AbstractPhaseExecutor.java
  11. 1
    0
      sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisherStep.java
  12. 0
    5
      sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RuleFinderCompatibility.java
  13. 1
    7
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java
  14. 6
    6
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/ConsoleReport.java
  15. 4
    6
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/IssuesReport.java
  16. 1
    2
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/IssuesReportBuilder.java
  17. 1
    1
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/ReportSummary.java
  18. 1
    0
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/Reporter.java
  19. 1
    11
      sonar-scanner-engine/src/test/java/org/sonar/scanner/index/DefaultIndexTest.java
  20. 6
    8
      sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java

+ 2
- 2
sonar-plugin-api/src/main/java/org/sonar/api/SonarRuntime.java View File

@@ -22,7 +22,7 @@ package org.sonar.api;
import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import org.sonar.api.batch.BatchSide;
import org.sonar.api.batch.ScannerSide;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.server.ServerSide;
@@ -121,7 +121,7 @@ import static java.util.Objects.requireNonNull;
*
* @since 6.0
*/
@BatchSide
@ScannerSide
@ServerSide
@ComputeEngineSide
@SonarLintSide

+ 1
- 0
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java View File

@@ -120,6 +120,7 @@ public class DefaultInputFile extends DefaultInputComponent implements InputFile
return moduleKey;
}

@Override
public Charset charset() {
return charset;
}

+ 0
- 2
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlighting.java View File

@@ -79,8 +79,6 @@ public class DefaultHighlighting extends DefaultStorable implements NewHighlight
checkInputFileNotNull();
TextRange newRange;
try {
// TODO remove when SONAR-7664 is implemented
Preconditions.checkArgument(startOffset < endOffset, "start offset should be strictly before end offset");
newRange = inputFile.newRange(startOffset, endOffset);
} catch (Exception e) {
throw new IllegalArgumentException("Unable to highlight file " + inputFile, e);

+ 1
- 0
sonar-scanner-engine/src/main/java/org/sonar/batch/bootstrapper/LogOutput.java View File

@@ -23,6 +23,7 @@ package org.sonar.batch.bootstrapper;
* Allow to redirect batch logs to a custom output. By defaults logs are written to System.out
* @since 5.2
*/
@FunctionalInterface
public interface LogOutput {

void log(String formattedMessage, Level level);

+ 8
- 9
sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java View File

@@ -22,6 +22,14 @@ package org.sonar.scanner.cpd;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.config.Settings;
import org.sonar.api.utils.log.Logger;
@@ -39,15 +47,6 @@ import org.sonar.scanner.protocol.output.ScannerReport.Duplicate;
import org.sonar.scanner.protocol.output.ScannerReport.Duplication;
import org.sonar.scanner.report.ReportPublisher;
import org.sonar.scanner.util.ProgressReport;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import static com.google.common.collect.FluentIterable.from;


+ 1
- 0
sonar-scanner-engine/src/main/java/org/sonar/scanner/events/BatchStepHandler.java View File

@@ -24,6 +24,7 @@ import org.sonar.api.batch.events.EventHandler;
/**
* @since 3.7
*/
@FunctionalInterface
public interface BatchStepHandler extends EventHandler {

/**

+ 0
- 8
sonar-scanner-engine/src/main/java/org/sonar/scanner/index/DefaultIndex.java View File

@@ -278,14 +278,6 @@ public class DefaultIndex {
return bucket;
}

public boolean isExcluded(@Nullable Resource reference) {
return false;
}

public boolean isIndexed(@Nullable Resource reference, boolean acceptExcluded) {
return getBucket(reference) != null;
}

private Bucket getBucket(@Nullable Resource reference) {
if (reference == null) {
return null;

+ 2
- 3
sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java View File

@@ -19,13 +19,12 @@
*/
package org.sonar.scanner.issue.ignore.scanner;

import java.nio.charset.Charset;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.resources.Project;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.pattern.IssueInclusionPatternInitializer;
import java.nio.charset.Charset;

public final class IssueExclusionsLoader {

@@ -43,7 +42,7 @@ public final class IssueExclusionsLoader {
this.fileSystem = fileSystem;
}

public boolean shouldExecuteOnProject(Project project) {
public boolean shouldExecute() {
return inclusionPatternInitializer.hasConfiguredPatterns()
|| exclusionPatternInitializer.hasConfiguredPatterns();
}

+ 2
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/ScanTaskObserver.java View File

@@ -19,12 +19,13 @@
*/
package org.sonar.scanner.mediumtest;

import org.sonar.api.ExtensionPoint;
import org.sonar.api.batch.ScannerSide;
import org.sonar.scanner.scan.ProjectScanContainer;
import org.sonar.api.ExtensionPoint;

@ScannerSide
@ExtensionPoint
@FunctionalInterface
public interface ScanTaskObserver {

void scanTaskCompleted(ProjectScanContainer container);

+ 6
- 4
sonar-scanner-engine/src/main/java/org/sonar/scanner/phases/AbstractPhaseExecutor.java View File

@@ -88,10 +88,12 @@ public abstract class AbstractPhaseExecutor {
protected abstract void executeOnRoot();

private void initIssueExclusions() {
String stepName = "Init issue exclusions";
eventBus.fireEvent(new BatchStepEvent(stepName, true));
issueExclusionsLoader.execute();
eventBus.fireEvent(new BatchStepEvent(stepName, false));
if (issueExclusionsLoader.shouldExecute()) {
String stepName = "Init issue exclusions";
eventBus.fireEvent(new BatchStepEvent(stepName, true));
issueExclusionsLoader.execute();
eventBus.fireEvent(new BatchStepEvent(stepName, false));
}
}

private void indexFs() {

+ 1
- 0
sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisherStep.java View File

@@ -24,6 +24,7 @@ import org.sonar.scanner.protocol.output.ScannerReportWriter;
/**
* Adds a sub-part of data to output report
*/
@FunctionalInterface
public interface ReportPublisherStep {

void publish(ScannerReportWriter writer);

+ 0
- 5
sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RuleFinderCompatibility.java View File

@@ -34,11 +34,6 @@ import org.sonar.api.rules.RuleQuery;

import static org.sonar.core.util.stream.Collectors.toList;

/**
* FIXME Waiting for the list of all server rules on batch side this is implemented by redirecting on ActiveRules. This is not correct
* since there is a difference between a rule that doesn't exists and a rule that is not activated in project quality profile.
*
*/
public class RuleFinderCompatibility implements RuleFinder {

private final Rules rules;

+ 1
- 7
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java View File

@@ -33,7 +33,6 @@ import org.sonar.scanner.DefaultFileLinesContextFactory;
import org.sonar.scanner.DefaultProjectTree;
import org.sonar.scanner.bootstrap.BatchExtensionDictionnary;
import org.sonar.scanner.bootstrap.ExtensionInstaller;
import org.sonar.scanner.bootstrap.ExtensionMatcher;
import org.sonar.scanner.bootstrap.ExtensionUtils;
import org.sonar.scanner.deprecated.DeprecatedSensorContext;
import org.sonar.scanner.deprecated.perspectives.BatchPerspectives;
@@ -174,12 +173,7 @@ public class ModuleScanContainer extends ComponentContainer {

private void addExtensions() {
ExtensionInstaller installer = getComponentByType(ExtensionInstaller.class);
installer.install(this, new ExtensionMatcher() {
@Override
public boolean accept(Object extension) {
return ExtensionUtils.isScannerSide(extension) && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_PROJECT);
}
});
installer.install(this, e -> ExtensionUtils.isScannerSide(e) && ExtensionUtils.isInstantiationStrategy(e, InstantiationStrategy.PER_PROJECT));
}

@Override

+ 6
- 6
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/ConsoleReport.java View File

@@ -126,17 +126,17 @@ public class ConsoleReport implements Reporter {
int newIssues = r.totalNewIssues;
if (newIssues > 0) {
sb.append(StringUtils.leftPad("+" + newIssues, LEFT_PAD)).append(" issue" + (newIssues > 1 ? "s" : "")).append("\n\n");
printNewIssues(sb, r.newBlockerIssues, Severity.BLOCKER, "blocker");
printNewIssues(sb, r.newCriticalIssues, Severity.CRITICAL, "critical");
printNewIssues(sb, r.newMajorIssues, Severity.MAJOR, "major");
printNewIssues(sb, r.newMinorIssues, Severity.MINOR, "minor");
printNewIssues(sb, r.newInfoIssues, Severity.INFO, "info");
printNewIssues(sb, r.newBlockerIssues, "blocker");
printNewIssues(sb, r.newCriticalIssues, "critical");
printNewIssues(sb, r.newMajorIssues, "major");
printNewIssues(sb, r.newMinorIssues, "minor");
printNewIssues(sb, r.newInfoIssues, "info");
} else {
sb.append(" No new issue").append("\n");
}
}

private static void printNewIssues(StringBuilder sb, int issueCount, String severity, String severityLabel) {
private static void printNewIssues(StringBuilder sb, int issueCount, String severityLabel) {
if (issueCount > 0) {
sb.append(StringUtils.leftPad("+" + issueCount, LEFT_PAD)).append(" ").append(severityLabel).append("\n");
}

+ 4
- 6
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/IssuesReport.java View File

@@ -20,12 +20,10 @@
package org.sonar.scanner.scan.report;

import com.google.common.collect.Maps;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.sonar.api.batch.rule.Rule;
import org.sonar.api.rules.RulePriority;
import org.sonar.scanner.index.BatchComponent;
@@ -83,13 +81,13 @@ public class IssuesReport {
public void addIssueOnResource(BatchComponent resource, TrackedIssue issue, Rule rule, RulePriority severity) {
addResource(resource);
getSummary().addIssue(issue, rule, severity);
resourceReportsByResource.get(resource).addIssue(issue, rule, RulePriority.valueOf(issue.severity()));
resourceReportsByResource.get(resource).addIssue(issue, rule, severity);
}

public void addResolvedIssueOnResource(BatchComponent resource, TrackedIssue issue, Rule rule, RulePriority severity) {
public void addResolvedIssueOnResource(BatchComponent resource, Rule rule, RulePriority severity) {
addResource(resource);
getSummary().addResolvedIssue(issue, rule, severity);
resourceReportsByResource.get(resource).addResolvedIssue(rule, RulePriority.valueOf(issue.severity()));
getSummary().addResolvedIssue(rule, severity);
resourceReportsByResource.get(resource).addResolvedIssue(rule, severity);
}

private void addResource(BatchComponent resource) {

+ 1
- 2
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/IssuesReportBuilder.java View File

@@ -20,7 +20,6 @@
package org.sonar.scanner.scan.report;

import javax.annotation.CheckForNull;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.ScannerSide;
@@ -75,7 +74,7 @@ public class IssuesReportBuilder {
continue;
}
if (issue.resolution() != null) {
issuesReport.addResolvedIssueOnResource(resource, issue, rule, severity);
issuesReport.addResolvedIssueOnResource(resource, rule, severity);
} else {
issuesReport.addIssueOnResource(resource, issue, rule, severity);
}

+ 1
- 1
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/ReportSummary.java View File

@@ -63,7 +63,7 @@ public class ReportSummary {
return totalByRuleKey;
}

public void addResolvedIssue(TrackedIssue issue, Rule rule, RulePriority severity) {
public void addResolvedIssue(Rule rule, RulePriority severity) {
ReportRuleKey reportRuleKey = new ReportRuleKey(rule, severity);
initMaps(reportRuleKey);
total.incrementResolvedIssuesCount();

+ 1
- 0
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/report/Reporter.java View File

@@ -22,6 +22,7 @@ package org.sonar.scanner.scan.report;
import org.sonar.api.batch.ScannerSide;

@ScannerSide
@FunctionalInterface
public interface Reporter {

void execute();

+ 1
- 11
sonar-scanner-engine/src/test/java/org/sonar/scanner/index/DefaultIndexTest.java View File

@@ -34,10 +34,8 @@ import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleFinder;
import org.sonar.scanner.FakeJava;
import org.sonar.scanner.DefaultProjectTree;
import org.sonar.scanner.index.BatchComponentCache;
import org.sonar.scanner.index.DefaultIndex;
import org.sonar.scanner.FakeJava;
import org.sonar.scanner.scan.measure.MeasureCache;
import org.sonar.scanner.sensor.DefaultSensorStorage;

@@ -93,8 +91,6 @@ public class DefaultIndexTest {

Directory reference = Directory.create("src/org/foo");
assertThat(index.getResource(reference).getName()).isEqualTo("src/org/foo");
assertThat(index.isIndexed(reference, true)).isTrue();
assertThat(index.isExcluded(reference)).isFalse();
assertThat(index.getChildren(reference)).hasSize(1);
assertThat(index.getParent(reference)).isInstanceOf(Project.class);
}
@@ -110,8 +106,6 @@ public class DefaultIndexTest {
File fileRef = File.create("src/org/foo/Bar.java", null, false);
assertThat(index.getResource(fileRef).getKey()).isEqualTo("src/org/foo/Bar.java");
assertThat(index.getResource(fileRef).getLanguage().getKey()).isEqualTo("java");
assertThat(index.isIndexed(fileRef, true)).isTrue();
assertThat(index.isExcluded(fileRef)).isFalse();
assertThat(index.getChildren(fileRef)).isEmpty();
assertThat(index.getParent(fileRef)).isInstanceOf(Directory.class);
}
@@ -137,9 +131,6 @@ public class DefaultIndexTest {
assertThat(index.index(file, directory)).isFalse();

File fileRef = File.create("src/org/foo/Bar.java", null, false);
assertThat(index.isIndexed(directory, true)).isFalse();
assertThat(index.isIndexed(fileRef, true)).isFalse();
assertThat(index.isExcluded(fileRef)).isFalse();
assertThat(index.getChildren(fileRef)).isEmpty();
assertThat(index.getParent(fileRef)).isNull();
}
@@ -149,7 +140,6 @@ public class DefaultIndexTest {
Resource dir = Directory.create("src/org/foo");
index.addMeasure(dir, new Measure("ncloc").setValue(50.0));

assertThat(index.isIndexed(dir, true)).isFalse();
assertThat(index.getMeasures(dir, MeasuresFilters.metric("ncloc"))).isNull();
}


+ 6
- 8
sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java View File

@@ -19,6 +19,8 @@
*/
package org.sonar.scanner.issue.ignore.scanner;

import java.io.File;
import java.io.IOException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -32,10 +34,6 @@ import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.pattern.IssueInclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.pattern.PatternMatcher;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsLoader;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsRegexpScanner;
import java.io.File;
import java.io.IOException;

import static java.nio.charset.StandardCharsets.UTF_8;
import static org.assertj.core.api.Assertions.assertThat;
@@ -85,19 +83,19 @@ public class IssueExclusionsLoaderTest {
public void shouldExecute() {
when(exclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(true);
when(inclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(true);
assertThat(scanner.shouldExecuteOnProject(null)).isTrue();
assertThat(scanner.shouldExecute()).isTrue();

when(exclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(true);
when(inclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(false);
assertThat(scanner.shouldExecuteOnProject(null)).isTrue();
assertThat(scanner.shouldExecute()).isTrue();

when(exclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(false);
when(inclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(true);
assertThat(scanner.shouldExecuteOnProject(null)).isTrue();
assertThat(scanner.shouldExecute()).isTrue();

when(exclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(false);
when(inclusionPatternInitializer.hasConfiguredPatterns()).thenReturn(false);
assertThat(scanner.shouldExecuteOnProject(null)).isFalse();
assertThat(scanner.shouldExecute()).isFalse();

}


Loading…
Cancel
Save