[csharp] Fix string enum models sometimes losing attributes #8765
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR checklist
./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
and./bin/security/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
.3.0.0
branch for changes related to OpenAPI spec 3.0. Default:master
.Description of the PR
Depending on HashMap iteration order, the isString flag added to string enum values can be lost due to copying a reference to the allowableValues map to properties that reference the enum. The result is that the code fails to compile.
This should fix #7656, fix #7657 (regarded as a duplicate of 7656), and fix #8027 (which also appears to be the same issue).
Both the base updateCodegenPropertyEnum method and later in postProcessEnumRefs replace the enumVars entry in the allowableValues map. Depending on the order the two methods run for the same enum, it's possible for the "CodegenProperty" values such as isString added by postProcessEnumRefs to get lost when updateCodegenPropertyEnum replaces the list. By passing a copy, the order no longer matters.
I attempted to add a test case to the existing enum tests, but was unable to make the problem reproduce there. But all three linked issues' reproduction documents no longer reproduce the issue with this change. My local test case where I ran into this originally also no longer reproduces with this change.
/cc @mandrean