From f5704c2461e720c2ef8c6f514d27b7caaed09a65 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 27 May 2015 11:26:22 +0200 Subject: [PATCH] SONAR-6589 Apply feedback from PR --- .../computation/component/Component.java | 10 ++++-- .../computation/component/ComponentImpl.java | 17 +++++----- .../computation/step/ComputationSteps.java | 5 ++- .../computation/step/ParseReportStep.java | 5 ++- .../step/PersistComponentsStep.java | 9 +++--- ... => PopulateComponentsUuidAndKeyStep.java} | 31 ++++++++++--------- .../step/ComputationStepsTest.java | 4 +-- .../step/PersistTestsStepTest.java | 7 ++--- ...PopulateComponentsUuidAndKeyStepTest.java} | 13 ++++---- .../step/PurgeDatastoresStepTest.java | 5 ++- 10 files changed, 55 insertions(+), 51 deletions(-) rename server/sonar-server/src/main/java/org/sonar/server/computation/step/{FeedComponentUuidsStep.java => PopulateComponentsUuidAndKeyStep.java} (88%) rename server/sonar-server/src/test/java/org/sonar/server/computation/step/{FeedComponentUuidsStepTest.java => PopulateComponentsUuidAndKeyStepTest.java} (98%) diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/component/Component.java b/server/sonar-server/src/main/java/org/sonar/server/computation/component/Component.java index 0f296ff859f..ab4170d128f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/component/Component.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/component/Component.java @@ -19,11 +19,11 @@ */ package org.sonar.server.computation.component; +import java.util.List; import org.sonar.server.computation.context.ComputationContext; import org.sonar.server.computation.event.EventRepository; import org.sonar.server.computation.measure.MeasureRepository; - -import java.util.List; +import org.sonar.server.computation.step.PopulateComponentsUuidAndKeyStep; public interface Component { enum Type { @@ -48,8 +48,14 @@ public interface Component { Type getType(); + /** + * Return the component uuid only when {@link PopulateComponentsUuidAndKeyStep} has been executed, otherwise it will throw an exception. + */ String getUuid(); + /** + * Return the component key only when {@link PopulateComponentsUuidAndKeyStep} has been executed, otherwise it will throw an exception. + */ String getKey(); // FIXME we should not expose a batch specific information diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java index a2f2d6ce27c..92e67c3c62a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java @@ -22,6 +22,12 @@ package org.sonar.server.computation.component; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.sonar.api.measures.Metric; import org.sonar.batch.protocol.Constants; import org.sonar.batch.protocol.output.BatchReport; @@ -33,14 +39,6 @@ import org.sonar.server.computation.event.EventRepository; import org.sonar.server.computation.measure.MeasureRepository; import org.sonar.server.db.DbClient; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import static com.google.common.base.Predicates.notNull; import static com.google.common.collect.ImmutableList.copyOf; import static com.google.common.collect.Iterables.filter; @@ -90,6 +88,9 @@ public class ComponentImpl implements Component { } public String getUuid() { + if (uuid == null) { + throw new UnsupportedOperationException(String.format("Component uuid of ref '%s' has not be fed yet", getRef())); + } return uuid; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java index cb8c0c39ef2..9f3368cff76 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java @@ -21,10 +21,9 @@ package org.sonar.server.computation.step; import com.google.common.collect.Lists; -import org.sonar.server.computation.ComputationContainer; - import java.util.Arrays; import java.util.List; +import org.sonar.server.computation.ComputationContainer; /** * Ordered list of steps to be executed @@ -37,7 +36,7 @@ public class ComputationSteps { */ public static List> orderedStepClasses() { return Arrays.asList( - FeedComponentUuidsStep.class, + PopulateComponentsUuidAndKeyStep.class, // Read report ParseReportStep.class, diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java index cc4a96dedba..bfc408816e7 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java @@ -20,6 +20,7 @@ package org.sonar.server.computation.step; +import java.util.List; import org.sonar.batch.protocol.output.BatchReport; import org.sonar.batch.protocol.output.BatchReportReader; import org.sonar.server.computation.ComputationContext; @@ -27,8 +28,6 @@ import org.sonar.server.computation.component.Component; import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor; import org.sonar.server.computation.issue.IssueComputation; -import java.util.List; - public class ParseReportStep implements ComputationStep { private final IssueComputation issueComputation; @@ -38,7 +37,7 @@ public class ParseReportStep implements ComputationStep { } @Override - public void execute(final ComputationContext context) { + public void execute(ComputationContext context) { IssueDepthTraversalTypeAwareVisitor visitor = new IssueDepthTraversalTypeAwareVisitor(context); visitor.visit(context.getRoot()); processDeletedComponents(context, visitor); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistComponentsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistComponentsStep.java index dd75874019d..f73c4c0c357 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistComponentsStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistComponentsStep.java @@ -20,6 +20,9 @@ package org.sonar.server.computation.step; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; @@ -35,10 +38,6 @@ import org.sonar.server.computation.component.DbComponentsRefCache; import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor; import org.sonar.server.db.DbClient; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - public class PersistComponentsStep implements ComputationStep { private final DbClient dbClient; @@ -220,7 +219,7 @@ public class PersistComponentsStep implements ComputationStep { } private static String getFileQualifier(BatchReport.Component reportComponent) { - return !reportComponent.getIsTest() ? Qualifiers.FILE : Qualifiers.UNIT_TEST_FILE; + return reportComponent.getIsTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE; } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/FeedComponentUuidsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStep.java similarity index 88% rename from server/sonar-server/src/main/java/org/sonar/server/computation/step/FeedComponentUuidsStep.java rename to server/sonar-server/src/main/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStep.java index ebdf1fd6779..b7655ee32b4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/FeedComponentUuidsStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStep.java @@ -20,6 +20,10 @@ package org.sonar.server.computation.step; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; import org.sonar.api.utils.internal.Uuids; import org.sonar.batch.protocol.output.BatchReport; import org.sonar.batch.protocol.output.BatchReportReader; @@ -32,23 +36,19 @@ import org.sonar.server.computation.component.ComponentImpl; import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor; import org.sonar.server.db.DbClient; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * Read all components from the batch report and set components uuid and key */ -public class FeedComponentUuidsStep implements ComputationStep { +public class PopulateComponentsUuidAndKeyStep implements ComputationStep { private final DbClient dbClient; - public FeedComponentUuidsStep(DbClient dbClient) { + public PopulateComponentsUuidAndKeyStep(DbClient dbClient) { this.dbClient = dbClient; } @Override - public void execute(final ComputationContext context) { + public void execute(ComputationContext context) { new ComponentDepthTraversalTypeAwareVisitor(context).visit(context.getRoot()); } @@ -59,9 +59,12 @@ public class FeedComponentUuidsStep implements ComputationStep { private class ComponentDepthTraversalTypeAwareVisitor extends DepthTraversalTypeAwareVisitor { - private BatchReportReader reportReader; - private Map componentUuidByKey; - private String branch; + private final BatchReportReader reportReader; + private final Map componentUuidByKey; + + @Nullable + private final String branch; + private Component nearestModule; public ComponentDepthTraversalTypeAwareVisitor(ComputationContext context) { @@ -123,14 +126,14 @@ public class FeedComponentUuidsStep implements ComputationStep { feedComponent((ComponentImpl) component, componentKey); } - private void feedComponent(ComponentImpl projectImpl, String componentKey) { - projectImpl.setKey(componentKey); + private void feedComponent(ComponentImpl component, String componentKey) { + component.setKey(componentKey); String componentUuid = componentUuidByKey.get(componentKey); if (componentUuid == null) { - projectImpl.setUuid(Uuids.create()); + component.setUuid(Uuids.create()); } else { - projectImpl.setUuid(componentUuid); + component.setUuid(componentUuid); } } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputationStepsTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputationStepsTest.java index d89444f2770..7ed17968743 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputationStepsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputationStepsTest.java @@ -49,14 +49,14 @@ public class ComputationStepsTest { mock(PersistFileSourcesStep.class), mock(PersistTestsStep.class), mock(IndexTestsStep.class), - mock(FeedComponentUuidsStep.class), + mock(PopulateComponentsUuidAndKeyStep.class), mock(PersistComponentsStep.class), mock(IndexTestsStep.class), mock(QualityProfileEventsStep.class) ); assertThat(registry.orderedSteps()).hasSize(20); - assertThat(registry.orderedSteps().get(0)).isInstanceOf(FeedComponentUuidsStep.class); + assertThat(registry.orderedSteps().get(0)).isInstanceOf(PopulateComponentsUuidAndKeyStep.class); assertThat(registry.orderedSteps().get(19)).isInstanceOf(SendIssueNotificationsStep.class); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java index c6bdf2e8580..143052a7c23 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java @@ -20,6 +20,9 @@ package org.sonar.server.computation.step; +import java.io.File; +import java.util.Arrays; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -50,10 +53,6 @@ import org.sonar.server.db.DbClient; import org.sonar.server.source.db.FileSourceDao; import org.sonar.server.source.db.FileSourceDb; -import java.io.File; -import java.util.Arrays; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.mockito.Mockito.mock; diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/FeedComponentUuidsStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStepTest.java similarity index 98% rename from server/sonar-server/src/test/java/org/sonar/server/computation/step/FeedComponentUuidsStepTest.java rename to server/sonar-server/src/test/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStepTest.java index fb92b615286..66140f7aa7f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/FeedComponentUuidsStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PopulateComponentsUuidAndKeyStepTest.java @@ -20,6 +20,9 @@ package org.sonar.server.computation.step; +import java.io.File; +import java.util.HashMap; +import java.util.Map; import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; @@ -41,15 +44,11 @@ import org.sonar.server.computation.language.LanguageRepository; import org.sonar.server.db.DbClient; import org.sonar.test.DbTests; -import java.io.File; -import java.util.HashMap; -import java.util.Map; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @Category(DbTests.class) -public class FeedComponentUuidsStepTest extends BaseStepTest { +public class PopulateComponentsUuidAndKeyStepTest extends BaseStepTest { private static final String PROJECT_KEY = "PROJECT_KEY"; @@ -69,7 +68,7 @@ public class FeedComponentUuidsStepTest extends BaseStepTest { LanguageRepository languageRepository = mock(LanguageRepository.class); - FeedComponentUuidsStep sut; + PopulateComponentsUuidAndKeyStep sut; @Before public void setup() throws Exception { @@ -80,7 +79,7 @@ public class FeedComponentUuidsStepTest extends BaseStepTest { reportDir = temp.newFolder(); projectSettings = new Settings(); - sut = new FeedComponentUuidsStep(dbClient); + sut = new PopulateComponentsUuidAndKeyStep(dbClient); } @Override diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PurgeDatastoresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PurgeDatastoresStepTest.java index 4d22e16fd63..7ea5c1e066d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PurgeDatastoresStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PurgeDatastoresStepTest.java @@ -20,6 +20,8 @@ package org.sonar.server.computation.step; +import java.io.File; +import java.io.IOException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -41,9 +43,6 @@ import org.sonar.server.computation.component.ProjectSettingsRepository; import org.sonar.server.computation.language.LanguageRepository; import org.sonar.server.db.DbClient; -import java.io.File; -import java.io.IOException; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; -- 2.39.5