Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions Cpp2IL.Core/Model/Contexts/EventAnalysisContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,21 @@ 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)}.");

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)}.");

Expand Down
26 changes: 21 additions & 5 deletions Cpp2IL.Core/Model/Contexts/FieldAnalysisContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,23 @@ 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;

public virtual object? DefaultConstantValue => BackingData?.Field.DefaultValue?.Value;

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);

Expand All @@ -52,13 +60,21 @@ public class FieldAnalysisContext : HasCustomAttributesAndName, IFieldInfoProvid

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
{
Expand All @@ -68,7 +84,7 @@ public FieldAttributes Visibility
}
set
{
OverrideAttributes = (Attributes & ~FieldAttributes.FieldAccessMask) | (value & FieldAttributes.FieldAccessMask);
Attributes = (Attributes & ~FieldAttributes.FieldAccessMask) | (value & FieldAttributes.FieldAccessMask);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<TypeAnalysisContext>? _constraintTypes;
public List<TypeAnalysisContext> ConstraintTypes
Expand Down
6 changes: 5 additions & 1 deletion Cpp2IL.Core/Model/Contexts/HasCustomAttributesAndName.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
20 changes: 16 additions & 4 deletions Cpp2IL.Core/Model/Contexts/MethodAnalysisContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -94,7 +102,7 @@ public MethodAttributes Visibility
}
set
{
OverrideAttributes = (Attributes & ~MethodAttributes.MemberAccessMask) | (value & MethodAttributes.MemberAccessMask);
Attributes = (Attributes & ~MethodAttributes.MemberAccessMask) | (value & MethodAttributes.MemberAccessMask);
}
}

Expand All @@ -116,7 +124,11 @@ public override List<GenericParameterTypeAnalysisContext> 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<byte>? rawMethodBody;

Expand Down
12 changes: 10 additions & 2 deletions Cpp2IL.Core/Model/Contexts/ParameterAnalysisContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,11 @@ public class ParameterAnalysisContext : HasCustomAttributesAndName, IParameterIn
/// <summary>
/// The ParameterAttributes of this parameter.
/// </summary>
public ParameterAttributes Attributes => OverrideAttributes ?? DefaultAttributes;
public ParameterAttributes Attributes
{
get => OverrideAttributes ?? DefaultAttributes;
set => OverrideAttributes = value;
}

/// <summary>
/// True if this parameter is passed by reference.
Expand All @@ -60,7 +64,11 @@ public class ParameterAnalysisContext : HasCustomAttributesAndName, IParameterIn

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)
{
Expand Down
12 changes: 10 additions & 2 deletions Cpp2IL.Core/Model/Contexts/PropertyAnalysisContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,22 @@ 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)}.");

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)
{
Expand Down
20 changes: 16 additions & 4 deletions Cpp2IL.Core/Model/Contexts/TypeAnalysisContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,19 +63,31 @@ 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;

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);

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; }

Expand Down Expand Up @@ -156,7 +168,7 @@ public TypeAttributes Visibility
}
set
{
OverrideAttributes = (Attributes & ~TypeAttributes.VisibilityMask) | (value & TypeAttributes.VisibilityMask);
Attributes = (Attributes & ~TypeAttributes.VisibilityMask) | (value & TypeAttributes.VisibilityMask);
}
}

Expand Down
Loading