From 4be005617b3b8c3578cca07c5d085d12916f0d1d Mon Sep 17 00:00:00 2001
From: lclc98
Date: Thu, 30 Jun 2016 00:49:21 +1000
Subject: Json format (#2)
* Added new format
* Fixed bug
* Updated Version
---
.../java/cuchaz/enigma/analysis/EntryRenamer.java | 184 +++++++++++++++++++++
1 file changed, 184 insertions(+)
create 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
new file mode 100644
index 0000000..b99537c
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * 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 java.util.AbstractMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import cuchaz.enigma.mapping.*;
+
+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.getClassEntry(),
+ newMethodEntry.getName(),
+ methodEntry.getSignature()
+ );
+ }
+ return thing;
+ } else if (thing instanceof ArgumentEntry) {
+ ArgumentEntry argumentEntry = (ArgumentEntry) thing;
+ return (T) new ArgumentEntry(
+ renameMethodsInThing(renames, argumentEntry.getBehaviorEntry()),
+ argumentEntry.getIndex(),
+ argumentEntry.getName()
+ );
+ } 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 FieldEntry) {
+ FieldEntry fieldEntry = (FieldEntry) thing;
+ return (T) new FieldEntry(
+ renameClassesInThing(renames, fieldEntry.getClassEntry()),
+ fieldEntry.getName(),
+ renameClassesInThing(renames, fieldEntry.getType())
+ );
+ } else if (thing instanceof ConstructorEntry) {
+ ConstructorEntry constructorEntry = (ConstructorEntry) thing;
+ return (T) new ConstructorEntry(
+ renameClassesInThing(renames, constructorEntry.getClassEntry()),
+ renameClassesInThing(renames, constructorEntry.getSignature())
+ );
+ } else if (thing instanceof MethodEntry) {
+ MethodEntry methodEntry = (MethodEntry) thing;
+ return (T) new MethodEntry(
+ renameClassesInThing(renames, methodEntry.getClassEntry()),
+ methodEntry.getName(),
+ renameClassesInThing(renames, methodEntry.getSignature())
+ );
+ } else if (thing instanceof ArgumentEntry) {
+ ArgumentEntry argumentEntry = (ArgumentEntry) thing;
+ return (T) new ArgumentEntry(
+ renameClassesInThing(renames, argumentEntry.getBehaviorEntry()),
+ argumentEntry.getIndex(),
+ argumentEntry.getName()
+ );
+ } 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 Signature) {
+ return (T) new Signature((Signature) thing, new ClassNameReplacer() {
+ @Override
+ public String replace(String className) {
+ return renameClassesInThing(renames, className);
+ }
+ });
+ } else if (thing instanceof Type) {
+ return (T) new Type((Type) thing, new ClassNameReplacer() {
+ @Override
+ public String replace(String className) {
+ return renameClassesInThing(renames, className);
+ }
+ });
+ }
+
+ return thing;
+ }
+}
--
cgit v1.2.3