private static bool TryGetLoadedSyntaxTree( ImmutableDictionary <string, SyntaxTree> loadedSyntaxTreeMap, LoadDirective directive, out SyntaxTree loadedTree ) { if (loadedSyntaxTreeMap.TryGetValue(directive.ResolvedPath, out loadedTree)) { return(true); } // If we don't have a tree for this directive, there should be errors. Debug.Assert(directive.Diagnostics.HasAnyErrors()); return(false); }
/// <summary> /// This method loads the default assemblies and the assemblies specified in loadStatements. /// </summary> /// <param name="loadDirectives"></param> /// <returns> /// A dictionary containing the HappyNamespaceTrackers corresponding to the root namespaces in the loaded assemblies. /// </returns> Dictionary<string, HappyNamespaceTracker> LoadAllAssemblies(LoadDirective[] loadDirectives) { Dictionary<string, HappyNamespaceTracker> rootNamespaces = new Dictionary<string, HappyNamespaceTracker>(); var assembliesToLoad = _defaultReferences.Union(loadDirectives.Select(ls => ls.AssemblyName)); foreach (string name in assembliesToLoad) { AssemblyName assemblyName = new AssemblyName(name); Assembly assembly = Assembly.Load(assemblyName); foreach (Type type in assembly.GetTypes().Where(t => t.Namespace != null)) { string[] namespaceSegments = type.Namespace.Split('.'); HappyNamespaceTracker currentNamespaceTracker; if (!rootNamespaces.TryGetValue(namespaceSegments[0], out currentNamespaceTracker)) { currentNamespaceTracker = new HappyNamespaceTracker(null, namespaceSegments[0]); rootNamespaces.Add(namespaceSegments[0], currentNamespaceTracker); } foreach (string segment in namespaceSegments.Skip(1)) { if (currentNamespaceTracker.HasMember(segment)) currentNamespaceTracker = (HappyNamespaceTracker)currentNamespaceTracker.GetMember(segment); else { HappyNamespaceTracker next = new HappyNamespaceTracker(currentNamespaceTracker, segment); currentNamespaceTracker.SetMember(segment, next); currentNamespaceTracker = next; } } currentNamespaceTracker.SetMember(type.Name, new HappyTypeTracker( /*current,*/ type)); } } return rootNamespaces; }
private static bool TryGetLoadedSyntaxTree(ImmutableDictionary<string, SyntaxTree> loadedSyntaxTreeMap, LoadDirective directive, out SyntaxTree loadedTree) { if (loadedSyntaxTreeMap.TryGetValue(directive.ResolvedPath, out loadedTree)) { return true; } // If we don't have a tree for this directive, there should be errors. Debug.Assert(directive.Diagnostics.HasAnyErrors()); return false; }