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.Linq;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Microsoft.DotNet.ProjectModel.Compilation;
|
||||||
|
using Microsoft.DotNet.ProjectModel.Graph;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.ProjectJsonMigration
|
namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
{
|
{
|
||||||
public class ProjectDependencyFinder
|
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);
|
var projectDirectory = Path.GetDirectoryName(projectJsonFilePath);
|
||||||
|
|
||||||
|
@ -112,7 +148,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
return paths;
|
return paths;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ResolveRootDirectory(string projectPath)
|
private static string ResolveRootDirectory(string projectPath)
|
||||||
{
|
{
|
||||||
var di = new DirectoryInfo(projectPath);
|
var di = new DirectoryInfo(projectPath);
|
||||||
|
|
||||||
|
|
|
@ -30,15 +30,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
{
|
{
|
||||||
_projectDirectory = migrationSettings.ProjectDirectory;
|
_projectDirectory = migrationSettings.ProjectDirectory;
|
||||||
|
|
||||||
var possibleProjectDependencies = _projectDependencyFinder
|
|
||||||
.FindPossibleProjectDependencies(migrationRuleInputs.DefaultProjectContext.ProjectFile.ProjectFilePath);
|
|
||||||
|
|
||||||
var migratedXProjDependencyPaths = MigrateXProjProjectDependencies(migrationSettings, migrationRuleInputs);
|
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);
|
AddPropertyTransformsToCommonPropertyGroup(migrationRuleInputs.CommonPropertyGroup);
|
||||||
MigrateProjectJsonProjectDependencies(
|
MigrateProjectJsonProjectDependencies(
|
||||||
possibleProjectDependencies,
|
|
||||||
migrationRuleInputs.ProjectContexts,
|
migrationRuleInputs.ProjectContexts,
|
||||||
migratedXProjDependencyNames,
|
migratedXProjDependencyNames,
|
||||||
migrationRuleInputs.OutputMSBuildProject);
|
migrationRuleInputs.OutputMSBuildProject);
|
||||||
|
@ -88,37 +84,16 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MigrateProjectJsonProjectDependencies(
|
public void MigrateProjectJsonProjectDependencies(
|
||||||
Dictionary<string, ProjectDependency> possibleProjectDependencies,
|
|
||||||
IEnumerable<ProjectContext> projectContexts,
|
IEnumerable<ProjectContext> projectContexts,
|
||||||
IEnumerable<string> migratedXProjDependencyNames,
|
HashSet<string> migratedXProjDependencyNames,
|
||||||
ProjectRootElement outputMSBuildProject)
|
ProjectRootElement outputMSBuildProject)
|
||||||
{
|
{
|
||||||
foreach (var projectContext in projectContexts)
|
foreach (var projectContext in projectContexts)
|
||||||
{
|
{
|
||||||
|
var projectDependencies = _projectDependencyFinder.ResolveProjectDependencies(projectContext, migratedXProjDependencyNames);
|
||||||
var projectExports = projectContext.CreateExporter("_").GetDependencies();
|
var projectExports = projectContext.CreateExporter("_").GetDependencies();
|
||||||
|
|
||||||
var projectDependencyTransformResults = new List<ProjectItemElement>();
|
var projectDependencyTransformResults = projectDependencies.Select(p => ProjectDependencyTransform.Transform(p));
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (projectDependencyTransformResults.Any())
|
if (projectDependencyTransformResults.Any())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue