Browse Source

Add RemoveCompilerFeatureRequiredAttribute

pull/2873/head
Siegfried Pammer 2 years ago committed by Daniel Grunwald
parent
commit
263360f3f3
  1. 25
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 2
      ICSharpCode.Decompiler/TypeSystem/Implementation/KnownAttributes.cs

25
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -1406,6 +1406,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1406,6 +1406,7 @@ namespace ICSharpCode.Decompiler.CSharp
attr.Remove();
}
}
RemoveCompilerFeatureRequiredAttribute(typeDecl, "RefStructs");
}
if (settings.RequiredMembers)
{
@ -1851,6 +1852,30 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1851,6 +1852,30 @@ namespace ICSharpCode.Decompiler.CSharp
return found;
}
internal static bool RemoveCompilerFeatureRequiredAttribute(EntityDeclaration entityDecl, string feature)
{
bool found = false;
foreach (var section in entityDecl.Attributes)
{
foreach (var attr in section.Attributes)
{
var symbol = attr.Type.GetSymbol();
if (symbol is ITypeDefinition td && td.FullTypeName == KnownAttribute.CompilerFeatureRequired.GetTypeName()
&& attr.Arguments.Count == 1 && attr.Arguments.SingleOrDefault() is PrimitiveExpression pe
&& pe.Value is string s && s == feature)
{
attr.Remove();
found = true;
}
}
if (section.Attributes.Count == 0)
{
section.Remove();
}
}
return found;
}
bool FindAttribute(EntityDeclaration entityDecl, KnownAttribute attributeType, out Syntax.Attribute attribute)
{
attribute = null;

2
ICSharpCode.Decompiler/TypeSystem/Implementation/KnownAttributes.cs

@ -33,6 +33,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -33,6 +33,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
None,
CompilerGenerated,
CompilerFeatureRequired,
/// <summary>
/// Marks a method as extension method; or a class as containing extension methods.
/// </summary>
@ -119,6 +120,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -119,6 +120,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
static readonly TopLevelTypeName[] typeNames = new TopLevelTypeName[Count]{
default,
new TopLevelTypeName("System.Runtime.CompilerServices", nameof(CompilerGeneratedAttribute)),
new TopLevelTypeName("System.Runtime.CompilerServices", "CompilerFeatureRequiredAttribute"),
new TopLevelTypeName("System.Runtime.CompilerServices", nameof(ExtensionAttribute)),
new TopLevelTypeName("System.Runtime.CompilerServices", nameof(DynamicAttribute)),
new TopLevelTypeName("System.Runtime.CompilerServices", nameof(TupleElementNamesAttribute)),

Loading…
Cancel
Save