Speed up method param renaming code

This commit is contained in:
de4dot 2012-01-27 05:39:25 +01:00
parent 96c13fb05e
commit 50e7d28ddf
3 changed files with 41 additions and 15 deletions

View File

@ -29,7 +29,7 @@ namespace de4dot.code.renamer {
class TypeInfo : MemberInfo {
public string oldNamespace;
public string newNamespace;
public VariableNameState variableNameState = new VariableNameState();
public VariableNameState variableNameState = VariableNameState.create();
public TypeDef type;
MemberInfos memberInfos;
@ -306,7 +306,7 @@ namespace de4dot.code.renamer {
info.newName = "e";
}
else {
var newVariableNameState = variableNameState.clone();
var newVariableNameState = variableNameState.cloneParamsOnly();
var checker = NameChecker;
foreach (var paramDef in methodDef.ParamDefs) {
var info = param(paramDef);

View File

@ -96,7 +96,9 @@ namespace de4dot.code.renamer {
}
class VariableNameCreator : TypeNames {
public VariableNameCreator() {
public VariableNameCreator(bool init = true) {
if (!init)
return;
initTypeName("System.Boolean", "bool");
initTypeName("System.Byte", "byte");
initTypeName("System.Char", "char");

View File

@ -21,19 +21,43 @@ using Mono.Cecil;
namespace de4dot.code.renamer {
class VariableNameState {
ExistingNames existingVariableNames = new ExistingNames();
ExistingNames existingMethodNames = new ExistingNames();
ExistingNames existingPropertyNames = new ExistingNames();
ExistingNames existingEventNames = new ExistingNames();
TypeNames variableNameCreator = new VariableNameCreator(); // For fields and method args
TypeNames propertyNameCreator = new PropertyNameCreator();
NameCreator eventNameCreator = new NameCreator("Event_");
NameCreator genericPropertyNameCreator = new NameCreator("Prop_");
public NameCreator staticMethodNameCreator = new NameCreator("smethod_");
public NameCreator instanceMethodNameCreator = new NameCreator("method_");
ExistingNames existingVariableNames;
ExistingNames existingMethodNames;
ExistingNames existingPropertyNames;
ExistingNames existingEventNames;
TypeNames variableNameCreator; // For fields and method args
TypeNames propertyNameCreator;
NameCreator eventNameCreator;
NameCreator genericPropertyNameCreator;
public NameCreator staticMethodNameCreator;
public NameCreator instanceMethodNameCreator;
public VariableNameState clone() {
return new VariableNameState().merge(this);
public static VariableNameState create() {
var vns = new VariableNameState();
vns.existingVariableNames = new ExistingNames();
vns.existingMethodNames = new ExistingNames();
vns.existingPropertyNames = new ExistingNames();
vns.existingEventNames = new ExistingNames();
vns.variableNameCreator = new VariableNameCreator();
vns.propertyNameCreator = new PropertyNameCreator();
vns.eventNameCreator = new NameCreator("Event_");
vns.genericPropertyNameCreator = new NameCreator("Prop_");
vns.staticMethodNameCreator = new NameCreator("smethod_");
vns.instanceMethodNameCreator = new NameCreator("method_");
return vns;
}
VariableNameState() {
}
// Cloning only params will speed up the method param renaming code
public VariableNameState cloneParamsOnly() {
var vns = new VariableNameState();
vns.existingVariableNames = new ExistingNames();
vns.variableNameCreator = new VariableNameCreator(false);
vns.existingVariableNames.merge(existingVariableNames);
vns.variableNameCreator.merge(variableNameCreator);
return vns;
}
public VariableNameState merge(VariableNameState other) {