Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/linker/Linker/Annotations.cs')
-rw-r--r--src/linker/Linker/Annotations.cs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/linker/Linker/Annotations.cs b/src/linker/Linker/Annotations.cs
index 37deab5f3..588d83fb0 100644
--- a/src/linker/Linker/Annotations.cs
+++ b/src/linker/Linker/Annotations.cs
@@ -598,6 +598,10 @@ namespace Mono.Linker
/// and .ctors are reported as requiring unreferenced code when the declaring type has RUC on it.</remarks>
internal bool DoesMethodRequireUnreferencedCode (MethodDefinition method, out RequiresUnreferencedCodeAttribute attribute)
{
+ if (method.IsStaticConstructor ()) {
+ attribute = null;
+ return false;
+ }
if (TryGetLinkerAttribute (method, out attribute))
return true;
@@ -624,6 +628,26 @@ namespace Mono.Linker
return false;
}
+ internal bool DoesFieldRequireUnreferencedCode (FieldDefinition field, out RequiresUnreferencedCodeAttribute attribute)
+ {
+ if (!field.IsStatic || field.DeclaringType is null) {
+ attribute = null;
+ return false;
+ }
+
+ return TryGetLinkerAttribute (field.DeclaringType, out attribute);
+ }
+
+ internal bool DoesMemberRequireUnreferencedCode (IMemberDefinition member, out RequiresUnreferencedCodeAttribute attribute)
+ {
+ attribute = null;
+ return member switch {
+ MethodDefinition method => DoesMethodRequireUnreferencedCode (method, out attribute),
+ FieldDefinition field => DoesFieldRequireUnreferencedCode (field, out attribute),
+ _ => false
+ };
+ }
+
public void EnqueueVirtualMethod (MethodDefinition method)
{
if (!method.IsVirtual)