Clean up ProjectDependencyFinder API to be self contained
This commit is contained in:
parent
5523f24712
commit
b4a0cc245a
2 changed files with 42 additions and 31 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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())
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue