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