Skip to content

Commit

Permalink
Ignore invalid import when expression empty (#6222)
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffkl committed Mar 13, 2021
1 parent 506d46b commit 2da32a0
Show file tree
Hide file tree
Showing 17 changed files with 426 additions and 310 deletions.
635 changes: 326 additions & 309 deletions src/Build.OM.UnitTests/Definition/Project_Tests.cs

Large diffs are not rendered by default.

28 changes: 27 additions & 1 deletion src/Build/Evaluation/Evaluator.cs
Expand Up @@ -1927,17 +1927,43 @@ ProjectRootElement InnerCreate(string _, ProjectRootElementCacheBase __)
private LoadImportsResult ExpandAndLoadImportsFromUnescapedImportExpression(string directoryOfImportingFile, ProjectImportElement importElement, string unescapedExpression,
bool throwOnFileNotExistsError, out List<ProjectRootElement> imports)
{
imports = new List<ProjectRootElement>();

string importExpressionEscaped = _expander.ExpandIntoStringLeaveEscaped(unescapedExpression, ExpanderOptions.ExpandProperties, importElement.ProjectLocation);
ElementLocation importLocationInProject = importElement.Location;

if (String.IsNullOrWhiteSpace(importExpressionEscaped))
{
if ((_loadSettings & ProjectLoadSettings.IgnoreInvalidImports) != 0)
{
// Log message for import skipped
ProjectImportedEventArgs eventArgs = new ProjectImportedEventArgs(
importElement.Location.Line,
importElement.Location.Column,
ResourceUtilities.GetResourceString("ProjectImportSkippedExpressionEvaluatedToEmpty"),
unescapedExpression,
importElement.ContainingProject.FullPath,
importElement.Location.Line,
importElement.Location.Column)
{
BuildEventContext = _evaluationLoggingContext.BuildEventContext,
UnexpandedProject = importElement.Project,
ProjectFile = importElement.ContainingProject.FullPath,
ImportedProjectFile = string.Empty,
ImportIgnored = true,
};

_evaluationLoggingContext.LogBuildEvent(eventArgs);

return LoadImportsResult.ImportExpressionResolvedToNothing;
}

ProjectErrorUtilities.ThrowInvalidProject(importLocationInProject, "InvalidAttributeValue", String.Empty, XMakeAttributes.project, XMakeElements.import);
}

bool atleastOneImportIgnored = false;
bool atleastOneImportEmpty = false;
imports = new List<ProjectRootElement>();

foreach (string importExpressionEscapedItem in ExpressionShredder.SplitSemiColonSeparatedList(importExpressionEscaped))
{
string[] importFilesEscaped = null;
Expand Down
3 changes: 3 additions & 0 deletions src/Build/Resources/Strings.resx
Expand Up @@ -1699,6 +1699,9 @@ Utilization: {0} Average Utilization: {1:###.0}</value>
<data name="ProjectImportSkippedMissingFile" xml:space="preserve">
<value>Project "{0}" was not imported by "{1}" at ({2},{3}), due to the file not existing.</value>
</data>
<data name="ProjectImportSkippedExpressionEvaluatedToEmpty" xml:space="preserve">
<value>Project "{0}" was not imported by "{1}" at ({2},{3}), due to the expression evaluating to an empty string.</value>
</data>
<data name="ProjectImported" xml:space="preserve">
<value>Importing project "{0}" into project "{1}" at ({2},{3}).</value>
</data>
Expand Down
5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.en.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.es.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.fr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.it.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.ja.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.ko.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.pl.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.pt-BR.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.ru.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.tr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.zh-Hans.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Build/Resources/xlf/Strings.zh-Hant.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2da32a0

Please sign in to comment.