public SourceFile(FileInfo sourceFileInfo, string projectProjectFolder, IncludeResolveStrategy includeResolveStrategy) { ProjectFolder = projectProjectFolder; _sourceFileInfo = sourceFileInfo; _includes = new HashSet <string>(); _id = DetermineId(sourceFileInfo); _includeResolveStrategy = includeResolveStrategy; }
private void DefineProjectIncludeDirectories(Project evaluatedProject) { AddIncludeDirectory(_projectFileInfo.DirectoryName, _projectFileInfo.DirectoryName); foreach (ProjectItemDefinition projectItem in evaluatedProject.ItemDefinitions.Values) { foreach (ProjectMetadata metaData in projectItem.Metadata) { if (metaData.Name == "AdditionalIncludeDirectories") { string[] includeDirectories = metaData.EvaluatedValue.Trim(';').Split(';'); foreach (string includeDirectory in includeDirectories) { string trimmedIncludeDirectory = includeDirectory.Trim().Replace(@"\r\n", ""); // To fix occasional prefixes if (trimmedIncludeDirectory.Length > 0) { try { string resolvedIncludeDirectory = Path.GetFullPath(trimmedIncludeDirectory); if (Directory.Exists(resolvedIncludeDirectory)) // Is existing absolute include path { AddIncludeDirectory(resolvedIncludeDirectory, includeDirectory); } else { resolvedIncludeDirectory = GetAbsolutePath(_projectFileInfo.DirectoryName, trimmedIncludeDirectory); if (Directory.Exists(resolvedIncludeDirectory)) // Is existing resolved relative include path { AddIncludeDirectory(resolvedIncludeDirectory, includeDirectory); } else { AnalyzerLogger.LogErrorIncludePathNotFound(resolvedIncludeDirectory, evaluatedProject.FullPath); } } } catch (Exception) { AnalyzerLogger.LogErrorPathNotResolved(includeDirectory, evaluatedProject.FullPath); } } } } } } List <string> externalIncludeDirectories = new List <string>(); foreach (ExternalIncludeDirectory externalIncludeDirectory in _analyzerSettings.ExternalIncludeDirectories) { if (Directory.Exists(externalIncludeDirectory.Path)) { externalIncludeDirectories.Add(externalIncludeDirectory.Path); } else { AnalyzerLogger.LogErrorIncludePathNotFound(externalIncludeDirectory.Path, evaluatedProject.FullPath); } } List <string> interfaceIncludeDirectories = new List <string>(); foreach (string interfaceIncludeDirectory in _analyzerSettings.InterfaceIncludeDirectories) { if (Directory.Exists(interfaceIncludeDirectory)) { interfaceIncludeDirectories.Add(interfaceIncludeDirectory); } else { AnalyzerLogger.LogErrorIncludePathNotFound(interfaceIncludeDirectory, evaluatedProject.FullPath); } } _includeResolveStrategy = new IncludeResolveStrategy(_includeDirectories, interfaceIncludeDirectories, externalIncludeDirectories, _analyzerSettings.SystemIncludeDirectories); }