Skip to content

Commit

Permalink
Merge branch 'master' into gen-assembly-info
Browse files Browse the repository at this point in the history
Conflicts:
src/Tasks/Microsoft.NETCore.Build.Tasks/Microsoft.NETCore.Build.Tasks.csproj
  • Loading branch information
nguerrera committed Aug 26, 2016
2 parents 129a841 + 64afdda commit 512e5fd
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -766,7 +766,7 @@ public void ItShouldIgnoreFileDependenciesThatAre_NotAssemblies_And_DontBelongTo
}

[Fact]
public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyDependencies()
public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyOrAnalyzerDependencies()
{
// Arrange
// target definitions
Expand All @@ -793,7 +793,7 @@ public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyDependencie
{ MetadataKeys.Type, "Package" },
{ PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" },
{ PreprocessPackageDependenciesDesignTime.DependenciesMetadata,
@"mockChildAssembly1;somepath/mockChildAssembly2" }
@"mockChildAssembly1;somepath/mockChildAssembly2;somepath/mockChildAnalyzerAssembly" }
});

var mockChildAssembly1 = new MockTaskItem(
Expand Down Expand Up @@ -829,6 +829,18 @@ public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyDependencie
{ PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" }
});

var mockChildAnalyzerAssembly = new MockTaskItem(
itemSpec: @"somepath/mockChildAnalyzerAssembly",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.Name, "mockChildAnalyzerAssembly" },
{ MetadataKeys.Path, "some path" },
{ MetadataKeys.ResolvedPath, "some resolved path" },
{ MetadataKeys.Type, "Unknown" },
{ MetadataKeys.Analyzer, "true" },
{ PreprocessPackageDependenciesDesignTime.ResolvedMetadata, "True" }
});

// package dependencies
var mockPackageDep = new MockTaskItem(
itemSpec: "Package3/1.0.0",
Expand Down Expand Up @@ -856,7 +868,15 @@ public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyDependencie
});

var mockChildAssemblyNoCompileMetadataDep = new MockTaskItem(
itemSpec: "mockChildAssemblyNoCompileMetadata/2.0.0",
itemSpec: "somepath/mockChildAssemblyNoCompileMetadata",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
{ MetadataKeys.ParentPackage, "Package3/1.0.0" }
});

var mockChildAnalyzerAssemblyDep = new MockTaskItem(
itemSpec: "somepath/mockChildAnalyzerAssembly",
metadata: new Dictionary<string, string>
{
{ MetadataKeys.ParentTarget, ".Net Framework,Version=v4.5" },
Expand All @@ -871,23 +891,25 @@ public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyDependencie
task.FileDefinitions = new ITaskItem[] {
mockChildAssembly1,
mockChildAssembly2,
mockChildAssemblyNoCompileMetadata
mockChildAssemblyNoCompileMetadata,
mockChildAnalyzerAssembly
};
task.PackageDependencies = new ITaskItem[] {
mockPackageDep
};
task.FileDependencies = new ITaskItem[] {
mockChildAssemblyDep1,
mockChildAssemblyDep2,
mockChildAssemblyNoCompileMetadataDep
mockChildAssemblyNoCompileMetadataDep,
mockChildAnalyzerAssemblyDep
};

// Act
var result = task.Execute();

// Assert
result.Should().BeTrue();
task.DependenciesDesignTime.Count().Should().Be(4);
task.DependenciesDesignTime.Count().Should().Be(5);

var resultTargets = task.DependenciesDesignTime
.Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5")).ToArray();
Expand All @@ -911,6 +933,13 @@ public void ItShouldReturnCorrectHierarchyWhenPackageHasChildAssemblyDependencie
.Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/somepath/mockChildAssembly2")).ToArray();
resultChildAssembly2.Length.Should().Be(1);
VerifyTargetTaskItem(DependencyType.FrameworkAssembly, mockChildAssembly2, resultChildAssembly2[0]);

mockChildAnalyzerAssembly.SetMetadata(MetadataKeys.Path, mockChildAnalyzerAssembly.GetMetadata(MetadataKeys.ResolvedPath));
mockChildAnalyzerAssembly.SetMetadata(MetadataKeys.Analyzer, string.Empty);
var resultChildAnalyzerAssembly = task.DependenciesDesignTime
.Where(x => x.ItemSpec.Equals(".Net Framework,Version=v4.5/somepath/mockChildAnalyzerAssembly")).ToArray();
resultChildAnalyzerAssembly.Length.Should().Be(1);
VerifyTargetTaskItem(DependencyType.AnalyzerAssembly, mockChildAnalyzerAssembly, resultChildAnalyzerAssembly[0]);
}

private void VerifyTargetTaskItem(DependencyType type, ITaskItem input, ITaskItem output)
Expand Down
1 change: 1 addition & 0 deletions src/Tasks/Microsoft.NETCore.Build.Tasks/DependencyType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public enum DependencyType
Package,
Assembly,
FrameworkAssembly,
AnalyzerAssembly,
Content,
Project,
ExternalProject,
Expand Down
17 changes: 17 additions & 0 deletions src/Tasks/Microsoft.NETCore.Build.Tasks/ITaskItemExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Microsoft.Build.Framework;

namespace Microsoft.NETCore.Build.Tasks
{
internal static class ITaskItemExtensions
{
public static bool IsAnalyzer(this ITaskItem item)
{
var isAnalyzer = false;
var analyzerString = item.GetMetadata(MetadataKeys.Analyzer);
return bool.TryParse(analyzerString, out isAnalyzer) && isAnalyzer;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
</PropertyGroup>
<ItemGroup>
<Compile Include="GetAssemblyVersion.cs" />
<Compile Include="ITaskItemExtensions.cs" />
<Compile Include="ProjectContext.cs" />
<Compile Include="NuGetPackageResolver.cs" />
<Compile Include="IPackageResolver.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ public override bool Execute()

AddDependenciesToTheWorld(Assemblies, FileDependencies, (item) =>
{
// We keep analyzers and assemblies with CompileTimeAssembly metadata; skip everything else.
ItemMetadata itemMetadata = null;
if (Assemblies.TryGetValue(item.ItemSpec, out itemMetadata) &&
itemMetadata.Type == DependencyType.AnalyzerAssembly)
{
return false;
}
var fileGroup = item.GetMetadata(MetadataKeys.FileGroup);
return string.IsNullOrEmpty(fileGroup) || !fileGroup.Equals(CompileTimeAssemblyMetadata);
});
Expand Down Expand Up @@ -138,15 +147,19 @@ private void PopulatePackages()
}

/// <summary>
/// Adds assemblies and framework assemblies from FileDefinitons to dependencies world dictionary.
/// Adds assemblies, analyzers and framework assemblies from FileDefinitons to dependencies world dictionary.
/// </summary>
private void PopulateAssemblies()
{
foreach (var fileDef in FileDefinitions)
{
var dependencyType = GetDependencyType(fileDef.GetMetadata(MetadataKeys.Type));
var dependencyType = fileDef.IsAnalyzer()
? DependencyType.AnalyzerAssembly
: GetDependencyType(fileDef.GetMetadata(MetadataKeys.Type));

if (dependencyType != DependencyType.Assembly &&
dependencyType != DependencyType.FrameworkAssembly)
dependencyType != DependencyType.FrameworkAssembly &&
dependencyType != DependencyType.AnalyzerAssembly)
{
continue;
}
Expand Down

0 comments on commit 512e5fd

Please sign in to comment.