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
---
.../cuchaz/enigma/mapping/MappingsChecker.java | 107 +++++++++++++++++++++
1 file changed, 107 insertions(+)
create mode 100644 src/main/java/cuchaz/enigma/mapping/MappingsChecker.java
(limited to 'src/main/java/cuchaz/enigma/mapping/MappingsChecker.java')
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java b/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java
new file mode 100644
index 0000000..ab68682
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * 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.mapping;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.util.Map;
+
+import cuchaz.enigma.analysis.JarIndex;
+import cuchaz.enigma.analysis.RelatedMethodChecker;
+
+
+public class MappingsChecker {
+
+ private JarIndex m_index;
+ private RelatedMethodChecker m_relatedMethodChecker;
+ private Map m_droppedClassMappings;
+ private Map m_droppedInnerClassMappings;
+ private Map m_droppedFieldMappings;
+ private Map m_droppedMethodMappings;
+
+ public MappingsChecker(JarIndex index) {
+ m_index = index;
+ m_relatedMethodChecker = new RelatedMethodChecker(m_index);
+ m_droppedClassMappings = Maps.newHashMap();
+ m_droppedInnerClassMappings = Maps.newHashMap();
+ m_droppedFieldMappings = Maps.newHashMap();
+ m_droppedMethodMappings = Maps.newHashMap();
+ }
+
+ public RelatedMethodChecker getRelatedMethodChecker() {
+ return m_relatedMethodChecker;
+ }
+
+ public Map getDroppedClassMappings() {
+ return m_droppedClassMappings;
+ }
+
+ public Map getDroppedInnerClassMappings() {
+ return m_droppedInnerClassMappings;
+ }
+
+ public Map getDroppedFieldMappings() {
+ return m_droppedFieldMappings;
+ }
+
+ public Map getDroppedMethodMappings() {
+ return m_droppedMethodMappings;
+ }
+
+ public void dropBrokenMappings(Mappings mappings) {
+ for (ClassMapping classMapping : Lists.newArrayList(mappings.classes())) {
+ if (!checkClassMapping(classMapping)) {
+ mappings.removeClassMapping(classMapping);
+ m_droppedClassMappings.put(EntryFactory.getObfClassEntry(m_index, classMapping), classMapping);
+ }
+ }
+ }
+
+ private boolean checkClassMapping(ClassMapping classMapping) {
+
+ // check the class
+ ClassEntry classEntry = EntryFactory.getObfClassEntry(m_index, classMapping);
+ if (!m_index.getObfClassEntries().contains(classEntry)) {
+ return false;
+ }
+
+ // check the fields
+ for (FieldMapping fieldMapping : Lists.newArrayList(classMapping.fields())) {
+ FieldEntry obfFieldEntry = EntryFactory.getObfFieldEntry(classMapping, fieldMapping);
+ if (!m_index.containsObfField(obfFieldEntry)) {
+ classMapping.removeFieldMapping(fieldMapping);
+ m_droppedFieldMappings.put(obfFieldEntry, fieldMapping);
+ }
+ }
+
+ // check methods
+ for (MethodMapping methodMapping : Lists.newArrayList(classMapping.methods())) {
+ BehaviorEntry obfBehaviorEntry = EntryFactory.getObfBehaviorEntry(classEntry, methodMapping);
+ if (!m_index.containsObfBehavior(obfBehaviorEntry)) {
+ classMapping.removeMethodMapping(methodMapping);
+ m_droppedMethodMappings.put(obfBehaviorEntry, methodMapping);
+ }
+
+ m_relatedMethodChecker.checkMethod(classEntry, methodMapping);
+ }
+
+ // check inner classes
+ for (ClassMapping innerClassMapping : Lists.newArrayList(classMapping.innerClasses())) {
+ if (!checkClassMapping(innerClassMapping)) {
+ classMapping.removeInnerClassMapping(innerClassMapping);
+ m_droppedInnerClassMappings.put(EntryFactory.getObfClassEntry(m_index, innerClassMapping), innerClassMapping);
+ }
+ }
+
+ return true;
+ }
+}
--
cgit v1.2.3