/* Copyright (C) 2011-2015 de4dot@gmail.com This file is part of de4dot. de4dot is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. de4dot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with de4dot. If not, see . */ using System.Collections.Generic; using dnlib.DotNet; namespace de4dot.code.renamer.asmmodules { public class MMethodDef : Ref { IList genericParams; IList paramDefs = new List(); MParamDef returnParamDef; int visibleParamCount; int visibleBaseIndex; public MPropertyDef Property { get; set; } public MEventDef Event { get; set; } public int VisibleParameterCount => visibleParamCount; public int VisibleParameterBaseIndex => visibleBaseIndex; public IList ParamDefs => paramDefs; public IEnumerable AllParamDefs { get { yield return returnParamDef; foreach (var paramDef in paramDefs) yield return paramDef; } } public MParamDef ReturnParamDef => returnParamDef; public IList GenericParams => genericParams; public MethodDef MethodDef => (MethodDef)memberRef; public MMethodDef(MethodDef methodDef, MTypeDef owner, int index) : base(methodDef, owner, index) { genericParams = MGenericParamDef.CreateGenericParamDefList(MethodDef.GenericParameters); visibleBaseIndex = methodDef.MethodSig != null && methodDef.MethodSig.HasThis ? 1 : 0; for (int i = 0; i < methodDef.Parameters.Count; i++) { var param = methodDef.Parameters[i]; if (param.IsNormalMethodParameter) visibleParamCount++; paramDefs.Add(new MParamDef(param, i)); } returnParamDef = new MParamDef(methodDef.Parameters.ReturnParameter, -1); } public bool IsPublic() => MethodDef.IsPublic; public bool IsVirtual() => MethodDef.IsVirtual; public bool IsNewSlot() => MethodDef.IsNewSlot; public bool IsStatic() => MethodDef.IsStatic; } }