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"); } } }
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); } } } } } }