Browse Source

add MutableMeasureComputersHolder

to remove dependency on a concrete class holder
tags/5.2-RC1
Sébastien Lesaint 8 years ago
parent
commit
03ab11c531

+ 2
- 7
server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureComputersHolderImpl.java View File

@@ -28,7 +28,7 @@ import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.FluentIterable.from;
import static java.util.Objects.requireNonNull;

public class MeasureComputersHolderImpl implements MeasureComputersHolder {
public class MeasureComputersHolderImpl implements MutableMeasureComputersHolder {

@CheckForNull
private Iterable<MeasureComputer> measureComputers;
@@ -39,12 +39,7 @@ public class MeasureComputersHolderImpl implements MeasureComputersHolder {
return measureComputers;
}

/**
* Initializes the measure computers in the holder.
*
* @throws NullPointerException if the specified List is {@code null}
* @throws IllegalStateException if the holder has already been initialized
*/
@Override
public void setMeasureComputers(Iterable<MeasureComputer> measureComputers) {
requireNonNull(measureComputers, "Measure computers cannot be null");
checkState(this.measureComputers == null, "Measure computers have already been initialized");

+ 36
- 0
server/sonar-server/src/main/java/org/sonar/server/computation/measure/MutableMeasureComputersHolder.java View File

@@ -0,0 +1,36 @@
/*
* 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.server.computation.measure;

import org.sonar.api.ce.measure.MeasureComputer;

/**
* A {@link MeasureComputersHolder} which value can be set only once.
*/
public interface MutableMeasureComputersHolder extends MeasureComputersHolder {

/**
* Initializes the measure computers in the holder.
*
* @throws NullPointerException if the specified Iterable is {@code null}
* @throws IllegalStateException if the holder has already been initialized
*/
void setMeasureComputers(Iterable<MeasureComputer> measureComputers);
}

+ 7
- 7
server/sonar-server/src/main/java/org/sonar/server/computation/step/FeedMeasureComputers.java View File

@@ -36,18 +36,18 @@ import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.Metrics;
import org.sonar.api.utils.dag.DirectAcyclicGraph;
import org.sonar.server.computation.measure.MeasureComputersHolderImpl;
import org.sonar.server.computation.measure.MutableMeasureComputersHolder;
import org.sonar.server.computation.measure.api.MeasureComputerProviderContext;

public class FeedMeasureComputers implements ComputationStep {

private static final Set<String> CORE_METRIC_KEYS = FluentIterable.from(CoreMetrics.getMetrics()).transform(MetricToKey.INSTANCE).toSet();

private final MeasureComputersHolderImpl measureComputersHolder;
private final MutableMeasureComputersHolder measureComputersHolder;
private final Metrics[] metricsRepositories;
private final MeasureComputerProvider[] measureComputerProviders;

public FeedMeasureComputers(MeasureComputersHolderImpl measureComputersHolder, Metrics[] metricsRepositories, MeasureComputerProvider[] measureComputerProviders) {
public FeedMeasureComputers(MutableMeasureComputersHolder measureComputersHolder, Metrics[] metricsRepositories, MeasureComputerProvider[] measureComputerProviders) {
this.measureComputersHolder = measureComputersHolder;
this.measureComputerProviders = measureComputerProviders;
this.metricsRepositories = metricsRepositories;
@@ -56,21 +56,21 @@ public class FeedMeasureComputers implements ComputationStep {
/**
* Constructor override used by Pico to instantiate the class when no plugin is defining metrics
*/
public FeedMeasureComputers(MeasureComputersHolderImpl measureComputersHolder, MeasureComputerProvider[] measureComputerProviders) {
public FeedMeasureComputers(MutableMeasureComputersHolder measureComputersHolder, MeasureComputerProvider[] measureComputerProviders) {
this(measureComputersHolder, new Metrics[] {}, measureComputerProviders);
}

/**
* Constructor override used by Pico to instantiate the class when no plugin is defining measure computers
*/
public FeedMeasureComputers(MeasureComputersHolderImpl measureComputersHolder, Metrics[] metricsRepositories) {
public FeedMeasureComputers(MutableMeasureComputersHolder measureComputersHolder, Metrics[] metricsRepositories) {
this(measureComputersHolder, metricsRepositories, new MeasureComputerProvider[] {});
}

/**
* Constructor override used by Pico to instantiate the class when no plugin is defining metrics neither measure computers
*/
public FeedMeasureComputers(MeasureComputersHolderImpl measureComputersHolder) {
public FeedMeasureComputers(MutableMeasureComputersHolder measureComputersHolder) {
this(measureComputersHolder, new Metrics[] {}, new MeasureComputerProvider[] {});
}

@@ -108,7 +108,7 @@ public class FeedMeasureComputers implements ComputationStep {
dag.add(generates, computer);
}
}
return FluentIterable.from(dag.sort());
return dag.sort();
}

private void validateInputMetrics(List<MeasureComputer> computers) {

Loading…
Cancel
Save