GetAttributeType() public static method

Determine if the specified attribute is of a special type, and if so return a code representing it. This is usefull for types not alread in IPlatformType
public static GetAttributeType ( ICustomAttribute attr ) : SpecialAttribute
attr ICustomAttribute
return SpecialAttribute
        public virtual void PrintTypeDefinitionAttributes(ITypeDefinition typeDefinition)
        {
            Contract.Requires(typeDefinition != null);

            foreach (var attribute in SortAttributes(typeDefinition.Attributes))
            {
                // Skip DefaultMemberAttribute on a class that has an indexer
                var at = Utils.GetAttributeType(attribute);
                if (at == SpecialAttribute.DefaultMemberAttribute &&
                    IteratorHelper.Any(typeDefinition.Properties, p => IteratorHelper.EnumerableIsNotEmpty(p.Parameters)))
                {
                    continue;
                }
                // Skip ExtensionAttribute
                if (at == SpecialAttribute.Extension)
                {
                    continue;
                }

                PrintAttribute(typeDefinition, attribute, true, null);
            }

            if (typeDefinition.Layout != LayoutKind.Auto)
            {
                PrintPseudoCustomAttribute(typeDefinition,
                                           "System.Runtime.InteropServices.StructLayout",
                                           String.Format("System.Runtime.InteropServices.LayoutKind.{0}", typeDefinition.Layout.ToString()),
                                           true, null);
            }
        }
Example #2
0
        public virtual void PrintParameterDefinitionModifiers(IParameterDefinition parameterDefinition)
        {
            Contract.Requires(parameterDefinition != null);

            if (parameterDefinition.Index == 0)
            {
                var meth = parameterDefinition.ContainingSignature as IMethodDefinition;
                if (meth != null)
                {
                    if (Utils.FindAttribute(meth.Attributes, SpecialAttribute.Extension) != null)
                    {
                        PrintToken(CSharpToken.This);
                        PrintToken(CSharpToken.Space);
                    }
                }
            }

            foreach (var attribute in SortAttributes(parameterDefinition.Attributes))
            {
                if (Utils.GetAttributeType(attribute) == SpecialAttribute.ParamArray)
                {
                    sourceEmitterOutput.Write("params");
                }
                else
                {
                    this.PrintAttribute(parameterDefinition, attribute, false, null);
                }

                PrintToken(CSharpToken.Space);
            }
            if (parameterDefinition.IsOut && !parameterDefinition.IsIn && parameterDefinition.IsByReference)
            {
                // C# out keyword means [Out] ref (with no [In] allowed)
                PrintKeywordOut();
            }
            else
            {
                if (parameterDefinition.IsIn)
                {
                    PrintPseudoCustomAttribute(parameterDefinition, "System.Runtime.InteropServices.In", null, false, null);
                }
                if (parameterDefinition.IsOut)
                {
                    PrintPseudoCustomAttribute(parameterDefinition, "System.Runtime.InteropServices.Out", null, false, null);
                }
                if (parameterDefinition.IsByReference)
                {
                    PrintKeywordRef();
                }
            }
        }
Example #3
0
        public override void TraverseChildren(IMethodDefinition methodDefinition)
        {
            if (!this.printCompilerGeneratedMembers)
            {
                if (methodDefinition.IsConstructor && methodDefinition.ParameterCount == 0 &&
                    AttributeHelper.Contains(methodDefinition.Attributes, methodDefinition.Type.PlatformType.SystemRuntimeCompilerServicesCompilerGeneratedAttribute))
                {
                    return;
                }

                // Skip if this is a method generated for use by a property or event
                foreach (var p in methodDefinition.ContainingTypeDefinition.Properties)
                {
                    if ((p.Getter != null && p.Getter.ResolvedMethod == methodDefinition) ||
                        (p.Setter != null && p.Setter.ResolvedMethod == methodDefinition))
                    {
                        return;
                    }
                }
                foreach (var e in methodDefinition.ContainingTypeDefinition.Events)
                {
                    if ((e.Adder != null && e.Adder.ResolvedMethod == methodDefinition) ||
                        (e.Remover != null && e.Remover.ResolvedMethod == methodDefinition))
                    {
                        return;
                    }
                }

                if (AttributeHelper.Contains(methodDefinition.Attributes, methodDefinition.Type.PlatformType.SystemRuntimeCompilerServicesCompilerGeneratedAttribute))
                {
                    return; // eg. an iterator helper - may have invalid identifier name
                }
            }

            // Cctors should probably be outputted in some cases
            if (methodDefinition.IsStaticConstructor)
            {
                return;
            }

            foreach (var ma in SortAttributes(methodDefinition.Attributes))
            {
                if (Utils.GetAttributeType(ma) != SpecialAttribute.Extension)
                {
                    PrintAttribute(methodDefinition, ma, true, null);
                }
            }

            foreach (var ra in SortAttributes(methodDefinition.ReturnValueAttributes))
            {
                PrintAttribute(methodDefinition, ra, true, "return");
            }

            PrintToken(CSharpToken.Indent);

            PrintMethodDefinitionVisibility(methodDefinition);
            PrintMethodDefinitionModifiers(methodDefinition);

            bool conversion = IsConversionOperator(methodDefinition);

            if (!conversion)
            {
                PrintMethodDefinitionReturnType(methodDefinition);
                if (!methodDefinition.IsConstructor && !IsDestructor(methodDefinition))
                {
                    PrintToken(CSharpToken.Space);
                }
            }
            PrintMethodDefinitionName(methodDefinition);
            if (conversion)
            {
                PrintMethodDefinitionReturnType(methodDefinition);
            }

            if (methodDefinition.IsGeneric)
            {
                Traverse(methodDefinition.GenericParameters);
            }
            Traverse(methodDefinition.Parameters);
            if (methodDefinition.IsGeneric)
            {
                PrintConstraints(methodDefinition.GenericParameters);
            }
            if (!methodDefinition.IsAbstract && !methodDefinition.IsExternal)
            {
                Traverse(methodDefinition.Body);
            }
            else
            {
                PrintToken(CSharpToken.Semicolon);
            }
        }