{"record":{"id":"c458f9d62ccdbde3","repo":"OpenAPITools/openapi-generator","slug":"invalid-model-property-naming-name-must-be-o","errorCode":null,"errorMessage":"Invalid model property naming '{name}'. Must be 'original', 'camelCase', 'PascalCase' or 'snake_case'","messagePattern":"Invalid model property naming '(.+?)'\\. Must be 'original', 'camelCase', 'PascalCase' or 'snake_case'","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java","lineNumber":313,"sourceCode":"        if (isReservedWord(varName) || varName.matches(\"^\\\\d.*\")) {\n            varName = escapeReservedWord(varName);\n        }\n\n        return varName;\n    }\n\n    public String getNameUsingModelPropertyNaming(String name) {\n        switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {\n            case original:\n                return name;\n            case camelCase:\n                return camelize(name, LOWERCASE_FIRST_LETTER);\n            case PascalCase:\n                return camelize(name);\n            case snake_case:\n                return underscore(name);\n            default:\n                throw new IllegalArgumentException(\"Invalid model property naming '\" +\n                        name + \"'. Must be 'original', 'camelCase', \" +\n                        \"'PascalCase' or 'snake_case'\");\n        }\n    }\n\n    @Override\n    public String escapeReservedWord(String name) {\n        if (this.reservedWordsMappings().containsKey(name)) {\n            return this.reservedWordsMappings().get(name);\n        }\n        // Reserved words will be further escaped at the mustache compiler level.\n        // Scala escaping done here (via `, without compiler escaping) would otherwise be HTML encoded.\n        return \"`\" + name + \"`\";\n    }\n\n    @Override\n    public Mustache.Compiler processCompiler(Mustache.Compiler compiler) {\n        Mustache.Escaper SCALA = new Mustache.Escaper() {","sourceCodeStart":295,"sourceCodeEnd":331,"githubUrl":"https://github.com/OpenAPITools/openapi-generator/blob/fcec517be3cf5b7964296bcba25fbc97541484e7/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java#L295-L331","documentation":"AbstractScalaCodegen.getNameUsingModelPropertyNaming switches over MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming()) and covers all four constants (original, camelCase, PascalCase, snake_case). The default branch's IllegalArgumentException is therefore defensive dead code: reachable only if the enum gains a constant without a matching case here. Its message also interpolates the property name, not the invalid naming value, so it reads misleadingly.","triggerScenarios":"Not user-triggerable in stock builds — setModelPropertyNaming already constrains modelPropertyNaming to valid enum names, and every current name has a case. It fires only in forks that add a MODEL_PROPERTY_NAMING_TYPE member without extending this switch.","commonSituations":"Custom forks adding a naming style (e.g. SCREAMING_SNAKE_CASE); nothing in normal CLI/Maven/Gradle use can produce it.","solutions":["If your fork added a naming enum member, add the corresponding case in getNameUsingModelPropertyNaming in the same change","On stock builds, file an issue with the stack trace — reaching this branch signals an enum/switch mismatch regression","Add a unit test that iterates all enum constants through this method so the mismatch fails at build time, not at generation time"],"exampleFix":"// before (fork added KEBAB_CASE constant; switch lacks a case)\n// after\nswitch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {\n    case original: return name;\n    case camelCase: return camelize(name, LOWERCASE_FIRST_LETTER);\n    case PascalCase: return camelize(name);\n    case snake_case: return underscore(name);\n    case KEBAB_CASE: return name.replace('_', '-'); // new case added with the enum member\n    default: throw new IllegalArgumentException(\"Invalid model property naming\");\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { generator.generate(); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"Invalid model property naming\")) { /* stock builds cannot reach this branch: report enum/switch mismatch */ } throw e; }","preventionTips":["When extending MODEL_PROPERTY_NAMING_TYPE in a fork, update this switch in the same change","Cover all enum constants with a parameterized unit test","Note the message interpolates the property name, not the naming value — do not chase phantom config errors"],"tags":["scala","internal","naming","defensive-code"],"backgroundTag":"unsupported-enum-value","analyzedSha":"fcec517be3cf5b7964296bcba25fbc97541484e7","analyzedAt":"2026-08-22T11:13:11.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}