Clean up ProjectDependencyFinder API to be self contained

This commit is contained in:
Bryan Thornbury 2016-09-22 17:44:34 -07:00
parent 5523f24712
commit b4a0cc245a
2 changed files with 42 additions and 31 deletions

View file

@ -7,12 +7,48 @@ using Microsoft.DotNet.ProjectModel;
using System.Linq;
using System.IO;
using Newtonsoft.Json.Linq;
using Microsoft.DotNet.ProjectModel.Compilation;
using Microsoft.DotNet.ProjectModel.Graph;
namespace Microsoft.DotNet.ProjectJsonMigration
{
public class ProjectDependencyFinder
{
public Dictionary<string, ProjectDependency> FindPossibleProjectDependencies(string projectJsonFilePath)
public IEnumerable<ProjectDependency> ResolveProjectDependencies(ProjectContext projectContext, HashSet<string> preResolvedProjects=null)
{
preResolvedProjects = preResolvedProjects ?? new HashSet<string>();
var projectExports = projectContext.CreateExporter("_").GetDependencies();
var possibleProjectDependencies =
FindPossibleProjectDependencies(projectContext.ProjectFile.ProjectFilePath);
var projectDependencies = new List<ProjectDependency>();
foreach (var projectExport in projectExports)
{
var projectExportName = projectExport.Library.Identity.Name;
ProjectDependency projectDependency;
if (!possibleProjectDependencies.TryGetValue(projectExportName, out projectDependency))
{
if (projectExport.Library.Identity.Type.Equals(LibraryType.Project)
&& !preResolvedProjects.Contains(projectExportName))
{
MigrationErrorCodes
.MIGRATE1014($"Unresolved project dependency ({projectExportName})").Throw();
}
else
{
continue;
}
}
projectDependencies.Add(projectDependency);
}
return projectDependencies;
}
private Dictionary<string, ProjectDependency> FindPossibleProjectDependencies(string projectJsonFilePath)
{
var projectDirectory = Path.GetDirectoryName(projectJsonFilePath);
@ -112,7 +148,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
return paths;
}
public static string ResolveRootDirectory(string projectPath)
private static string ResolveRootDirectory(string projectPath)
{
var di = new DirectoryInfo(projectPath);

View file

@ -30,15 +30,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
{
_projectDirectory = migrationSettings.ProjectDirectory;
var possibleProjectDependencies = _projectDependencyFinder
.FindPossibleProjectDependencies(migrationRuleInputs.DefaultProjectContext.ProjectFile.ProjectFilePath);
var migratedXProjDependencyPaths = MigrateXProjProjectDependencies(migrationSettings, migrationRuleInputs);
var migratedXProjDependencyNames = migratedXProjDependencyPaths.Select(p => Path.GetFileNameWithoutExtension(p));
var migratedXProjDependencyNames = new HashSet<string>(migratedXProjDependencyPaths.Select(p => Path.GetFileNameWithoutExtension(p)));
AddPropertyTransformsToCommonPropertyGroup(migrationRuleInputs.CommonPropertyGroup);
MigrateProjectJsonProjectDependencies(
possibleProjectDependencies,
migrationRuleInputs.ProjectContexts,
migratedXProjDependencyNames,
migrationRuleInputs.OutputMSBuildProject);
@ -88,37 +84,16 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
}
public void MigrateProjectJsonProjectDependencies(
Dictionary<string, ProjectDependency> possibleProjectDependencies,
IEnumerable<ProjectContext> projectContexts,
IEnumerable<string> migratedXProjDependencyNames,
HashSet<string> migratedXProjDependencyNames,
ProjectRootElement outputMSBuildProject)
{
foreach (var projectContext in projectContexts)
{
var projectDependencies = _projectDependencyFinder.ResolveProjectDependencies(projectContext, migratedXProjDependencyNames);
var projectExports = projectContext.CreateExporter("_").GetDependencies();
var projectDependencyTransformResults = new List<ProjectItemElement>();
foreach (var projectExport in projectExports)
{
var projectExportName = projectExport.Library.Identity.Name;
ProjectDependency projectDependency;
if (!possibleProjectDependencies.TryGetValue(projectExportName, out projectDependency))
{
if (projectExport.Library.Identity.Type.Equals(LibraryType.Project)
&& !migratedXProjDependencyNames.Contains(projectExportName))
{
MigrationErrorCodes
.MIGRATE1014($"Unresolved project dependency ({projectExportName})").Throw();
}
else
{
continue;
}
}
projectDependencyTransformResults.Add(ProjectDependencyTransform.Transform(projectDependency));
}
var projectDependencyTransformResults = projectDependencies.Select(p => ProjectDependencyTransform.Transform(p));
if (projectDependencyTransformResults.Any())
{