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