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