/// <summary> /// Retrieves the model instance for the given unresolved entity. /// </summary> /// <param name="entity">The unresolved entity</param> /// <param name="project">The project in which the entity is defined. /// If this parameter is null, the project will be determined based on the file name.</param> /// <returns>The entity model if it could be found; or null otherwise.</returns> public static IEntityModel GetModel(this IUnresolvedEntity entity, IProject project = null) { if (project == null) { if (entity.Region.FileName == null) { return(null); } project = SD.ProjectService.FindProjectContainingFile(FileName.Create(entity.Region.FileName)); if (project == null) { return(null); } } IUnresolvedTypeDefinition unresolvedTypeDefinition = entity as IUnresolvedTypeDefinition ?? entity.DeclaringTypeDefinition; if (unresolvedTypeDefinition == null) { return(null); } ITypeDefinitionModel typeModel = project.AssemblyModel.TopLevelTypeDefinitions[unresolvedTypeDefinition.FullTypeName]; if (entity is IUnresolvedTypeDefinition || typeModel == null) { return(typeModel); } ITypeDefinition typeDefinition = typeModel.Resolve(); IUnresolvedMember unresolvedMember = entity as IUnresolvedMember; if (typeDefinition == null || unresolvedMember == null) { return(null); } IMember member = unresolvedMember.Resolve(new SimpleTypeResolveContext(typeDefinition)); if (member == null) { return(null); } var snapshot = member.Compilation.SolutionSnapshot as ISolutionSnapshotWithProjectMapping; foreach (var memberModel in typeModel.Members) { if (memberModel.Name == unresolvedMember.Name) { if (memberModel.Resolve() == member.MemberDefinition) { return(memberModel); } } } return(null); }
public override IMember Resolve(ITypeResolveContext context) { if (accessorOwner != null) { var owner = accessorOwner.Resolve(context); if (owner != null) { IProperty p = owner as IProperty; if (p != null) { if (p.CanGet && p.Getter.Name == this.Name) { return(p.Getter); } if (p.CanSet && p.Setter.Name == this.Name) { return(p.Setter); } } IEvent e = owner as IEvent; if (e != null) { if (e.CanAdd && e.AddAccessor.Name == this.Name) { return(e.AddAccessor); } if (e.CanRemove && e.RemoveAccessor.Name == this.Name) { return(e.RemoveAccessor); } if (e.CanInvoke && e.InvokeAccessor.Name == this.Name) { return(e.InvokeAccessor); } } } return(null); } ITypeReference interfaceTypeReference = null; if (this.IsExplicitInterfaceImplementation && this.ExplicitInterfaceImplementations.Count == 1) { interfaceTypeReference = this.ExplicitInterfaceImplementations[0].DeclaringTypeReference; } return(Resolve(ExtendContextForType(context, this.DeclaringTypeDefinition), this.SymbolKind, this.Name, interfaceTypeReference, this.TypeParameters.Select(tp => tp.Name).ToList(), this.Parameters.Select(p => p.Type).ToList())); }
ICompletionData ICompletionDataFactory.CreateNewPartialCompletionData(int declarationBegin, IUnresolvedTypeDefinition type, IUnresolvedMember m) { return new PartialCompletionData(declarationBegin, m.Resolve(contextAtCaret.CurrentTypeResolveContext), contextAtCaret); }
ICompletionData ICompletionDataFactory.CreateNewPartialCompletionData(int declarationBegin, IUnresolvedTypeDefinition type, IUnresolvedMember m) { return(new PartialCompletionData(declarationBegin, m.Resolve(contextAtCaret.CurrentTypeResolveContext), contextAtCaret)); }
public IMember Resolve() { var compilation = context.GetCompilation(); return(member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly))); }