예제 #1
0
        public MyPropertyInfo(PropertyDefinition propertyDefinition, MyClassInfo declaringType)
            : base()
        {
            this.name = propertyDefinition.Name;

            string[] readableForms = Tools.GetHumanReadableForms(propertyDefinition.PropertyType);

            this.typeFullName = readableForms[0];
            this.typeFullNameWithoutRevArrayStrings = readableForms[1];
            this.declaringType = declaringType;

            MethodDefinition getterInfo = propertyDefinition.GetMethod;
            MethodDefinition setterInfo = propertyDefinition.SetMethod;

            this.hasGetter = getterInfo != null;
            this.hasSetter = setterInfo != null;

            MethodDefinition getterOrSetterInfo = getterInfo != null ? getterInfo : setterInfo;
            Debug.Assert(getterOrSetterInfo != null, "Impossible! Property must have either getter or setter or both.");

            this.attributes = GetMyPropertyAttributes(propertyDefinition);
            this.underlyingMethodsAttributes = GetMyInvokableMemberAttributes(getterOrSetterInfo);

            this.parametersNames = new List<string>();
            this.parameters = new Dictionary<string, MyParameterInfo>();

            this.exceptionsDescrs = new List<ExceptionDescr>();

            AddParameters(getterInfo, setterInfo);

            this.CheckSupport(propertyDefinition.Attributes, getterOrSetterInfo.Attributes);
        }
예제 #2
0
        public MyPropertyInfo(PropertyDefinition propertyDefinition, MyClassInfo declaringType)
            : base()
        {
            this.name = propertyDefinition.Name;

            string[] readableForms = Tools.GetHumanReadableForms(propertyDefinition.PropertyType);

            this.typeFullName = readableForms[0];
            this.typeFullNameWithoutRevArrayStrings = readableForms[1];
            this.declaringType = declaringType;

            MethodDefinition getterInfo = propertyDefinition.GetMethod;
            MethodDefinition setterInfo = propertyDefinition.SetMethod;

            this.hasGetter = getterInfo != null;
            this.hasSetter = setterInfo != null;

            MethodDefinition getterOrSetterInfo = getterInfo != null ? getterInfo : setterInfo;

            Debug.Assert(getterOrSetterInfo != null, "Impossible! Property must have either getter or setter or both.");

            this.attributes = GetMyPropertyAttributes(propertyDefinition);
            this.underlyingMethodsAttributes = GetMyInvokableMemberAttributes(getterOrSetterInfo);

            this.parametersNames = new List <string>();
            this.parameters      = new Dictionary <string, MyParameterInfo>();

            this.exceptionsDescrs = new List <ExceptionDescr>();

            AddParameters(getterInfo, setterInfo);

            this.CheckSupport(propertyDefinition.Attributes, getterOrSetterInfo.Attributes);
        }
예제 #3
0
        /// <summary>
        /// Returns the string representing attributes contained in the given enumeration.
        /// </summary>
        /// <remarks>
        /// If the invokable member was marked virtual and sealed then this method will omit both of these attributes
        /// (beacuse it's not virtual anymore and the sealed modifier is then meaningless).
        /// </remarks>
        /// <param name="myInvokableMemberAttributes">Enumeration of MyInvokableMemberAttributes.</param>
        /// <returns>String representing attributes contained in the given enumeration.</returns>
        public static string MyInvokableMemberAttributesToString(MyInvokableMemberAttributes myInvokableMemberAttributes)
        {
            StringBuilder sb = new StringBuilder();

            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Public) != 0)
            {
                sb.Append("public ");
            }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Private) != 0)
            {
                sb.Append("private ");
            }

            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Protected) != 0 && ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Internal) != 0))
            {
                sb.Append("protected internal ");
            }
            else if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Protected) != 0)
            {
                sb.Append("protected ");
            }
            else if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Internal) != 0)
            {
                sb.Append("internal ");
            }

            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Static) != 0)
            {
                sb.Append("static ");
            }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Extern) != 0)
            {
                sb.Append("extern ");
            }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Abstract) != 0)
            {
                sb.Append("abstract ");
            }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Virtual) != 0)
            {
                sb.Append("virtual ");
            }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Override) != 0)
            {
                sb.Append("override ");
            }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Sealed) != 0)
            {
                sb.Append("sealed ");
            }

            if (sb.Length > 0)
            {
                sb.Length = sb.Length - 1;
            }

            return(sb.ToString());
        }
예제 #4
0
        protected MyInvokableMemberInfo(MethodDefinition methodDefinition, MyClassInfo declaringType)
        {
            this.attributes    = GetMyInvokableMemberAttributes(methodDefinition);
            this.declaringType = declaringType;

            this.summary = String.Empty;

            this.parametersNames = new List <string>();
            this.parameters      = new Dictionary <string, MyParameterInfo>();

            this.exceptionsDescrs = new List <ExceptionDescr>();
        }
예제 #5
0
        protected MyInvokableMemberInfo(MethodDefinition methodDefinition, MyClassInfo declaringType)
        {
            this.attributes = GetMyInvokableMemberAttributes(methodDefinition);
            this.declaringType = declaringType;

            this.summary = String.Empty;

            this.parametersNames = new List<string>();
            this.parameters = new Dictionary<string, MyParameterInfo>();

            this.exceptionsDescrs = new List<ExceptionDescr>();
        }
