Suppress virtual method call from the constructor warning for AddCategory call #849
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.
Continuation of fixes with virtual calls being made from constructors. The issue originally reported by SonarCloud scans: https://sonarcloud.io/project/issues?resolved=false&rules=csharpsquid%3AS1699&id=apache_lucenenet and referenced in this issue: #670
This takes care of what should be the last issue in this area. We already modified DirectoryTaxonomyWriter to accept a factory for index writer and now the last remaining virtual call it makes is to AddCategory in case an empty/new taxonomy directory is being created.
There does not appear to be an easy way to translate this into a factory that makes a logical sense.
I considered adding a private AddCategory method that constructor and AddCategory could call, but it seemed like it would prevent the subclasses to completely intercept and modify the root category AddCategory call. Instead, went with the comments to warn the users about what is happening. I think a subclass has an option to do something like capture an attempt to add root category (easy to detect if it is root by ID), and save it to be written later (e.g. post constructor run from its own constructor).