From c3be0c8666d5b67e62133cb27d37597aeb894dc2 Mon Sep 17 00:00:00 2001 From: ds5678 <49847914+ds5678@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:06:45 -0700 Subject: [PATCH 1/2] Add set accessor for Attributes properties --- Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs | 6 +++++- Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs | 8 ++++++-- .../GenericParameterTypeAnalysisContext.cs | 6 +++++- .../Model/Contexts/MethodAnalysisContext.cs | 14 +++++++++++--- .../Model/Contexts/ParameterAnalysisContext.cs | 6 +++++- .../Model/Contexts/PropertyAnalysisContext.cs | 6 +++++- Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs | 8 ++++++-- 7 files changed, 43 insertions(+), 11 deletions(-) diff --git a/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs index 1a2e0ace..04f05e35 100644 --- a/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs @@ -24,7 +24,11 @@ public class EventAnalysisContext : HasCustomAttributesAndName, IEventInfoProvid public EventAttributes? OverrideAttributes { get; set; } - public EventAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public EventAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } public virtual TypeAnalysisContext DefaultEventType => DeclaringType.DeclaringAssembly.ResolveIl2CppType(Definition?.RawType) ?? throw new($"Subclasses must override {nameof(DefaultEventType)}."); diff --git a/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs index c59e5c0c..c20155d6 100644 --- a/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs @@ -35,7 +35,11 @@ public class FieldAnalysisContext : HasCustomAttributesAndName, IFieldInfoProvid public virtual FieldAttributes? OverrideAttributes { get; set; } - public FieldAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public FieldAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } public bool IsStatic => (Attributes & FieldAttributes.Static) != 0; @@ -68,7 +72,7 @@ public FieldAttributes Visibility } set { - OverrideAttributes = (Attributes & ~FieldAttributes.FieldAccessMask) | (value & FieldAttributes.FieldAccessMask); + Attributes = (Attributes & ~FieldAttributes.FieldAccessMask) | (value & FieldAttributes.FieldAccessMask); } } diff --git a/Cpp2IL.Core/Model/Contexts/GenericParameterTypeAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/GenericParameterTypeAnalysisContext.cs index 8f52a9ab..3a850ad7 100644 --- a/Cpp2IL.Core/Model/Contexts/GenericParameterTypeAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/GenericParameterTypeAnalysisContext.cs @@ -22,7 +22,11 @@ public class GenericParameterTypeAnalysisContext : ReferencedTypeAnalysisContext public new GenericParameterAttributes DefaultAttributes { get; } public new GenericParameterAttributes? OverrideAttributes { get; set; } - public new GenericParameterAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public new GenericParameterAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } private List? _constraintTypes; public List ConstraintTypes diff --git a/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs index e20e75a7..d45e9e3c 100644 --- a/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs @@ -78,13 +78,21 @@ public class MethodAnalysisContext : HasGenericParameters, IMethodInfoProvider public virtual MethodAttributes? OverrideAttributes { get; set; } - public MethodAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public MethodAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } public virtual MethodImplAttributes DefaultImplAttributes => Definition?.MethodImplAttributes ?? throw new($"Subclasses of MethodAnalysisContext should override {nameof(DefaultImplAttributes)}"); public virtual MethodImplAttributes? OverrideImplAttributes { get; set; } - public MethodImplAttributes ImplAttributes => OverrideImplAttributes ?? DefaultImplAttributes; + public MethodImplAttributes ImplAttributes + { + get => OverrideImplAttributes ?? DefaultImplAttributes; + set => OverrideImplAttributes = value; + } public MethodAttributes Visibility { @@ -94,7 +102,7 @@ public MethodAttributes Visibility } set { - OverrideAttributes = (Attributes & ~MethodAttributes.MemberAccessMask) | (value & MethodAttributes.MemberAccessMask); + Attributes = (Attributes & ~MethodAttributes.MemberAccessMask) | (value & MethodAttributes.MemberAccessMask); } } diff --git a/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs index b1b4d479..3b641c0f 100644 --- a/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs @@ -44,7 +44,11 @@ public class ParameterAnalysisContext : HasCustomAttributesAndName, IParameterIn /// /// The ParameterAttributes of this parameter. /// - public ParameterAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public ParameterAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } /// /// True if this parameter is passed by reference. diff --git a/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs index 1a38ee9c..68dae049 100644 --- a/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs @@ -26,7 +26,11 @@ public class PropertyAnalysisContext : HasCustomAttributesAndName, IPropertyInfo public PropertyAttributes? OverrideAttributes { get; set; } - public PropertyAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public PropertyAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } public virtual TypeAnalysisContext DefaultPropertyType => DeclaringType.DeclaringAssembly.ResolveIl2CppType(Definition?.RawPropertyType) ?? throw new($"Subclasses must override {nameof(DefaultPropertyType)}."); diff --git a/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs index 1bb0e9ff..b5e8d5a0 100644 --- a/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs @@ -69,7 +69,11 @@ public class TypeAnalysisContext : HasGenericParameters, ITypeInfoProvider, ICSh public virtual TypeAttributes? OverrideAttributes { get; set; } - public TypeAttributes Attributes => OverrideAttributes ?? DefaultAttributes; + public TypeAttributes Attributes + { + get => OverrideAttributes ?? DefaultAttributes; + set => OverrideAttributes = value; + } public virtual TypeAnalysisContext? DefaultBaseType => Definition == null ? null : DeclaringAssembly.ResolveIl2CppType(Definition.RawBaseType); @@ -156,7 +160,7 @@ public TypeAttributes Visibility } set { - OverrideAttributes = (Attributes & ~TypeAttributes.VisibilityMask) | (value & TypeAttributes.VisibilityMask); + Attributes = (Attributes & ~TypeAttributes.VisibilityMask) | (value & TypeAttributes.VisibilityMask); } } From 7e5f17aa98c27217c0e78a7ef54b5a40a6c27998 Mon Sep 17 00:00:00 2001 From: ds5678 <49847914+ds5678@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:15:42 -0700 Subject: [PATCH 2/2] Other properties too This also makes ParameterAnalysisContext::ParameterType not virtual --- .../Model/Contexts/EventAnalysisContext.cs | 6 +++++- .../Model/Contexts/FieldAnalysisContext.cs | 18 +++++++++++++++--- .../Contexts/HasCustomAttributesAndName.cs | 6 +++++- .../Model/Contexts/MethodAnalysisContext.cs | 6 +++++- .../Model/Contexts/ParameterAnalysisContext.cs | 6 +++++- .../Model/Contexts/PropertyAnalysisContext.cs | 6 +++++- .../Model/Contexts/TypeAnalysisContext.cs | 12 ++++++++++-- 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs index 04f05e35..43c9cf8c 100644 --- a/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs @@ -34,7 +34,11 @@ public EventAttributes Attributes public TypeAnalysisContext? OverrideEventType { get; set; } - public TypeAnalysisContext EventType => OverrideEventType ?? DefaultEventType; + public TypeAnalysisContext EventType + { + get => OverrideEventType ?? DefaultEventType; + set => OverrideEventType = value; + } public virtual bool IsStatic => Definition?.IsStatic ?? throw new($"Subclasses must override {nameof(IsStatic)}."); diff --git a/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs index c20155d6..dd6c22b2 100644 --- a/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs @@ -47,7 +47,11 @@ public FieldAttributes Attributes public virtual object? OverrideConstantValue { get; set; } - public object? ConstantValue => OverrideConstantValue ?? DefaultConstantValue; + public object? ConstantValue + { + get => OverrideConstantValue ?? DefaultConstantValue; + set => OverrideConstantValue = value; + } public int Offset => BackingData == null ? 0 : AppContext.Binary.GetFieldOffsetFromIndex(DeclaringType.Definition!.TypeIndex, BackingData.IndexInParent, BackingData.Field.FieldIndex, DeclaringType.Definition.IsValueType, IsStatic); @@ -56,13 +60,21 @@ public FieldAttributes Attributes public TypeAnalysisContext? OverrideFieldType { get; set; } - public TypeAnalysisContext FieldType => OverrideFieldType ?? DefaultFieldType; + public TypeAnalysisContext FieldType + { + get => OverrideFieldType ?? DefaultFieldType; + set => OverrideFieldType = value; + } public virtual byte[] DefaultStaticArrayInitialValue => BackingData?.Field.StaticArrayInitialValue ?? []; public virtual byte[]? OverrideStaticArrayInitialValue { get; set; } - public byte[] StaticArrayInitialValue => OverrideStaticArrayInitialValue ?? DefaultStaticArrayInitialValue; + public byte[] StaticArrayInitialValue + { + get => OverrideStaticArrayInitialValue ?? DefaultStaticArrayInitialValue; + set => OverrideStaticArrayInitialValue = value; + } public FieldAttributes Visibility { diff --git a/Cpp2IL.Core/Model/Contexts/HasCustomAttributesAndName.cs b/Cpp2IL.Core/Model/Contexts/HasCustomAttributesAndName.cs index 9cabf972..94c13afc 100644 --- a/Cpp2IL.Core/Model/Contexts/HasCustomAttributesAndName.cs +++ b/Cpp2IL.Core/Model/Contexts/HasCustomAttributesAndName.cs @@ -7,5 +7,9 @@ public abstract class HasCustomAttributesAndName(uint token, ApplicationAnalysis public virtual string? OverrideName { get; set; } - public string Name => OverrideName ?? DefaultName; + public string Name + { + get => OverrideName ?? DefaultName; + set => OverrideName = value; + } } diff --git a/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs index d45e9e3c..e2930934 100644 --- a/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs @@ -124,7 +124,11 @@ public override List GenericParameters public TypeAnalysisContext? OverrideReturnType { get; set; } //TODO Support custom attributes on return types (v31 feature) - public TypeAnalysisContext ReturnType => OverrideReturnType ?? DefaultReturnType; + public TypeAnalysisContext ReturnType + { + get => OverrideReturnType ?? DefaultReturnType; + set => OverrideReturnType = value; + } protected Memory? rawMethodBody; diff --git a/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs index 3b641c0f..60521e1a 100644 --- a/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs @@ -64,7 +64,11 @@ public ParameterAttributes Attributes public TypeAnalysisContext? OverrideParameterType { get; set; } - public virtual TypeAnalysisContext ParameterType => OverrideParameterType ?? DefaultParameterType; + public TypeAnalysisContext ParameterType + { + get => OverrideParameterType ?? DefaultParameterType; + set => OverrideParameterType = value; + } public ParameterAnalysisContext(Il2CppParameterDefinition? definition, int parameterIndex, MethodAnalysisContext declaringMethod) : base(definition?.token ?? 0, declaringMethod.AppContext) { diff --git a/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs index 68dae049..d0e400d3 100644 --- a/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs @@ -37,7 +37,11 @@ public PropertyAttributes Attributes public TypeAnalysisContext? OverridePropertyType { get; set; } - public TypeAnalysisContext PropertyType => OverridePropertyType ?? DefaultPropertyType; + public TypeAnalysisContext PropertyType + { + get => OverridePropertyType ?? DefaultPropertyType; + set => OverridePropertyType = value; + } public PropertyAnalysisContext(Il2CppPropertyDefinition definition, TypeAnalysisContext parent) : base(definition.token, parent.AppContext) { diff --git a/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs b/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs index b5e8d5a0..5f83c970 100644 --- a/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs +++ b/Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs @@ -63,7 +63,11 @@ public class TypeAnalysisContext : HasGenericParameters, ITypeInfoProvider, ICSh public string? OverrideNamespace { get; set; } - public string Namespace => OverrideNamespace ?? DefaultNamespace; + public string Namespace + { + get => OverrideNamespace ?? DefaultNamespace; + set => OverrideNamespace = value; + } public virtual TypeAttributes DefaultAttributes => Definition?.Attributes ?? TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.Sealed; @@ -79,7 +83,11 @@ public TypeAttributes Attributes public TypeAnalysisContext? OverrideBaseType { get; set; } - public TypeAnalysisContext? BaseType => OverrideBaseType ?? DefaultBaseType; + public TypeAnalysisContext? BaseType + { + get => OverrideBaseType ?? DefaultBaseType; + set => OverrideBaseType = value; + } public TypeAnalysisContext? DeclaringType { get; protected internal set; }