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() { public IEnumerable<TypeDef> getAllInterfaces() {
if (isInterface()) if (isInterface())
yield return this; yield return this;

View File

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

View File

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