Example #1
0
 public MsBuildWriterSetup(string target, string path, TypeOrObject <IWriter> writer, bool addFilesToProject)
 {
     this.Target            = target;
     this.Path              = path;
     this.Writer            = writer;
     this.AddFilesToProject = addFilesToProject;
 }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CodeGeneratorSetup" /> class.
 /// </summary>
 /// <param name="generator">The generator.</param>
 /// <param name="writerSetups">The writer setups.</param>
 /// <param name="skipGlobalWriterSetup">if set to <c>true</c> [skip global writer setup].</param>
 /// <param name="shareGlobalWriters">if set to <c>true</c> [share global writers].</param>
 /// <param name="targetNamespace">The target namespace.</param>
 /// <param name="usings">The usings.</param>
 /// <param name="useGlobalUsings">if set to <c>true</c> [use global usings].</param>
 public CodeGeneratorSetup(TypeOrObject <IGenerator> generator, IReadOnlyList <IFileWriterSetup> writerSetups, bool skipGlobalWriterSetup, bool shareGlobalWriters, string targetNamespace, IReadOnlyList <string> usings, bool useGlobalUsings)
     : base(generator, writerSetups, skipGlobalWriterSetup, shareGlobalWriters)
 {
     this.TargetNamespace = targetNamespace;
     this.Usings          = usings;
     this.UseGlobalUsings = useGlobalUsings;
 }
Example #3
0
        public static IWriter <IWriterSetup, ITarget, IRun, object> CreateWriter(
            TypeOrObject <IWriter>?writerTypeOrObject,
            SetupInfo setupInfo,
            int writerSetupIndex,
            int?generatorSetupIndex,
            IWriter?previousWriter)
        {
            if (writerTypeOrObject == null)
            {
                if (previousWriter is IHaveWriter haveWriter)
                {
                    previousWriter = haveWriter.Writer;
                }

                if (previousWriter != null)
                {
                    writerTypeOrObject = new TypeOrObject <IWriter>((IWriter)Activator.CreateInstance(previousWriter.GetType()));
                }
                else
                {
                    throw new InitializationException(
                              $"Could not create writer, because {GetPropertyPath(writerSetupIndex, generatorSetupIndex)} was not defined and no previous writer was found.",
                              setupInfo.Origin,
                              GetPropertyPath(writerSetupIndex, generatorSetupIndex));
                }
            }

            var interfaceType = writerTypeOrObject.Type.GetGenericInterface(typeof(IWriter <, , ,>));

            if (interfaceType == null)
            {
                throw new InitializationException(
                          $"Could not create writer, because {writerTypeOrObject.Type.Name} does not implement {typeof(IWriter<,,,>)}, please check the setup.",
                          setupInfo.Origin,
                          GetPropertyPath(writerSetupIndex, generatorSetupIndex));
            }

            var writer = writerTypeOrObject.Object ?? (IWriter)Activator.CreateInstance(writerTypeOrObject.Type);

            if (interfaceType.GenericTypeArguments[0] != typeof(IWriterSetup) || interfaceType.GenericTypeArguments[1] != typeof(ITarget))
            {
                writer = (IWriter)Activator.CreateInstance(typeof(WriterAdapter <, , ,>).MakeGenericType(interfaceType.GenericTypeArguments), writer);
            }

            return((IWriter <IWriterSetup, ITarget, IRun, object>)writer);
        }
        public static IGenerator <ISetup, IGeneratorSetup, ITarget, object, IRun, object> CreateGenerator(TypeOrObject <IGenerator>?generatorObjectOrType, SetupInfo setupInfo, int generatorSetupIndex, IGenerator?previousGenerator)
        {
            if (generatorObjectOrType == null)
            {
                if (previousGenerator is IHaveGenerator haveGenerator)
                {
                    previousGenerator = haveGenerator.Generator;
                }

                if (previousGenerator != null)
                {
                    generatorObjectOrType = new TypeOrObject <IGenerator>((IGenerator)Activator.CreateInstance(previousGenerator.GetType()));
                }
                else
                {
                    throw new InitializationException(
                              $"Could not create generator because {GetPropertyPath(generatorSetupIndex)} was not defined and no previous generator was found.",
                              setupInfo.Origin,
                              GetPropertyPath(generatorSetupIndex));
                }
            }

            var generator = generatorObjectOrType.Object ?? (IGenerator)Activator.CreateInstance(generatorObjectOrType.Type);

            if (generator is IGenerator <ISetup, IGeneratorSetup, ITarget, object, IRun, object> genericGenerator)
            {
                return(genericGenerator);
            }

            var generatorType          = generator.GetType();
            var generatorInterfaceType = generatorType.GetGenericInterface(typeof(IGenerator <, , , , ,>));

            if (generatorInterfaceType != null)
            {
                return((IGenerator <ISetup, IGeneratorSetup, ITarget, object, IRun, object>)Activator.CreateInstance(typeof(GeneratorAdapter <, , , , ,>).MakeGenericType(generatorInterfaceType.GenericTypeArguments), generator));
            }

            throw new InitializationException(
                      $"Could not create generator, because the {generatorType.Name} does not implement {typeof(IGenerator<,,,>).Name} or {typeof(IGenerator<,,,,>).Name} or {typeof(IGenerator<,,,,,>).Name}, please check the setup.",
                      setupInfo.Origin,
                      GetPropertyPath(generatorSetupIndex));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="GeneratorSetup" /> class.
 /// </summary>
 /// <param name="generator">The generator.</param>
 /// <param name="writerSetups">The writer setups.</param>
 /// <param name="skipGlobalWriterSetup">if set to <c>true</c> [skip global writer setup].</param>
 /// <param name="shareGlobalWriters">if set to <c>true</c> [share global writers].</param>
 public GeneratorSetup(TypeOrObject <IGenerator> generator, IReadOnlyList <IWriterSetup>?writerSetups, bool skipGlobalWriterSetup, bool shareGlobalWriters)
     : base(generator, writerSetups, skipGlobalWriterSetup, shareGlobalWriters)
 {
 }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ModelSetup" /> class.
 /// </summary>
 /// <param name="provider">The provider.</param>
 /// <param name="modelType">Type of the model.</param>
 public ModelSetup(TypeOrObject <IModelProvider> provider, Type modelType)
     : this()
 {
     this.Provider  = provider;
     this.ModelType = modelType;
 }
Example #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FolderModelSetup"/> class.
 /// </summary>
 /// <param name="provider">The provider.</param>
 /// <param name="modelType">Type of the model.</param>
 /// <param name="folder">The folder.</param>
 /// <param name="filesSearchPattern">The files search pattern.</param>
 public FolderModelSetup(TypeOrObject <IModelProvider> provider, Type modelType, string folder, string filesSearchPattern)
     : base(provider, modelType)
 {
     this.Folder             = folder;
     this.FilesSearchPattern = filesSearchPattern;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MsBuildWriterSetup" /> class.
 /// </summary>
 /// <param name="fileExtension">The file extension.</param>
 /// <param name="fileNameSuffix">The file name suffix.</param>
 /// <param name="folder">The folder.</param>
 /// <param name="target">The target.</param>
 /// <param name="writer">The writer.</param>
 /// <param name="addFilesToProject">if set to <c>true</c> [add files to project].</param>
 public MsBuildWriterSetup(string fileExtension, string fileNameSuffix, string folder, string target, TypeOrObject <IWriter> writer, bool addFilesToProject)
     : base(fileExtension, fileNameSuffix, folder, target, writer)
 {
     this.AddFilesToProject = addFilesToProject;
 }
Example #9
0
 public FileWriterSetup(string fileExtension, string fileNameSuffix, string folder, string target, TypeOrObject <IWriter> writer)
     : base(target, writer)
 {
     this.FileExtension  = fileExtension;
     this.FileNameSuffix = fileNameSuffix;
     this.Folder         = folder;
 }
Example #10
0
 public WriterSetup(string target, TypeOrObject <IWriter> writer)
 {
     this.Target = target;
     this.Writer = writer;
 }