{"record":{"id":"365b1169e45db383","repo":"SonarSource/sonarqube","slug":"invalid-type","errorCode":null,"errorMessage":"Invalid type: ","messagePattern":"Invalid type: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"server/sonar-webserver-common/src/main/java/org/sonar/server/common/newcodeperiod/NewCodeDefinitionResolver.java","lineNumber":152,"sourceCode":"\n  private static String parseDays(String value) {\n    try {\n      return Integer.toString(NewCodePeriodParser.parseDays(value));\n    } catch (Exception e) {\n      throw new IllegalArgumentException(\"Failed to parse number of days: \" + value);\n    }\n  }\n\n  private static void requireValue(NewCodePeriodType type, @Nullable String value) {\n    Preconditions.checkArgument(value != null, \"New code definition type '%s' requires a newCodeDefinitionValue\", type);\n  }\n\n  private static NewCodePeriodType parseNewCodeDefinitionType(String typeStr) {\n    NewCodePeriodType type;\n    try {\n      type = NewCodePeriodType.valueOf(typeStr.toUpperCase(Locale.US));\n    } catch (IllegalArgumentException e) {\n      throw new IllegalArgumentException(\"Invalid type: \" + typeStr);\n    }\n    validateType(type);\n    return type;\n  }\n\n  private static void validateType(NewCodePeriodType type) {\n    Preconditions.checkArgument(projectCreationNCDTypes.contains(type), \"Invalid type '%s'. `newCodeDefinitionType` can only be set with types: %s\",\n      type, projectCreationNCDTypes);\n  }\n\n}\n","sourceCodeStart":134,"sourceCodeEnd":164,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-webserver-common/src/main/java/org/sonar/server/common/newcodeperiod/NewCodeDefinitionResolver.java#L134-L164","documentation":"New Code Definition types are restricted to the NewCodePeriodType enum (e.g. PREVIOUS_VERSION, NUMBER_OF_DAYS, REFERENCE, SPECIFIC_ANALYSIS). parseNewCodeDefinitionType uppercases the input and calls valueOf; unknown strings are rethrown as this IllegalArgumentException, and even valid enum names are then checked by validateType.","triggerScenarios":"Calling newCodePeriodType (e.g. via api/new_code_periods) with a type string that does not match a NewCodePeriodType constant, such as 'NUMBER_OF_MONTHS', 'days', or 'main_branch'.","commonSituations":"Typo'd type parameters; clients written against older SonarQube versions with different type names; copying values from other SonarQube settings that use different enums.","solutions":["Use one of the exact supported types: PREVIOUS_VERSION, NUMBER_OF_DAYS, REFERENCE, SPECIFIC_ANALYSIS (case-insensitive).","Check GET api/new_code_periods/available_types or the enum definition for valid names.","Fix client code that passes a legacy or custom type string."],"exampleFix":"// before\nnewCodePeriodType(\"days\")\n\n// after\nnewCodePeriodType(\"NUMBER_OF_DAYS\")","handlingStrategy":"validation","validationCode":"// allowlist check before calling\nSet<String> VALID = Set.of(\"PREVIOUS_VERSION\", \"NUMBER_OF_DAYS\", \"REFERENCE\", \"SPECIFIC_ANALYSIS\");\nif (typeStr == null || !VALID.contains(typeStr.toUpperCase(Locale.US))) throw new IllegalArgumentException(\"Unsupported type: \" + typeStr);","typeGuard":null,"tryCatchPattern":"try { NewCodePeriodType t = NewCodePeriodType.valueOf(typeStr.toUpperCase(Locale.US)); } catch (IllegalArgumentException e) { log.error(\"Unknown new code type: {}\", typeStr); }","preventionTips":["Use a dropdown/enum on the client instead of free text for the type.","Check available types from the API rather than hard-coding strings."],"tags":["new-code-definition","enum","validation"],"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-17T15:17:12.973Z"}