示例#1
0
        public static string GetImageName(DmdPropertyInfo property)
        {
            var method = property.GetGetMethod(DmdGetAccessorOptions.All) ?? property.GetSetMethod(DmdGetAccessorOptions.All);

            if ((object)method == null)
            {
                return(PredefinedDbgValueNodeImageNames.Property);
            }
            switch (method.Attributes & DmdMethodAttributes.MemberAccessMask)
            {
            case DmdMethodAttributes.PrivateScope:  return(PredefinedDbgValueNodeImageNames.PropertyCompilerControlled);

            case DmdMethodAttributes.Private:               return(PredefinedDbgValueNodeImageNames.PropertyPrivate);

            case DmdMethodAttributes.FamANDAssem:   return(PredefinedDbgValueNodeImageNames.PropertyFamilyAndAssembly);

            case DmdMethodAttributes.Assembly:              return(PredefinedDbgValueNodeImageNames.PropertyAssembly);

            case DmdMethodAttributes.Family:                return(PredefinedDbgValueNodeImageNames.PropertyFamily);

            case DmdMethodAttributes.FamORAssem:    return(PredefinedDbgValueNodeImageNames.PropertyFamilyOrAssembly);

            case DmdMethodAttributes.Public:                return(PredefinedDbgValueNodeImageNames.PropertyPublic);

            default:                                                                return(PredefinedDbgValueNodeImageNames.Property);
            }
        }
        void Format(DmdMethodBase method, DmdPropertyInfo property, AccessorKind accessorKind)
        {
            if (property.SetMethod is null)
            {
                OutputWrite(Keyword_ReadOnly, DbgTextColor.Keyword);
                WriteSpace();
            }

            OutputWrite(Keyword_Property, DbgTextColor.Keyword);
            WriteSpace();

            WriteAccessor(accessorKind);
            WriteToken(method);

            if (DeclaringTypes)
            {
                FormatType(property.DeclaringType !);
                WritePeriod();
            }

            WriteIdentifier(property.Name, TypeFormatterUtils.GetColor(property));
            WriteToken(property);
            WriteGenericArguments(method);
            WriteMethodParameterList(method, MethodParenOpen, MethodParenClose);
            WriteReturnType(method);
            WriteOffset();
        }
示例#3
0
        protected override void FormatPropertyName(IDbgTextWriter output, DmdPropertyInfo property)
        {
            var name  = Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(property.Name);
            var color = MemberUtils.GetColor(property);

            output.Write(color, name);
        }
示例#4
0
        protected override void FormatPropertyName(ITextColorWriter output, DmdPropertyInfo property)
        {
            var name  = Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(property.Name);
            var color = MemberUtils.GetColor(property);

            output.Write(color, name);
        }
示例#5
0
 void Format(DmdMethodBase method, DmdPropertyInfo property, AccessorKind accessorKind)
 {
     if (ReturnTypes)
     {
         FormatReturnType(property.PropertyType, TypeFormatterUtils.IsReadOnlyProperty(property));
         WriteSpace();
     }
     if (DeclaringTypes)
     {
         FormatType(property.DeclaringType);
         WritePeriod();
     }
     if (property.GetIndexParameters().Count != 0)
     {
         OutputWrite(Keyword_this, BoxedTextColor.Keyword);
         WriteToken(property);
         WriteMethodParameterListCore(method, GetAllMethodParameterTypes(property.GetMethodSignature()), IndexerParenOpen, IndexerParenClose, showParameterTypes: true, showParameterNames: false, showParameterValues: false);
     }
     else
     {
         WriteIdentifier(property.Name, TypeFormatterUtils.GetColor(property));
         WriteToken(property);
     }
     WriteAccessor(accessorKind);
     WriteToken(method);
     WriteGenericArguments(method);
     WriteMethodParameterList(method, MethodParenOpen, MethodParenClose);
     WriteOffset();
 }
示例#6
0
 public static bool IsMatch(DmdPropertyInfo property, DmdType returnType)
 {
     if ((object)returnType != null)
     {
         var comparer = new DmdSigComparer(DmdSigComparerOptions.CheckTypeEquivalence | DmdMemberInfoEqualityComparer.DefaultTypeOptions);
         if (!comparer.Equals(property.PropertyType, returnType))
         {
             return(false);
         }
     }
     return(true);
 }
示例#7
0
        DmdPropertyInfo[] ReadDeclaredProperties_COMThread(DmdType declaringType, DmdType reflectedType)
        {
            reader.Dispatcher.VerifyAccess();
            var tokens = MDAPI.GetPropertyTokens(reader.MetaDataImport, (uint)MetadataToken);

            if (tokens.Length == 0)
            {
                return(Array.Empty <DmdPropertyInfo>());
            }
            var properties = new DmdPropertyInfo[tokens.Length];

            for (int i = 0; i < properties.Length; i++)
            {
                uint rid = tokens[i] & 0x00FFFFFF;
                properties[i] = reader.CreatePropertyDef_COMThread(rid, declaringType, reflectedType);
            }
            return(properties);
        }
示例#8
0
        public override DmdPropertyInfo[] ReadDeclaredProperties(DmdType declaringType, DmdType reflectedType)
        {
            var mapRid  = reader.Metadata.GetPropertyMapRid(Rid);
            var ridList = reader.Metadata.GetPropertyRidList(mapRid);

            if (ridList.Count == 0)
            {
                return(Array.Empty <DmdPropertyInfo>());
            }
            var properties = new DmdPropertyInfo[ridList.Count];

            for (int i = 0; i < properties.Length; i++)
            {
                uint rid = ridList[i];
                properties[i] = reader.CreatePropertyDef(rid, declaringType, reflectedType);
            }
            return(properties);
        }
示例#9
0
        public static bool IsMatch(DmdPropertyInfo property, DmdBindingFlags bindingAttr)
        {
            var attr = DmdBindingFlags.Default;

            if (property.GetMethod?.IsPublic == true || property.SetMethod?.IsPublic == true)
            {
                attr |= DmdBindingFlags.Public;
            }
            else
            {
                attr |= DmdBindingFlags.NonPublic;
            }
            if (property.GetMethod?.IsStatic == true || property.SetMethod?.IsStatic == true)
            {
                attr |= DmdBindingFlags.Static;
            }
            else
            {
                attr |= DmdBindingFlags.Instance;
            }
            if ((object)property.ReflectedType != property.DeclaringType)
            {
                var method = property.GetMethod;
                if ((object)method != null)
                {
                    if (method.IsStatic)
                    {
                        if (method.IsPrivate)
                        {
                            return(false);
                        }
                        attr |= DmdBindingFlags.FlattenHierarchy;
                    }
                    else
                    {
                        if (!(method.IsVirtual || method.IsAbstract) && method.IsPrivate)
                        {
                            return(false);
                        }
                    }
                }
            }
            return((attr & bindingAttr) == attr);
        }
示例#10
0
 public static DbgTextColor GetColor(DmdPropertyInfo property) =>
 GetColor(property.GetMethod ?? property.SetMethod, DbgTextColor.StaticProperty, DbgTextColor.InstanceProperty);
 protected abstract void FormatPropertyName(IDbgTextWriter output, DmdPropertyInfo property);
示例#12
0
        public static DbgTextColor GetColor(DmdPropertyInfo property)
        {
            var methodSig = (property.GetGetMethod(DmdGetAccessorOptions.All) ?? property.GetSetMethod(DmdGetAccessorOptions.All))?.GetMethodSignature() ?? property.GetMethodSignature();

            return(methodSig.HasThis ? DbgTextColor.InstanceProperty : DbgTextColor.StaticProperty);
        }
示例#13
0
        protected override void FormatReturnValueMethodName(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgValueFormatterTypeOptions typeOptions, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo, DmdMethodBase method, DmdPropertyInfo property)
        {
            var typeFormatter = new Formatters.VisualBasic.VisualBasicTypeFormatter(output, typeOptions.ToTypeFormatterOptions(), null);

            typeFormatter.Format(method.DeclaringType, null);
            var valueFormatter = new Formatters.VisualBasic.VisualBasicPrimitiveValueFormatter(output, valueOptions.ToValueFormatterOptions(), cultureInfo);

            output.Write(DbgTextColor.Operator, ".");
            if ((object)property != null)
            {
                output.Write(MemberUtils.GetColor(property), Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(property.Name));
                valueFormatter.WriteTokenComment(property.MetadataToken);
                output.Write(DbgTextColor.Operator, ".");
                output.Write(DbgTextColor.Keyword, "Get");
                valueFormatter.WriteTokenComment(method.MetadataToken);
            }
            else
            {
                var operatorInfo = Formatters.VisualBasic.Operators.TryGetOperatorInfo(method.Name);
                if (operatorInfo != null && method is DmdMethodInfo methodInfo)
                {
                    for (int i = 0; i < operatorInfo.Length; i++)
                    {
                        if (i > 0)
                        {
                            output.Write(DbgTextColor.Text, " ");
                        }
                        var s = operatorInfo[i];
                        output.Write('A' <= s[0] && s[0] <= 'Z' ? DbgTextColor.Keyword : DbgTextColor.Operator, s);
                    }
                    WriteGenericMethodArguments(output, method, typeFormatter);
                }
                else
                {
                    output.Write(TypeFormatterUtils.GetColor(method, canBeModule: true), Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(method.Name));
                    valueFormatter.WriteTokenComment(method.MetadataToken);
                    WriteGenericMethodArguments(output, method, typeFormatter);
                }
            }
        }
