From 6e5082fdce62ee74b31751c295238871f4cf72c2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Tue, 2 Jun 2015 17:41:29 +0200 Subject: [PATCH] fix potential NPE in QualityProfileEventsStep --- .../computation/step/QualityProfileEventsStep.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/QualityProfileEventsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/QualityProfileEventsStep.java index 6064899b711..3a7c955b556 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/QualityProfileEventsStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/QualityProfileEventsStep.java @@ -21,6 +21,7 @@ package org.sonar.server.computation.step; import com.google.common.base.Optional; import com.google.common.collect.ImmutableSortedMap; +import java.util.Collections; import java.util.Date; import java.util.Map; import javax.annotation.Nullable; @@ -75,17 +76,25 @@ public class QualityProfileEventsStep implements ComputationStep { } // Load current profiles - Map previousProfiles = QPMeasureData.fromJson(previousMeasure.get().getData()).getProfilesByKey(); Optional currentMeasure = measureRepository.findCurrent(projectComponent, CoreMetrics.QUALITY_PROFILES); if (!currentMeasure.isPresent()) { throw new IllegalStateException("Missing measure " + CoreMetrics.QUALITY_PROFILES + " for component " + projectComponent.getRef()); } Map currentProfiles = QPMeasureData.fromJson(currentMeasure.get().getStringValue()).getProfilesByKey(); + Map previousProfiles = parseJsonData(previousMeasure); detectNewOrUpdatedProfiles(projectComponent, previousProfiles, currentProfiles); detectNoMoreUsedProfiles(projectComponent, previousProfiles, currentProfiles); } + private static Map parseJsonData(Optional previousMeasure) { + String data = previousMeasure.get().getData(); + if (data == null) { + return Collections.emptyMap(); + } + return QPMeasureData.fromJson(data).getProfilesByKey(); + } + private void detectNoMoreUsedProfiles(Component context, Map previousProfiles, Map currentProfiles) { for (QualityProfile previousProfile : previousProfiles.values()) { if (!currentProfiles.containsKey(previousProfile.getQpKey())) { -- 2.39.5