Beispiel #1
0
        void GetAllBuildableEntries(List <SolutionItem> list, ConfigurationSelector configuration, bool includeExternalReferences)
        {
            if (ParentSolution == null)
            {
                return;
            }
            SolutionConfiguration conf = ParentSolution.GetConfiguration(configuration);

            if (conf == null)
            {
                return;
            }

            foreach (SolutionFolderItem item in Items)
            {
                if (item is SolutionFolder)
                {
                    ((SolutionFolder)item).GetAllBuildableEntries(list, configuration, includeExternalReferences);
                }
                else if ((item is SolutionItem) && conf.BuildEnabledForItem((SolutionItem)item) && ((SolutionItem)item).SupportsBuild())
                {
                    GetAllBuildableReferences(list, (SolutionItem)item, configuration, conf, includeExternalReferences, false);
                }
            }
        }
        public ReadOnlyCollection <SolutionItem> GetAllBuildableEntries(ConfigurationSelector configuration, bool topologicalSort, bool includeExternalReferences)
        {
            var list = new List <SolutionItem> ();

            if (ParentSolution != null)
            {
                return(list.AsReadOnly());
            }

            SolutionConfiguration conf = ParentSolution.GetConfiguration(configuration);

            if (conf == null)
            {
                return(list.AsReadOnly());
            }

            var collected = new HashSet <SolutionItem> ();

            CollectBuildableEntries(collected, configuration, conf, includeExternalReferences);
            list.AddRange(collected);

            if (topologicalSort)
            {
                return(SolutionItem.TopologicalSort(list, configuration));
            }
            else
            {
                return(list.AsReadOnly());
            }
        }
Beispiel #3
0
        public async Task <BuildResult> Clean(ProgressMonitor monitor, ConfigurationSelector configuration, OperationContext operationContext = null)
        {
            if (ParentSolution == null)
            {
                return(new BuildResult());
            }
            SolutionConfiguration conf = ParentSolution.GetConfiguration(configuration);

            if (conf == null)
            {
                return(new BuildResult());
            }

            ReadOnlyCollection <SolutionItem> allProjects;

            try {
                allProjects = GetAllBuildableEntries(configuration, true, true);
            } catch (CyclicDependencyException) {
                monitor.ReportError(GettextCatalog.GetString("Cyclic dependencies are not supported."), null);
                return(new BuildResult("", 1, 1));
            }

            monitor.BeginTask(GettextCatalog.GetString("Cleaning Solution: {0} ({1})", Name, configuration.ToString()), allProjects.Count);
            try {
                return(await RunParallelBuildOperation(monitor, configuration, allProjects, (ProgressMonitor m, SolutionItem item) => {
                    return item.Clean(m, configuration, operationContext);
                }, false));
            }
            finally {
                monitor.EndTask();
            }
        }
        protected internal override void OnClean(IProgressMonitor monitor, ConfigurationSelector configuration)
        {
            if (ParentSolution == null)
            {
                return;
            }
            SolutionConfiguration conf = ParentSolution.GetConfiguration(configuration);

            if (conf == null)
            {
                return;
            }

            foreach (SolutionItem item in Items)
            {
                if (item is SolutionFolder)
                {
                    item.Clean(monitor, configuration);
                }
                else if (item is SolutionEntityItem)
                {
                    SolutionEntityItem         si = (SolutionEntityItem)item;
                    SolutionConfigurationEntry ce = conf.GetEntryForItem(si);
                    if (ce.Build)
                    {
                        si.Clean(monitor, ce.ItemConfigurationSelector);
                    }
                }
                else
                {
                    item.Clean(monitor, configuration);
                }
            }
        }
Beispiel #5
0
 /// <summary>
 /// Checks if this solution item has modified files and has to be built
 /// </summary>
 /// <returns>
 /// <c>true</c> if the solution item has to be built
 /// </returns>
 /// <param name='configuration'>
 /// Configuration for which to do the check
 /// </param>
 public bool NeedsBuilding(ConfigurationSelector configuration)
 {
     using (Counters.NeedsBuildingTimer.BeginTiming("NeedsBuilding check for " + Name)) {
         if (ParentSolution != null && this is SolutionEntityItem)
         {
             SolutionConfiguration sconf = ParentSolution.GetConfiguration(configuration);
             if (sconf != null && !sconf.BuildEnabledForItem((SolutionEntityItem)this))
             {
                 return(false);
             }
         }
         return(Services.ProjectService.GetExtensionChain(this).GetNeedsBuilding(this, configuration));
     }
 }
        protected override void OnClean(IProgressMonitor monitor, ConfigurationSelector configuration)
        {
            if (ParentSolution == null)
            {
                return;
            }
            SolutionConfiguration conf = ParentSolution.GetConfiguration(configuration);

            if (conf == null)
            {
                return;
            }

            try
            {
                monitor.BeginTask(GettextCatalog.GetString("Cleaning Solution: {0} ({1})", Name, configuration.ToString()), Items.Count);

                foreach (SolutionItem item in Items)
                {
                    if (item is SolutionFolder)
                    {
                        item.Clean(monitor, configuration);
                    }
                    else if (item is SolutionEntityItem)
                    {
                        SolutionEntityItem si = (SolutionEntityItem)item;
                        // ce can be null if you add items to the root solution folder which
                        // causes them to be placed in an autogenerated 'Project Items' folder
                        SolutionConfigurationEntry ce = conf.GetEntryForItem(si);
                        if (ce != null && ce.Build)
                        {
                            si.Clean(monitor, ce.ItemConfigurationSelector);
                        }
                    }
                    else
                    {
                        item.Clean(monitor, configuration);
                    }
                    monitor.Step(1);
                }
            }
            finally
            {
                monitor.EndTask();
            }
        }
        public Task <BuildResult> Clean(ProgressMonitor monitor, ConfigurationSelector configuration, OperationContext operationContext = null)
        {
            var slnConf = ParentSolution?.GetConfiguration(configuration);

            if (slnConf == null)
            {
                return(Task.FromResult(new BuildResult()));
            }

            //don't collect dependencies, CleanItems will do it
            var collected = new HashSet <SolutionItem> ();

            CollectBuildableEntries(collected, configuration, slnConf, false);

            return(ParentSolution.CleanItems(
                       monitor, configuration, collected, operationContext,
                       IsRoot ? GettextCatalog.GetString("Cleaning solution {0} ({1})", Name, configuration.ToString()) : null
                       ));
        }
Beispiel #8
0
        protected override void OnClean(IProgressMonitor monitor, ConfigurationSelector configuration)
        {
            if (ParentSolution == null)
            {
                return;
            }
            SolutionConfiguration conf = ParentSolution.GetConfiguration(configuration);

            if (conf == null)
            {
                return;
            }

            try {
                monitor.BeginTask(GettextCatalog.GetString("Cleaning Solution {0}", Name), Items.Count);

                foreach (SolutionItem item in Items)
                {
                    if (item is SolutionFolder)
                    {
                        item.Clean(monitor, configuration);
                    }
                    else if (item is SolutionEntityItem)
                    {
                        SolutionEntityItem         si = (SolutionEntityItem)item;
                        SolutionConfigurationEntry ce = conf.GetEntryForItem(si);
                        if (ce.Build)
                        {
                            si.Clean(monitor, ce.ItemConfigurationSelector);
                        }
                    }
                    else
                    {
                        item.Clean(monitor, configuration);
                    }
                    monitor.Step(1);
                }
            }
            finally {
                monitor.EndTask();
            }
        }