Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Evaluator allocation optimization #7056

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
55 changes: 37 additions & 18 deletions src/Build/Evaluation/Evaluator.cs
Expand Up @@ -1430,11 +1430,14 @@ private void EvaluateImportElement(string directoryOfImportingFile, ProjectImpor
{
List<ProjectRootElement> importedProjectRootElements = ExpandAndLoadImports(directoryOfImportingFile, importElement, out var sdkResult);

foreach (ProjectRootElement importedProjectRootElement in importedProjectRootElements)
if (importedProjectRootElements != null)
{
_data.RecordImport(importElement, importedProjectRootElement, importedProjectRootElement.Version, sdkResult);
foreach (ProjectRootElement importedProjectRootElement in importedProjectRootElements)
{
_data.RecordImport(importElement, importedProjectRootElement, importedProjectRootElement.Version, sdkResult);

PerformDepthFirstPass(importedProjectRootElement);
PerformDepthFirstPass(importedProjectRootElement);
}
}
}
}
Expand Down Expand Up @@ -1643,7 +1646,10 @@ private List<ProjectRootElement> ExpandAndLoadImports(string directoryOfImportin
return projects;
}

allProjects.AddRange(projects);
if (projects != null)
{
allProjects.AddRange(projects);
}
}

if (result == LoadImportsResult.FoundFilesToImportButIgnored)
Expand All @@ -1658,7 +1664,10 @@ private List<ProjectRootElement> ExpandAndLoadImports(string directoryOfImportin
return projects;
}

allProjects.AddRange(projects);
if (projects != null)
{
allProjects.AddRange(projects);
}
}

if (result == LoadImportsResult.TriedToImportButFileNotFound)
Expand Down Expand Up @@ -1703,6 +1712,7 @@ private List<ProjectRootElement> ExpandAndLoadImports(string directoryOfImportin
out SdkResult sdkResult,
bool throwOnFileNotExistsError = true)
{
projects = null;
sdkResult = null;

if (!EvaluateConditionCollectingConditionedProperties(importElement, ExpanderOptions.ExpandProperties,
Expand Down Expand Up @@ -1731,7 +1741,7 @@ private List<ProjectRootElement> ExpandAndLoadImports(string directoryOfImportin

_evaluationLoggingContext.LogBuildEvent(eventArgs);
}
projects = new List<ProjectRootElement>();

return;
}

Expand Down Expand Up @@ -1830,42 +1840,50 @@ private List<ProjectRootElement> ExpandAndLoadImports(string directoryOfImportin

_evaluationLoggingContext.LogBuildEvent(eventArgs);

projects = new List<ProjectRootElement>();

return;
}

ProjectErrorUtilities.ThrowInvalidProject(importElement.SdkLocation, "CouldNotResolveSdk", sdkReference.ToString());
}

if (sdkResult.Path == null)
{
projects = new List<ProjectRootElement>();
}
else
List<ProjectRootElement> projectList = null;
if (sdkResult.Path != null)
{
ExpandAndLoadImportsFromUnescapedImportExpression(directoryOfImportingFile, importElement, Path.Combine(sdkResult.Path, project),
throwOnFileNotExistsError, out projects);

if (projects?.Count > 0)
{
projectList = new List<ProjectRootElement>(projects);
}

if (sdkResult.AdditionalPaths != null)
{

foreach (var additionalPath in sdkResult.AdditionalPaths)
{
ExpandAndLoadImportsFromUnescapedImportExpression(directoryOfImportingFile, importElement, Path.Combine(additionalPath, project),
throwOnFileNotExistsError, out var additionalProjects);

projects.AddRange(additionalProjects);
if (additionalProjects?.Count > 0)
{
projectList ??= new List<ProjectRootElement>();
projectList.AddRange(additionalProjects);
}
}
}
}

if ((sdkResult.PropertiesToAdd?.Any() == true) ||
(sdkResult.ItemsToAdd?.Any() == true))
{
projectList ??= new List<ProjectRootElement>();

// Inserting at the beginning will mean that the properties or items from the SdkResult will be evaluated before
// any projects from paths returned by the SDK Resolver.
projects.Insert(0, CreateProjectForSdkResult(sdkResult));
projectList.Insert(0, CreateProjectForSdkResult(sdkResult));
}

projects = projectList;
}
else
{
Expand Down Expand Up @@ -1973,7 +1991,7 @@ ProjectRootElement InnerCreate(string _, ProjectRootElementCacheBase __)
private LoadImportsResult ExpandAndLoadImportsFromUnescapedImportExpression(string directoryOfImportingFile, ProjectImportElement importElement, string unescapedExpression,
bool throwOnFileNotExistsError, out List<ProjectRootElement> imports)
{
imports = new List<ProjectRootElement>();
imports = null;

string importExpressionEscaped = _expander.ExpandIntoStringLeaveEscaped(unescapedExpression, ExpanderOptions.ExpandProperties, importElement.ProjectLocation);
ElementLocation importLocationInProject = importElement.Location;
Expand Down Expand Up @@ -2171,6 +2189,7 @@ ProjectRootElement InnerCreate(string _, ProjectRootElementCacheBase __)
}
else
{
imports ??= new List<ProjectRootElement>();
imports.Add(importedProjectElement);

if (_lastModifiedProject == null || importedProjectElement.LastWriteTimeWhenRead > _lastModifiedProject.LastWriteTimeWhenRead)
Expand Down Expand Up @@ -2311,7 +2330,7 @@ ProjectRootElement InnerCreate(string _, ProjectRootElementCacheBase __)
}
}

if (imports.Count > 0)
if (imports?.Count > 0)
{
return LoadImportsResult.ProjectsImported;
}
Expand Down