public static GetAttributeType ( ICustomAttribute attr ) : SpecialAttribute | ||
attr | ICustomAttribute | |
Результат | 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); } }
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(); } } }
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); } }