private FieldDefinition CreateField(ICommonType viewModelType, ICommonProperty property) { var fieldName = nameRulesService.ConvertName(property.Name, UseNameRulesFor.Property, UseNameRulesFor.Field); log.Debug($"Create field with name '{fieldName}'"); var field = new FieldDefinition(fieldName, FieldAttributes.Private, property.MonoCecil.PropertyType); viewModelType.MonoCecil.Fields.Add(field); return(field); }
public PropertyGroup(ICommonField field, ICommonProperty property, ICommonMethod calledMethodBeforeGetProperty, ICommonMethod calledMethodBeforeSetProperty, ICommonMethod calledMethodAfterSuccessSetProperty, ICommonMethod calledMethodAfterSetProperty) { Field = field; Property = property; CalledMethodBeforeGetProperty = calledMethodBeforeGetProperty; CalledMethodBeforeSetProperty = calledMethodBeforeSetProperty; CalledMethodAfterSuccessSetProperty = calledMethodAfterSuccessSetProperty; CalledMethodAfterSetProperty = calledMethodAfterSetProperty; }
public DependencyGroup(ICommonField field, ICommonProperty property) { Field = field; Property = property; }
public static bool TryGetProperty(this IHasProperties hasProperties, string propertyName, out ICommonProperty foundCommonProperty) { return((foundCommonProperty = hasProperties.GetProperty(propertyName)) != null); }
private static (ICommonProperty Property, List <ICommonField> Fields) CreateEmptyPatchingPropertyGroup(ICommonProperty property) { return(property, new List <ICommonField>()); }
private FieldDefinition CreateField(ICommonAssembly assembly, ICommonType frameworkElementType, ICommonProperty property) { var fieldName = nameRulesService.ConvertName(property.Name, UseNameRulesFor.DependencyProperty, UseNameRulesFor.DependencyField); log.Debug($"Create field with name '{fieldName}'"); var field = new FieldDefinition(fieldName, FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly, assembly.MonoCecil.MainModule.ImportReference(dependencyPropertyType.GetValue(assembly).MonoCecil)); frameworkElementType.MonoCecil.Fields.Add(field); InitializeInStaticConstructor(assembly, frameworkElementType, property, field); return(field); }
private void InitializeInStaticConstructor(ICommonAssembly assembly, ICommonType frameworkElementType, ICommonProperty property, FieldReference field) { var staticConstructor = frameworkElementType.MonoCecil.GetStaticConstructor(); if (staticConstructor == null) { staticConstructor = new MethodDefinition(".cctor", MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName | MethodAttributes.Static, assembly.MonoCecil.MainModule.TypeSystem.Void); staticConstructor.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); frameworkElementType.MonoCecil.Methods.Add(staticConstructor); } staticConstructor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Ldstr, property.Name)); staticConstructor.Body.Instructions.Insert(1, Instruction.Create(OpCodes.Ldtoken, property.MonoCecil.PropertyType)); staticConstructor.Body.Instructions.Insert(2, Instruction.Create(OpCodes.Call, getTypeFromHandleMethod.GetValue(assembly))); staticConstructor.Body.Instructions.Insert(3, Instruction.Create(OpCodes.Ldtoken, frameworkElementType.MonoCecil)); staticConstructor.Body.Instructions.Insert(4, Instruction.Create(OpCodes.Call, getTypeFromHandleMethod.GetValue(assembly))); staticConstructor.Body.Instructions.Insert(5, Instruction.Create(OpCodes.Call, registerMethod.GetValue(assembly))); staticConstructor.Body.Instructions.Insert(6, Instruction.Create(OpCodes.Stsfld, field)); }