summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/mapping/MappingsWriter.java')
-rw-r--r--src/main/java/cuchaz/enigma/mapping/MappingsWriter.java102
1 files changed, 0 insertions, 102 deletions
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java b/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java
deleted file mode 100644
index 4793166..0000000
--- a/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java
+++ /dev/null
@@ -1,102 +0,0 @@
1/*******************************************************************************
2 * Copyright (c) 2015 Jeff Martin.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Lesser General Public
5 * License v3.0 which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/lgpl.html
7 * <p>
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11package cuchaz.enigma.mapping;
12
13import com.google.gson.Gson;
14import com.google.gson.GsonBuilder;
15
16import java.io.File;
17import java.io.FileWriter;
18import java.io.IOException;
19import java.util.ArrayList;
20import java.util.Collections;
21import java.util.List;
22
23import cuchaz.enigma.json.*;
24
25public class MappingsWriter {
26
27 public void write(File file, Mappings mappings) throws IOException {
28 if (!file.isDirectory()) {
29 return;
30 }
31
32 String[] entries = file.list();
33 for (String s : entries) {
34 File currentFile = new File(file.getPath(), s);
35 deleteDirectory(currentFile);
36 }
37
38 Gson gson = new GsonBuilder().setPrettyPrinting().create();
39 for (ClassMapping classMapping : sorted(mappings.classes())) {
40 if (classMapping.getDeobfName() != null && !classMapping.getDeobfName().equalsIgnoreCase("") && !classMapping.getDeobfName().equalsIgnoreCase("null")) {
41 JsonClass jsonClass = new JsonClass(classMapping.getObfSimpleName(), classMapping.getDeobfName());
42 write(jsonClass, classMapping);
43
44 File f = new File(file, jsonClass.getName() + ".json");
45 f.getParentFile().mkdirs();
46 f.createNewFile();
47 FileWriter writer = new FileWriter(f);
48 writer.write(gson.toJson(jsonClass));
49 writer.close();
50 }
51 }
52 }
53
54 private void write(JsonClass jsonClass, ClassMapping classMapping) {
55 for (ClassMapping innerClassMapping : sorted(classMapping.innerClasses())) {
56 JsonClass innerClass = new JsonClass(classMapping.getObfSimpleName() + "$" + innerClassMapping.getObfSimpleName().replace("nome/", ""), innerClassMapping.getDeobfName());
57 write(innerClass, innerClassMapping);
58 jsonClass.addInnerClass(innerClass);
59 }
60
61 for (FieldMapping fieldMapping : sorted(classMapping.fields())) {
62 jsonClass.addField(new JsonField(fieldMapping.getObfName(), fieldMapping.getDeobfName(), fieldMapping.getObfType().toString()));
63 }
64
65 for (MethodMapping methodMapping : sorted(classMapping.methods())) {
66 List<JsonArgument> args = new ArrayList<>();
67 for (ArgumentMapping argumentMapping : sorted(methodMapping.arguments())) {
68 args.add(new JsonArgument(argumentMapping.getIndex(), argumentMapping.getName()));
69 }
70 if (methodMapping.getObfName().contains("<init>") || methodMapping.getObfName().contains("<clinit>")) {
71 jsonClass.addConstructor(new JsonConstructor(methodMapping.getObfSignature().toString(), args, methodMapping.getObfName().contains("<clinit>")));
72 } else {
73 jsonClass.addMethod(new JsonMethod(methodMapping.getObfName(), methodMapping.getDeobfName(), methodMapping.getObfSignature().toString(), args));
74 }
75 }
76 }
77
78 private <T extends Comparable<T>> List<T> sorted(Iterable<T> classes) {
79 List<T> out = new ArrayList<>();
80 for (T t : classes) {
81 out.add(t);
82 }
83 Collections.sort(out);
84 return out;
85 }
86
87 public static boolean deleteDirectory(File directory) {
88 if (directory.exists()) {
89 File[] files = directory.listFiles();
90 if (null != files) {
91 for (int i = 0; i < files.length; i++) {
92 if (files[i].isDirectory()) {
93 deleteDirectory(files[i]);
94 } else {
95 files[i].delete();
96 }
97 }
98 }
99 }
100 return (directory.delete());
101 }
102}