Skip to content

Commit cade00a

Browse files
committed
Propagate
1 parent 9b7d008 commit cade00a

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

tools/dotnet-linker/ApplyPreserveAttributeBase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// This is copied from https://github.com/mono/linker/blob/fa9ccbdaf6907c69ef1bb117906f8f012218d57f/src/tuner/Mono.Tuner/ApplyPreserveAttributeBase.cs
22
// and modified to work without a Profile class.
33

4+
using System.Linq;
5+
46
using Mono.Linker;
57
using Mono.Linker.Steps;
68

@@ -263,7 +265,7 @@ bool TryApplyPreserveAttribute (TypeDefinition type)
263265
List<CustomAttribute> GetPreserveAttributes (ICustomAttributeProvider provider)
264266
{
265267
if (!provider.HasCustomAttributes)
266-
return attrs;
268+
return new List<CustomAttribute> ();
267269

268270
return provider.CustomAttributes.Where (a => IsPreservedAttribute (provider, a)).ToList ();
269271
}

tools/dotnet-linker/ApplyPreserveAttributeStep.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ bool IApplyPreserveAttribute.PreserveType (TypeDefinition type, bool allMembers)
5454
return AddDynamicDependencyAttribute (type, allMembers);
5555
}
5656

57-
MethodDefinition GetOrCreateModuleConstructor (ModuleDefinition @module)
57+
MethodDefinition GetOrCreateModuleConstructor (ModuleDefinition @module, out bool modified)
5858
{
5959
var moduleType = @module.GetModuleType ();
60-
return abr.GetOrCreateStaticConstructor (moduleType, out var modified);
60+
return abr.GetOrCreateStaticConstructor (moduleType, out modified);
6161
}
6262

6363
bool IApplyPreserveAttribute.PreserveConditional (TypeDefinition onType, MethodDefinition forMethod)
@@ -78,7 +78,7 @@ bool IApplyPreserveAttribute.PreserveConditional (TypeDefinition onType, MethodD
7878

7979
bool AddDynamicDependencyAttribute (TypeDefinition type, bool allMembers)
8080
{
81-
var moduleConstructor = GetOrCreateModuleConstructor (type.GetModule ());
81+
var moduleConstructor = GetOrCreateModuleConstructor (type.GetModule (), out var modified);
8282
var members = allMembers
8383
? allMemberTypes
8484
: DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors;
@@ -89,7 +89,8 @@ bool AddDynamicDependencyAttribute (TypeDefinition type, bool allMembers)
8989
}
9090

9191
var attrib = abr.CreateDynamicDependencyAttribute (members, type);
92-
return abr.AddAttributeOnlyOnce (moduleConstructor, attrib);
92+
modified |= abr.AddAttributeOnlyOnce (moduleConstructor, attrib);
93+
return modified;
9394
}
9495

9596
bool AddConditionalDynamicDependencyAttribute (TypeDefinition onType, MethodDefinition forMethod)
@@ -103,10 +104,11 @@ bool AddDynamicDependencyAttribute (IMetadataTokenProvider provider)
103104
if (member is null)
104105
throw ErrorHelper.CreateError (99, $"Unable to add dynamic dependency attribute to {provider.GetType ().FullName}");
105106

106-
var moduleConstructor = GetOrCreateModuleConstructor (member.GetModule ());
107+
var moduleConstructor = GetOrCreateModuleConstructor (member.GetModule (), out var modified);
107108
var signature = DocumentationComments.GetSignature (member);
108109
var attrib = abr.CreateDynamicDependencyAttribute (signature, member.DeclaringType);
109-
return abr.AddAttributeOnlyOnce (moduleConstructor, attrib);
110+
modified |= abr.AddAttributeOnlyOnce (moduleConstructor, attrib);
111+
return modified;
110112
}
111113
}
112114
}

0 commit comments

Comments
 (0)