This commit is contained in:
Даниил Заикин
2026-06-17 20:44:53 +03:00
parent 9d153773c2
commit b133e7c656
1880 changed files with 244545 additions and 0 deletions
@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Reflection;
namespace QFSW.QC.Internal
{
internal class CustomParameter : ParameterInfo
{
private readonly ParameterInfo _internalParameter;
private readonly Type _typeOverride;
private readonly string _nameOverride;
public CustomParameter(ParameterInfo internalParameter, Type typeOverride, string nameOverride)
{
_typeOverride = typeOverride;
_nameOverride = nameOverride;
_internalParameter = internalParameter;
}
public CustomParameter(ParameterInfo internalParameter, string nameOverride) : this(internalParameter, internalParameter.ParameterType, nameOverride) { }
public override Type ParameterType => _typeOverride;
public override string Name => _nameOverride;
public override ParameterAttributes Attributes => _internalParameter.Attributes;
public override object DefaultValue => _internalParameter.DefaultValue;
public override bool Equals(object obj) { return _internalParameter.Equals(obj); }
public override IEnumerable<CustomAttributeData> CustomAttributes => _internalParameter.CustomAttributes;
public override object[] GetCustomAttributes(bool inherit) { return _internalParameter.GetCustomAttributes(inherit); }
public override object[] GetCustomAttributes(Type attributeType, bool inherit) { return _internalParameter.GetCustomAttributes(attributeType, inherit); }
public override IList<CustomAttributeData> GetCustomAttributesData() { return _internalParameter.GetCustomAttributesData(); }
public override int GetHashCode() { return _internalParameter.GetHashCode(); }
public override Type[] GetOptionalCustomModifiers() { return _internalParameter.GetOptionalCustomModifiers(); }
public override Type[] GetRequiredCustomModifiers() { return _internalParameter.GetRequiredCustomModifiers(); }
public override bool HasDefaultValue => _internalParameter.HasDefaultValue;
public override bool IsDefined(Type attributeType, bool inherit) { return _internalParameter.IsDefined(attributeType, inherit); }
public override MemberInfo Member => _internalParameter.Member;
public override int MetadataToken => _internalParameter.MetadataToken;
public override int Position => _internalParameter.Position;
public override object RawDefaultValue => _internalParameter.RawDefaultValue;
public override string ToString() { return _internalParameter.ToString(); }
}
}
@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: 9e07451b78498b4408061ec6a2cc95dd
timeCreated: 1543091613
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Reflection;
namespace QFSW.QC.Internal
{
internal class DummyParameter : ParameterInfo
{
private readonly ParameterInfo _internalDummy;
public DummyParameter(Type type, string name, int position)
{
ParameterType = type;
Name = name;
Position = position;
MethodInfo dummyMethod = typeof(DummyParameter).GetMethod(nameof(DummyMethod), BindingFlags.NonPublic | BindingFlags.Static);
_internalDummy = dummyMethod.GetParameters()[0];
}
private static void DummyMethod(int dummyParameter) { }
public override Type ParameterType { get; }
public override string Name { get; }
public override int Position { get; }
public override ParameterAttributes Attributes => _internalDummy.Attributes;
public override object DefaultValue => null;
public override bool Equals(object obj) { return ReferenceEquals(this, obj); }
public override IEnumerable<CustomAttributeData> CustomAttributes => _internalDummy.CustomAttributes;
public override object[] GetCustomAttributes(bool inherit) => _internalDummy.GetCustomAttributes(inherit);
public override object[] GetCustomAttributes(Type attributeType, bool inherit) => _internalDummy.GetCustomAttributes(attributeType, inherit);
public override IList<CustomAttributeData> GetCustomAttributesData() => _internalDummy.GetCustomAttributesData();
public override int GetHashCode() { return 0; }
public override Type[] GetOptionalCustomModifiers() { return _internalDummy.GetOptionalCustomModifiers(); }
public override Type[] GetRequiredCustomModifiers() { return _internalDummy.GetRequiredCustomModifiers(); }
public override bool HasDefaultValue => false;
public override bool IsDefined(Type attributeType, bool inherit) { return false; }
public override MemberInfo Member => _internalDummy.Member;
public override int MetadataToken => _internalDummy.MetadataToken;
public override object RawDefaultValue => null;
public override string ToString() { return Name; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e8b234cac26fbfc4a8abf07467433e81
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,40 @@
using System;
using System.Reflection;
namespace QFSW.QC.Internal
{
internal class FieldAutoMethod : FieldMethod
{
public enum AccessType
{
Read = 0,
Write = 1
}
private readonly AccessType _accessType;
public FieldAutoMethod(FieldInfo fieldInfo, AccessType accessType) : base(fieldInfo)
{
_accessType = accessType;
if (_accessType == AccessType.Read)
{
_internalDelegate = _fieldInfo.IsStatic
? (Func<FieldInfo, object>)_StaticReader
: (Func<object, object>)_fieldInfo.GetValue;
_parameters = Array.Empty<ParameterInfo>();
}
else
{
_internalDelegate = _fieldInfo.IsStatic
? (Action<FieldInfo, object>)_StaticWriter
: (Action<object, object>)_fieldInfo.SetValue;
_parameters = new ParameterInfo[] { new CustomParameter(_internalDelegate.Method.GetParameters()[1], _fieldInfo.FieldType, "value") };
}
}
private static object _StaticReader(FieldInfo field) { return field.GetValue(null); }
private static void _StaticWriter(FieldInfo field, object value) { field.SetValue(null, value); }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4817e6908a5c544ab88c69cd27c68a41
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,57 @@
using QFSW.QC.Utilities;
using System;
using System.Globalization;
using System.Reflection;
namespace QFSW.QC.Internal
{
internal class FieldDelegateMethod : FieldMethod
{
public FieldDelegateMethod(FieldInfo fieldInfo) : base(fieldInfo)
{
if (!_fieldInfo.IsStrongDelegate())
{
throw new ArgumentException("Invalid delegate type.", nameof(fieldInfo));
}
if (_fieldInfo.IsStatic)
{
_internalDelegate = (Func<FieldInfo, object[], object>)StaticInvoker;
}
else
{
_internalDelegate = (Func<object, FieldInfo, object[], object>)NonStaticInvoker;
}
_parameters = _fieldInfo.FieldType.GetMethod("Invoke").GetParameters();
for (int i = 0; i < _parameters.Length; i++)
{
_parameters[i] = new CustomParameter(_parameters[i], $"arg{i}");
}
}
public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
{
object[] realParameters = new object[_internalDelegate.Method.GetParameters().Length];
if (realParameters.Length < 2) { throw new Exception("FieldDelegateMethod's internal delegate must contain at least two paramaters."); }
if (!IsStatic) { realParameters[0] = obj; }
realParameters[realParameters.Length - 2] = _fieldInfo;
realParameters[realParameters.Length - 1] = parameters;
return _internalDelegate.DynamicInvoke(realParameters);
}
private static object StaticInvoker(FieldInfo field, params object[] args)
{
Delegate del = (Delegate)field.GetValue(null);
if (del != null) { return del.DynamicInvoke(args); }
else { throw new Exception("Delegate was invalid and could not be invoked."); }
}
private object NonStaticInvoker(object obj, FieldInfo field, params object[] args)
{
Delegate del = (Delegate)field.GetValue(obj);
if (del != null) { return del.DynamicInvoke(args); }
else { throw new Exception("Delegate was invalid and could not be invoked."); }
}
}
}
@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: b9425c6d4746d884f9a82b6a9ba522f7
timeCreated: 1543091933
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,42 @@
using System;
using System.Globalization;
using System.Reflection;
namespace QFSW.QC.Internal
{
internal abstract class FieldMethod : MethodInfo
{
protected readonly FieldInfo _fieldInfo;
protected Delegate _internalDelegate;
protected ParameterInfo[] _parameters;
protected FieldMethod(FieldInfo fieldInfo) { _fieldInfo = fieldInfo; }
public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
{
object[] realParameters = new object[parameters.Length + 1];
realParameters[0] = IsStatic ? _fieldInfo : obj;
Array.Copy(parameters, 0, realParameters, 1, parameters.Length);
return _internalDelegate.DynamicInvoke(realParameters);
}
public override ParameterInfo[] GetParameters()
{
return _parameters;
}
public override string Name => _fieldInfo.Name;
public override Type DeclaringType => _fieldInfo.DeclaringType;
public override Type ReflectedType => _fieldInfo.ReflectedType;
public override object[] GetCustomAttributes(bool inherit) { return _fieldInfo.GetCustomAttributes(inherit); }
public override object[] GetCustomAttributes(Type attributeType, bool inherit) { return _fieldInfo.GetCustomAttributes(attributeType, inherit); }
public override MethodAttributes Attributes => _internalDelegate.Method.Attributes;
public override RuntimeMethodHandle MethodHandle => _internalDelegate.Method.MethodHandle;
public override ICustomAttributeProvider ReturnTypeCustomAttributes => _internalDelegate.Method.ReturnTypeCustomAttributes;
public override MethodInfo GetBaseDefinition() { return _internalDelegate.Method.GetBaseDefinition(); }
public override MethodImplAttributes GetMethodImplementationFlags() { return _internalDelegate.Method.GetMethodImplementationFlags(); }
public override bool IsDefined(Type attributeType, bool inherit) { return _internalDelegate.Method.IsDefined(attributeType, inherit); }
}
}
@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: bc3a8d5d7bf0b284fb3e38019fb1c469
timeCreated: 1543091424
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: