private void GenerateFilesSection()

in Sharpmake.Generators/VisualStudio/Androidproj.cs [259:357]


        private void GenerateFilesSection(
            GenerationContext context,
            IFileGenerator fileGenerator)
        {
            Strings projectFiles = context.Project.GetSourceFilesForConfigurations(context.ProjectConfigurations);

            // Add source files
            var allFiles = new List<Vcxproj.ProjectFile>();
            var includeFiles = new List<Vcxproj.ProjectFile>();
            var sourceFiles = new List<Vcxproj.ProjectFile>();
            var contentFiles = new List<Vcxproj.ProjectFile>();

            foreach (string file in projectFiles)
            {
                var projectFile = new Vcxproj.ProjectFile(context, file);
                allFiles.Add(projectFile);
            }

            allFiles.Sort((l, r) => { return string.Compare(l.FileNameProjectRelative, r.FileNameProjectRelative, StringComparison.InvariantCultureIgnoreCase); });

            // type -> files
            var customSourceFiles = new Dictionary<string, List<Vcxproj.ProjectFile>>();
            foreach (var projectFile in allFiles)
            {
                string type = null;
                if (context.Project.ExtensionBuildTools.TryGetValue(projectFile.FileExtension, out type))
                {
                    List<Vcxproj.ProjectFile> files = null;
                    if (!customSourceFiles.TryGetValue(type, out files))
                    {
                        files = new List<Vcxproj.ProjectFile>();
                        customSourceFiles[type] = files;
                    }
                    files.Add(projectFile);
                }
                else if (context.Project.SourceFilesCompileExtensions.Contains(projectFile.FileExtension) ||
                         (string.Compare(projectFile.FileExtension, ".rc", StringComparison.OrdinalIgnoreCase) == 0))
                {
                    sourceFiles.Add(projectFile);
                }
                else if (string.Compare(projectFile.FileExtension, ".h", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    includeFiles.Add(projectFile);
                }
                else
                {
                    contentFiles.Add(projectFile);
                }
            }

            // Write header files
            if (includeFiles.Count > 0)
            {
                fileGenerator.Write(Template.Project.ProjectFilesBegin);
                foreach (var file in includeFiles)
                {
                    using (fileGenerator.Declare("file", file))
                        fileGenerator.Write(Template.Project.ProjectFilesHeader);
                }
                fileGenerator.Write(Template.Project.ProjectFilesEnd);
            }

            // Write content files
            if (contentFiles.Count > 0)
            {
                fileGenerator.Write(Template.Project.ProjectFilesBegin);
                foreach (var file in contentFiles)
                {
                    using (fileGenerator.Declare("file", file))
                        fileGenerator.Write(Template.Project.ContentSimple);
                }
                fileGenerator.Write(Template.Project.ProjectFilesEnd);
            }

            // Write Android project files
            fileGenerator.Write(Template.Project.ItemGroupBegin);

            if (_isGradleBuild)
            {
                foreach (var file in context.AndroidPackageProject.GradleTemplateFiles)
                {
                    using (fileGenerator.Declare("gradleTemplateFile", file))
                        fileGenerator.Write(Template.Project.GradleTemplate);
                }
            }
            else
            {
                using (fileGenerator.Declare("antBuildXml", context.AndroidPackageProject.AntBuildXml))
                using (fileGenerator.Declare("antProjectPropertiesFile", context.AndroidPackageProject.AntProjectPropertiesFile))
                using (fileGenerator.Declare("androidManifest", context.AndroidPackageProject.AndroidManifest))
                {
                    fileGenerator.Write(Template.Project.AntBuildXml);
                    fileGenerator.Write(Template.Project.AndroidManifest);
                    fileGenerator.Write(Template.Project.AntProjectPropertiesFile);
                }
            }

            fileGenerator.Write(Template.Project.ItemGroupEnd);
        }