Ejemplo n.º 1
0
 public void GetAllMembers()
 {
     RunInCompilerContextEnvironment(() =>
     {
         var barName  = typeof(Bar).FullName.Replace('+', '.');
         var fooName  = typeof(Foo).FullName.Replace('+', '.');
         var members  = MemberCollector.CollectAllMembers(My <TypeSystemServices> .Instance.Map(typeof(Bar)));
         var expected = new[]
         {
             barName + ".constructor",
             barName + ".get_Name",
             barName + ".Name",
             barName + ".set_Name",
             fooName + ".ToString",
             "object.Equals",
             "object.Equals",                 // static
             "object.GetHashCode",
             "object.GetType",
             "object.ReferenceEquals",
         };
         var actual = members.OfType <IAccessibleMember>().Where(m => m.IsPublic).Select(m => m.FullName).ToArray();
         Array.Sort(actual);
         Assert.AreEqual(expected, actual);
     });
 }
Ejemplo n.º 2
0
    public List <Member> GetMembers()
    {
        var collector = new MemberCollector();

        collector.Visit(this.Root);
        var results = new List <Member>();

        results.AddRange(collector.Properties.Select(p => new Member()
        {
            KindText         = p.Kind().ToString(),
            DeclarationToken = new MemberToken(this.Code, p.Span),
            NameToken        = new MemberToken(this.Code, p.Identifier.Span),
            TypeToken        = new MemberToken(this.Code, p.Type.Span),
        }));
        results.AddRange(collector.Fields.SelectMany(f => f.Declaration.Variables.Select(v => new Member()
        {
            KindText         = f.Kind().ToString(),
            DeclarationToken = new MemberToken(this.Code, f.Span),
            TypeToken        = new MemberToken(this.Code, f.Declaration.Type.Span),
            NameToken        = new MemberToken(this.Code, v.Span),
        })));
        results.AddRange(collector.Variables.SelectMany(f => f.Declaration.Variables.Select(v => new Member()
        {
            KindText         = f.Kind().ToString(),
            DeclarationToken = new MemberToken(this.Code, f.Span),
            TypeToken        = new MemberToken(this.Code, f.Declaration.Type.Span),
            NameToken        = new MemberToken(this.Code, v.Span),
        })));
        return(results);
    }
Ejemplo n.º 3
0
        public bool PerformTask(ICreateCodeGenerationPlanPipelineState manager)
        {
            var memberCollector = new MemberCollector();

            foreach (var target in manager.CommonState.SourcePartialClassDefinitions)
            {
                foreach (var mixin in manager.GetAllPMixinAttributes(target))
                {
                    var mixinMembers =
                        memberCollector.CollectMemberWrappers(
                            mixin,
                            manager.CommonState.Context.TypeResolver.Compilation)
                        .ToList();

                    //Save Members
                    manager.CodeGenerationPlans[target].MixinGenerationPlans[mixin].Members = mixinMembers;
                }
            }

            return(true);
        }
Ejemplo n.º 4
0
        public IEnumerable <AstNode> FindUsageNodes(Request request)
        {
            var res = _parser.ParsedContent(request.Buffer, request.FileName);
            var loc = new TextLocation(request.Line, request.Column);

            _result = new ConcurrentBag <AstNode>();
            var findReferences = new FindReferences
            {
                FindCallsThroughInterface         = true,
                FindCallsThroughVirtualBaseMethod = true,
                FindTypeReferencesEvenIfAliased   = true,
            };

            ResolveResult resolveResult = ResolveAtLocation.Resolve(res.Compilation, res.UnresolvedFile, res.SyntaxTree, loc);

            if (resolveResult is LocalResolveResult)
            {
                var variable = (resolveResult as LocalResolveResult).Variable;
                findReferences.FindLocalReferences(variable, res.UnresolvedFile, res.SyntaxTree, res.Compilation,
                                                   (node, rr) => _result.Add(node.GetDefinition()), CancellationToken.None);
            }
            else
            {
                IEntity entity = null;
                IEnumerable <IList <IFindReferenceSearchScope> > searchScopes = null;
                if (resolveResult is TypeResolveResult)
                {
                    var type = (resolveResult as TypeResolveResult).Type;
                    entity = type.GetDefinition();
                    ProcessTypeResults(type);
                    searchScopes = new[] { findReferences.GetSearchScopes(entity) };
                }

                if (resolveResult is MemberResolveResult)
                {
                    entity = (resolveResult as MemberResolveResult).Member;
                    if (entity.EntityType == EntityType.Constructor)
                    {
                        // process type instead
                        var type = entity.DeclaringType;
                        entity = entity.DeclaringTypeDefinition;
                        ProcessTypeResults(type);
                        searchScopes = new[] { findReferences.GetSearchScopes(entity) };
                    }
                    else
                    {
                        ProcessMemberResults(resolveResult);
                        var members = MemberCollector.CollectMembers(_solution,
                                                                     (resolveResult as MemberResolveResult).Member);
                        searchScopes = members.Select(findReferences.GetSearchScopes);
                    }
                }

                if (entity == null)
                {
                    return(_result);
                }

                var interesting = new List <CSharpUnresolvedFile>();

                foreach (var project in _solution.Projects)
                {
                    var pctx = project.ProjectContent.CreateCompilation();
                    interesting = (from file in project.Files
                                   select(file.ParsedFile as CSharpUnresolvedFile)).ToList();

                    foreach (var file in interesting)
                    {
                        string text = _solution.GetFile(file.FileName).Content.Text;
                        var    unit = new CSharpParser().Parse(text, file.FileName);
                        foreach (var scope in searchScopes)
                        {
                            findReferences.FindReferencesInFile(scope, file, unit,
                                                                pctx,
                                                                (node, rr) => _result.Add(node.GetIdentifier()),
                                                                CancellationToken.None);
                        }
                    }
                }
            }
            return(_result);
        }