Browse Source

Fix #3159: CSharpAmbience.ConvertSymbol output incorrect for record structs and init properties.

pull/3266/head
Siegfried Pammer 9 months ago
parent
commit
43f602211b
  1. 9
      ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs

9
ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs

@ -85,6 +85,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
break; break;
case ClassType.RecordStruct: case ClassType.RecordStruct:
writer.WriteKeyword(Roles.RecordKeyword, "record"); writer.WriteKeyword(Roles.RecordKeyword, "record");
writer.Space();
writer.WriteKeyword(Roles.StructKeyword, "struct"); writer.WriteKeyword(Roles.StructKeyword, "struct");
break; break;
default: default:
@ -181,8 +182,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
if ((ConversionFlags & ConversionFlags.ShowBody) == ConversionFlags.ShowBody && !(node is TypeDeclaration)) if ((ConversionFlags & ConversionFlags.ShowBody) == ConversionFlags.ShowBody && !(node is TypeDeclaration))
{ {
IProperty property = symbol as IProperty; if (symbol is IProperty property)
if (property != null)
{ {
writer.Space(); writer.Space();
writer.WriteToken(Roles.LBrace, "{"); writer.WriteToken(Roles.LBrace, "{");
@ -195,7 +195,10 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
} }
if (property.CanSet) if (property.CanSet)
{ {
writer.WriteKeyword(PropertyDeclaration.SetKeywordRole, "set"); if ((ConversionFlags & ConversionFlags.SupportInitAccessors) != 0 && property.Setter.IsInitOnly)
writer.WriteKeyword(PropertyDeclaration.InitKeywordRole, "init");
else
writer.WriteKeyword(PropertyDeclaration.SetKeywordRole, "set");
writer.WriteToken(Roles.Semicolon, ";"); writer.WriteToken(Roles.Semicolon, ";");
writer.Space(); writer.Space();
} }

Loading…
Cancel
Save