Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
		}
Ejemplo n.º 4
0
 ICompletionData ICompletionDataFactory.CreateNewPartialCompletionData(int declarationBegin, IUnresolvedTypeDefinition type, IUnresolvedMember m)
 {
     return(new PartialCompletionData(declarationBegin, m.Resolve(contextAtCaret.CurrentTypeResolveContext), contextAtCaret));
 }
Ejemplo n.º 5
0
        public IMember Resolve()
        {
            var compilation = context.GetCompilation();

            return(member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)));
        }