Example #1
0
 public SourceFile(FileInfo sourceFileInfo, string projectProjectFolder, IncludeResolveStrategy includeResolveStrategy)
 {
     ProjectFolder           = projectProjectFolder;
     _sourceFileInfo         = sourceFileInfo;
     _includes               = new HashSet <string>();
     _id                     = DetermineId(sourceFileInfo);
     _includeResolveStrategy = includeResolveStrategy;
 }
Example #2
0
        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);
        }