示例#14
0
 public static object GetColor(DmdPropertyInfo property) =>
 GetColor(property.GetMethod ?? property.SetMethod, BoxedTextColor.StaticProperty, BoxedTextColor.InstanceProperty);
示例#15
0
        protected override void FormatReturnValueMethodName(ITextColorWriter output, DmdMethodBase method, DmdPropertyInfo property)
        {
            const Formatters.TypeFormatterOptions options = Formatters.TypeFormatterOptions.IntrinsicTypeKeywords | Formatters.TypeFormatterOptions.Namespaces;
            var formatter = new Formatters.CSharp.CSharpTypeFormatter(output, options, null);

            formatter.Format(method.DeclaringType, null);
            output.Write(BoxedTextColor.Operator, ".");
            if ((object)property != null)
            {
                output.Write(MemberUtils.GetColor(property), Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(property.Name));
                output.Write(BoxedTextColor.Operator, ".");
                output.Write(BoxedTextColor.Keyword, "get");
            }
            else
            {
                var methodColor = MemberUtils.GetColor(method, canBeModule: false);
                if (TryGetMethodName(method.Name, out var containingMethodName, out var localFunctionName))
                {
                    output.Write(methodColor, Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(containingMethodName));
                    output.Write(BoxedTextColor.Operator, ".");
                    output.Write(methodColor, Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(localFunctionName));
                }
示例#16
0
        protected override void FormatReturnValueMethodName(ITextColorWriter output, DmdMethodBase method, DmdPropertyInfo property)
        {
            const Formatters.TypeFormatterOptions options = Formatters.TypeFormatterOptions.IntrinsicTypeKeywords | Formatters.TypeFormatterOptions.Namespaces;
            var formatter = new Formatters.VisualBasic.VisualBasicTypeFormatter(output, options, null);

            formatter.Format(method.DeclaringType, null);
            output.Write(BoxedTextColor.Operator, ".");
            if ((object)property != null)
            {
                output.Write(MemberUtils.GetColor(property), Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(property.Name));
                output.Write(BoxedTextColor.Operator, ".");
                output.Write(BoxedTextColor.Keyword, "Get");
            }
            else
            {
                output.Write(Formatters.TypeFormatterUtils.GetColor(method, canBeModule: true), Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(method.Name));
            }
        }
示例#17
0
 public static bool IsMatch(DmdPropertyInfo property, IList <DmdType> types) =>
 IsMatch(property.GetMethodSignature().GetParameterTypes(), types ?? Array.Empty <DmdType>());
        protected override void FormatReturnValueMethodName(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgValueFormatterTypeOptions typeOptions, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo, DmdMethodBase method, DmdPropertyInfo property)
        {
            var typeFormatter = new Formatters.CSharp.CSharpTypeFormatter(output, typeOptions.ToTypeFormatterOptions(), null);

            typeFormatter.Format(method.DeclaringType, null);
            var valueFormatter = new Formatters.CSharp.CSharpPrimitiveValueFormatter(output, valueOptions.ToValueFormatterOptions(), cultureInfo);

            output.Write(DbgTextColor.Operator, ".");
            if ((object)property != null)
            {
                if (property.GetIndexParameters().Count != 0)
                {
                    output.Write(DbgTextColor.Keyword, Keyword_this);
                    WriteMethodParameterList(output, method, typeFormatter, GetAllMethodParameterTypes(property.GetMethodSignature()), IndexerParenOpen, IndexerParenClose);
                }
                else
                {
                    output.Write(MemberUtils.GetColor(property), Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(property.Name));
                }
                valueFormatter.WriteTokenComment(property.MetadataToken);
                output.Write(DbgTextColor.Operator, ".");
                output.Write(DbgTextColor.Keyword, "get");
                valueFormatter.WriteTokenComment(method.MetadataToken);
            }
            else
            {
                var methodColor = TypeFormatterUtils.GetColor(method, canBeModule: false);
                if (TypeFormatterUtils.TryGetMethodName(method.Name, out var containingMethodName, out var localFunctionName))
                {
                    output.Write(methodColor, Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(containingMethodName));
                    output.Write(DbgTextColor.Operator, ".");
                    output.Write(methodColor, Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(localFunctionName));
                    valueFormatter.WriteTokenComment(method.MetadataToken);
                    WriteGenericMethodArguments(output, method, typeFormatter);
                }
示例#19
0
 public static bool IsReadOnlyProperty(DmdPropertyInfo property) => HasIsReadOnlyAttribute(property.CustomAttributes);