/// <summary> /// Appends the implementation of a factory instance /// </summary> /// <param name="ctx">The compilation context</param> /// <param name="factory">The factory instance</param> public void AppendFactoryImpl(Context ctx, BindingFactoryInstance factory) => AppendNamespace( GeneratedClass.Namespace, () => AppendClass( factory.GeneratedClass.ClassName, () => { foreach (BindingFactoryInstance parent in factory.Parents) { AppendPropertyDef( "public", parent.BindingFactory.Symbol, () => AppendFactoryInstance(parent)); } AppendMethod( "public", factory.BindingFactory.Symbol, "Create", () => { AppendAssignment( () => AppendNewVariable( factory.BindingFactory.Symbol, () => AppendFactoryInstance(factory)), () => AppendConstructorCall( (string)null, false)); foreach ((BindingFactoryInstance subfactory, IPropertySymbol prop) in factory.Subfactories.Zip(factory.BindingFactory.Subfactories, (a, b) => (a, b))) {
/// <summary> /// Appends the unboxing of a factory object /// </summary> /// <param name="factory">The factory instance</param> /// <param name="obj">The object to unbox</param> public void AppendUnboxing(BindingFactoryInstance factory, FactoryObjectInstance obj) => AppendCast( () => AppendMethodCall( () => AppendFactoryInstance(factory), factory.BindingFactory.Boxer.Unboxer, () => AppendArrayIndex( () => AppendProperty( () => AppendFactoryInstance(factory), factory.BindingFactory.Array.Property), obj.FactoryObject.Index)), obj.FactoryObject.ObjectType);
/// <summary> /// Appends the name of the property used to store the factory instance /// </summary> /// <param name="factory">The factory instance</param> public void AppendFactoryInstance(BindingFactoryInstance factory) => Append($"F{factory.GeneratedClass.ClassName}");