Esempio n. 1
0
        private void RegisterDirectIncludeRelations(SourceFile sourceFile)
        {
            string consumerName = ExtractSourceFileUniqueName(sourceFile.Name);

            foreach (string includedFile in sourceFile.Includes)
            {
                if (!IsExternalInclude(includedFile))
                {
                    RegisterRelation(includedFile, consumerName);
                }
            }

            foreach (string unresolvedIncludedFile in sourceFile.UnresolvedIncludes)
            {
                if (!IsExternalInclude(unresolvedIncludedFile))
                {
                    _model.SkipRelation(sourceFile.Name, unresolvedIncludedFile, "include", "not resolved");
                }
            }

            foreach (string ambiguousIncludedFile in sourceFile.AmbiguousIncludes)
            {
                if (!IsExternalInclude(ambiguousIncludedFile))
                {
                    _model.AmbiguousRelation(sourceFile.Name, ambiguousIncludedFile, "include", "ambiguous");
                }
            }
        }
Esempio n. 2
0
        private void RegisterDirectIncludeRelations()
        {
            foreach (ProjectFile visualStudioProject in _solutionFile.Projects)
            {
                foreach (SourceFile sourceFile in visualStudioProject.SourceFiles)
                {
                    foreach (string includedFile in sourceFile.Includes)
                    {
                        Logger.LogInfo("Include relation registered: " + sourceFile.Name + " -> " + includedFile);

                        string consumerName = null;
                        switch (_analyzerSettings.ViewMode)
                        {
                        case ViewMode.LogicalView:
                            consumerName = GetLogicalName(_solutionFile, visualStudioProject, sourceFile);
                            break;

                        case ViewMode.PhysicalView:
                            consumerName = GetPhysicalName(sourceFile);
                            break;

                        default:
                            Logger.LogError("Unknown view mode");
                            break;
                        }

                        if (consumerName != null)
                        {
                            if (IsSystemInclude(includedFile))
                            {
                                // System includes are ignored
                            }
                            else if (IsInterfaceInclude(includedFile))
                            {
                                // Interface includes must be clones of includes files in other visual studio projects
                                string resolvedIncludedFile = ResolveClonedFile(includedFile, sourceFile);
                                if (resolvedIncludedFile != null)
                                {
                                    RegisterIncludeRelation(consumerName, resolvedIncludedFile);
                                }
                                else
                                {
                                    _model.SkipRelation(consumerName, includedFile, "include", "interface include file not be resolved");
                                }
                            }
                            else if (IsExternalInclude(includedFile))
                            {
                                // External includes can be clones of includes files in other visual studio projects or
                                // reference external software
                                string resolvedIncludedFile = ResolveClonedFile(includedFile, sourceFile);
                                if (resolvedIncludedFile != null)
                                {
                                    RegisterIncludeRelation(consumerName, resolvedIncludedFile);
                                }
                                else
                                {
                                    SourceFile includedSourceFile = new SourceFile(includedFile);
                                    string     providerName       = GetExternalName(includedSourceFile.SourceFileInfo);
                                    string     type = includedSourceFile.FileType;
                                    _model.AddElement(providerName, type, includedFile);
                                    _model.AddRelation(consumerName, providerName, "include", 1, "include file is an external include");
                                }
                            }
                            else
                            {
                                RegisterIncludeRelation(consumerName, includedFile);
                            }
                        }
                    }
                }
            }
        }