[
https://issues.apache.org/jira/browse/AVRO-4331?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated AVRO-4331:
---------------------------------
Labels: pull-request-available (was: )
> [C#] Generated Get()/Put() switch emits unreachable statement after
> exhaustive switc
> ------------------------------------------------------------------------------------
>
> Key: AVRO-4331
> URL: https://issues.apache.org/jira/browse/AVRO-4331
> Project: Apache Avro
> Issue Type: Improvement
> Components: csharp
> Affects Versions: 1.12.1
> Reporter: Nikola G.
> Priority: Minor
> Labels: pull-request-available
> Original Estimate: 0.5h
> Time Spent: 10m
> Remaining Estimate: 20m
>
> Avrogen generates Get(int fieldPos) / Put(int fieldPos, object fieldValue) on
> every SpecificRecordBase-derived record. The switch body is built as a raw
> string in CodeGen.cs and added to the method via CodeSnippetExpression:
>
>
>
> var cseGet = new CodeSnippetExpression(getFieldStmt.ToString());
>
>
> cmmGet.Statements.Add(cseGet);
>
>
>
>
>
> CodeStatementCollection.Add(CodeExpression) wraps the expression in a
> CodeExpressionStatement, and the C# CodeDom provider always appends a
> trailing ; after an expression statement even though the snippet text is
> already a
> complete switch (fieldPos) \{ ... } block. The generated code looks like
> this:
> public virtual object Get(int fieldPos)
>
>
> {
>
>
> switch (fieldPos)
>
>
> {
>
>
> case 0: return this.Value;
>
>
> case 1: return this.Quality;
>
>
> default: throw new global::Avro.AvroRuntimeException("Bad index " +
> fieldPos + " in Get()");
>
>
> }; // <- stray empty statement, unreachable
>
>
> }
> Since every branch of the switch returns or throws, that trailing ; is
> unreachable. Roslyn's own compiler analysis does not flag it (dotnet build
> stays clean), but IDE analyzers with more thorough flow analysis notably
> JetBrains
> ReSharper/Rider — do flag it as unreachable code, forcing consumers to add
> per-file .editorconfig suppressions for every directory of avrogen output
> just to keep their IDE quiet.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
