]> source.dussan.org Git - sonarqube.git/commitdiff
fix potential NPE in QualityProfileEventsStep
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 2 Jun 2015 15:41:29 +0000 (17:41 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 2 Jun 2015 16:01:17 +0000 (18:01 +0200)
server/sonar-server/src/main/java/org/sonar/server/computation/step/QualityProfileEventsStep.java

index 6064899b7110246a30ccdcdbab318c0f592338e8..3a7c955b556c097cb711c8fd89f4414d3c58de31 100644 (file)
@@ -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<String, QualityProfile> previousProfiles = QPMeasureData.fromJson(previousMeasure.get().getData()).getProfilesByKey();
     Optional<BatchReport.Measure> currentMeasure = measureRepository.findCurrent(projectComponent, CoreMetrics.QUALITY_PROFILES);
     if (!currentMeasure.isPresent()) {
       throw new IllegalStateException("Missing measure " + CoreMetrics.QUALITY_PROFILES + " for component " + projectComponent.getRef());
     }
     Map<String, QualityProfile> currentProfiles = QPMeasureData.fromJson(currentMeasure.get().getStringValue()).getProfilesByKey();
 
+    Map<String, QualityProfile> previousProfiles = parseJsonData(previousMeasure);
     detectNewOrUpdatedProfiles(projectComponent, previousProfiles, currentProfiles);
     detectNoMoreUsedProfiles(projectComponent, previousProfiles, currentProfiles);
   }
 
+  private static Map<String, QualityProfile> parseJsonData(Optional<MeasureDto> previousMeasure) {
+    String data = previousMeasure.get().getData();
+    if (data == null) {
+      return Collections.emptyMap();
+    }
+    return QPMeasureData.fromJson(data).getProfilesByKey();
+  }
+
   private void detectNoMoreUsedProfiles(Component context, Map<String, QualityProfile> previousProfiles, Map<String, QualityProfile> currentProfiles) {
     for (QualityProfile previousProfile : previousProfiles.values()) {
       if (!currentProfiles.containsKey(previousProfile.getQpKey())) {