Ejemplo n.º 1
0
        internal static IList <ISymbol> GetSourceSymbols(CSharpCompilation compilation, bool includeLocal)
        {
            var list = new List <ISymbol>();
            LocalSymbolDumper localDumper = includeLocal ? new LocalSymbolDumper(compilation) : null;

            GetSourceMemberSymbols(compilation.SourceModule.GlobalNamespace, list, localDumper);

            // ??
            // if (includeLocal)
            GetSourceAliasSymbols(compilation, list);
            list.Add(compilation.Assembly);
            list.AddRange(compilation.Assembly.Modules);

            return(list);
        }
Ejemplo n.º 2
0
        private static void GetSourceMemberSymbols(
            INamespaceOrTypeSymbol symbol,
            List <ISymbol> list,
            LocalSymbolDumper localDumper
            )
        {
            foreach (var memberSymbol in symbol.GetMembers())
            {
                list.Add(memberSymbol);

                switch (memberSymbol.Kind)
                {
                case SymbolKind.NamedType:
                case SymbolKind.Namespace:
                    GetSourceMemberSymbols(
                        (INamespaceOrTypeSymbol)memberSymbol,
                        list,
                        localDumper
                        );
                    break;

                case SymbolKind.Method:
                    var method = (IMethodSymbol)memberSymbol;
                    foreach (var parameter in method.Parameters)
                    {
                        list.Add(parameter);
                    }

                    if (localDumper != null)
                    {
                        localDumper.GetLocalSymbols(method.GetSymbol(), list);
                    }
                    break;

                case SymbolKind.Field:
                    if (localDumper != null)
                    {
                        localDumper.GetLocalSymbols(
                            memberSymbol.GetSymbol <FieldSymbol>(),
                            list
                            );
                    }
                    break;
                }
            }
        }
Ejemplo n.º 3
0
        private static void GetSourceMemberSymbols(NamespaceOrTypeSymbol symbol, List<ISymbol> list, LocalSymbolDumper localDumper)
        {
            foreach (var memberSymbol in symbol.GetMembers())
            {
                list.Add(memberSymbol);

                switch (memberSymbol.Kind)
                {
                    case SymbolKind.NamedType:
                    case SymbolKind.Namespace:
                        GetSourceMemberSymbols((NamespaceOrTypeSymbol)memberSymbol, list, localDumper);
                        break;
                    case SymbolKind.Method:
                        var method = (MethodSymbol)memberSymbol;
                        foreach (var parameter in method.Parameters)
                        {
                            list.Add(parameter);
                        }

                        if (localDumper != null)
                        {
                            localDumper.GetLocalSymbols(method, list);
                        }

                        break;
                    case SymbolKind.Field:
                        if (localDumper != null)
                        {
                            localDumper.GetLocalSymbols((FieldSymbol)memberSymbol, list);
                        }

                        break;
                }
            }
        }