예제 #6
0
    public MyEventInfo(EventDefinition eventDefinition, MyClassInfo declaringType)
      : base()
    {
      this.name = eventDefinition.Name;

      string[] readableForms = Tools.GetHumanReadableForms(eventDefinition.EventType);
      this.typeFullName = readableForms[0];
      this.typeFullNameWithoutRevArrayStrings = readableForms[1];

      this.declaringType = declaringType;

      MethodDefinition adderInfo = eventDefinition.AddMethod;
      Debug.Assert(adderInfo != null, "Impossible! add_Event() must have been generated.");

      this.attributes = GetMyEventAttributes(eventDefinition);
      this.underlyingMethodsAttributes = GetMyInvokableMemberAttributes(adderInfo);

      this.CheckSupport(eventDefinition, adderInfo.Attributes);
    }
예제 #7
0
        public MyEventInfo(EventDefinition eventDefinition, MyClassInfo declaringType)
            : base()
        {
            this.name = eventDefinition.Name;

            string[] readableForms = Tools.GetHumanReadableForms(eventDefinition.EventType);
            this.typeFullName = readableForms[0];
            this.typeFullNameWithoutRevArrayStrings = readableForms[1];

            this.declaringType = declaringType;

            MethodDefinition adderInfo = eventDefinition.AddMethod;

            Debug.Assert(adderInfo != null, "Impossible! add_Event() must have been generated.");

            this.attributes = GetMyEventAttributes(eventDefinition);
            this.underlyingMethodsAttributes = GetMyInvokableMemberAttributes(adderInfo);

            this.CheckSupport(eventDefinition, adderInfo.Attributes);
        }
예제 #8
0
        public static MyInvokableMemberAttributes GetMyInvokableMemberAttributes(MethodDefinition methodDefinition)
        {
            MyInvokableMemberAttributes myInvokableMemberAttributes = MyInvokableMemberAttributes.None;

            if (methodDefinition.IsAbstract)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Abstract;
            }
            if (methodDefinition.IsAssembly)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Internal;
            }
            if (methodDefinition.IsFamily)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Protected;
            }
            if (methodDefinition.IsFamilyOrAssembly)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Protected | MyInvokableMemberAttributes.Internal;
            }
            if (methodDefinition.IsPrivate)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Private;
            }
            if (methodDefinition.IsPublic)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Public;
            }
            if (methodDefinition.IsStatic)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Static;
            }

            if ((methodDefinition.Attributes & MethodAttributes.PInvokeImpl) != 0)
            {
                myInvokableMemberAttributes |= MyInvokableMemberAttributes.Extern;
            }

            if ((methodDefinition.Attributes & MethodAttributes.NewSlot) == MethodAttributes.NewSlot)
            {
                Debug.Assert((methodDefinition.Attributes & MethodAttributes.Virtual) == MethodAttributes.Virtual, "Impossible! If invokable member has NewSlot attribute then it has to have Virtual attribute also.");

                if ((methodDefinition.Attributes & MethodAttributes.Final) == 0 && (methodDefinition.Attributes & MethodAttributes.Abstract) == 0)
                {
                    myInvokableMemberAttributes |= MyInvokableMemberAttributes.Virtual;
                }
            }
            else
            {
                if ((methodDefinition.Attributes & MethodAttributes.Virtual) == MethodAttributes.Virtual)
                {
                    myInvokableMemberAttributes |= MyInvokableMemberAttributes.Override;
                }

                if ((methodDefinition.Attributes & MethodAttributes.Final) == MethodAttributes.Final)
                {
                    myInvokableMemberAttributes |= MyInvokableMemberAttributes.Sealed;
                }
            }

            return(myInvokableMemberAttributes);
        }
예제 #9
0
 private static string MyPropertyAndMyInvokableMemberAttributesToString(MyPropertyAttributes myPropertyAttributes, MyInvokableMemberAttributes myInvokableMemberAttributes)
 {
     // for now only MyInvokableMemberInfo attributes
     return MyInvokableMemberInfo.MyInvokableMemberAttributesToString(myInvokableMemberAttributes);
 }
예제 #10
0
        /// <summary>
        /// Returns the string representing attributes contained in the given enumeration.
        /// </summary>
        /// <remarks>
        /// If the invokable member was marked virtual and sealed then this method will omit both of these attributes
        /// (beacuse it's not virtual anymore and the sealed modifier is then meaningless).
        /// </remarks>
        /// <param name="myInvokableMemberAttributes">Enumeration of MyInvokableMemberAttributes.</param>
        /// <returns>String representing attributes contained in the given enumeration.</returns>
        public static string MyInvokableMemberAttributesToString(MyInvokableMemberAttributes myInvokableMemberAttributes)
        {
            StringBuilder sb = new StringBuilder();

            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Public) != 0) { sb.Append("public "); }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Private) != 0) { sb.Append("private "); }

            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Protected) != 0 && ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Internal) != 0)) { sb.Append("protected internal "); }
            else if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Protected) != 0) { sb.Append("protected "); }
            else if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Internal) != 0) { sb.Append("internal "); }

            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Static) != 0) { sb.Append("static "); }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Extern) != 0) { sb.Append("extern "); }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Abstract) != 0) { sb.Append("abstract "); }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Virtual) != 0) { sb.Append("virtual "); }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Override) != 0) { sb.Append("override "); }
            if ((myInvokableMemberAttributes & MyInvokableMemberAttributes.Sealed) != 0) { sb.Append("sealed "); }

            if (sb.Length > 0)
            {
                sb.Length = sb.Length - 1;
            }

            return sb.ToString();
        }
예제 #11
0
 private static string MyEventAndMyInvokableMemberAttributesToString(MyEventAttributes myEventAttributes, MyInvokableMemberAttributes myInvokableMemberAttributes)
 {
     // for now only MyInvokableMemberInfo attributes
     return(MyInvokableMemberInfo.MyInvokableMemberAttributesToString(myInvokableMemberAttributes));
 }