diff options
Diffstat (limited to 'sonar-batch/src')
6 files changed, 162 insertions, 217 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/duplication/DefaultTokenBuilder.java b/sonar-batch/src/main/java/org/sonar/batch/duplication/DefaultTokenBuilder.java index b4af6917440..6add5331875 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/duplication/DefaultTokenBuilder.java +++ b/sonar-batch/src/main/java/org/sonar/batch/duplication/DefaultTokenBuilder.java @@ -21,8 +21,6 @@ package org.sonar.batch.duplication; import com.google.common.base.Preconditions; import net.sourceforge.pmd.cpd.TokenEntry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.sensor.duplication.DuplicationTokenBuilder; @@ -37,8 +35,6 @@ import java.util.List; public class DefaultTokenBuilder implements DuplicationTokenBuilder { - private static final Logger LOG = LoggerFactory.getLogger(DefaultTokenBuilder.class); - private final BlockCache cache; private final InputFile inputFile; private final List<TokenEntry> tokens = new ArrayList<TokenEntry>(); @@ -69,7 +65,7 @@ public class DefaultTokenBuilder implements DuplicationTokenBuilder { tokens.add(TokenEntry.getEOF()); TokenEntry.clearImages(); List<TokensLine> tokensLines = TokenizerBridge.convert(tokens); - ArrayList<Block> blocks = blockChunker.chunk(((DefaultInputFile) inputFile).key(), tokensLines); + List<Block> blocks = blockChunker.chunk(((DefaultInputFile) inputFile).key(), tokensLines); cache.put(((DefaultInputFile) inputFile).key(), new FileBlocks(((DefaultInputFile) inputFile).key(), blocks)); tokens.clear(); diff --git a/sonar-batch/src/main/java/org/sonar/batch/duplication/DuplicationGroupValueCoder.java b/sonar-batch/src/main/java/org/sonar/batch/duplication/DuplicationGroupValueCoder.java index 5b6ed6d8401..f53dfb4a569 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/duplication/DuplicationGroupValueCoder.java +++ b/sonar-batch/src/main/java/org/sonar/batch/duplication/DuplicationGroupValueCoder.java @@ -26,6 +26,7 @@ import org.sonar.api.batch.sensor.duplication.DuplicationGroup; import org.sonar.api.batch.sensor.duplication.DuplicationGroup.Block; import java.util.ArrayList; +import java.util.List; class DuplicationGroupValueCoder implements ValueCoder { @@ -45,7 +46,7 @@ class DuplicationGroupValueCoder implements ValueCoder { public Object get(Value value, Class clazz, CoderContext context) { DuplicationGroup g = new DuplicationGroup((Block) blockCoder.get(value, DuplicationGroup.Block.class, context)); int count = value.getInt(); - ArrayList<DuplicationGroup.Block> blocks = new ArrayList<DuplicationGroup.Block>(count); + List<DuplicationGroup.Block> blocks = new ArrayList<DuplicationGroup.Block>(count); for (int i = 0; i < count; i++) { blocks.add((Block) blockCoder.get(value, DuplicationGroup.Block.class, context)); } diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/SensorContextAdaptor.java b/sonar-batch/src/main/java/org/sonar/batch/scan/SensorContextAdaptor.java index 1cf87b1d6d3..6a117d7ec6a 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/SensorContextAdaptor.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/SensorContextAdaptor.java @@ -19,27 +19,16 @@ */ package org.sonar.batch.scan; -import com.google.common.base.Preconditions; +import org.sonar.api.batch.Sensor; import org.sonar.api.batch.fs.FileSystem; import org.sonar.api.batch.fs.InputDir; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.fs.InputPath; -import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.measure.Metric; import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.sensor.SensorContext; -import org.sonar.api.batch.sensor.duplication.DuplicationBuilder; -import org.sonar.api.batch.sensor.duplication.DuplicationGroup; -import org.sonar.api.batch.sensor.duplication.DuplicationTokenBuilder; -import org.sonar.api.batch.sensor.duplication.internal.DefaultDuplicationBuilder; -import org.sonar.api.batch.sensor.highlighting.HighlightingBuilder; import org.sonar.api.batch.sensor.issue.Issue; -import org.sonar.api.batch.sensor.issue.IssueBuilder; -import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder; import org.sonar.api.batch.sensor.measure.Measure; -import org.sonar.api.batch.sensor.measure.MeasureBuilder; -import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder; -import org.sonar.api.batch.sensor.symbol.SymbolTableBuilder; import org.sonar.api.component.ResourcePerspectives; import org.sonar.api.config.Settings; import org.sonar.api.issue.Issuable; @@ -55,66 +44,32 @@ import org.sonar.api.resources.Resource; import org.sonar.api.resources.Scopes; import org.sonar.api.rule.RuleKey; import org.sonar.batch.duplication.BlockCache; -import org.sonar.batch.duplication.DefaultTokenBuilder; import org.sonar.batch.duplication.DuplicationCache; -import org.sonar.batch.highlighting.DefaultHighlightingBuilder; import org.sonar.batch.index.ComponentDataCache; -import org.sonar.batch.symbol.DefaultSymbolTableBuilder; -import org.sonar.duplications.internal.pmd.PmdBlockChunker; +import org.sonar.batch.scan2.CommonSensorContext; import java.io.Serializable; -import java.util.List; /** * Implements {@link SensorContext} but forward everything to {@link org.sonar.api.batch.SensorContext} for backward compatibility. + * Will be dropped once old {@link Sensor} API is dropped. * */ -public class SensorContextAdaptor implements SensorContext { +public class SensorContextAdaptor extends CommonSensorContext { private final org.sonar.api.batch.SensorContext sensorContext; private final MetricFinder metricFinder; private final Project project; private final ResourcePerspectives perspectives; - private final Settings settings; - private final FileSystem fs; - private final ActiveRules activeRules; - private final ComponentDataCache componentDataCache; - private final BlockCache blockCache; - private final DuplicationCache duplicationCache; public SensorContextAdaptor(org.sonar.api.batch.SensorContext sensorContext, MetricFinder metricFinder, Project project, ResourcePerspectives perspectives, Settings settings, FileSystem fs, ActiveRules activeRules, ComponentDataCache componentDataCache, BlockCache blockCache, DuplicationCache duplicationCache) { + super(settings, fs, activeRules, componentDataCache, blockCache, duplicationCache); this.sensorContext = sensorContext; this.metricFinder = metricFinder; this.project = project; this.perspectives = perspectives; - this.settings = settings; - this.fs = fs; - this.activeRules = activeRules; - this.componentDataCache = componentDataCache; - this.blockCache = blockCache; - this.duplicationCache = duplicationCache; - } - - @Override - public Settings settings() { - return settings; - } - - @Override - public FileSystem fileSystem() { - return fs; - } - - @Override - public ActiveRules activeRules() { - return activeRules; - } - - @Override - public <G extends Serializable> MeasureBuilder<G> measureBuilder() { - return new DefaultMeasureBuilder<G>(); } @Override @@ -143,7 +98,7 @@ public class SensorContextAdaptor implements SensorContext { return getMeasure(file, m); } - private Metric<?> findMetricOrFail(String metricKey) { + private Metric findMetricOrFail(String metricKey) { Metric<?> m = metricFinder.findByKey(metricKey); if (m == null) { throw new IllegalStateException("Unknow metric with key: " + metricKey); @@ -223,11 +178,6 @@ public class SensorContextAdaptor implements SensorContext { } @Override - public IssueBuilder issueBuilder() { - return new DefaultIssueBuilder(); - } - - @Override public boolean addIssue(Issue issue) { Resource r; InputPath inputPath = issue.inputPath(); @@ -259,53 +209,4 @@ public class SensorContextAdaptor implements SensorContext { .build(); } - @Override - public HighlightingBuilder highlightingBuilder(InputFile inputFile) { - return new DefaultHighlightingBuilder(((DefaultInputFile) inputFile).key(), componentDataCache); - } - - @Override - public SymbolTableBuilder symbolTableBuilder(InputFile inputFile) { - return new DefaultSymbolTableBuilder(((DefaultInputFile) inputFile).key(), componentDataCache); - } - - @Override - public DuplicationTokenBuilder duplicationTokenBuilder(InputFile inputFile) { - PmdBlockChunker blockChunker = new PmdBlockChunker(getBlockSize(inputFile.language())); - return new DefaultTokenBuilder(inputFile, blockCache, blockChunker); - } - - @Override - public DuplicationBuilder duplicationBuilder(InputFile inputFile) { - return new DefaultDuplicationBuilder(inputFile); - } - - @Override - public void saveDuplications(InputFile inputFile, List<DuplicationGroup> duplications) { - Preconditions.checkState(duplications.size() > 0, "Empty duplications"); - String effectiveKey = ((DefaultInputFile) inputFile).key(); - for (DuplicationGroup duplicationGroup : duplications) { - Preconditions.checkState(effectiveKey.equals(duplicationGroup.originBlock().resourceKey()), "Invalid duplication group"); - } - duplicationCache.put(effectiveKey, duplications); - } - - private int getBlockSize(String languageKey) { - int blockSize = settings.getInt("sonar.cpd." + languageKey + ".minimumLines"); - if (blockSize == 0) { - blockSize = getDefaultBlockSize(languageKey); - } - return blockSize; - } - - private static int getDefaultBlockSize(String languageKey) { - if ("cobol".equals(languageKey)) { - return 30; - } else if ("abap".equals(languageKey) || "natur".equals(languageKey)) { - return 20; - } else { - return 10; - } - } - } diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/measure/DeprecatedMetricFinder.java b/sonar-batch/src/main/java/org/sonar/batch/scan/measure/DeprecatedMetricFinder.java index 7242f61c8ad..761d0a74001 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/measure/DeprecatedMetricFinder.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/measure/DeprecatedMetricFinder.java @@ -37,13 +37,12 @@ public final class DeprecatedMetricFinder implements MetricFinder { public DeprecatedMetricFinder(GlobalReferentials globalReferentials) { for (org.sonar.batch.protocol.input.Metric metric : globalReferentials.metrics()) { - Metric hibernateMetric = new org.sonar.api.measures.Metric.Builder(metric.key(), metric.key(), ValueType.valueOf(metric.valueType())) + Metric hibernateMetric = new org.sonar.api.measures.Metric.Builder(metric.key(), metric.name(), ValueType.valueOf(metric.valueType())) .create() .setDirection(metric.direction()) .setQualitative(metric.isQualitative()) .setUserManaged(metric.isUserManaged()) .setDescription(metric.description()) - .setName(metric.name()) .setOptimizedBestValue(metric.isOptimizedBestValue()) .setBestValue(metric.bestValue()) .setWorstValue(metric.worstValue()) diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan2/CommonSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/scan2/CommonSensorContext.java new file mode 100644 index 00000000000..6c3ed8949c4 --- /dev/null +++ b/sonar-batch/src/main/java/org/sonar/batch/scan2/CommonSensorContext.java @@ -0,0 +1,150 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.batch.scan2; + +import com.google.common.base.Preconditions; +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.batch.rule.ActiveRules; +import org.sonar.api.batch.sensor.SensorContext; +import org.sonar.api.batch.sensor.duplication.DuplicationBuilder; +import org.sonar.api.batch.sensor.duplication.DuplicationGroup; +import org.sonar.api.batch.sensor.duplication.DuplicationTokenBuilder; +import org.sonar.api.batch.sensor.duplication.internal.DefaultDuplicationBuilder; +import org.sonar.api.batch.sensor.highlighting.HighlightingBuilder; +import org.sonar.api.batch.sensor.issue.IssueBuilder; +import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder; +import org.sonar.api.batch.sensor.measure.MeasureBuilder; +import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder; +import org.sonar.api.batch.sensor.symbol.SymbolTableBuilder; +import org.sonar.api.config.Settings; +import org.sonar.batch.duplication.BlockCache; +import org.sonar.batch.duplication.DefaultTokenBuilder; +import org.sonar.batch.duplication.DuplicationCache; +import org.sonar.batch.highlighting.DefaultHighlightingBuilder; +import org.sonar.batch.index.ComponentDataCache; +import org.sonar.batch.scan.SensorContextAdaptor; +import org.sonar.batch.symbol.DefaultSymbolTableBuilder; +import org.sonar.duplications.internal.pmd.PmdBlockChunker; + +import java.io.Serializable; +import java.util.List; + +/** + * Common bits between {@link DefaultSensorContext} and {@link SensorContextAdaptor} + * @author julien + * + */ +public abstract class CommonSensorContext implements SensorContext { + + private final Settings settings; + private final FileSystem fs; + private final ActiveRules activeRules; + private final ComponentDataCache componentDataCache; + private final BlockCache blockCache; + private final DuplicationCache duplicationCache; + + protected CommonSensorContext(Settings settings, FileSystem fs, ActiveRules activeRules, ComponentDataCache componentDataCache, + BlockCache blockCache, DuplicationCache duplicationCache) { + this.settings = settings; + this.fs = fs; + this.activeRules = activeRules; + this.componentDataCache = componentDataCache; + this.blockCache = blockCache; + this.duplicationCache = duplicationCache; + } + + @Override + public Settings settings() { + return settings; + } + + @Override + public FileSystem fileSystem() { + return fs; + } + + @Override + public ActiveRules activeRules() { + return activeRules; + } + + @Override + public <G extends Serializable> MeasureBuilder<G> measureBuilder() { + return new DefaultMeasureBuilder<G>(); + } + + @Override + public IssueBuilder issueBuilder() { + return new DefaultIssueBuilder(); + } + + @Override + public HighlightingBuilder highlightingBuilder(InputFile inputFile) { + return new DefaultHighlightingBuilder(((DefaultInputFile) inputFile).key(), componentDataCache); + } + + @Override + public SymbolTableBuilder symbolTableBuilder(InputFile inputFile) { + return new DefaultSymbolTableBuilder(((DefaultInputFile) inputFile).key(), componentDataCache); + } + + @Override + public DuplicationTokenBuilder duplicationTokenBuilder(InputFile inputFile) { + PmdBlockChunker blockChunker = new PmdBlockChunker(getBlockSize(inputFile.language())); + + return new DefaultTokenBuilder(inputFile, blockCache, blockChunker); + } + + @Override + public DuplicationBuilder duplicationBuilder(InputFile inputFile) { + return new DefaultDuplicationBuilder(inputFile); + } + + @Override + public void saveDuplications(InputFile inputFile, List<DuplicationGroup> duplications) { + Preconditions.checkState(!duplications.isEmpty(), "Empty duplications"); + String effectiveKey = ((DefaultInputFile) inputFile).key(); + for (DuplicationGroup duplicationGroup : duplications) { + Preconditions.checkState(effectiveKey.equals(duplicationGroup.originBlock().resourceKey()), "Invalid duplication group"); + } + duplicationCache.put(effectiveKey, duplications); + } + + private int getBlockSize(String languageKey) { + int blockSize = settings.getInt("sonar.cpd." + languageKey + ".minimumLines"); + if (blockSize == 0) { + blockSize = getDefaultBlockSize(languageKey); + } + return blockSize; + } + + private static int getDefaultBlockSize(String languageKey) { + if ("cobol".equals(languageKey)) { + return 30; + } else if ("abap".equals(languageKey) || "natur".equals(languageKey)) { + return 20; + } else { + return 10; + } + } + +} diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java index 74b13c2e43e..6350622c72f 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java @@ -19,93 +19,46 @@ */ package org.sonar.batch.scan2; -import com.google.common.base.Preconditions; import com.google.common.base.Strings; import org.sonar.api.batch.bootstrap.ProjectDefinition; 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.batch.measure.Metric; import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.rule.internal.DefaultActiveRule; -import org.sonar.api.batch.sensor.SensorContext; -import org.sonar.api.batch.sensor.duplication.DuplicationBuilder; -import org.sonar.api.batch.sensor.duplication.DuplicationGroup; -import org.sonar.api.batch.sensor.duplication.DuplicationTokenBuilder; -import org.sonar.api.batch.sensor.duplication.internal.DefaultDuplicationBuilder; -import org.sonar.api.batch.sensor.highlighting.HighlightingBuilder; import org.sonar.api.batch.sensor.issue.Issue; -import org.sonar.api.batch.sensor.issue.IssueBuilder; import org.sonar.api.batch.sensor.issue.internal.DefaultIssue; -import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder; import org.sonar.api.batch.sensor.measure.Measure; -import org.sonar.api.batch.sensor.measure.MeasureBuilder; import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure; -import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder; -import org.sonar.api.batch.sensor.symbol.SymbolTableBuilder; import org.sonar.api.config.Settings; import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.MessageException; import org.sonar.batch.duplication.BlockCache; -import org.sonar.batch.duplication.DefaultTokenBuilder; import org.sonar.batch.duplication.DuplicationCache; -import org.sonar.batch.highlighting.DefaultHighlightingBuilder; import org.sonar.batch.index.ComponentDataCache; import org.sonar.batch.issue.IssueFilters; import org.sonar.batch.scan.SensorContextAdaptor; -import org.sonar.batch.symbol.DefaultSymbolTableBuilder; import org.sonar.core.component.ComponentKeys; -import org.sonar.duplications.internal.pmd.PmdBlockChunker; import java.io.Serializable; -import java.util.List; -public class DefaultSensorContext implements SensorContext { +public class DefaultSensorContext extends CommonSensorContext { private final AnalyzerMeasureCache measureCache; private final AnalyzerIssueCache issueCache; private final ProjectDefinition def; - private final Settings settings; - private final FileSystem fs; private final ActiveRules activeRules; private final IssueFilters issueFilters; - private final ComponentDataCache componentDataCache; - private final BlockCache blockCache; - private final DuplicationCache duplicationCache; public DefaultSensorContext(ProjectDefinition def, AnalyzerMeasureCache measureCache, AnalyzerIssueCache issueCache, Settings settings, FileSystem fs, ActiveRules activeRules, IssueFilters issueFilters, ComponentDataCache componentDataCache, BlockCache blockCache, DuplicationCache duplicationCache) { + super(settings, fs, activeRules, componentDataCache, blockCache, duplicationCache); this.def = def; this.measureCache = measureCache; this.issueCache = issueCache; - this.settings = settings; - this.fs = fs; this.activeRules = activeRules; this.issueFilters = issueFilters; - this.componentDataCache = componentDataCache; - this.blockCache = blockCache; - this.duplicationCache = duplicationCache; - } - - @Override - public Settings settings() { - return settings; - } - - @Override - public FileSystem fileSystem() { - return fs; - } - - @Override - public ActiveRules activeRules() { - return activeRules; - } - - @Override - public <G extends Serializable> MeasureBuilder<G> measureBuilder() { - return new DefaultMeasureBuilder<G>(); } @Override @@ -139,11 +92,6 @@ public class DefaultSensorContext implements SensorContext { } @Override - public IssueBuilder issueBuilder() { - return new DefaultIssueBuilder(); - } - - @Override public boolean addIssue(Issue issue) { String resourceKey; if (issue.inputPath() != null) { @@ -181,54 +129,4 @@ public class DefaultSensorContext implements SensorContext { } } - @Override - public HighlightingBuilder highlightingBuilder(InputFile inputFile) { - return new DefaultHighlightingBuilder(((DefaultInputFile) inputFile).key(), componentDataCache); - } - - @Override - public SymbolTableBuilder symbolTableBuilder(InputFile inputFile) { - return new DefaultSymbolTableBuilder(((DefaultInputFile) inputFile).key(), componentDataCache); - } - - @Override - public DuplicationTokenBuilder duplicationTokenBuilder(InputFile inputFile) { - PmdBlockChunker blockChunker = new PmdBlockChunker(getBlockSize(inputFile.language())); - - return new DefaultTokenBuilder(inputFile, blockCache, blockChunker); - } - - @Override - public DuplicationBuilder duplicationBuilder(InputFile inputFile) { - return new DefaultDuplicationBuilder(inputFile); - } - - @Override - public void saveDuplications(InputFile inputFile, List<DuplicationGroup> duplications) { - Preconditions.checkState(duplications.size() > 0, "Empty duplications"); - String effectiveKey = ((DefaultInputFile) inputFile).key(); - for (DuplicationGroup duplicationGroup : duplications) { - Preconditions.checkState(effectiveKey.equals(duplicationGroup.originBlock().resourceKey()), "Invalid duplication group"); - } - duplicationCache.put(effectiveKey, duplications); - } - - private int getBlockSize(String languageKey) { - int blockSize = settings.getInt("sonar.cpd." + languageKey + ".minimumLines"); - if (blockSize == 0) { - blockSize = getDefaultBlockSize(languageKey); - } - return blockSize; - } - - private static int getDefaultBlockSize(String languageKey) { - if ("cobol".equals(languageKey)) { - return 30; - } else if ("abap".equals(languageKey) || "natur".equals(languageKey)) { - return 20; - } else { - return 10; - } - } - } |