import java.util.Optional;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+import org.sonar.ce.task.projectanalysis.util.cache.DoubleCache;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
@CheckForNull
private final Double variation;
- private Measure(ValueType valueType,
- @Nullable Double value, @Nullable String data, @Nullable Level dataLevel,
+ private Measure(ValueType valueType, @Nullable Double value, @Nullable String data, @Nullable Level dataLevel,
@Nullable QualityGateStatus qualityGateStatus, @Nullable Double variation) {
this.valueType = valueType;
- this.value = value;
+ this.value = DoubleCache.intern(value);
this.data = data;
this.dataLevel = dataLevel;
this.qualityGateStatus = qualityGateStatus;
/**
* Sets the QualityGateStatus of the updated Measure to create.
*
- * @throws NullPointerException if the specified {@link QualityGateStatus} is {@code null}
+ * @throws NullPointerException if the specified {@link QualityGateStatus} is {@code null}
* @throws UnsupportedOperationException if the source measure already has a {@link QualityGateStatus}
*/
public UpdateMeasureBuilder setQualityGateStatus(QualityGateStatus qualityGateStatus) {
import com.google.common.base.Function;
import javax.annotation.Nonnull;
-import org.sonar.db.metric.MetricDto;
import org.sonar.ce.task.projectanalysis.measure.Measure;
+import org.sonar.ce.task.projectanalysis.util.cache.DoubleCache;
+import org.sonar.db.metric.MetricDto;
import static com.google.common.base.MoreObjects.firstNonNull;
return new MetricImpl(
metricDto.getId(), metricDto.getKey(), metricDto.getShortName(), metricType,
decimalScale,
- metricDto.getBestValue(), metricDto.isOptimizedBestValue());
+ DoubleCache.intern(metricDto.getBestValue()), metricDto.isOptimizedBestValue());
}
}
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.ce.task.projectanalysis.util.cache;
+
+import javax.annotation.Nullable;
+
+public class DoubleCache {
+ private static final Double ONE = 1.0;
+ private static final Double HUNDRED = 100.0;
+ private static final Double ZERO = 0.0;
+
+ private DoubleCache() {
+ // static only
+ }
+
+ public static Double intern(@Nullable Double num) {
+ if (ZERO.equals(num)) {
+ return ZERO;
+ }
+ if (ONE.equals(num)) {
+ return ONE;
+ }
+ if (HUNDRED.equals(num)) {
+ return HUNDRED;
+ }
+ return num;
+ }
+}