Rebuild dictionaries when types have been renamed

This commit is contained in:
de4dot 2011-11-02 04:54:54 +01:00
parent ccff408a00
commit 78960c759c
3 changed files with 39 additions and 1 deletions

View File

@ -351,6 +351,14 @@ namespace de4dot.renamer {
}
}
// Called when all types have been renamed
public void onTypesRenamed() {
events.onTypesRenamed();
fields.onTypesRenamed();
methods.onTypesRenamed();
types.onTypesRenamed();
}
public IEnumerable<TypeDef> getAllInterfaces() {
if (isInterface())
yield return this;

View File

@ -40,6 +40,7 @@ namespace de4dot.renamer {
IEnumerable<TRef> getSorted();
TRef find(TMRef tmref);
void add(TRef tref);
void onTypesRenamed();
}
class TypeDefDict : RefDict<TypeDef, TypeReference> {
@ -73,6 +74,13 @@ namespace de4dot.renamer {
tokenToTypeDef[new ScopeAndTokenKey(typeDef.TypeDefinition)] = typeDef;
typeRefToDef[new TypeReferenceKey(typeDef.TypeDefinition)] = typeDef;
}
public void onTypesRenamed() {
var all = new List<TypeDef>(typeRefToDef.Values);
typeRefToDef.Clear();
foreach (var typeDef in all)
typeRefToDef[new TypeReferenceKey(typeDef.TypeDefinition)] = typeDef;
}
}
class FieldDefDict : RefDict<FieldDef, FieldReference> {
@ -106,6 +114,13 @@ namespace de4dot.renamer {
tokenToFieldDef[new ScopeAndTokenKey(fieldDef.FieldDefinition)] = fieldDef;
fieldRefToDef[new FieldReferenceKey(fieldDef.FieldDefinition)] = fieldDef;
}
public void onTypesRenamed() {
var all = new List<FieldDef>(fieldRefToDef.Values);
fieldRefToDef.Clear();
foreach (var fieldDef in all)
fieldRefToDef[new FieldReferenceKey(fieldDef.FieldDefinition)] = fieldDef;
}
}
class MethodDefDict : RefDict<MethodDef, MethodReference> {
@ -139,6 +154,13 @@ namespace de4dot.renamer {
tokenToMethodDef[new ScopeAndTokenKey(methodDef.MethodDefinition)] = methodDef;
methodRefToDef[new MethodReferenceKey(methodDef.MethodDefinition)] = methodDef;
}
public void onTypesRenamed() {
var all = new List<MethodDef>(methodRefToDef.Values);
methodRefToDef.Clear();
foreach (var methodDef in all)
methodRefToDef[new MethodReferenceKey(methodDef.MethodDefinition)] = methodDef;
}
}
class PropertyDefDict : RefDict<PropertyDef, PropertyReference> {
@ -167,6 +189,9 @@ namespace de4dot.renamer {
public void add(PropertyDef propDef) {
tokenToPropDef[new ScopeAndTokenKey(propDef.PropertyDefinition)] = propDef;
}
public void onTypesRenamed() {
}
}
class EventDefDict : RefDict<EventDef, EventReference> {
@ -195,6 +220,9 @@ namespace de4dot.renamer {
public void add(EventDef eventDef) {
tokenToEventDef[new ScopeAndTokenKey(eventDef.EventDefinition)] = eventDef;
}
public void onTypesRenamed() {
}
}
class Renamed {

View File

@ -303,8 +303,10 @@ namespace de4dot.renamer {
void rebuildAllTypesDict() {
var newAllTypes = new TypeDefDict();
foreach (var typeDef in allTypes.getAll())
foreach (var typeDef in allTypes.getAll()) {
typeDef.onTypesRenamed();
newAllTypes.add(typeDef);
}
allTypes = newAllTypes;
}