From 1a2f1cf907543e7a3612bb822121ed844c9f156a Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Mon, 26 Jan 2015 11:21:26 +0100 Subject: [PATCH] Fix some quality flaws --- .../protocol/input/issues/PreviousIssue.java | 3 +++ .../batch/bootstrap/BootstrapContainer.java | 16 +++++++------- .../sonar/batch/debt/SqaleRatingSettings.java | 22 ++++++++++++------- .../org/sonar/batch/index/EventPersister.java | 3 +++ .../sonar/batch/index/SourcePersister.java | 5 +++-- .../tracking/PreviousIssueRepository.java | 7 +++++- .../batch/mediumtest/BatchMediumTester.java | 4 ++-- ...a => DefaultGlobalRepositoriesLoader.java} | 4 ++-- ... => DefaultProjectRepositoriesLoader.java} | 8 +++---- ...der.java => GlobalRepositoriesLoader.java} | 2 +- ...r.java => GlobalRepositoriesProvider.java} | 8 +++---- .../ProjectRepositoriesProvider.java | 2 +- ...DefaultProjectRepositoriesLoaderTest.java} | 8 +++---- .../batch/fs/internal/DefaultInputFile.java | 6 ++++- 14 files changed, 60 insertions(+), 38 deletions(-) rename sonar-batch/src/main/java/org/sonar/batch/repository/{DefaultGlobalReferentialsLoader.java => DefaultGlobalRepositoriesLoader.java} (90%) rename sonar-batch/src/main/java/org/sonar/batch/repository/{DefaultProjectReferentialsLoader.java => DefaultProjectRepositoriesLoader.java} (96%) rename sonar-batch/src/main/java/org/sonar/batch/repository/{GlobalReferentialsLoader.java => GlobalRepositoriesLoader.java} (95%) rename sonar-batch/src/main/java/org/sonar/batch/repository/{GlobalReferentialsProvider.java => GlobalRepositoriesProvider.java} (89%) rename sonar-batch/src/test/java/org/sonar/batch/repository/{DefaultProjectReferentialsLoaderTest.java => DefaultProjectRepositoriesLoaderTest.java} (93%) diff --git a/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/issues/PreviousIssue.java b/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/issues/PreviousIssue.java index f519286ff4a..d4d8a5ca7c9 100644 --- a/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/issues/PreviousIssue.java +++ b/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/issues/PreviousIssue.java @@ -24,6 +24,9 @@ import javax.annotation.Nullable; import java.io.Serializable; import java.util.Date; +/** + * Issues from previous analysis. USed by local issue tracking. + */ public class PreviousIssue implements Serializable { private String key; diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BootstrapContainer.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BootstrapContainer.java index d3749c4cf7f..c49e4c1fef1 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BootstrapContainer.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BootstrapContainer.java @@ -35,11 +35,11 @@ import org.sonar.batch.components.PastSnapshotFinderByDays; import org.sonar.batch.components.PastSnapshotFinderByPreviousAnalysis; import org.sonar.batch.components.PastSnapshotFinderByPreviousVersion; import org.sonar.batch.components.PastSnapshotFinderByVersion; -import org.sonar.batch.repository.DefaultGlobalReferentialsLoader; +import org.sonar.batch.repository.DefaultGlobalRepositoriesLoader; import org.sonar.batch.repository.DefaultPreviousIssuesLoader; -import org.sonar.batch.repository.DefaultProjectReferentialsLoader; -import org.sonar.batch.repository.GlobalReferentialsLoader; -import org.sonar.batch.repository.GlobalReferentialsProvider; +import org.sonar.batch.repository.DefaultProjectRepositoriesLoader; +import org.sonar.batch.repository.GlobalRepositoriesLoader; +import org.sonar.batch.repository.GlobalRepositoriesProvider; import org.sonar.batch.repository.PreviousIssuesLoader; import org.sonar.batch.repository.ProjectRepositoriesLoader; import org.sonar.batch.user.UserRepository; @@ -107,16 +107,16 @@ public class BootstrapContainer extends ComponentContainer { UriReader.class, new FileCacheProvider(), System2.INSTANCE, - new GlobalReferentialsProvider(), + new GlobalRepositoriesProvider(), UserRepository.class); if (getComponentByType(PluginsReferential.class) == null) { add(DefaultPluginsReferential.class); } - if (getComponentByType(GlobalReferentialsLoader.class) == null) { - add(DefaultGlobalReferentialsLoader.class); + if (getComponentByType(GlobalRepositoriesLoader.class) == null) { + add(DefaultGlobalRepositoriesLoader.class); } if (getComponentByType(ProjectRepositoriesLoader.class) == null) { - add(DefaultProjectReferentialsLoader.class); + add(DefaultProjectRepositoriesLoader.class); } if (getComponentByType(PreviousIssuesLoader.class) == null) { add(DefaultPreviousIssuesLoader.class); diff --git a/sonar-batch/src/main/java/org/sonar/batch/debt/SqaleRatingSettings.java b/sonar-batch/src/main/java/org/sonar/batch/debt/SqaleRatingSettings.java index 455257aab8d..f6cc8e660a6 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/debt/SqaleRatingSettings.java +++ b/sonar-batch/src/main/java/org/sonar/batch/debt/SqaleRatingSettings.java @@ -25,6 +25,8 @@ import org.sonar.api.CoreProperties; import org.sonar.api.config.Settings; import org.sonar.api.measures.Metric; +import javax.annotation.Nullable; + public class SqaleRatingSettings implements BatchComponent { private final Settings settings; @@ -48,11 +50,13 @@ public class SqaleRatingSettings implements BatchComponent { } } - public long getDevCost(String languageKey) { + public long getDevCost(@Nullable String languageKey) { try { - LanguageSpecificConfiguration languageSpecificConfig = getSpecificParametersForLanguage(languageKey); - if (languageSpecificConfig != null && languageSpecificConfig.getManDays() != null) { - return Long.parseLong(languageSpecificConfig.getManDays()); + if (languageKey != null) { + LanguageSpecificConfiguration languageSpecificConfig = getSpecificParametersForLanguage(languageKey); + if (languageSpecificConfig != null && languageSpecificConfig.getManDays() != null) { + return Long.parseLong(languageSpecificConfig.getManDays()); + } } return Long.parseLong(settings.getString(CoreProperties.DEVELOPMENT_COST)); } catch (Exception e) { @@ -61,10 +65,12 @@ public class SqaleRatingSettings implements BatchComponent { } } - public Metric getSizeMetric(String languageKey, Metric[] metrics) { - LanguageSpecificConfiguration languageSpecificConfig = getSpecificParametersForLanguage(languageKey); - if (languageSpecificConfig != null && languageSpecificConfig.getMetric() != null) { - return getMetricForKey(languageSpecificConfig.getMetric(), metrics); + public Metric getSizeMetric(@Nullable String languageKey, Metric[] metrics) { + if (languageKey != null) { + LanguageSpecificConfiguration languageSpecificConfig = getSpecificParametersForLanguage(languageKey); + if (languageSpecificConfig != null && languageSpecificConfig.getMetric() != null) { + return getMetricForKey(languageSpecificConfig.getMetric(), metrics); + } } return getMetricForKey(settings.getString(CoreProperties.SIZE_METRIC), metrics); } diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/EventPersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/EventPersister.java index 36ac996ae58..b01efa10063 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/index/EventPersister.java +++ b/sonar-batch/src/main/java/org/sonar/batch/index/EventPersister.java @@ -45,6 +45,9 @@ public class EventPersister { public void saveEvent(Resource resource, Event event) { BatchResource batchResource = resourceCache.get(resource.getEffectiveKey()); + if (batchResource == null) { + throw new IllegalStateException("Unknow component: " + resource); + } if (event.getDate() == null) { event.setSnapshot(batchResource.snapshot()); } else { diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/SourcePersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/SourcePersister.java index 88f6ac854c4..512e13be07e 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/index/SourcePersister.java +++ b/sonar-batch/src/main/java/org/sonar/batch/index/SourcePersister.java @@ -294,8 +294,9 @@ public class SourcePersister implements ScanPersister { @CheckForNull private SyntaxHighlightingData loadHighlighting(DefaultInputFile file) { SyntaxHighlightingData highlighting = componentDataCache.getData(file.key(), SnapshotDataTypes.SYNTAX_HIGHLIGHTING); - if (highlighting == null) { - highlighting = codeColorizers.toSyntaxHighlighting(file.file(), file.encoding(), file.language()); + String language = file.language(); + if (highlighting == null && language != null) { + highlighting = codeColorizers.toSyntaxHighlighting(file.file(), file.encoding(), language); } return highlighting; } diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/PreviousIssueRepository.java b/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/PreviousIssueRepository.java index 6bad06cf818..d1142691ba3 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/PreviousIssueRepository.java +++ b/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/PreviousIssueRepository.java @@ -33,6 +33,8 @@ import org.sonar.batch.index.ResourceCache; import org.sonar.batch.protocol.input.issues.PreviousIssue; import org.sonar.batch.repository.PreviousIssuesLoader; +import javax.annotation.Nullable; + @InstantiationStrategy(InstantiationStrategy.PER_BATCH) public class PreviousIssueRepository implements BatchComponent { @@ -58,7 +60,10 @@ public class PreviousIssueRepository implements BatchComponent { previousIssuesLoader.load(reactor, new Function() { @Override - public Void apply(PreviousIssue issue) { + public Void apply(@Nullable PreviousIssue issue) { + if (issue == null) { + return null; + } String componentKey = issue.componentKey(); BatchResource r = resourceCache.get(componentKey); if (r == null) { diff --git a/sonar-batch/src/main/java/org/sonar/batch/mediumtest/BatchMediumTester.java b/sonar-batch/src/main/java/org/sonar/batch/mediumtest/BatchMediumTester.java index 80f52440152..e5ac2e3046f 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/mediumtest/BatchMediumTester.java +++ b/sonar-batch/src/main/java/org/sonar/batch/mediumtest/BatchMediumTester.java @@ -35,7 +35,7 @@ import org.sonar.batch.protocol.input.ActiveRule; import org.sonar.batch.protocol.input.GlobalRepositories; import org.sonar.batch.protocol.input.ProjectRepositories; import org.sonar.batch.protocol.input.issues.PreviousIssue; -import org.sonar.batch.repository.GlobalReferentialsLoader; +import org.sonar.batch.repository.GlobalRepositoriesLoader; import org.sonar.batch.repository.PreviousIssuesLoader; import org.sonar.batch.repository.ProjectRepositoriesLoader; import org.sonar.core.plugins.DefaultPluginMetadata; @@ -194,7 +194,7 @@ public class BatchMediumTester { } } - private static class FakeGlobalReferentialsLoader implements GlobalReferentialsLoader { + private static class FakeGlobalReferentialsLoader implements GlobalRepositoriesLoader { private int metricId = 1; diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultGlobalReferentialsLoader.java b/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultGlobalRepositoriesLoader.java similarity index 90% rename from sonar-batch/src/main/java/org/sonar/batch/repository/DefaultGlobalReferentialsLoader.java rename to sonar-batch/src/main/java/org/sonar/batch/repository/DefaultGlobalRepositoriesLoader.java index 409e776ab31..428e9bccab5 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultGlobalReferentialsLoader.java +++ b/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultGlobalRepositoriesLoader.java @@ -22,13 +22,13 @@ package org.sonar.batch.repository; import org.sonar.batch.bootstrap.ServerClient; import org.sonar.batch.protocol.input.GlobalRepositories; -public class DefaultGlobalReferentialsLoader implements GlobalReferentialsLoader { +public class DefaultGlobalRepositoriesLoader implements GlobalRepositoriesLoader { private static final String BATCH_GLOBAL_URL = "/batch/global"; private final ServerClient serverClient; - public DefaultGlobalReferentialsLoader(ServerClient serverClient) { + public DefaultGlobalRepositoriesLoader(ServerClient serverClient) { this.serverClient = serverClient; } diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultProjectReferentialsLoader.java b/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultProjectRepositoriesLoader.java similarity index 96% rename from sonar-batch/src/main/java/org/sonar/batch/repository/DefaultProjectReferentialsLoader.java rename to sonar-batch/src/main/java/org/sonar/batch/repository/DefaultProjectRepositoriesLoader.java index d653570d37a..922e9a82adf 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultProjectReferentialsLoader.java +++ b/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultProjectRepositoriesLoader.java @@ -48,9 +48,9 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -public class DefaultProjectReferentialsLoader implements ProjectRepositoriesLoader { +public class DefaultProjectRepositoriesLoader implements ProjectRepositoriesLoader { - private static final Logger LOG = LoggerFactory.getLogger(DefaultProjectReferentialsLoader.class); + private static final Logger LOG = LoggerFactory.getLogger(DefaultProjectRepositoriesLoader.class); private static final String BATCH_PROJECT_URL = "/batch/project"; @@ -58,13 +58,13 @@ public class DefaultProjectReferentialsLoader implements ProjectRepositoriesLoad private final AnalysisMode analysisMode; private final DatabaseSession session; - public DefaultProjectReferentialsLoader(DatabaseSession session, ServerClient serverClient, AnalysisMode analysisMode) { + public DefaultProjectRepositoriesLoader(DatabaseSession session, ServerClient serverClient, AnalysisMode analysisMode) { this.session = session; this.serverClient = serverClient; this.analysisMode = analysisMode; } - public DefaultProjectReferentialsLoader(ServerClient serverClient, AnalysisMode analysisMode) { + public DefaultProjectRepositoriesLoader(ServerClient serverClient, AnalysisMode analysisMode) { this.session = null; this.serverClient = serverClient; this.analysisMode = analysisMode; diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalReferentialsLoader.java b/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalRepositoriesLoader.java similarity index 95% rename from sonar-batch/src/main/java/org/sonar/batch/repository/GlobalReferentialsLoader.java rename to sonar-batch/src/main/java/org/sonar/batch/repository/GlobalRepositoriesLoader.java index 1d101827f14..e7f56510fdc 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalReferentialsLoader.java +++ b/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalRepositoriesLoader.java @@ -21,7 +21,7 @@ package org.sonar.batch.repository; import org.sonar.batch.protocol.input.GlobalRepositories; -public interface GlobalReferentialsLoader { +public interface GlobalRepositoriesLoader { GlobalRepositories load(); diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalReferentialsProvider.java b/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalRepositoriesProvider.java similarity index 89% rename from sonar-batch/src/main/java/org/sonar/batch/repository/GlobalReferentialsProvider.java rename to sonar-batch/src/main/java/org/sonar/batch/repository/GlobalRepositoriesProvider.java index eddee9c0deb..6f13f3878de 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalReferentialsProvider.java +++ b/sonar-batch/src/main/java/org/sonar/batch/repository/GlobalRepositoriesProvider.java @@ -25,15 +25,15 @@ import org.slf4j.LoggerFactory; import org.sonar.api.utils.TimeProfiler; import org.sonar.batch.protocol.input.GlobalRepositories; -public class GlobalReferentialsProvider extends ProviderAdapter { +public class GlobalRepositoriesProvider extends ProviderAdapter { - private static final Logger LOG = LoggerFactory.getLogger(GlobalReferentialsProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(GlobalRepositoriesProvider.class); private GlobalRepositories globalReferentials; - public GlobalRepositories provide(GlobalReferentialsLoader loader) { + public GlobalRepositories provide(GlobalRepositoriesLoader loader) { if (globalReferentials == null) { - TimeProfiler profiler = new TimeProfiler(LOG).start("Load global referentials"); + TimeProfiler profiler = new TimeProfiler(LOG).start("Load global repositories"); try { globalReferentials = loader.load(); } finally { diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/ProjectRepositoriesProvider.java b/sonar-batch/src/main/java/org/sonar/batch/repository/ProjectRepositoriesProvider.java index 390f81786af..11e9510ea8b 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/repository/ProjectRepositoriesProvider.java +++ b/sonar-batch/src/main/java/org/sonar/batch/repository/ProjectRepositoriesProvider.java @@ -35,7 +35,7 @@ public class ProjectRepositoriesProvider extends ProviderAdapter { public ProjectRepositories provide(ProjectRepositoriesLoader loader, ProjectReactor reactor, TaskProperties taskProps) { if (projectReferentials == null) { - TimeProfiler profiler = new TimeProfiler(LOG).start("Load project referentials"); + TimeProfiler profiler = new TimeProfiler(LOG).start("Load project repositories"); try { projectReferentials = loader.load(reactor, taskProps); } finally { diff --git a/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultProjectReferentialsLoaderTest.java b/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultProjectRepositoriesLoaderTest.java similarity index 93% rename from sonar-batch/src/test/java/org/sonar/batch/repository/DefaultProjectReferentialsLoaderTest.java rename to sonar-batch/src/test/java/org/sonar/batch/repository/DefaultProjectRepositoriesLoaderTest.java index 108151f5aac..27e07d7edc0 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultProjectReferentialsLoaderTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultProjectRepositoriesLoaderTest.java @@ -19,7 +19,7 @@ */ package org.sonar.batch.repository; -import org.sonar.batch.repository.DefaultProjectReferentialsLoader; +import org.sonar.batch.repository.DefaultProjectRepositoriesLoader; import com.google.common.collect.Maps; import org.junit.Before; @@ -38,9 +38,9 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class DefaultProjectReferentialsLoaderTest { +public class DefaultProjectRepositoriesLoaderTest { - private DefaultProjectReferentialsLoader loader; + private DefaultProjectRepositoriesLoader loader; private ServerClient serverClient; private AnalysisMode analysisMode; private ProjectReactor reactor; @@ -50,7 +50,7 @@ public class DefaultProjectReferentialsLoaderTest { public void prepare() { serverClient = mock(ServerClient.class); analysisMode = mock(AnalysisMode.class); - loader = new DefaultProjectReferentialsLoader(mock(DatabaseSession.class), serverClient, analysisMode); + loader = new DefaultProjectRepositoriesLoader(mock(DatabaseSession.class), serverClient, analysisMode); loader = spy(loader); doReturn(null).when(loader).lastSnapshotCreationDate(anyString()); when(serverClient.request(anyString())).thenReturn("{}"); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java index ecfd73199af..393e69331fa 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultInputFile.java @@ -22,6 +22,9 @@ package org.sonar.api.batch.fs.internal; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.utils.PathUtils; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + import java.io.File; import java.io.Serializable; @@ -67,6 +70,7 @@ public class DefaultInputFile implements InputFile, Serializable { return new File(absolutePath); } + @CheckForNull @Override public String language() { return language; @@ -129,7 +133,7 @@ public class DefaultInputFile implements InputFile, Serializable { return this; } - public DefaultInputFile setLanguage(String language) { + public DefaultInputFile setLanguage(@Nullable String language) { this.language = language; return this; } -- 2.39.5