private void EnsureStaticConstructor(TypeDefinition type) { var staticConstructor = type.Constructor(true); if (staticConstructor == null) { FodyEnvironment.LogDebug($"\t\t\t{type.Name} - adding static constructor"); var voidType = _msCoreReferenceFinder.GetCoreTypeReference("Void"); staticConstructor = new MethodDefinition(".cctor", MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.Static | MethodAttributes.RTSpecialName, type.Module.ImportReference(voidType)); var body = staticConstructor.Body; body.SimplifyMacros(); body.Instructions.Add(Instruction.Create(OpCodes.Ret)); body.OptimizeMacros(); type.Methods.Add(staticConstructor); FodyEnvironment.LogDebug($"\t\t\t{type.Name} - added static constructor"); } }
private static CustomAttribute CreateGeneratedCodeAttribute(MsCoreReferenceFinder msCoreReferenceFinder, ModuleDefinition importingModule) { var attributeType = msCoreReferenceFinder.GeneratedCodeAttribute; if (attributeType is null) { return(null); } var stringType = (TypeDefinition)msCoreReferenceFinder.GetCoreTypeReference("System.String"); var constructor = attributeType.Resolve().FindConstructor(new[] { stringType, stringType }.ToList()); if (constructor is null) { return(null); } var version = typeof(ModuleWeaver).Assembly.GetName().Version.ToString(); var name = typeof(ModuleWeaver).Assembly.GetName().Name; var generatedAttribute = new CustomAttribute(importingModule.ImportReference(constructor)); generatedAttribute.ConstructorArguments.Add(new CustomAttributeArgument(stringType, name)); generatedAttribute.ConstructorArguments.Add(new CustomAttributeArgument(stringType, version)); return(generatedAttribute); }
private void DetermineTypes() { var module = TypeDefinition.Module; switch (Version) { case CatelVersion.v5: PropertyDataType = module.ImportReference(TypeDefinition.Module.FindType("Catel.Core", "PropertyData")); break; default: case CatelVersion.v6: PropertyDataType = module.ImportReference(TypeDefinition.Module.FindType("Catel.Core", "IPropertyData")); break; } var advancedPropertyChangedEventArgsType = TypeDefinition.Module.FindType("Catel.Core", "AdvancedPropertyChangedEventArgs"); if (advancedPropertyChangedEventArgsType is null == false) { AdvancedPropertyChangedEventArgsType = module.ImportReference(advancedPropertyChangedEventArgsType); } var propertyChangedEventArgsType = _msCoreReferenceFinder.GetCoreTypeReference("System.ComponentModel.PropertyChangedEventArgs"); if (propertyChangedEventArgsType is null == false) { PropertyChangedEventArgsType = module.ImportReference(propertyChangedEventArgsType); } }
protected GenericInstanceType GetPropertyChangedEventHandler_Catel4_Catel5(PropertyDefinition property) { var genericHandlerType = _msCoreReferenceFinder.GetCoreTypeReference("System.EventHandler`1"); if (genericHandlerType is null) { FodyEnvironment.WriteError("Expected to find EventHandler<T>, but type was not found"); return(null); } var advancedPropertyChangedEventArgsType = property.Module.FindType("Catel.Core", "Catel.Data.AdvancedPropertyChangedEventArgs"); var handlerType = new GenericInstanceType(genericHandlerType); handlerType.GenericArguments.Add(advancedPropertyChangedEventArgsType); return(handlerType); }
private static CustomAttribute CreateGeneratedCodeAttribute(MsCoreReferenceFinder msCoreReferenceFinder, ModuleDefinition importingModule) { var attributeType = msCoreReferenceFinder.GeneratedCodeAttribute; if (attributeType == null) { return null; } var stringType = (TypeDefinition)msCoreReferenceFinder.GetCoreTypeReference("System.String"); var constructor = attributeType.Resolve().FindConstructor(new[] {stringType, stringType}.ToList()); if (constructor == null) { return null; } var version = typeof(ModuleWeaver).Assembly.GetName().Version.ToString(); var name = typeof(ModuleWeaver).Assembly.GetName().Name; var generatedAttribute = new CustomAttribute(importingModule.Import(constructor)); generatedAttribute.ConstructorArguments.Add(new CustomAttributeArgument(stringType, name)); generatedAttribute.ConstructorArguments.Add(new CustomAttributeArgument(stringType, version)); return generatedAttribute; }