Exemplo n.º 1
0
        bool CheckInheritedPropertyImpl(IProperty impl, IProperty target)
        {
            if (!TypeSystemServices.CheckOverrideSignature(impl.GetParameters(), target.GetParameters()))
            {
                return(false);
            }

            if (HasGetter(target) && !HasGetter(impl))
            {
                return(false);
            }
            if (HasSetter(target) && !HasSetter(impl))
            {
                return(false);
            }

            return(true);
        }
        Property CreateAbstractProperty(TypeReference reference, IProperty property)
        {
            Debug.Assert(0 == property.GetParameters().Length);
            Property p = CodeBuilder.CreateProperty(property.Name, property.Type);

            p.Modifiers |= TypeMemberModifiers.Abstract;

            IMethod getter = property.GetGetMethod();

            if (getter != null)
            {
                p.Getter = CodeBuilder.CreateAbstractMethod(reference.LexicalInfo, getter);
            }

            IMethod setter = property.GetSetMethod();

            if (setter != null)
            {
                p.Setter = CodeBuilder.CreateAbstractMethod(reference.LexicalInfo, setter);
            }
            return(p);
        }
Exemplo n.º 3
0
        Property CreatePropertyStub(ClassDefinition node, IProperty baseProperty)
        {
            //try to complete partial implementation if any
            Property property = node.Members[baseProperty.Name] as Property;
            if (null == property) {
                property = new Property(LexicalInfo.Empty);
                property.Name = baseProperty.Name;
                property.Modifiers = TypeSystemServices.GetAccess(baseProperty) | TypeMemberModifiers.Virtual;
                property.IsSynthetic = true;
                DeclareParameters(property, baseProperty.GetParameters(), baseProperty.IsStatic ? 0 : 1);
                property.Type = CreateTypeReference(baseProperty.Type);
            }

            if (property.Getter == null && null != baseProperty.GetGetMethod())
                property.Getter = CreateMethodStub(baseProperty.GetGetMethod());

            if (property.Setter == null && null != baseProperty.GetSetMethod())
                property.Setter = CreateMethodStub(baseProperty.GetSetMethod());

            EnsureEntityFor(property);
            return property;
        }
Exemplo n.º 4
0
 static bool CheckOverrideSignature(IProperty p, IProperty candidate)
 {
     return TypeSystemServices.CheckOverrideSignature(p.GetParameters(), candidate.GetParameters());
 }
        void ResolveClassAbstractProperty(ClassDefinition node,
			TypeReference baseTypeRef,
			IProperty entity)
        {
            bool resolved = false;

            foreach (TypeMember member in node.Members)
            {
                if (entity.Name != member.Name
                    || NodeType.Property != member.NodeType
                    || !IsCorrectExplicitMemberImplOrNoExplicitMemberAtAll(member, entity)
                    || !TypeSystemServices.CheckOverrideSignature(entity.GetParameters(), GetPropertyEntity(member).GetParameters()))
                    continue;

                Property p = (Property) member;
                ProcessPropertyAccessor(p, p.Getter, entity.GetGetMethod());
                ProcessPropertyAccessor(p, p.Setter, entity.GetSetMethod());
                if (null == p.Type)
                {
                    p.Type = CodeBuilder.CreateTypeReference(entity.Type);
                }
                else
                {
                    if (entity.Type != p.Type.Entity)
                        Error(CompilerErrorFactory.ConflictWithInheritedMember(p, p.FullName, entity.FullName));
                }
                resolved = true;
            }

            if (resolved)
                return;

            foreach(SimpleTypeReference parent in node.BaseTypes)
            {
                if(_classDefinitionList.Contains(parent.Name))
                {
                    depth++;
                    ResolveClassAbstractProperty(_classDefinitionList[parent.Name] as ClassDefinition, baseTypeRef, entity);
                    depth--;
                }
            }

            if(CheckInheritsInterfaceImplementation(node, entity))
                return;

            if(depth == 0)
            {
                node.Members.Add(CreateAbstractProperty(baseTypeRef, entity));
                AbstractMemberNotImplemented(node, baseTypeRef, entity);
            }
        }
        Property CreateAbstractProperty(TypeReference reference, IProperty property)
        {
            Debug.Assert(0 == property.GetParameters().Length);
            Property p = CodeBuilder.CreateProperty(property.Name, property.Type);
            p.Modifiers |= TypeMemberModifiers.Abstract;

            IMethod getter = property.GetGetMethod();
            if (getter != null)
            {
                p.Getter = CodeBuilder.CreateAbstractMethod(reference.LexicalInfo, getter);
            }

            IMethod setter = property.GetSetMethod();
            if (setter != null)
            {
                p.Setter = CodeBuilder.CreateAbstractMethod(reference.LexicalInfo, setter);
            }
            return p;
        }
 bool CheckInheritedPropertyImpl(IProperty impl, IProperty target)
 {
     if(impl.Type == target.Type)
     {
         if(TypeSystemServices.CheckOverrideSignature(impl.GetParameters(), target.GetParameters()))
         {
             if(HasGetter(target))
             {
                 if(!HasGetter(impl))
                 {
                     return false;
                 }
             }
             if(HasSetter(target))
             {
                 if(!HasSetter(impl))
                 {
                     return false;
                 }
             }
             /* Unnecessary?
               if(impl.IsPublic != target.IsPublic ||
                impl.IsProtected != target.IsProtected ||
                impl.IsPrivate != target.IsPrivate)
             {
                 return false;
             }*/
             return true;
         }
     }
     return false;
 }
        private bool ResolveAsImplementationOf(IProperty baseProperty, Property property)
        {
            if (!TypeSystemServices.CheckOverrideSignature(GetEntity(property).GetParameters(), baseProperty.GetParameters()))
            {
                return(false);
            }

            ProcessPropertyImplementation(property, baseProperty);
            AssertValidPropertyImplementation(property, baseProperty);
            return(true);
        }