Esempio n. 1
0
 /// <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)))
         {
Esempio n. 2
0
 /// <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);
Esempio n. 3
0
 /// <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}");