public ClassGenerator(MemberInfoList memberInfoList, Type interfaceType, NameDefinition nameDefinition, IDefinition[] definitions) { this.interfaceType = interfaceType; this.nameDefinition = nameDefinition; this.definitions = definitions; constructorGenerator = new ConstructorGenerator(nameDefinition.ClassName); propertiesGenerator = new PropertyGenerators(memberInfoList.PropertyInfos, definitions); methodGenerators = new MethodGenerators( memberInfoList.MethodInfos, memberInfoList.MethodIndexes, definitions); eventGenerators = new EventGenerators(memberInfoList.EventInfos, definitions); }
public override ISerializerGenerator GetCustomSerializerGenerator(SerializerGenerationConfiguration config, string serializerProviderFullName, SourceFileMetadata generatedCodeMeta) { var generator = new StaticJsonCustomDeserializerGenerator( config.SerializersNameSpace, generatedCodeMeta, serializerProviderFullName ); PropertyGenerators.Add(new RecursiveStaticSerializerGenerator(generator)); return(generator); }
/// <summary> /// Adds an initialized property generator to the factory. /// </summary> /// <param name="propertyGeneratorInstance"></param> protected void AddPropertyGenerator(BaseHqlGeneratorForProperty propertyGeneratorInstance) { PropertyGenerators.Add(propertyGeneratorInstance); foreach (PropertyInfo supportedSignature in propertyGeneratorInstance.SupportedProperties) { if (PropertySignatures.Contains(supportedSignature)) { throw new Exception(String.Format("Property signature {0} loaded by property hql generator {1} has already been added", supportedSignature, propertyGeneratorInstance)); } PropertySignatures.Add(supportedSignature); } }
public override IStaticSerializerResolver GetGenerator( SerializerGenerationConfiguration config, RoslynMetadataHelper metadataHelper, SourceFileMetadata generatedCodeMeta) { var generator = new StaticJsonSerializerGenerator( metadataHelper, config.SerializersNameSpace, config.DisableToUpperConstructor, PropertyFinder, PropertyGenerators, generatedCodeMeta ); PropertyGenerators.Add(new RecursiveStaticSerializerGenerator(generator)); return(generator); }
/// <summary> /// Finds and instantiates all custom HQL generators defined in a given /// Assembly. /// </summary> /// <param name="targetAssembly"> /// The Assembly that will be searched for any custom HQL generators. /// </param> public void AddGeneratorsFromAssembly(Assembly targetAssembly) { try { Type[] allTypes = targetAssembly.GetTypes(); // Get all custom HQL generators defined in the target assembly var generatorTypes = allTypes.Where(t => (typeof(IHqlGeneratorForMethod).IsAssignableFrom(t) || typeof(IHqlGeneratorForProperty).IsAssignableFrom(t)) && !t.IsAbstract && !t.IsInterface); foreach (var generatorType in generatorTypes) { var generator = Activator.CreateInstance(generatorType); var methodGeneratorInstance = generator as BaseHqlGeneratorForMethod; if (methodGeneratorInstance != null) { AddMethodGenerator(methodGeneratorInstance); } var propertyGeneratorInstance = generator as BaseHqlGeneratorForProperty; if (propertyGeneratorInstance != null) { PropertyGenerators.Add(propertyGeneratorInstance); } } } catch (ReflectionTypeLoadException ex) { var sb = new StringBuilder(); foreach (var loadEx in ex.LoaderExceptions) { sb.AppendLine(loadEx.Message); sb.AppendLine(loadEx.ToString()); } throw new HibernationException(string.Format("Error loading types for {0}: {1}", targetAssembly.FullName, sb), ex); } }