static NamespacesResult FastGetNamespaces(ProjectElement project, string typeName) { NamespacesResult result = new NamespacesResult(); result.State = LoadState.NoActiveProject; if (project == null) return result; NamespacesResult projectTypesResult = GetNamespaceFromReferencedProjects(project, typeName); ExtendedFrameworkVersion frameworkVersion = GetExtendedFrameworkVersion(project); NamespacesResult dotNetTypesResult = _DotNetTypes.FastGetNamespaces(typeName, project.IsCaseSensitiveLanguage, frameworkVersion); NamespacesResult projectAndDotNetTypes = CombineResults(projectTypesResult, dotNetTypesResult); NamespacesResult referencesAssembliesTypesResult = GetNamespaceFromReferencedAssemblies(project, typeName); return projectAndDotNetTypes = CombineResults(projectAndDotNetTypes, referencesAssembliesTypesResult); }
static NamespacesResult GetNamespaceFromReferencedProjects(ProjectElement project, string typeName) { NamespacesResult projectTypesResult = new NamespacesResult(); projectTypesResult.State = LoadState.TypeNotFound; TypeToAssemblyNamespaceMap projectsTypeMap = GetTypeToProjectReferenceNamespaceMap(project); AssemblyNamespaceList projectsNamespaceList; if (projectsTypeMap != null && projectsTypeMap.TryGetValue(typeName, project.IsCaseSensitiveLanguage, out projectsNamespaceList)) { projectTypesResult.State = LoadState.TypeFound; projectTypesResult.Namespaces = projectsNamespaceList; } return projectTypesResult; }
static NamespacesResult CombineResults(NamespacesResult first, NamespacesResult second) { NamespacesResult combinedResult = new NamespacesResult(); if (first.State == LoadState.TypeFound || second.State == LoadState.TypeFound) combinedResult.State = LoadState.TypeFound; if (combinedResult.State != LoadState.TypeFound) if (first.State == LoadState.FrameworkNotLoaded || second.State == LoadState.FrameworkNotLoaded) combinedResult.State = LoadState.FrameworkNotLoaded; AssemblyNamespaceList combinedList = new AssemblyNamespaceList(); combinedList.AddUnique(first.Namespaces); combinedList.AddUnique(second.Namespaces); combinedResult.Namespaces = combinedList; return combinedResult; }