From 00fcd0550fcdda621c2e4662f6ddd55ce673b931 Mon Sep 17 00:00:00 2001 From: Gegy Date: Thu, 24 Jan 2019 14:48:32 +0200 Subject: [WIP] Mapping rework (#91) * Move packages * Mapping & entry refactor: first pass * Fix deobf -> obf tree remapping * Resolve various issues * Give all entries the potential for parents and treat inner classes as children * Deobf UI tree elements * Tests pass * Sort mapping output * Fix delta tracking * Index separation and first pass for #97 * Keep track of remapped jar index * Fix child entries not being remapped * Drop non-root entries * Track dropped mappings * Fix enigma mapping ordering * EntryTreeNode interface * Small tweaks * Naive full index remap on rename * Entries can resolve to more than one root entry * Support alternative resolution strategies * Bridge method resolution * Tests pass * Fix mappings being used where there are none * Fix methods with different descriptors being considered unique. closes #89 --- .../java/cuchaz/enigma/analysis/EntryRenamer.java | 167 --------------------- 1 file changed, 167 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/analysis/EntryRenamer.java (limited to 'src/main/java/cuchaz/enigma/analysis/EntryRenamer.java') diff --git a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java deleted file mode 100644 index c474d68..0000000 --- a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java +++ /dev/null @@ -1,167 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ - -package cuchaz.enigma.analysis; - -import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; -import com.google.common.collect.Sets; -import cuchaz.enigma.mapping.*; -import cuchaz.enigma.mapping.entry.*; - -import java.util.AbstractMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class EntryRenamer { - - public static void renameClassesInSet(Map renames, Set set) { - List entries = Lists.newArrayList(); - for (T val : set) { - entries.add(renameClassesInThing(renames, val)); - } - set.clear(); - set.addAll(entries); - } - - public static void renameClassesInMap(Map renames, Map map) { - // for each key/value pair... - Set> entriesToAdd = Sets.newHashSet(); - for (Map.Entry entry : map.entrySet()) { - entriesToAdd.add(new AbstractMap.SimpleEntry<>(renameClassesInThing(renames, entry.getKey()), renameClassesInThing(renames, entry.getValue()))); - } - map.clear(); - for (Map.Entry entry : entriesToAdd) { - map.put(entry.getKey(), entry.getValue()); - } - } - - public static void renameClassesInMultimap(Map renames, Multimap map) { - // for each key/value pair... - Set> entriesToAdd = Sets.newHashSet(); - for (Map.Entry entry : map.entries()) { - entriesToAdd.add(new AbstractMap.SimpleEntry<>(renameClassesInThing(renames, entry.getKey()), renameClassesInThing(renames, entry.getValue()))); - } - map.clear(); - for (Map.Entry entry : entriesToAdd) { - map.put(entry.getKey(), entry.getValue()); - } - } - - public static void renameMethodsInMultimap(Map renames, Multimap map) { - // for each key/value pair... - Set> entriesToAdd = Sets.newHashSet(); - for (Map.Entry entry : map.entries()) { - entriesToAdd.add(new AbstractMap.SimpleEntry<>(renameMethodsInThing(renames, entry.getKey()), renameMethodsInThing(renames, entry.getValue()))); - } - map.clear(); - for (Map.Entry entry : entriesToAdd) { - map.put(entry.getKey(), entry.getValue()); - } - } - - public static void renameMethodsInMap(Map renames, Map map) { - // for each key/value pair... - Set> entriesToAdd = Sets.newHashSet(); - for (Map.Entry entry : map.entrySet()) { - entriesToAdd.add(new AbstractMap.SimpleEntry<>(renameMethodsInThing(renames, entry.getKey()), renameMethodsInThing(renames, entry.getValue()))); - } - map.clear(); - for (Map.Entry entry : entriesToAdd) { - map.put(entry.getKey(), entry.getValue()); - } - } - - @SuppressWarnings("unchecked") - public static T renameMethodsInThing(Map renames, T thing) { - if (thing instanceof MethodEntry) { - MethodEntry methodEntry = (MethodEntry) thing; - MethodEntry newMethodEntry = renames.get(methodEntry); - if (newMethodEntry != null) { - return (T) new MethodEntry( - methodEntry.getOwnerClassEntry(), - newMethodEntry.getName(), - methodEntry.getDesc() - ); - } - return thing; - } else if (thing instanceof LocalVariableEntry) { - LocalVariableEntry variableEntry = (LocalVariableEntry) thing; - return (T) new LocalVariableEntry( - renameMethodsInThing(renames, variableEntry.getOwnerEntry()), - variableEntry.getIndex(), - variableEntry.getName(), - variableEntry.isParameter() - ); - } else if (thing instanceof EntryReference) { - EntryReference reference = (EntryReference) thing; - reference.entry = renameMethodsInThing(renames, reference.entry); - reference.context = renameMethodsInThing(renames, reference.context); - return thing; - } - return thing; - } - - @SuppressWarnings("unchecked") - public static T renameClassesInThing(final Map renames, T thing) { - if (thing instanceof String) { - String stringEntry = (String) thing; - if (renames.containsKey(stringEntry)) { - return (T) renames.get(stringEntry); - } - } else if (thing instanceof ClassEntry) { - ClassEntry classEntry = (ClassEntry) thing; - return (T) new ClassEntry(renameClassesInThing(renames, classEntry.getClassName())); - } else if (thing instanceof FieldDefEntry) { - FieldDefEntry fieldEntry = (FieldDefEntry) thing; - return (T) new FieldDefEntry( - renameClassesInThing(renames, fieldEntry.getOwnerClassEntry()), - fieldEntry.getName(), - renameClassesInThing(renames, fieldEntry.getDesc()), - renameClassesInThing(renames, fieldEntry.getSignature()), - fieldEntry.getAccess() - ); - } else if (thing instanceof MethodDefEntry) { - MethodDefEntry methodEntry = (MethodDefEntry) thing; - return (T) new MethodDefEntry( - renameClassesInThing(renames, methodEntry.getOwnerClassEntry()), - methodEntry.getName(), - renameClassesInThing(renames, methodEntry.getDesc()), - renameClassesInThing(renames, methodEntry.getSignature()), - methodEntry.getAccess() - ); - } else if (thing instanceof MethodEntry) { - MethodEntry methodEntry = (MethodEntry) thing; - return (T) new MethodEntry( - renameClassesInThing(renames, methodEntry.getOwnerClassEntry()), - methodEntry.getName(), - renameClassesInThing(renames, methodEntry.getDesc()) - ); - } else if (thing instanceof LocalVariableEntry) { - LocalVariableEntry argumentEntry = (LocalVariableEntry) thing; - return (T) new LocalVariableEntry(renameClassesInThing(renames, argumentEntry.getOwnerEntry()), argumentEntry.getIndex(), argumentEntry.getName(), argumentEntry.isParameter()); - } else if (thing instanceof EntryReference) { - EntryReference reference = (EntryReference) thing; - reference.entry = renameClassesInThing(renames, reference.entry); - reference.context = renameClassesInThing(renames, reference.context); - return thing; - } else if (thing instanceof MethodDescriptor) { - return (T) ((MethodDescriptor) thing).remap(className -> renameClassesInThing(renames, className)); - } else if (thing instanceof TypeDescriptor) { - return (T) ((TypeDescriptor) thing).remap(className -> renameClassesInThing(renames, className)); - } else if (thing instanceof Signature) { - return (T) ((Signature) thing).remap(className -> renameClassesInThing(renames, className)); - } - - return thing; - } -} -- cgit v1.2.3