ScriptProjectAnalysisResult AnalyzeProject(Project project, ScriptUpgradeAnalysisOptions options) { if (!project.IsLoaded()) { return(ScriptProjectAnalysisResult.NonScriptProjectResult); } var projectInfo = ProjectScriptInfo.Load(project.FullName, project.Name); if (!projectInfo.IsValid) { return(ScriptProjectAnalysisResult.NonScriptProjectResult); } var expectedGamePath = projectInfo.GetActualGameBinPath(options.DefaultGameBinPath).TrimEnd('\\'); var expectedInstallPath = options.InstallPath.TrimEnd('\\'); var badReferences = ImmutableArray.CreateBuilder <BadReference>(); var projectFile = new FileInfo(projectInfo.FileName); var projectDir = projectFile.Directory ?? throw new InvalidOperationException($"Unexpected error: Could not determine the directory of the project {projectInfo.FileName}"); var document = XDocument.Load(projectInfo.FileName); var xmlns = new XmlNamespaceManager(new NameTable()); xmlns.AddNamespace("ms", Xmlns); AnalyzeReferences(options, document, xmlns, projectDir, expectedGamePath, expectedInstallPath, badReferences); AnalyzeFiles(options, document, xmlns, projectDir, expectedGamePath, expectedInstallPath, badReferences); return(new ScriptProjectAnalysisResult(projectInfo, document, badReferences.ToImmutable())); }
ScriptProjectAnalysisResult AnalyzeProject(Project project, ScriptUpgradeAnalysisOptions options) { if (!project.IsLoaded()) { return(ScriptProjectAnalysisResult.NonScriptProjectResult); } var projectInfo = ProjectScriptInfo.Load(project.FullName, project.Name); if (!projectInfo.IsValid) { return(ScriptProjectAnalysisResult.NonScriptProjectResult); } var expectedGamePath = projectInfo.GetActualGameBinPath(options.DefaultGameBinPath).TrimEnd('\\'); var expectedInstallPath = options.InstallPath.TrimEnd('\\'); var badReferences = ImmutableArray.CreateBuilder <BadReference>(); var projectFile = new FileInfo(projectInfo.FileName); var projectDir = projectFile.Directory; var document = XDocument.Load(projectInfo.FileName); var xmlns = new XmlNamespaceManager(new NameTable()); xmlns.AddNamespace("ms", Xmlns); AnalyzeReferences(options, document, xmlns, projectDir, expectedGamePath, expectedInstallPath, badReferences); AnalyzeFiles(options, document, xmlns, projectDir, expectedGamePath, expectedInstallPath, badReferences); var whitelist = VerifyWhitelist(document, projectDir, expectedInstallPath); return(new ScriptProjectAnalysisResult(project, projectInfo, document, whitelist, badReferences.ToImmutable())); }