From fc530f49fdbf773c497e3714c1f8e7c79020e0a3 Mon Sep 17 00:00:00 2001 From: Thog Date: Tue, 13 Sep 2016 11:35:52 +0200 Subject: Make sure to use UTF-8 in any case for I/O, change "Mark as deobfuscated" key and clean up --- src/main/java/cuchaz/enigma/CommandMain.java | 10 ++++++++-- src/main/java/cuchaz/enigma/Main.java | 3 ++- .../analysis/ClassImplementationsTreeNode.java | 2 +- .../cuchaz/enigma/analysis/TreeDumpVisitor.java | 8 +++----- .../cuchaz/enigma/bytecode/CheckCastIterator.java | 2 ++ .../java/cuchaz/enigma/convert/ClassIdentity.java | 18 ++++++++--------- .../java/cuchaz/enigma/convert/MatchesReader.java | 10 ++++------ .../java/cuchaz/enigma/convert/MatchesWriter.java | 23 +++++++++++----------- .../java/cuchaz/enigma/gui/MemberMatchingGui.java | 11 ++++------- .../cuchaz/enigma/gui/elements/PopupMenuBar.java | 5 +---- src/main/java/cuchaz/enigma/mapping/EntryPair.java | 22 --------------------- .../cuchaz/enigma/mapping/MappingsRenamer.java | 1 + .../java/cuchaz/enigma/mapping/NameValidator.java | 13 ------------ 13 files changed, 46 insertions(+), 82 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/mapping/EntryPair.java diff --git a/src/main/java/cuchaz/enigma/CommandMain.java b/src/main/java/cuchaz/enigma/CommandMain.java index 54f2707b..b0a4107c 100644 --- a/src/main/java/cuchaz/enigma/CommandMain.java +++ b/src/main/java/cuchaz/enigma/CommandMain.java @@ -134,9 +134,15 @@ public class CommandMain { File fileMappings = getReadableFile(getArg(args, 1, "enigma mapping", true)); File result = getWritableFile(getArg(args, 2, "enigma mapping", true)); String name = getArg(args, 3, "format type", true); - Mappings.FormatType formatType = Mappings.FormatType.valueOf(name.toUpperCase()); - if (formatType == null) + Mappings.FormatType formatType; + try + { + formatType = Mappings.FormatType.valueOf(name.toUpperCase()); + } catch (IllegalArgumentException e) + { throw new IllegalArgumentException(name + "is not a valid mapping format!"); + } + System.out.println("Reading mappings..."); Mappings mappings = new MappingsEnigmaReader().read(fileMappings); System.out.println("Saving new mappings..."); diff --git a/src/main/java/cuchaz/enigma/Main.java b/src/main/java/cuchaz/enigma/Main.java index 14c9fc62..7bff2f27 100644 --- a/src/main/java/cuchaz/enigma/Main.java +++ b/src/main/java/cuchaz/enigma/Main.java @@ -16,6 +16,7 @@ import java.util.jar.JarFile; import javax.swing.UIManager; import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.mapping.ClassEntry; public class Main { @@ -32,7 +33,7 @@ public class Main { } // DEBUG - //gui.getController().openDeclaration(new ClassEntry("none/asj")); + gui.getController().openDeclaration(new ClassEntry("none/byp")); } private static File getFile(String path) { diff --git a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java b/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java index 2a231cb5..70ece243 100644 --- a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java +++ b/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java @@ -60,7 +60,7 @@ public class ClassImplementationsTreeNode extends DefaultMutableTreeNode { public static ClassImplementationsTreeNode findNode(ClassImplementationsTreeNode node, MethodEntry entry) { // is this the node? - if (node.entry.equals(entry)) { + if (node.entry.equals(entry.getClassEntry())) { return node; } diff --git a/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java b/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java index ef8a190c..de39d36b 100644 --- a/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java @@ -14,10 +14,8 @@ import com.strobel.componentmodel.Key; import com.strobel.decompiler.languages.java.ast.*; import com.strobel.decompiler.patterns.Pattern; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; +import java.io.*; +import java.nio.charset.Charset; public class TreeDumpVisitor implements IAstVisitor { @@ -32,7 +30,7 @@ public class TreeDumpVisitor implements IAstVisitor { @Override public Void visitCompilationUnit(CompilationUnit node, Void ignored) { try { - m_out = new FileWriter(m_file); + m_out = new OutputStreamWriter(new FileOutputStream(m_file), Charset.forName("UTF-8")); recurse(node, ignored); m_out.close(); return null; diff --git a/src/main/java/cuchaz/enigma/bytecode/CheckCastIterator.java b/src/main/java/cuchaz/enigma/bytecode/CheckCastIterator.java index 19c39d3c..d15dd87c 100644 --- a/src/main/java/cuchaz/enigma/bytecode/CheckCastIterator.java +++ b/src/main/java/cuchaz/enigma/bytecode/CheckCastIterator.java @@ -18,6 +18,8 @@ import cuchaz.enigma.mapping.MethodEntry; import cuchaz.enigma.mapping.Signature; import javassist.bytecode.*; +@Deprecated +// TODO: Find if this class can have any usage. public class CheckCastIterator implements Iterator { public static class CheckCast { diff --git a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java index 57cbc06a..0960c86b 100644 --- a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java +++ b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java @@ -273,20 +273,20 @@ public class ClassIdentity { // update the hash with the opcode int opcode = iter.byteAt(pos); digest.update((byte) opcode); - + int constIndex; switch (opcode) { - case Opcode.LDC: { - int constIndex = iter.byteAt(pos + 1); + case Opcode.LDC: + constIndex = iter.byteAt(pos + 1); updateHashWithConstant(digest, constants, constIndex); - } - break; + break; case Opcode.LDC_W: - case Opcode.LDC2_W: { - int constIndex = (iter.byteAt(pos + 1) << 8) | iter.byteAt(pos + 2); + case Opcode.LDC2_W: + constIndex = (iter.byteAt(pos + 1) << 8) | iter.byteAt(pos + 2); updateHashWithConstant(digest, constants, constIndex); - } - break; + break; + default: + break; } } diff --git a/src/main/java/cuchaz/enigma/convert/MatchesReader.java b/src/main/java/cuchaz/enigma/convert/MatchesReader.java index ee5e4828..550da497 100644 --- a/src/main/java/cuchaz/enigma/convert/MatchesReader.java +++ b/src/main/java/cuchaz/enigma/convert/MatchesReader.java @@ -12,10 +12,8 @@ package cuchaz.enigma.convert; import com.google.common.collect.Lists; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; +import java.io.*; +import java.nio.charset.Charset; import java.util.Collection; import java.util.List; @@ -26,7 +24,7 @@ public class MatchesReader { public static ClassMatches readClasses(File file) throws IOException { - try (BufferedReader in = new BufferedReader(new FileReader(file))) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8")))) { ClassMatches matches = new ClassMatches(); String line; while ((line = in.readLine()) != null) { @@ -55,7 +53,7 @@ public class MatchesReader { public static MemberMatches readMembers(File file) throws IOException { - try (BufferedReader in = new BufferedReader(new FileReader(file))) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8")))) { MemberMatches matches = new MemberMatches(); String line; while ((line = in.readLine()) != null) { diff --git a/src/main/java/cuchaz/enigma/convert/MatchesWriter.java b/src/main/java/cuchaz/enigma/convert/MatchesWriter.java index baf79293..dccbf6f1 100644 --- a/src/main/java/cuchaz/enigma/convert/MatchesWriter.java +++ b/src/main/java/cuchaz/enigma/convert/MatchesWriter.java @@ -10,9 +10,8 @@ ******************************************************************************/ package cuchaz.enigma.convert; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; +import java.nio.charset.Charset; import java.util.Map; import cuchaz.enigma.mapping.BehaviorEntry; @@ -25,14 +24,14 @@ public class MatchesWriter { public static void writeClasses(ClassMatches matches, File file) throws IOException { - try (FileWriter out = new FileWriter(file)) { + try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8"))) { for (ClassMatch match : matches) { writeClassMatch(out, match); } } } - private static void writeClassMatch(FileWriter out, ClassMatch match) + private static void writeClassMatch(OutputStreamWriter out, ClassMatch match) throws IOException { writeClasses(out, match.sourceClasses); out.write(":"); @@ -40,7 +39,7 @@ public class MatchesWriter { out.write("\n"); } - private static void writeClasses(FileWriter out, Iterable classes) + private static void writeClasses(OutputStreamWriter out, Iterable classes) throws IOException { boolean isFirst = true; for (ClassEntry entry : classes) { @@ -55,7 +54,7 @@ public class MatchesWriter { public static void writeMembers(MemberMatches matches, File file) throws IOException { - try (FileWriter out = new FileWriter(file)) { + try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8"))) { for (Map.Entry match : matches.matches().entrySet()) { writeMemberMatch(out, match.getKey(), match.getValue()); } @@ -71,7 +70,7 @@ public class MatchesWriter { } } - private static void writeMemberMatch(FileWriter out, T source, T dest) + private static void writeMemberMatch(OutputStreamWriter out, T source, T dest) throws IOException { if (source != null) { writeEntry(out, source); @@ -83,14 +82,14 @@ public class MatchesWriter { out.write("\n"); } - private static void writeUnmatchableEntry(FileWriter out, T entry) + private static void writeUnmatchableEntry(OutputStreamWriter out, T entry) throws IOException { out.write("!"); writeEntry(out, entry); out.write("\n"); } - private static void writeEntry(FileWriter out, T entry) + private static void writeEntry(OutputStreamWriter out, T entry) throws IOException { if (entry instanceof FieldEntry) { writeField(out, (FieldEntry) entry); @@ -99,7 +98,7 @@ public class MatchesWriter { } } - private static void writeField(FileWriter out, FieldEntry fieldEntry) + private static void writeField(OutputStreamWriter out, FieldEntry fieldEntry) throws IOException { out.write(fieldEntry.getClassName()); out.write(" "); @@ -108,7 +107,7 @@ public class MatchesWriter { out.write(fieldEntry.getType().toString()); } - private static void writeBehavior(FileWriter out, BehaviorEntry behaviorEntry) + private static void writeBehavior(OutputStreamWriter out, BehaviorEntry behaviorEntry) throws IOException { out.write(behaviorEntry.getClassName()); out.write(" "); diff --git a/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java b/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java index 4383465c..50550910 100644 --- a/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java +++ b/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java @@ -172,11 +172,8 @@ public class MemberMatchingGui { KeyAdapter keyListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent event) { - switch (event.getKeyCode()) { - case KeyEvent.VK_M: - m_matchButton.doClick(); - break; - } + if (event.getKeyCode() == KeyEvent.VK_M) + m_matchButton.doClick(); } }; m_sourceReader.addKeyListener(keyListener); @@ -376,7 +373,7 @@ public class MemberMatchingGui { private void setSource(T obfEntry) { if (obfEntry == null) { - m_obfSourceEntry = obfEntry; + m_obfSourceEntry = null; m_sourceLabel.setText(""); } else { m_obfSourceEntry = obfEntry; @@ -386,7 +383,7 @@ public class MemberMatchingGui { private void setDest(T obfEntry) { if (obfEntry == null) { - m_obfDestEntry = obfEntry; + m_obfDestEntry = null; m_destLabel.setText(""); } else { m_obfDestEntry = obfEntry; diff --git a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java index 07c8a32d..2b06342b 100644 --- a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java +++ b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java @@ -10,8 +10,6 @@ import cuchaz.enigma.gui.Gui; public class PopupMenuBar extends JPopupMenu { - private final Gui gui; - public final JMenuItem renameMenu; public final JMenuItem showInheritanceMenu; public final JMenuItem showImplementationsMenu; @@ -21,7 +19,6 @@ public class PopupMenuBar extends JPopupMenu { public final JMenuItem toggleMappingMenu; public PopupMenuBar(Gui gui) { - this.gui = gui; { JMenuItem menu = new JMenuItem("Rename"); menu.addActionListener(event -> gui.startRename()); @@ -73,7 +70,7 @@ public class PopupMenuBar extends JPopupMenu { { JMenuItem menu = new JMenuItem("Mark as deobfuscated"); menu.addActionListener(event -> gui.toggleMapping()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, 0)); + menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, 0)); menu.setEnabled(false); this.add(menu); this.toggleMappingMenu = menu; diff --git a/src/main/java/cuchaz/enigma/mapping/EntryPair.java b/src/main/java/cuchaz/enigma/mapping/EntryPair.java deleted file mode 100644 index 1c93d532..00000000 --- a/src/main/java/cuchaz/enigma/mapping/EntryPair.java +++ /dev/null @@ -1,22 +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.mapping; - -public class EntryPair { - - public T obf; - public T deobf; - - public EntryPair(T obf, T deobf) { - this.obf = obf; - this.deobf = deobf; - } -} diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java index 7c6c8318..e35ef3e8 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java @@ -13,6 +13,7 @@ package cuchaz.enigma.mapping; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; +import java.io.Serializable; import java.util.List; import java.util.Set; import java.util.zip.GZIPOutputStream; diff --git a/src/main/java/cuchaz/enigma/mapping/NameValidator.java b/src/main/java/cuchaz/enigma/mapping/NameValidator.java index 7be83c7f..6925b72a 100644 --- a/src/main/java/cuchaz/enigma/mapping/NameValidator.java +++ b/src/main/java/cuchaz/enigma/mapping/NameValidator.java @@ -30,19 +30,6 @@ public class NameValidator { ); static { - - // java allows all kinds of weird characters... - StringBuilder startChars = new StringBuilder(); - StringBuilder partChars = new StringBuilder(); - for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) { - if (Character.isJavaIdentifierStart(i)) { - startChars.appendCodePoint(i); - } - if (Character.isJavaIdentifierPart(i)) { - partChars.appendCodePoint(i); - } - } - String identifierRegex = "[A-Za-z_<][A-Za-z0-9_>]*"; IdentifierPattern = Pattern.compile(identifierRegex); ClassPattern = Pattern.compile(String.format("^(%s(\\.|/))*(%s)$", identifierRegex, identifierRegex)); -- cgit v1.2.3