private void FindMethodAttributes() { ArrayList inherit; Type baseType; BindingFlags flags; if (this._complexType != null) { inherit = this._complexType.Inherit; baseType = null; if (inherit != null) { goto Label_00A0; } inherit = new ArrayList(); if (this._complexType.SUDSType == SUDSType.ClientProxy) { baseType = typeof(RemotingClientProxy); } else if (this._complexType.SudsUse == WsdlParser.SudsUse.MarshalByRef) { baseType = typeof(MarshalByRefObject); } else if (this._complexType.SudsUse == WsdlParser.SudsUse.ServicedComponent) { baseType = typeof(MarshalByRefObject); } if (baseType != null) { while (baseType != null) { inherit.Add(baseType); baseType = baseType.BaseType; } this._complexType.Inherit = inherit; goto Label_00A0; } } return; Label_00A0: flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; bool flag = MethodFlagsTest(this._methodFlags, System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Virtual); bool flag2 = false; for (int i = 0; i < inherit.Count; i++) { baseType = (Type) inherit[i]; MethodInfo[] methods = null; try { MethodInfo method = baseType.GetMethod(this.Name, flags); if (method != null) { methods = new MethodInfo[] { method }; } } catch { methods = baseType.GetMethods(flags); } if (methods != null) { MethodInfo[] infoArray2 = methods; for (int j = 0; j < infoArray2.Length; j++) { MethodBase baseInfo = infoArray2[j]; if ((((baseInfo != null) && (baseInfo.Name == this.Name)) && ((baseInfo.IsFamily || baseInfo.IsPublic) || baseInfo.IsAssembly)) && this.IsSignature(baseInfo)) { flag2 = true; if (!baseInfo.IsPublic) { if (baseInfo.IsAssembly) { this._methodFlags &= ~System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Public; this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Internal; } else if (baseInfo.IsFamily) { this._methodFlags &= ~System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Public; this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Protected; } } if (baseInfo.IsFinal) { this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.New; } else if (baseInfo.IsVirtual && flag) { this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Override; } else { this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.New; } break; } } } if (flag2) { return; } } }
internal URTMethod(string name, string soapAction, string methodAttributes, WsdlParser.URTComplexType complexType) { this._methodName = name; this._soapAction = soapAction; this._methodType = null; this._complexType = complexType; name.IndexOf('.'); this._methodFlags = System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.None; if ((methodAttributes != null) && (methodAttributes.Length > 0)) { foreach (string str in methodAttributes.Split(new char[] { ' ' })) { switch (str) { case "virtual": this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Virtual; break; case "new": this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.New; break; case "override": this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Override; break; case "public": this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Public; break; case "protected": this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Protected; break; case "internal": this._methodFlags |= System.Runtime.Remoting.MetadataServices.WsdlParser.MethodFlags.Internal; break; } } } }