{"record":{"id":"474efdcc69d5c795","repo":"SonarSource/sonarqube","slug":"unsupported-value-s-of-measure-level-can-not-be","errorCode":null,"errorMessage":"Unsupported value '%s' of Measure.Level can not be converted to EvaluationStatus","messagePattern":"Unsupported value '(.+?)' of Measure\\.Level can not be converted to EvaluationStatus","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/QualityGateMeasuresStep.java","lineNumber":129,"sourceCode":"\n      addProjectMeasure(project, builder);\n\n      updateQualityGateStatusHolder(qualityGate.get(), builder);\n    }\n  }\n\n  private void updateQualityGateStatusHolder(QualityGate qualityGate, QualityGateDetailsDataBuilder builder) {\n    qualityGateStatusHolder.setStatus(convert(builder.getGlobalLevel()), createStatusPerCondition(qualityGate.getConditions(), builder.getEvaluatedConditions()));\n  }\n\n  private static ConditionStatus.EvaluationStatus toEvaluationStatus(Measure.Level globalLevel) {\n    switch (globalLevel) {\n      case OK:\n        return ConditionStatus.EvaluationStatus.OK;\n      case ERROR:\n        return ConditionStatus.EvaluationStatus.ERROR;\n      default:\n        throw new IllegalArgumentException(format(\n          \"Unsupported value '%s' of Measure.Level can not be converted to EvaluationStatus\",\n          globalLevel));\n    }\n  }\n\n  private static org.sonar.ce.task.projectanalysis.qualitygate.QualityGateStatus convert(Measure.Level globalLevel) {\n    switch (globalLevel) {\n      case OK:\n        return org.sonar.ce.task.projectanalysis.qualitygate.QualityGateStatus.OK;\n      case ERROR:\n        return org.sonar.ce.task.projectanalysis.qualitygate.QualityGateStatus.ERROR;\n      default:\n        throw new IllegalArgumentException(format(\n          \"Unsupported value '%s' of Measure.Level can not be converted to QualityGateStatus\",\n          globalLevel));\n    }\n  }\n","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/QualityGateMeasuresStep.java#L111-L147","documentation":"QualityGateMeasuresStep converts the computed global Measure.Level (OK/ERROR) into the QualityGate ConditionStatus.EvaluationStatus enum. The switch only handles OK and ERROR; any other Measure.Level value (e.g. NONE) reaching this method triggers an IllegalArgumentException, indicating an internal invariant was broken upstream.","triggerScenarios":"createStatusPerCondition calls toEvaluationStatus with a globalLevel that is neither Measure.Level.OK nor Measure.Level.ERROR — e.g. a measure carrying Level.NONE or null-based default produced by quality gate evaluation.","commonSituations":"Custom/buggy quality gate evaluation producing NONE level; plugin or version mismatch where a new Measure.Level value was introduced; corrupted computed measures for the branch.","solutions":["Inspect the evaluated quality gate and measures for the component to find why the level is not OK/ERROR","Ensure the quality gate evaluation step always sets OK or ERROR before QualityGateMeasuresStep runs","Upgrade SonarQube so analyzer, webapp and CE versions are aligned (mixed versions can introduce new enum values)","File a bug with the stack trace if a stock quality gate produces NONE at this point"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if (globalLevel != Measure.Level.OK && globalLevel != Measure.Level.ERROR) {\n  throw new IllegalStateException(\"Unexpected quality gate level before conversion: \" + globalLevel);\n}","typeGuard":"boolean isConvertible(Measure.Level level) {\n  return level == Measure.Level.OK || level == Measure.Level.ERROR;\n}","tryCatchPattern":"try {\n  ConditionStatus.EvaluationStatus s = toEvaluationStatus(globalLevel);\n} catch (IllegalArgumentException e) {\n  // log the offending level and fail the task with diagnostics\n  LOGGER.error(\"Quality gate level conversion failed\", e);\n  throw e;\n}","preventionTips":["Ensure quality gate evaluation always assigns OK or ERROR before this step","Keep SonarQube server and plugins on aligned versions","Add tests covering all Measure.Level values in conversion utilities","Treat Level.NONE results upstream as an explicit error condition"],"tags":["sonarqube","quality-gate","enum-conversion","illegal-argument"],"backgroundTag":"invalid-enum-value","analyzedSha":"184c821202192afc1c599fc912d0889b69fffa53","analyzedAt":"2026-09-09T12:23:51.573Z","contentChangedAt":"2026-09-09T12:23:51.573Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}