Make sure initializeEventHandlerNames() is called after renaming props
This commit is contained in:
parent
80f90d3e6a
commit
ae5001b239
|
@ -789,29 +789,77 @@ namespace de4dot.renamer {
|
||||||
|
|
||||||
prepareRenameEntryPoints();
|
prepareRenameEntryPoints();
|
||||||
|
|
||||||
foreach (var typeDef in modules.AllTypes)
|
var virtualMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
||||||
prepareRenameMembers(typeDef);
|
var ifaceMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
||||||
|
var propMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
||||||
|
var eventMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
||||||
|
foreach (var scope in getSorted(scopes)) {
|
||||||
|
if (scope.hasNonRenamableMethod())
|
||||||
|
continue;
|
||||||
|
else if (scope.hasGetterOrSetterPropertyMethod() && getPropertyMethodType(scope.Methods[0]) != PropertyMethodType.Other)
|
||||||
|
propMethods.add(scope);
|
||||||
|
else if (scope.hasAddRemoveOrRaiseEventMethod())
|
||||||
|
eventMethods.add(scope);
|
||||||
|
else if (scope.hasInterfaceMethod())
|
||||||
|
ifaceMethods.add(scope);
|
||||||
|
else
|
||||||
|
virtualMethods.add(scope);
|
||||||
|
}
|
||||||
|
|
||||||
prepareRenameVirtualMethods(scopes);
|
var prepareHelper = new PrepareHelper(memberInfos, modules.AllTypes);
|
||||||
|
prepareHelper.prepare((info) => info.prepareRenameMembers());
|
||||||
|
|
||||||
|
prepareHelper.prepare((info) => info.prepareRenamePropsAndEvents());
|
||||||
|
propMethods.visitAll((scope) => prepareRenameProperty(scope, false));
|
||||||
|
eventMethods.visitAll((scope) => prepareRenameEvent(scope, false));
|
||||||
|
propMethods.visitAll((scope) => prepareRenameProperty(scope, true));
|
||||||
|
eventMethods.visitAll((scope) => prepareRenameEvent(scope, true));
|
||||||
|
|
||||||
|
foreach (var typeDef in modules.AllTypes)
|
||||||
|
memberInfos.type(typeDef).initializeEventHandlerNames();
|
||||||
|
|
||||||
|
prepareHelper.prepare((info) => info.prepareRenameMethods());
|
||||||
|
virtualMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "vmethod_", false));
|
||||||
|
ifaceMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "imethod_", false));
|
||||||
|
virtualMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "vmethod_", true));
|
||||||
|
ifaceMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "imethod_", true));
|
||||||
|
|
||||||
foreach (var typeDef in modules.AllTypes)
|
foreach (var typeDef in modules.AllTypes)
|
||||||
memberInfos.type(typeDef).prepareRenameMethods2();
|
memberInfos.type(typeDef).prepareRenameMethods2();
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<TypeDef, bool> prepareRenameMembersCalled = new Dictionary<TypeDef, bool>();
|
class PrepareHelper {
|
||||||
void prepareRenameMembers(TypeDef type) {
|
Dictionary<TypeDef, bool> prepareMethodCalled = new Dictionary<TypeDef, bool>();
|
||||||
if (prepareRenameMembersCalled.ContainsKey(type))
|
MemberInfos memberInfos;
|
||||||
return;
|
Action<TypeInfo> func;
|
||||||
prepareRenameMembersCalled[type] = true;
|
IEnumerable<TypeDef> allTypes;
|
||||||
|
|
||||||
foreach (var ifaceInfo in type.interfaces)
|
public PrepareHelper(MemberInfos memberInfos, IEnumerable<TypeDef> allTypes) {
|
||||||
prepareRenameMembers(ifaceInfo.typeDef);
|
this.memberInfos = memberInfos;
|
||||||
if (type.baseType != null)
|
this.allTypes = allTypes;
|
||||||
prepareRenameMembers(type.baseType.typeDef);
|
}
|
||||||
|
|
||||||
TypeInfo info;
|
public void prepare(Action<TypeInfo> func) {
|
||||||
if (memberInfos.tryGetType(type, out info))
|
this.func = func;
|
||||||
info.prepareRenameMembers();
|
prepareMethodCalled.Clear();
|
||||||
|
foreach (var typeDef in allTypes)
|
||||||
|
prepare(typeDef);
|
||||||
|
}
|
||||||
|
|
||||||
|
void prepare(TypeDef type) {
|
||||||
|
if (prepareMethodCalled.ContainsKey(type))
|
||||||
|
return;
|
||||||
|
prepareMethodCalled[type] = true;
|
||||||
|
|
||||||
|
foreach (var ifaceInfo in type.interfaces)
|
||||||
|
prepare(ifaceInfo.typeDef);
|
||||||
|
if (type.baseType != null)
|
||||||
|
prepare(type.baseType.typeDef);
|
||||||
|
|
||||||
|
TypeInfo info;
|
||||||
|
if (memberInfos.tryGetType(type, out info))
|
||||||
|
func(info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static List<MethodNameScope> getSorted(MethodNameScopes scopes) {
|
static List<MethodNameScope> getSorted(MethodNameScopes scopes) {
|
||||||
|
@ -876,37 +924,6 @@ namespace de4dot.renamer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepareRenameVirtualMethods(MethodNameScopes scopes) {
|
|
||||||
var allScopes = getSorted(scopes);
|
|
||||||
|
|
||||||
var virtualMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
|
||||||
var ifaceMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
|
||||||
var propMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
|
||||||
var eventMethods = new ScopeHelper(memberInfos, modules.AllTypes);
|
|
||||||
foreach (var scope in allScopes) {
|
|
||||||
if (scope.hasNonRenamableMethod())
|
|
||||||
continue;
|
|
||||||
else if (scope.hasGetterOrSetterPropertyMethod() && getPropertyMethodType(scope.Methods[0]) != PropertyMethodType.Other)
|
|
||||||
propMethods.add(scope);
|
|
||||||
else if (scope.hasAddRemoveOrRaiseEventMethod())
|
|
||||||
eventMethods.add(scope);
|
|
||||||
else if (scope.hasInterfaceMethod())
|
|
||||||
ifaceMethods.add(scope);
|
|
||||||
else
|
|
||||||
virtualMethods.add(scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
propMethods.visitAll((scope) => prepareRenameProperty(scope, false));
|
|
||||||
eventMethods.visitAll((scope) => prepareRenameEvent(scope, false));
|
|
||||||
virtualMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "vmethod_", false));
|
|
||||||
ifaceMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "imethod_", false));
|
|
||||||
|
|
||||||
propMethods.visitAll((scope) => prepareRenameProperty(scope, true));
|
|
||||||
eventMethods.visitAll((scope) => prepareRenameEvent(scope, true));
|
|
||||||
virtualMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "vmethod_", true));
|
|
||||||
ifaceMethods.visitAll((scope) => prepareRenameVirtualMethods(scope, "imethod_", true));
|
|
||||||
}
|
|
||||||
|
|
||||||
static readonly Regex removeGenericsArityRegex = new Regex(@"`[0-9]+");
|
static readonly Regex removeGenericsArityRegex = new Regex(@"`[0-9]+");
|
||||||
static string getOverridePrefix(MethodNameScope scope, MethodDef method) {
|
static string getOverridePrefix(MethodNameScope scope, MethodDef method) {
|
||||||
if (scope.Methods.Count != 1)
|
if (scope.Methods.Count != 1)
|
||||||
|
|
|
@ -143,12 +143,12 @@ namespace de4dot.renamer {
|
||||||
initializeWindowsFormsFieldsAndProps();
|
initializeWindowsFormsFieldsAndProps();
|
||||||
|
|
||||||
prepareRenameFields();
|
prepareRenameFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prepareRenamePropsAndEvents() {
|
||||||
|
mergeState();
|
||||||
prepareRenameProperties();
|
prepareRenameProperties();
|
||||||
prepareRenameEvents();
|
prepareRenameEvents();
|
||||||
|
|
||||||
initializeEventHandlerNames();
|
|
||||||
|
|
||||||
prepareRenameMethods();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepareRenameFields() {
|
void prepareRenameFields() {
|
||||||
|
@ -177,7 +177,7 @@ namespace de4dot.renamer {
|
||||||
if (fieldInfo.renamed)
|
if (fieldInfo.renamed)
|
||||||
continue;
|
continue;
|
||||||
if (!checker.isValidFieldName(fieldInfo.oldName))
|
if (!checker.isValidFieldName(fieldInfo.oldName))
|
||||||
fieldInfo.rename(variableNameState.getNewFieldName(fieldDef.FieldDefinition));
|
fieldInfo.rename(fieldInfo.suggestedName ?? variableNameState.getNewFieldName(fieldDef.FieldDefinition));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,7 +261,8 @@ namespace de4dot.renamer {
|
||||||
renameMethod(methodDef, newName);
|
renameMethod(methodDef, newName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepareRenameMethods() {
|
public void prepareRenameMethods() {
|
||||||
|
mergeState();
|
||||||
foreach (var methodDef in type.AllMethodsSorted) {
|
foreach (var methodDef in type.AllMethodsSorted) {
|
||||||
if (methodDef.isVirtual())
|
if (methodDef.isVirtual())
|
||||||
continue;
|
continue;
|
||||||
|
@ -470,7 +471,7 @@ namespace de4dot.renamer {
|
||||||
if (fieldInfo.renamed)
|
if (fieldInfo.renamed)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fieldInfo.rename(variableNameState.getNewFieldName(fieldInfo.oldName, new NameCreator2(fieldName)));
|
fieldInfo.suggestedName = variableNameState.getNewFieldName(fieldInfo.oldName, new NameCreator2(fieldName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -492,7 +493,7 @@ namespace de4dot.renamer {
|
||||||
return ldfld.Operand as FieldReference;
|
return ldfld.Operand as FieldReference;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializeEventHandlerNames() {
|
public void initializeEventHandlerNames() {
|
||||||
var ourFields = new Dictionary<FieldReferenceAndDeclaringTypeKey, FieldDef>();
|
var ourFields = new Dictionary<FieldReferenceAndDeclaringTypeKey, FieldDef>();
|
||||||
foreach (var fieldDef in type.AllFields)
|
foreach (var fieldDef in type.AllFields)
|
||||||
ourFields[new FieldReferenceAndDeclaringTypeKey(fieldDef.FieldDefinition)] = fieldDef;
|
ourFields[new FieldReferenceAndDeclaringTypeKey(fieldDef.FieldDefinition)] = fieldDef;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user