Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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;
        }
Ejemplo n.º 3
0
        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;
        }