Boo.Lang.Compiler.Steps.ProcessMethodBodies.EnsureRelatedNodeWasVisited C# (CSharp) Метод

EnsureRelatedNodeWasVisited() защищенный Метод

protected EnsureRelatedNodeWasVisited ( Node sourceNode, IEntity entity ) : void
sourceNode Node
entity IEntity
Результат void
        protected override void EnsureRelatedNodeWasVisited(Node sourceNode, IEntity entity)
        {
            IInternalEntity internalInfo = GetConstructedInternalEntity(entity);
            if (null == internalInfo)
            {
                ITypedEntity typedEntity = entity as ITypedEntity;
                if (null == typedEntity) return;

                internalInfo = typedEntity.Type as IInternalEntity;
                if (null == internalInfo) return;
            }

            Node node = internalInfo.Node;
            switch (node.NodeType)
            {
                case NodeType.Property:
                case NodeType.Field:
                    {
                        IMember memberEntity = (IMember)entity;
                        if (EntityType.Property == entity.EntityType
                            || TypeSystemServices.IsUnknown(memberEntity.Type))
                        {
                            EnsureMemberWasVisited((TypeMember)node);
                            AssertTypeIsKnown(sourceNode, memberEntity, memberEntity.Type);
                        }
                        break;
                    }

                case NodeType.Method:
                    {
                        IMethod methodEntity = (IMethod)entity;
                        if (TypeSystemServices.IsUnknown(methodEntity.ReturnType))
                        {
                            // try to preprocess the method to resolve its return type
                            Method method = (Method)node;
                            PreProcessMethod(method);
                            if (TypeSystemServices.IsUnknown(methodEntity.ReturnType))
                            {
                                // still unknown?
                                EnsureMemberWasVisited(method);
                                AssertTypeIsKnown(sourceNode, methodEntity, methodEntity.ReturnType);
                            }
                        }
                        break;
                    }
                case NodeType.ClassDefinition:
                case NodeType.StructDefinition:
                case NodeType.InterfaceDefinition:
                    {
                        EnsureMemberWasVisited((TypeDefinition)node);
                        break;
                    }
            }
        }
ProcessMethodBodies