string getPinvokeName(MethodDef methodDef) { var methodNames = new Dictionary<string, bool>(StringComparer.Ordinal); foreach (var method in methods.getAll()) methodNames[method.NewName] = true; var entryPoint = methodDef.MethodDefinition.PInvokeInfo.EntryPoint; if (Regex.IsMatch(entryPoint, @"^#\d+$")) entryPoint = DotNetUtils.getDllName(methodDef.MethodDefinition.PInvokeInfo.Module.Name) + "_" + entryPoint.Substring(1); while (true) { var newName = MemberRenameState.variableNameState.pinvokeNameCreator.newName(entryPoint); if (!methodNames.ContainsKey(newName)) return newName; } }
public void add(MethodDef m) { methods.add(m); }
INameCreator getMethodNameCreator(MethodDef methodDef, string suggestedName) { var variableNameState = MemberRenameState.variableNameState; INameCreator nameCreator = null; string newName = null; if (methodDef.MethodDefinition.HasPInvokeInfo) newName = getPinvokeName(methodDef); else if (methodDef.MethodDefinition.IsStatic) nameCreator = variableNameState.staticMethodNameCreator; else if (methodDef.isVirtual()) { MethodRef otherMethodRef; if ((otherMethodRef = MemberRenameState.get(methodDef)) != null) newName = otherMethodRef.NewName; else if (methodDef.MethodDefinition.HasOverrides) { var overrideMethod = methodDef.MethodDefinition.Overrides[0]; var otherMethodDef = defFinder.findMethod(overrideMethod); if (otherMethodDef != null) newName = getOverrideMethodName(overrideMethod.DeclaringType, otherMethodDef.NewName); else newName = getOverrideMethodName(overrideMethod.DeclaringType, overrideMethod.Name); } else nameCreator = variableNameState.virtualMethodNameCreator; } else nameCreator = variableNameState.instanceMethodNameCreator; if (newName == null) newName = suggestedName; if (newName != null) nameCreator = new OneNameCreator(newName); return nameCreator; }
void renameMethod(MethodDef methodDef, string suggestedName = null) { if (methodDef.Renamed) return; methodDef.Renamed = true; var variableNameState = MemberRenameState.variableNameState; bool isVirtual = methodDef.isVirtual(); var nameCreator = getMethodNameCreator(methodDef, suggestedName); if (!methodDef.MethodDefinition.IsRuntimeSpecialName && !variableNameState.IsValidName(methodDef.OldName)) methodDef.NewName = nameCreator.newName(); if (methodDef.ParamDefs.Count > 0) { var newVariableNameState = variableNameState.clone(); foreach (var paramDef in methodDef.ParamDefs) { if (!newVariableNameState.IsValidName(paramDef.OldName)) { paramDef.NewName = newVariableNameState.getNewParamName(paramDef.ParameterDefinition); paramDef.Renamed = true; } } } prepareRenameGenericParams(methodDef.GenericParams, variableNameState.IsValidName, methodDef.Owner == null ? null : methodDef.Owner.genericParams); if (isVirtual) MemberRenameState.add(methodDef); }