]> source.dussan.org Git - sonarqube.git/commitdiff
ComputationStepsTest now use StepsExplorer instead of duplicating code
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 8 Jul 2015 14:40:57 +0000 (16:40 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 9 Jul 2015 07:24:48 +0000 (09:24 +0200)
server/sonar-server/src/test/java/org/sonar/server/computation/container/ComputeEngineContainerImplTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/container/StepsExplorer.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputationStepsTest.java

index e7e16b1b7baa2807b191318f46dc3ec9d5a926b8..b25b474b2f2506b7a9c31a422f54b73ef1747c5b 100644 (file)
@@ -21,8 +21,6 @@ package org.sonar.server.computation.container;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
 import java.util.Set;
 import org.junit.Test;
 import org.picocontainer.ComponentAdapter;
@@ -30,6 +28,7 @@ import org.sonar.core.platform.ComponentContainer;
 import org.sonar.server.computation.ReportQueue;
 import org.sonar.server.computation.step.ComputationStep;
 
+import static com.google.common.collect.FluentIterable.from;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
@@ -60,14 +59,11 @@ public class ComputeEngineContainerImplTest {
 
     Set<String> stepsCanonicalNames = StepsExplorer.retrieveStepPackageStepsCanonicalNames();
 
-    Set<String> typesInContainer = Sets.newHashSet(
-      Iterables.transform(
-        Iterables.filter(
-          Iterables.transform(
-            ceContainer.getPicoContainer().getComponentAdapters(),
-            ComponentAdapterToImplementationClass.INSTANCE),
-          IsComputationStep.INSTANCE),
-        StepsExplorer.ClassToCanonicalName.INSTANCE));
+    Set<String> typesInContainer = from(ceContainer.getPicoContainer().getComponentAdapters())
+      .transform(ComponentAdapterToImplementationClass.INSTANCE)
+      .filter(IsComputationStep.INSTANCE)
+      .transform(StepsExplorer.toCanonicalName())
+      .toSet();
 
     assertThat(typesInContainer).isEqualTo(stepsCanonicalNames);
   }
index f5aca2715b24cb48833aae0fe0c39412125ab34e..715f848a779ff80d5923a505e7b4bd32a3d5fa4e 100644 (file)
 package org.sonar.server.computation.container;
 
 import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
+import com.google.common.base.Predicate;
+import java.lang.reflect.Modifier;
 import java.util.Set;
+import javax.annotation.Nonnull;
 import org.reflections.Reflections;
 import org.sonar.server.computation.step.ComputationStep;
 
+import static com.google.common.base.Predicates.notNull;
+import static com.google.common.collect.FluentIterable.from;
+
 public class StepsExplorer {
   /**
    * Compute set of canonical names of classes implementing ComputationStep in package step using reflection.
    */
-  static Set<String> retrieveStepPackageStepsCanonicalNames() {
+  public static Set<String> retrieveStepPackageStepsCanonicalNames() {
     Reflections reflections = new Reflections("org.sonar.server.computation.step");
 
-    return Sets.newHashSet(Iterables.transform(reflections.getSubTypesOf(ComputationStep.class), ClassToCanonicalName.INSTANCE));
+    return from(reflections.getSubTypesOf(ComputationStep.class))
+        .filter(NotAbstractClass.INSTANCE)
+        .transform(ClassToCanonicalName.INSTANCE)
+        // anonymous classes do not have canonical names
+        .filter(notNull())
+        .toSet();
+  }
+
+  private enum NotAbstractClass implements Predicate<Class<? extends ComputationStep>> {
+    INSTANCE;
+
+    @Override
+    public boolean apply(Class<? extends ComputationStep> input) {
+      return !Modifier.isAbstract(input.getModifiers());
+    }
+  }
+
+  public static Function<Class<?>, String> toCanonicalName() {
+    return ClassToCanonicalName.INSTANCE;
   }
 
-  enum ClassToCanonicalName implements Function<Class<?>, String> {
+  private enum ClassToCanonicalName implements Function<Class<?>, String> {
     INSTANCE;
 
     @Override
-    public String apply(Class<?> input) {
+    public String apply(@Nonnull Class<?> input) {
       return input.getCanonicalName();
     }
   }
index bc254a287478d00b664aaf803b4eefd7ca86606f..20ab492ae66467457c5a06774ab4c9a9920b36d3 100644 (file)
@@ -22,17 +22,16 @@ package org.sonar.server.computation.step;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
 import java.util.Set;
 import org.junit.Test;
 import org.picocontainer.ComponentAdapter;
-import org.reflections.Reflections;
 import org.sonar.core.platform.ComponentContainer;
 import org.sonar.server.computation.ReportQueue;
 import org.sonar.server.computation.container.ComputeEngineContainerImpl;
+import org.sonar.server.computation.container.StepsExplorer;
 
+import static com.google.common.collect.FluentIterable.from;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
@@ -53,38 +52,17 @@ public class ComputationStepsTest {
   public void all_steps_from_package_step_are_present_in_container() {
     ComputeEngineContainerImpl ceContainer = new ComputeEngineContainerImpl(new ComponentContainer(), mock(ReportQueue.Item.class));
 
-    Set<String> stepsCanonicalNames = retrieveStepPackageStepsCanonicalNames();
+    Set<String> stepsCanonicalNames = StepsExplorer.retrieveStepPackageStepsCanonicalNames();
 
-    Set<String> typesInContainer = Sets.newHashSet(
-        Iterables.transform(
-            Iterables.filter(
-                Iterables.transform(
-                    ceContainer.getPicoContainer().getComponentAdapters(),
-                    ComponentAdapterToImplementationClass.INSTANCE),
-                IsComputationStep.INSTANCE),
-            ClassToCanonicalName.INSTANCE));
+    Set<String> typesInContainer = from(ceContainer.getPicoContainer().getComponentAdapters())
+        .transform(ComponentAdapterToImplementationClass.INSTANCE)
+        .filter(IsComputationStep.INSTANCE)
+        .transform(StepsExplorer.toCanonicalName())
+        .toSet();
 
     assertThat(typesInContainer).isEqualTo(stepsCanonicalNames);
   }
 
-  /**
-   * Compute set of canonical names of classes implementing ComputationStep in package step using reflection.
-   */
-  private Set<String> retrieveStepPackageStepsCanonicalNames() {
-    Reflections reflections = new Reflections("org.sonar.server.computation.step");
-
-    return Sets.newHashSet(Iterables.transform(reflections.getSubTypesOf(ComputationStep.class), ClassToCanonicalName.INSTANCE));
-  }
-
-  private enum ClassToCanonicalName implements Function<Class<?>, String> {
-    INSTANCE;
-
-    @Override
-    public String apply(Class<?> input) {
-      return input.getCanonicalName();
-    }
-  }
-
   private enum ComponentAdapterToImplementationClass implements Function<ComponentAdapter<?>, Class<?>> {
     INSTANCE;