public override async Task <AnalyzerResult> AnalyzeFile(string filePath, AnalyzerResult analyzerResult) { if (!File.Exists(filePath)) { throw new FileNotFoundException(filePath); } var projectBuildResult = analyzerResult.ProjectBuildResult; var oldSourceFileResult = analyzerResult.ProjectResult.SourceFileResults.FirstOrDefault(sourceFile => sourceFile.FileFullPath == filePath); analyzerResult.ProjectResult.SourceFileResults.Remove(oldSourceFileResult); ProjectBuildHandler projectBuildHandler = new ProjectBuildHandler(Logger, analyzerResult.ProjectBuildResult.Project, analyzerResult.ProjectBuildResult.Compilation, analyzerResult.ProjectBuildResult.PrePortCompilation, AnalyzerConfiguration); analyzerResult.ProjectBuildResult = await projectBuildHandler.IncrementalBuild(filePath, analyzerResult.ProjectBuildResult); var newSourceFileBuildResult = projectBuildResult.SourceFileBuildResults.FirstOrDefault(sourceFile => sourceFile.SourceFileFullPath == filePath); var fileAnalysis = AnalyzeFile(newSourceFileBuildResult, analyzerResult.ProjectResult.ProjectRootPath); analyzerResult.ProjectResult.SourceFileResults.Add(fileAnalysis); return(analyzerResult); }
public void LoadProjectFile_Returns_Null_On_Invalid_ProjectFilePath() { var projectBuildHandlerInstance = new ProjectBuildHandler(null); var loadProjectFileMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "LoadProjectFile"); // Invoke method and read contents of method output var projectFile = (XDocument)loadProjectFileMethod.Invoke(projectBuildHandlerInstance, new object[] { @"C:\\Invalid\\ProjectFilePath.csproj" }); Assert.AreEqual(null, projectFile); }
public void LoadMetadataReferences_Returns_Empty_On_Invalid_ProjectFile() { var projectBuildHandlerInstance = new ProjectBuildHandler(null); var loadMetadataReferencesMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "LoadMetadataReferences"); // Invoke method and read contents of method output var metadataReferences = (List <PortableExecutableReference>)loadMetadataReferencesMethod.Invoke(projectBuildHandlerInstance, new object[] { null }); var expectedMetadataReferences = new List <PortableExecutableReference>(); CollectionAssert.AreEquivalent(expectedMetadataReferences, metadataReferences); }
public void LoadMetadataReferences_Returns_Expected_ReferencePath() { var testReferencePath = Path.Combine( TestContext.CurrentContext.TestDirectory, "Codelyzer.Analysis.Tests.dll" ); var projectFileContent = string.Format(@"<Project Sdk=""Microsoft.NET.Sdk""> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include=""Microsoft.AspNetCore.App"" /> </ItemGroup> <ItemGroup> <PackageReference Include=""MyFirstPackage"" Version=""1.0.0"" /> <PackageReference Include=""MySecondPackage"" Version=""2.0.0"" /> </ItemGroup> <ItemGroup> <ProjectReference Include=""TheMainProject"" /> <ProjectReference Include=""TheDependency"" /> </ItemGroup> <ItemGroup Label=""PortingInfo""> <!-- DO NOT REMOVE WHILE PORTING C:\\RandomFile.dll {0} --> </ItemGroup> </Project>", testReferencePath); var projectFileDoc = XDocument.Load(new StringReader(projectFileContent)); var mockedLogger = new Mock <ILogger>(); var projectBuildHandlerInstance = new ProjectBuildHandler(mockedLogger.Object, null, new List <string>()); var loadMetadataReferencesMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "LoadMetadataReferences"); // Invoke method and read contents of method output var metadataReferences = (List <PortableExecutableReference>)loadMetadataReferencesMethod.Invoke(projectBuildHandlerInstance, new object[] { projectFileDoc }); Assert.AreEqual(1, metadataReferences.Count); // Validate MissingMetaReferences var prop = TestUtils.GetPrivateProperty(projectBuildHandlerInstance.GetType(), "MissingMetaReferences"); List <string> missingMetaReferences = (List <string>)prop.GetValue(projectBuildHandlerInstance); List <string> expectedMissingMetaReferences = new List <string> { @"C:\\RandomFile.dll" }; CollectionAssert.AreEquivalent(expectedMissingMetaReferences, missingMetaReferences); }
public void LoadProjectFile_Returns_Expected_XDocument() { var testProjectFilePath = Path.GetFullPath(Path.Combine( tmpTestFixturePath, "ProjectFileWithNonExistingMetaReferences.xml" )); File.WriteAllText(testProjectFilePath, projectFileContent); var projectBuildHandlerInstance = new ProjectBuildHandler(null); var loadProjectFileMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "LoadProjectFile"); // Invoke method and read contents of method output var projectFile = (XDocument)loadProjectFileMethod.Invoke(projectBuildHandlerInstance, new object[] { testProjectFilePath }); Assert.AreEqual(projectFileContent, projectFile.ToString()); }
public void ExtractFileReferencesFromProject_Retrieves_Expected_ReferencePaths() { using var stringReader = new StringReader(projectFileContent); var projectFileDoc = XDocument.Load(stringReader); var projectBuildHandlerInstance = new ProjectBuildHandler(null); var extractFileReferencesFromProjectMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "ExtractFileReferencesFromProject"); // Invoke method and read contents of method output var fileReferences = (List <string>)extractFileReferencesFromProjectMethod.Invoke(projectBuildHandlerInstance, new object[] { projectFileDoc }); var expectedFileReferences = new List <string> { @"C:\\RandomFile.dll", @"C:\\this\\is\\some\\path\\to\\Some.dll" }; CollectionAssert.AreEquivalent(expectedFileReferences, fileReferences); }
public void LoadProjectFile_Returns_Null_On_Invalid_ProjectFileContent() { var testProjectFilePath = Path.GetFullPath(Path.Combine( tmpTestFixturePath, "InvalidProjectFile.xml" )); File.WriteAllText(testProjectFilePath, "Invalid Project File Content!!!"); var mockedLogger = new Mock <ILogger>(); var projectBuildHandlerInstance = new ProjectBuildHandler(mockedLogger.Object, null, new List <string>()); var loadProjectFileMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "LoadProjectFile"); // Invoke method and read contents of method output var projectFile = (XDocument)loadProjectFileMethod.Invoke(projectBuildHandlerInstance, new object[] { testProjectFilePath }); Assert.AreEqual(null, projectFile); }
public void LoadMetadataReferences_Returns_Empty_On_Invalid_ReferencePath() { var projectFileDoc = XDocument.Load(new StringReader(projectFileContent)); var mockedLogger = new Mock <ILogger>(); var projectBuildHandlerInstance = new ProjectBuildHandler(mockedLogger.Object, null, new List <string>()); var loadMetadataReferencesMethod = TestUtils.GetPrivateMethod(projectBuildHandlerInstance.GetType(), "LoadMetadataReferences"); // Invoke method and read contents of method output var metadataReferences = (List <PortableExecutableReference>)loadMetadataReferencesMethod.Invoke(projectBuildHandlerInstance, new object[] { projectFileDoc }); var expectedMetadataReferences = new List <PortableExecutableReference>(); CollectionAssert.AreEquivalent(expectedMetadataReferences, metadataReferences); // Validate MissingMetaReferences var prop = TestUtils.GetPrivateProperty(projectBuildHandlerInstance.GetType(), "MissingMetaReferences"); List <string> missingMetaReferences = (List <string>)prop.GetValue(projectBuildHandlerInstance); List <string> expectedMissingMetaReferences = new List <string> { @"C:\\RandomFile.dll", @"C:\\this\\is\\some\\path\\to\\Some.dll" }; CollectionAssert.AreEquivalent(expectedMissingMetaReferences, missingMetaReferences); }