summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runemoro2020-06-03 13:39:42 -0400
committerGravatar GitHub2020-06-03 18:39:42 +0100
commit0f47403d0220757fed189b76e2071e25b1025cb8 (patch)
tree879bf72c4476f0a5e0d82da99d7ff2b2276bcaca
parentFix search dialog hanging for a short time sometimes (#250) (diff)
downloadenigma-fork-0f47403d0220757fed189b76e2071e25b1025cb8.tar.gz
enigma-fork-0f47403d0220757fed189b76e2071e25b1025cb8.tar.xz
enigma-fork-0f47403d0220757fed189b76e2071e25b1025cb8.zip
Split GUI code to separate module (#242)
* Split into modules * Post merge compile fixes Co-authored-by: modmuss50 <modmuss50@gmail.com>
-rw-r--r--.gitignore246
-rw-r--r--README.md4
-rw-r--r--build.gradle174
-rw-r--r--enigma-cli/build.gradle5
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java (renamed from src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java)2
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/Command.java (renamed from src/main/java/cuchaz/enigma/command/Command.java)2
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java (renamed from src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java)9
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java (renamed from src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java)6
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java (renamed from src/main/java/cuchaz/enigma/command/DecompileCommand.java)0
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java (renamed from src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java)0
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java (renamed from src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java)9
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/Main.java (renamed from src/main/java/cuchaz/enigma/CommandMain.java)12
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java (renamed from src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java)4
-rw-r--r--enigma-cli/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java87
-rw-r--r--enigma-cli/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java (renamed from src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java)5
-rw-r--r--enigma-cli/src/test/resources/packageAccess/correctMappings/base/Base.mapping (renamed from src/test/resources/packageAccess/correctMappings/base/Base.mapping)0
-rw-r--r--enigma-cli/src/test/resources/packageAccess/correctMappings/base/One.mapping (renamed from src/test/resources/packageAccess/correctMappings/base/One.mapping)0
-rw-r--r--enigma-cli/src/test/resources/packageAccess/correctMappings/two/Two.mapping (renamed from src/test/resources/packageAccess/correctMappings/two/Two.mapping)0
-rw-r--r--enigma-cli/src/test/resources/packageAccess/wrongMappings/base/Base.mapping (renamed from src/test/resources/packageAccess/wrongMappings/base/Base.mapping)0
-rw-r--r--enigma-cli/src/test/resources/packageAccess/wrongMappings/one/One.mapping (renamed from src/test/resources/packageAccess/wrongMappings/one/One.mapping)0
-rw-r--r--enigma-cli/src/test/resources/packageAccess/wrongMappings/two/Two.mapping (renamed from src/test/resources/packageAccess/wrongMappings/two/Two.mapping)0
-rw-r--r--enigma-server/build.gradle6
-rw-r--r--enigma-server/docs/protocol.md (renamed from docs/protocol.md)0
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/ClientPacketHandler.java29
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java (renamed from src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java)46
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/EnigmaClient.java (renamed from src/main/java/cuchaz/enigma/network/EnigmaClient.java)17
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/EnigmaServer.java (renamed from src/main/java/cuchaz/enigma/network/EnigmaServer.java)8
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java (renamed from src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java)0
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/Message.java (renamed from src/main/java/cuchaz/enigma/utils/Message.java)3
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java (renamed from src/main/java/cuchaz/enigma/network/ServerPacketHandler.java)0
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java)4
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java)6
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java)0
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java)6
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java)2
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java)2
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java)6
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java)2
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java)8
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/Packet.java (renamed from src/main/java/cuchaz/enigma/network/packet/Packet.java)0
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketHelper.java (renamed from src/main/java/cuchaz/enigma/network/packet/PacketHelper.java)0
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java (renamed from src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java)14
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java)4
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java)6
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java)4
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java)6
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java)8
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java (renamed from src/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java)8
-rw-r--r--enigma-swing/build.gradle23
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/BrowserCaret.java (renamed from src/main/java/cuchaz/enigma/gui/BrowserCaret.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/ClassSelector.java (renamed from src/main/java/cuchaz/enigma/gui/ClassSelector.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/CodeReader.java (renamed from src/main/java/cuchaz/enigma/gui/CodeReader.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/ConnectionState.java (renamed from src/main/java/cuchaz/enigma/gui/ConnectionState.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java (renamed from src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java)3
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java (renamed from src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java (renamed from src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/ExceptionIgnorer.java (renamed from src/main/java/cuchaz/enigma/ExceptionIgnorer.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java (renamed from src/main/java/cuchaz/enigma/gui/Gui.java)28
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java (renamed from src/main/java/cuchaz/enigma/gui/GuiController.java)50
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java (renamed from src/main/java/cuchaz/enigma/Main.java)8
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java (renamed from src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java (renamed from src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/QuickFindAction.java (renamed from src/main/java/cuchaz/enigma/gui/QuickFindAction.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/ReadableToken.java (renamed from src/main/java/cuchaz/enigma/utils/ReadableToken.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/RefreshMode.java (renamed from src/main/java/cuchaz/enigma/gui/RefreshMode.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java (renamed from src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/config/Config.java (renamed from src/main/java/cuchaz/enigma/config/Config.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/config/Themes.java (renamed from src/main/java/cuchaz/enigma/config/Themes.java)5
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java)11
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java)10
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java)4
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java)8
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java)4
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java (renamed from src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java (renamed from src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java (renamed from src/main/java/cuchaz/enigma/gui/elements/MenuBar.java)4
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java (renamed from src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java (renamed from src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java (renamed from src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java (renamed from src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java (renamed from src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java (renamed from src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java (renamed from src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java (renamed from src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java (renamed from src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java (renamed from src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java (renamed from src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java (renamed from src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java)4
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java (renamed from src/main/java/cuchaz/enigma/gui/panels/PanelObf.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchEntry.java (renamed from src/main/java/cuchaz/enigma/utils/search/SearchEntry.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchUtil.java (renamed from src/main/java/cuchaz/enigma/utils/search/SearchUtil.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java (renamed from src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java)2
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java (renamed from src/main/java/cuchaz/enigma/gui/stats/StatsMember.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java (renamed from src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java56
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/History.java (renamed from src/main/java/cuchaz/enigma/gui/util/History.java)98
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java (renamed from src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java)0
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java (renamed from src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java)2
-rw-r--r--enigma-swing/src/main/resources/about.html (renamed from src/main/resources/about.html)0
-rw-r--r--enigma-swing/src/main/resources/stats.html (renamed from src/main/resources/stats.html)0
-rw-r--r--enigma/build.gradle63
-rw-r--r--enigma/src/main/java/cuchaz/enigma/ClassProvider.java (renamed from src/main/java/cuchaz/enigma/ClassProvider.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/Enigma.java (renamed from src/main/java/cuchaz/enigma/Enigma.java)20
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaProfile.java (renamed from src/main/java/cuchaz/enigma/EnigmaProfile.java)6
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaProject.java (renamed from src/main/java/cuchaz/enigma/EnigmaProject.java)22
-rw-r--r--enigma/src/main/java/cuchaz/enigma/EnigmaServices.java (renamed from src/main/java/cuchaz/enigma/EnigmaServices.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/ProgressListener.java (renamed from src/main/java/cuchaz/enigma/ProgressListener.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/Access.java (renamed from src/main/java/cuchaz/enigma/analysis/Access.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java (renamed from src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java)5
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ClassCache.java (renamed from src/main/java/cuchaz/enigma/analysis/ClassCache.java)5
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java (renamed from src/main/java/cuchaz/enigma/analysis/EntryReference.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java (renamed from src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java (renamed from src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java (renamed from src/main/java/cuchaz/enigma/analysis/InterpreterPair.java)5
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java (renamed from src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java (renamed from src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java (renamed from src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java (renamed from src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java (renamed from src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java (renamed from src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java (renamed from src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java (renamed from src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java (renamed from src/main/java/cuchaz/enigma/analysis/index/JarIndex.java)7
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java (renamed from src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java (renamed from src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java)294
-rw-r--r--enigma/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java (renamed from src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/EnigmaPlugin.java (renamed from src/main/java/cuchaz/enigma/api/EnigmaPlugin.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java (renamed from src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/EnigmaService.java (renamed from src/main/java/cuchaz/enigma/api/service/EnigmaService.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java (renamed from src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java (renamed from src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java (renamed from src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/JarIndexerService.java (renamed from src/main/java/cuchaz/enigma/api/service/JarIndexerService.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/NameProposalService.java (renamed from src/main/java/cuchaz/enigma/api/service/NameProposalService.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java (renamed from src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java (renamed from src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/Decompiler.java (renamed from src/main/java/cuchaz/enigma/source/Decompiler.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/DecompilerService.java (renamed from src/main/java/cuchaz/enigma/source/DecompilerService.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/Decompilers.java (renamed from src/main/java/cuchaz/enigma/source/Decompilers.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/Source.java (renamed from src/main/java/cuchaz/enigma/source/Source.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java (renamed from src/main/java/cuchaz/enigma/source/SourceIndex.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/SourceRemapper.java (renamed from src/main/java/cuchaz/enigma/gui/SourceRemapper.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/SourceSettings.java (renamed from src/main/java/cuchaz/enigma/source/SourceSettings.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/Token.java (renamed from src/main/java/cuchaz/enigma/analysis/Token.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java (renamed from src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/cfr/CfrSource.java (renamed from src/main/java/cuchaz/enigma/source/cfr/CfrSource.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java (renamed from src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/EntryParser.java (renamed from src/main/java/cuchaz/enigma/source/procyon/EntryParser.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java (renamed from src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java)17
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java (renamed from src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java (renamed from src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java (renamed from src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java (renamed from src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java (renamed from src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java (renamed from src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java (renamed from src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java (renamed from src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java (renamed from src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java (renamed from src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java (renamed from src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java (renamed from src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/MappingTranslator.java (renamed from src/main/java/cuchaz/enigma/translation/MappingTranslator.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/ProposingTranslator.java (renamed from src/main/java/cuchaz/enigma/ProposingTranslator.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/SignatureUpdater.java (renamed from src/main/java/cuchaz/enigma/translation/SignatureUpdater.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/Translatable.java (renamed from src/main/java/cuchaz/enigma/translation/Translatable.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/TranslationDirection.java (renamed from src/main/java/cuchaz/enigma/translation/TranslationDirection.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/Translator.java (renamed from src/main/java/cuchaz/enigma/translation/Translator.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/VoidTranslator.java (renamed from src/main/java/cuchaz/enigma/translation/VoidTranslator.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java)1
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/IllegalNameException.java (renamed from src/main/java/cuchaz/enigma/throwables/IllegalNameException.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingOperations.java71
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java)1
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java)3
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/LfPrintWriter.java16
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFileNameFormat.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java)10
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java (renamed from src/main/java/cuchaz/enigma/throwables/MappingParseException.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingSaveParameters.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java)1
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java)10
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaFormat.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaFormat.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java)9
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java)14
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/ProguardMappingsReader.java)11
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java)9
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java)7
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsWriter.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java)5
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Reader.java)13
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Writer.java)11
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java (renamed from src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java (renamed from src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/Lambda.java (renamed from src/main/java/cuchaz/enigma/translation/representation/Lambda.java)210
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java (renamed from src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/Signature.java (renamed from src/main/java/cuchaz/enigma/translation/representation/Signature.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java (renamed from src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java)2
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java)4
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java (renamed from src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java)1
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/I18n.java (renamed from src/main/java/cuchaz/enigma/utils/I18n.java)11
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/Pair.java (renamed from src/main/java/cuchaz/enigma/utils/Pair.java)0
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/Utils.java92
-rw-r--r--enigma/src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin (renamed from src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin)0
-rw-r--r--enigma/src/main/resources/lang/en_us.json (renamed from src/main/resources/lang/en_us.json)0
-rw-r--r--enigma/src/main/resources/lang/fr_fr.json (renamed from src/main/resources/lang/fr_fr.json)0
-rw-r--r--enigma/src/main/resources/lang/zh_cn.json (renamed from src/main/resources/lang/zh_cn.json)0
-rw-r--r--enigma/src/main/resources/profile.json (renamed from src/main/resources/profile.json)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java (renamed from src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestDeobfed.java (renamed from src/test/java/cuchaz/enigma/TestDeobfed.java)14
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java (renamed from src/test/java/cuchaz/enigma/TestDeobfuscator.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestEntryFactory.java (renamed from src/test/java/cuchaz/enigma/TestEntryFactory.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java (renamed from src/test/java/cuchaz/enigma/TestInnerClasses.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java (renamed from src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java (renamed from src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java (renamed from src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestMethodDescriptor.java (renamed from src/test/java/cuchaz/enigma/TestMethodDescriptor.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestTokensConstructors.java (renamed from src/test/java/cuchaz/enigma/TestTokensConstructors.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestTranslator.java (renamed from src/test/java/cuchaz/enigma/TestTranslator.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestTypeDescriptor.java (renamed from src/test/java/cuchaz/enigma/TestTypeDescriptor.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TokenChecker.java (renamed from src/test/java/cuchaz/enigma/TokenChecker.java)2
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/Keep.java (renamed from src/test/java/cuchaz/enigma/inputs/Keep.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java (renamed from src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/constructors/Caller.java (renamed from src/test/java/cuchaz/enigma/inputs/constructors/Caller.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java (renamed from src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java (renamed from src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java (renamed from src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java (renamed from src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java (renamed from src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java (renamed from src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java (renamed from src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java (renamed from src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java (renamed from src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java (renamed from src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java (renamed from src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java (renamed from src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java (renamed from src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java (renamed from src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java (renamed from src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java (renamed from src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java (renamed from src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java (renamed from src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java)0
-rw-r--r--enigma/src/test/java/cuchaz/enigma/translation/mapping/TestComments.java (renamed from src/test/java/cuchaz/enigma/mapping/TestComments.java)13
-rw-r--r--enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java (renamed from src/test/java/cuchaz/enigma/mapping/TestTinyV2InnerClasses.java)8
-rw-r--r--enigma/src/test/java/cuchaz/enigma/translation/mapping/TestV2Main.java (renamed from src/test/java/cuchaz/enigma/mapping/TestV2Main.java)11
-rw-r--r--enigma/src/test/resources/comments/test.mapping (renamed from src/test/resources/comments/test.mapping)0
-rw-r--r--enigma/src/test/resources/proguard-build.conf (renamed from src/test/resources/proguard-build.conf)2
-rw-r--r--enigma/src/test/resources/proguard-test.conf (renamed from src/test/resources/proguard-test.conf)0
-rw-r--r--enigma/src/test/resources/tinyV2InnerClasses/c.mapping (renamed from src/test/resources/tinyV2InnerClasses/c.mapping)0
-rw-r--r--enigma/src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping (renamed from src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping)0
-rw-r--r--enigma/src/test/resources/translation.mappings (renamed from src/test/java/cuchaz/enigma/resources/translation.mappings)0
-rw-r--r--settings.gradle5
-rw-r--r--src/main/java/cuchaz/enigma/Constants.java20
-rw-r--r--src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java148
-rw-r--r--src/main/java/cuchaz/enigma/throwables/MappingConflict.java7
-rw-r--r--src/main/java/cuchaz/enigma/utils/LFPrintWriter.java16
-rw-r--r--src/main/java/cuchaz/enigma/utils/Utils.java179
-rw-r--r--src/test/java/cuchaz/enigma/TestSourceIndex.java74
312 files changed, 1186 insertions, 1431 deletions
diff --git a/.gitignore b/.gitignore
index 662e408..89623a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,231 +1,35 @@
1### Windows ### 1# Gradle
2# Windows image file caches 2.gradle
3Thumbs.db
4ehthumbs.db
5
6# Folder config file
7Desktop.ini
8
9# Recycle Bin used on file shares
10$RECYCLE.BIN/
11
12# Windows Installer files
13*.cab
14*.msi
15*.msm
16*.msp
17
18# Windows shortcuts
19*.lnk
20
21
22### OSX ###
23*.DS_Store
24.AppleDouble
25.LSOverride
26
27# Icon must end with two \r
28Icon
29
30
31# Thumbnails
32._*
33
34# Files that might appear in the root of a volume
35.DocumentRevisions-V100
36.fseventsd
37.Spotlight-V100
38.TemporaryItems
39.Trashes
40.VolumeIcon.icns
41.com.apple.timemachine.donotpresent
42
43# Directories potentially created on remote AFP share
44.AppleDB
45.AppleDesktop
46Network Trash Folder
47Temporary Items
48.apdisk
49
50
51### Linux ###
52*~
53
54# temporary files which can be created if a process still has a handle open of a deleted file
55.fuse_hidden*
56
57# KDE directory preferences
58.directory
59
60# Linux trash folder which might appear on any partition or disk
61.Trash-*
62
63
64### Vim ###
65# swap
66[._]*.s[a-w][a-z]
67[._]s[a-w][a-z]
68# session
69Session.vim
70# temporary
71.netrwhist
72*~
73# auto-generated tag files
74tags
75
76
77### Emacs ###
78# -*- mode: gitignore; -*-
79*~
80\#*\#
81/.emacs.desktop
82/.emacs.desktop.lock
83*.elc
84auto-save-list
85tramp
86.\#*
87
88# Org-mode
89.org-id-locations
90*_archive
91
92# flymake-mode
93*_flymake.*
94
95# eshell files
96/eshell/history
97/eshell/lastdir
98
99# elpa packages
100/elpa/
101
102# reftex files
103*.rel
104
105# AUCTeX auto folder
106/auto/
107
108# cask packages
109.cask/
110dist/
111
112# Flycheck
113flycheck_*.el
114
115# server auth directory
116/server/
117
118# projectiles files
119.projectile
120
121### Intellij ###
122# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
123# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
124
125# User-specific stuff:
126.idea/workspace.xml
127.idea/tasks.xml
128.idea/dictionaries
129.idea/vcs.xml
130.idea/jsLibraryMappings.xml
131
132# Sensitive or high-churn files:
133.idea/dataSources.ids
134.idea/dataSources.xml
135.idea/dataSources.local.xml
136.idea/sqlDataSources.xml
137.idea/dynamic.xml
138.idea/uiDesigner.xml
139
140# Gradle:
141.idea/gradle.xml
142.idea/libraries
143
144## File-based project format:
145*.iws
146*.iml
147*.ipr
148
149## Plugin-specific files:
150
151# IntelliJ
152/out/
153.idea
154
155# mpeltonen/sbt-idea plugin
156.idea_modules/
157
158# JIRA plugin
159atlassian-ide-plugin.xml
160
161### Eclipse ###
162 3
4# Eclipse
5.checkstyle
6.classpath
163.metadata 7.metadata
164bin/ 8.settings
165tmp/
166*.tmp
167*.bak
168*.swp
169*~.nib
170local.properties
171.settings/
172.loadpath
173.recommenders
174
175# Eclipse Core
176.project 9.project
177
178# External tool builders
179.externalToolBuilders/
180
181# Locally stored "Eclipse launch configurations"
182*.launch 10*.launch
183 11
184# CDT-specific (C/C++ Development Tooling) 12# Intellij/Idea
185.cproject
186
187# JDT-specific (Eclipse Java Development Tools)
188.classpath
189
190# Java annotation processor (APT)
191.factorypath 13.factorypath
14.idea
15*.iml
16*.ipr
17*.iws
192 18
193# sbteclipse plugin 19# Build artifacts
194.target 20bin/
195 21build/
196# Tern plugin 22jars/
197.tern-project 23out/
198 24classes/
199# TeXlipse plugin
200.texlipse
201
202# STS (Spring Tool Suite)
203.springBeans
204
205# Code Recommenders
206.recommenders/
207
208
209### Java ###
210*.class
211
212# Package Files #
213*.jar
214*.war
215*.ear
216
217# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
218hs_err_pid*
219
220### Gradle ###
221.gradle
222/build/
223 25
224# Ignore Gradle GUI config 26# Debug artifacts
225gradle-app.setting 27run
28*.log
226 29
227# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 30# Windows
228!gradle-wrapper.jar 31*.db
32$RECYCLE.BIN/
229 33
230# Cache of project 34# Mac
231.gradletasknamecache \ No newline at end of file 35.DS_Store
diff --git a/README.md b/README.md
index 7d01dac..fac036f 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ Enigma includes the following open-source libraries:
17 17
18## Usage 18## Usage
19 19
20Pre-compiled jars can be found on the [fabric maven](https://maven.fabricmc.net/cuchaz/enigma/). 20Pre-compiled jars can be found on the [fabric maven](https://maven.fabricmc.net/cuchaz/enigma-swing/).
21 21
22### Launching the GUI 22### Launching the GUI
23 23
@@ -25,4 +25,4 @@ Pre-compiled jars can be found on the [fabric maven](https://maven.fabricmc.net/
25 25
26### On the command line 26### On the command line
27 27
28`java -cp enigma.jar cuchaz.enigma.CommandMain` 28`java -cp enigma.jar cuchaz.enigma.command.Main`
diff --git a/build.gradle b/build.gradle
index ba2d86c..bd2d99f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,165 +1,59 @@
1plugins { 1plugins {
2 id 'java'
3 id 'com.github.johnrengelman.shadow' version '5.2.0'
4 id 'maven-publish' 2 id 'maven-publish'
5} 3}
6 4
7group = 'cuchaz' 5subprojects {
8version = '0.16.1' 6 apply plugin: 'java'
7 apply plugin: 'maven-publish'
9 8
10def generatedSourcesDir = "$buildDir/generated-src" 9 sourceCompatibility = 1.8
10 targetCompatibility = 1.8
11 11
12def buildNumber = System.getenv("BUILD_NUMBER") 12 repositories {
13version = version + "+" + (buildNumber ? "build.$buildNumber" : "local") 13 mavenLocal()
14 14 mavenCentral()
15sourceCompatibility = 1.8 15 maven { url 'https://maven.fabricmc.net/' }
16targetCompatibility = 1.8
17
18task generateSources(type: Copy) {
19 from sourceSets.main.java
20 into generatedSourcesDir
21
22 filter { String line ->
23 ("$line".replaceAll('@VERSION@', version))
24 } 16 }
25}
26 17
27compileJava.source = generatedSourcesDir 18 dependencies {
28compileJava.dependsOn generateSources 19 implementation 'com.google.guava:guava:28.0-jre'
20 implementation 'com.google.code.gson:gson:2.8.5'
29 21
30repositories { 22 testImplementation 'junit:junit:4.+'
31 mavenLocal() 23 testImplementation 'org.hamcrest:hamcrest-all:1.+'
32 mavenCentral()
33
34 maven {
35 name "Modmuss Repository"
36 url 'https://maven.modmuss50.me/'
37 } 24 }
38}
39
40configurations {
41 proGuard
42}
43
44dependencies {
45 implementation 'com.google.guava:guava:28.0-jre'
46 implementation 'com.google.code.gson:gson:2.8.5'
47 implementation 'org.ow2.asm:asm:8.0'
48 implementation 'org.ow2.asm:asm-commons:8.0'
49 implementation 'org.ow2.asm:asm-tree:8.0'
50 implementation 'org.ow2.asm:asm-util:8.0'
51 implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3'
52 implementation 'net.fabricmc:procyon-fabric-compilertools:0.5.35.13'
53 implementation 'net.fabricmc:cfr:0.0.1'
54 implementation 'com.bulenkov:darcula:1.0.0-bobbylight'
55 implementation 'de.sciss:syntaxpane:1.2.0'
56 implementation 'com.github.lukeu:swing-dpi:0.6'
57 25
58 testImplementation 'junit:junit:4.+' 26 group = 'cuchaz'
59 testImplementation 'org.hamcrest:hamcrest-all:1.+' 27 version = '0.17'
60 28
61 proGuard 'net.sf.proguard:proguard-base:6.+' 29 def buildNumber = System.getenv("BUILD_NUMBER")
62} 30 version = version + "+" + (buildNumber ? "build.$buildNumber" : "local")
63
64def libraryJarsArg = JavaVersion.current().java9Compatible ? "<java.home>/jmods": "<java.home>/lib/rt.jar"
65
66// For each set of test inputs, create an output jar and obfuscate it.
67file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile ->
68 if (theFile.directory) {
69 task("${theFile.name}TestJar", type: Jar) {
70 from(sourceSets.test.output) {
71 include "cuchaz/enigma/inputs/$theFile.name/**/*.class"
72 include 'cuchaz/enigma/inputs/Keep.class'
73 }
74
75 archiveFileName = theFile.name + '.jar'
76 destinationDirectory = file('build/test-inputs')
77 }
78
79 task("${theFile.name}TestObf", type: JavaExec,
80 dependsOn: "${theFile.name}TestJar") {
81 main 'proguard.ProGuard'
82 classpath configurations.proGuard
83
84 args '@src/test/resources/proguard-test.conf', '-injars', file('build/test-inputs/' +
85 "${theFile.name}.jar"), '-libraryjars', libraryJarsArg,
86 '-outjars', file('build/test-obf/' + "${theFile.name}.jar")
87 }
88 31
89 test.dependsOn "${theFile.name}TestObf" 32 task sourcesJar(type: Jar, dependsOn: classes) {
33 classifier = 'sources'
34 from sourceSets.main.allSource
90 } 35 }
91}
92
93// We also semi-deobfuscate translation.jar to then test it... yeah... oh well.
94task('deobfTranslationInput', type: JavaExec, dependsOn: 'translationTestObf')
95 {
96 classpath sourceSets.main.runtimeClasspath
97 main 'cuchaz.enigma.CommandMain'
98 args 'deobfuscate', file('build/test-obf/translation.jar'),
99 file('build/test-deobf/translation.jar')
100 }
101test.dependsOn 'deobfTranslationInput'
102 36
103test { 37 java {
104 // Since the Minecraft test is really long (like 10 minutes D:) we turn it 38 withSourcesJar()
105 // off by default.
106 if (!System.getProperty('enableExtremelySlowMinecraftTest', '')
107 .equalsIgnoreCase('true')) {
108 exclude 'cuchaz/enigma/TestSourceIndex.class'
109 } 39 }
110 40
111 // Allow people to specify a custom path to their Minecraft directory. 41 publishing {
112 // (Example: `gradle build -Denigma.test.minecraftdir=./`) 42 publications {
113 systemProperties = [ 43 "$project.name"(MavenPublication) {
114 'enigma.test.minecraftdir': System.getProperty('test.minecraftdir') 44 groupId project.group
115 ] 45 artifactId project.name
116} 46 version project.version
117 47 from components.java
118// Set the main class. 48 }
119jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.Main' 49 }
120
121// Make the "fat" application jar. This is useful to just throw in a classpath
122// for tests, though it includes some slightly useless stuff.
123shadowJar {
124 append 'LICENSE'
125 append 'README.md'
126}
127
128// Create a library jar, containing only the deobfuscation code, for use at
129// runtime. This will be deployed to Maven Local with a POM, and can be uploaded
130// to a remote server manually (for now anyway).
131task libJar (type: Jar) {
132 classifier = 'lib'
133
134 from(sourceSets.main.output) {
135 exclude 'cuchaz/enigma/gui/**'
136 exclude 'cuchaz/enigma/convert/**'
137
138 // Main classes + inner classes (keep CommandMain)
139 exclude 'cuchaz/enigma/Main.class'
140 exclude 'cuchaz/enigma/Main.class'
141 } 50 }
142} 51}
143 52
144task sourcesJar(type: Jar, dependsOn: generateSources) {
145 classifier = 'sources'
146 from generatedSourcesDir
147 from sourceSets.main.resources
148}
149
150publishing { 53publishing {
151 publications {
152 mavenJava(MavenPublication) {
153 from components.java
154
155 artifact shadowJar
156 artifact libJar
157 artifact sourcesJar
158 }
159 }
160
161 // select the repositories you want to publish to
162 repositories { 54 repositories {
55 mavenLocal()
56
163 if (project.hasProperty('mavenPass')) { 57 if (project.hasProperty('mavenPass')) {
164 maven { 58 maven {
165 url = "http://mavenupload.modmuss50.me/" 59 url = "http://mavenupload.modmuss50.me/"
diff --git a/enigma-cli/build.gradle b/enigma-cli/build.gradle
new file mode 100644
index 0000000..3ee1239
--- /dev/null
+++ b/enigma-cli/build.gradle
@@ -0,0 +1,5 @@
1dependencies {
2 implementation project(':enigma')
3}
4
5jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.command.Main'
diff --git a/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java
index 9d238e3..e4deef8 100644
--- a/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java
@@ -5,7 +5,7 @@ import cuchaz.enigma.EnigmaProject;
5import cuchaz.enigma.ProgressListener; 5import cuchaz.enigma.ProgressListener;
6import cuchaz.enigma.analysis.index.JarIndex; 6import cuchaz.enigma.analysis.index.JarIndex;
7import cuchaz.enigma.translation.mapping.EntryMapping; 7import cuchaz.enigma.translation.mapping.EntryMapping;
8import cuchaz.enigma.translation.mapping.MappingSaveParameters; 8import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
9import cuchaz.enigma.translation.mapping.serde.MappingFormat; 9import cuchaz.enigma.translation.mapping.serde.MappingFormat;
10import cuchaz.enigma.translation.mapping.tree.EntryTree; 10import cuchaz.enigma.translation.mapping.tree.EntryTree;
11import cuchaz.enigma.translation.representation.entry.ClassEntry; 11import cuchaz.enigma.translation.representation.entry.ClassEntry;
diff --git a/src/main/java/cuchaz/enigma/command/Command.java b/enigma-cli/src/main/java/cuchaz/enigma/command/Command.java
index 09dd321..0640e3e 100644
--- a/src/main/java/cuchaz/enigma/command/Command.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/Command.java
@@ -4,7 +4,7 @@ import cuchaz.enigma.Enigma;
4import cuchaz.enigma.EnigmaProject; 4import cuchaz.enigma.EnigmaProject;
5import cuchaz.enigma.ProgressListener; 5import cuchaz.enigma.ProgressListener;
6import cuchaz.enigma.translation.mapping.EntryMapping; 6import cuchaz.enigma.translation.mapping.EntryMapping;
7import cuchaz.enigma.translation.mapping.MappingSaveParameters; 7import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
8import cuchaz.enigma.translation.mapping.serde.MappingFormat; 8import cuchaz.enigma.translation.mapping.serde.MappingFormat;
9import cuchaz.enigma.translation.mapping.tree.EntryTree; 9import cuchaz.enigma.translation.mapping.tree.EntryTree;
10 10
diff --git a/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java
index f57f1fa..e10fd47 100644
--- a/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java
@@ -1,9 +1,10 @@
1package cuchaz.enigma.command; 1package cuchaz.enigma.command;
2 2
3import cuchaz.enigma.throwables.MappingParseException; 3import cuchaz.enigma.translation.mapping.MappingOperations;
4import cuchaz.enigma.translation.mapping.serde.MappingParseException;
4import cuchaz.enigma.translation.mapping.EntryMapping; 5import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 6import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
6import cuchaz.enigma.translation.mapping.MappingSaveParameters; 7import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
7import cuchaz.enigma.translation.mapping.tree.EntryTree; 8import cuchaz.enigma.translation.mapping.tree.EntryTree;
8import cuchaz.enigma.utils.Utils; 9import cuchaz.enigma.utils.Utils;
9 10
@@ -32,7 +33,7 @@ public class ComposeMappingsCommand extends Command {
32 33
33 EntryTree<EntryMapping> left = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); 34 EntryTree<EntryMapping> left = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters);
34 EntryTree<EntryMapping> right = MappingCommandsUtil.read(args[2], Paths.get(args[3]), saveParameters); 35 EntryTree<EntryMapping> right = MappingCommandsUtil.read(args[2], Paths.get(args[3]), saveParameters);
35 EntryTree<EntryMapping> result = MappingCommandsUtil.compose(left, right, args[6].equals("left") || args[6].equals("both"), args[6].equals("right") || args[6].equals("both")); 36 EntryTree<EntryMapping> result = MappingOperations.compose(left, right, args[6].equals("left") || args[6].equals("both"), args[6].equals("right") || args[6].equals("both"));
36 37
37 Path output = Paths.get(args[5]); 38 Path output = Paths.get(args[5]);
38 Utils.delete(output); 39 Utils.delete(output);
diff --git a/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java
index 689df02..144d89c 100644
--- a/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java
@@ -1,9 +1,9 @@
1package cuchaz.enigma.command; 1package cuchaz.enigma.command;
2 2
3import cuchaz.enigma.throwables.MappingParseException; 3import cuchaz.enigma.translation.mapping.serde.MappingParseException;
4import cuchaz.enigma.translation.mapping.EntryMapping; 4import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 5import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
6import cuchaz.enigma.translation.mapping.MappingSaveParameters; 6import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
7import cuchaz.enigma.translation.mapping.tree.EntryTree; 7import cuchaz.enigma.translation.mapping.tree.EntryTree;
8import cuchaz.enigma.utils.Utils; 8import cuchaz.enigma.utils.Utils;
9 9
diff --git a/src/main/java/cuchaz/enigma/command/DecompileCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java
index 3d15dac..3d15dac 100644
--- a/src/main/java/cuchaz/enigma/command/DecompileCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java
diff --git a/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java
index b0d2a7d..b0d2a7d 100644
--- a/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java
diff --git a/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java
index cd11e2e..0780a96 100644
--- a/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java
@@ -1,9 +1,10 @@
1package cuchaz.enigma.command; 1package cuchaz.enigma.command;
2 2
3import cuchaz.enigma.throwables.MappingParseException; 3import cuchaz.enigma.translation.mapping.MappingOperations;
4import cuchaz.enigma.translation.mapping.serde.MappingParseException;
4import cuchaz.enigma.translation.mapping.EntryMapping; 5import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 6import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
6import cuchaz.enigma.translation.mapping.MappingSaveParameters; 7import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
7import cuchaz.enigma.translation.mapping.tree.EntryTree; 8import cuchaz.enigma.translation.mapping.tree.EntryTree;
8import cuchaz.enigma.utils.Utils; 9import cuchaz.enigma.utils.Utils;
9 10
@@ -31,7 +32,7 @@ public class InvertMappingsCommand extends Command {
31 MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); 32 MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF);
32 33
33 EntryTree<EntryMapping> source = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); 34 EntryTree<EntryMapping> source = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters);
34 EntryTree<EntryMapping> result = MappingCommandsUtil.invert(source); 35 EntryTree<EntryMapping> result = MappingOperations.invert(source);
35 36
36 Path output = Paths.get(args[3]); 37 Path output = Paths.get(args[3]);
37 Utils.delete(output); 38 Utils.delete(output);
diff --git a/src/main/java/cuchaz/enigma/CommandMain.java b/enigma-cli/src/main/java/cuchaz/enigma/command/Main.java
index 93b013d..0a4c1b9 100644
--- a/src/main/java/cuchaz/enigma/CommandMain.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/Main.java
@@ -9,15 +9,15 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma; 12package cuchaz.enigma.command;
13 13
14import cuchaz.enigma.command.*; 14import cuchaz.enigma.Enigma;
15 15
16import java.util.LinkedHashMap; 16import java.util.LinkedHashMap;
17import java.util.Locale; 17import java.util.Locale;
18import java.util.Map; 18import java.util.Map;
19 19
20public class CommandMain { 20public class Main {
21 21
22 private static final Map<String, Command> COMMANDS = new LinkedHashMap<>(); 22 private static final Map<String, Command> COMMANDS = new LinkedHashMap<>();
23 23
@@ -46,7 +46,7 @@ public class CommandMain {
46 } 46 }
47 } catch (CommandHelpException ex) { 47 } catch (CommandHelpException ex) {
48 System.err.println(ex.getMessage()); 48 System.err.println(ex.getMessage());
49 System.out.println(String.format("%s - %s", Constants.NAME, Constants.VERSION)); 49 System.out.println(String.format("%s - %s", Enigma.NAME, Enigma.VERSION));
50 System.out.println("Command " + ex.command.name + " has encountered an error! Usage:"); 50 System.out.println("Command " + ex.command.name + " has encountered an error! Usage:");
51 printHelp(ex.command); 51 printHelp(ex.command);
52 System.exit(1); 52 System.exit(1);
@@ -58,9 +58,9 @@ public class CommandMain {
58 } 58 }
59 59
60 private static void printHelp() { 60 private static void printHelp() {
61 System.out.println(String.format("%s - %s", Constants.NAME, Constants.VERSION)); 61 System.out.println(String.format("%s - %s", Enigma.NAME, Enigma.VERSION));
62 System.out.println("Usage:"); 62 System.out.println("Usage:");
63 System.out.println("\tjava -cp enigma.jar cuchaz.enigma.CommandMain <command>"); 63 System.out.println("\tjava -cp enigma.jar cuchaz.enigma.command.CommandMain <command>");
64 System.out.println("\twhere <command> is one of:"); 64 System.out.println("\twhere <command> is one of:");
65 65
66 for (Command command : COMMANDS.values()) { 66 for (Command command : COMMANDS.values()) {
diff --git a/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java
index eb8d5dc..292de19 100644
--- a/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java
@@ -4,10 +4,12 @@ import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.analysis.ClassCache; 4import cuchaz.enigma.analysis.ClassCache;
5import cuchaz.enigma.analysis.index.BridgeMethodIndex; 5import cuchaz.enigma.analysis.index.BridgeMethodIndex;
6import cuchaz.enigma.analysis.index.JarIndex; 6import cuchaz.enigma.analysis.index.JarIndex;
7import cuchaz.enigma.throwables.MappingParseException; 7import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
8import cuchaz.enigma.translation.mapping.serde.MappingParseException;
8import cuchaz.enigma.translation.MappingTranslator; 9import cuchaz.enigma.translation.MappingTranslator;
9import cuchaz.enigma.translation.Translator; 10import cuchaz.enigma.translation.Translator;
10import cuchaz.enigma.translation.mapping.*; 11import cuchaz.enigma.translation.mapping.*;
12import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
11import cuchaz.enigma.translation.mapping.tree.EntryTree; 13import cuchaz.enigma.translation.mapping.tree.EntryTree;
12import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; 14import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
13import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 15import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
diff --git a/enigma-cli/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java b/enigma-cli/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java
new file mode 100644
index 0000000..d365129
--- /dev/null
+++ b/enigma-cli/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java
@@ -0,0 +1,87 @@
1package cuchaz.enigma.command;
2
3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.translation.mapping.serde.MappingParseException;
5import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
7import cuchaz.enigma.translation.mapping.serde.*;
8import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader;
9import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsWriter;
10import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsReader;
11import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsWriter;
12import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer;
13import cuchaz.enigma.translation.mapping.tree.EntryTree;
14
15import java.io.IOException;
16import java.nio.file.Files;
17import java.nio.file.Path;
18
19public final class MappingCommandsUtil {
20 private MappingCommandsUtil() {}
21
22 public static EntryTree<EntryMapping> read(String type, Path path, MappingSaveParameters saveParameters) throws MappingParseException, IOException {
23 if (type.equals("enigma")) {
24 return (Files.isDirectory(path) ? EnigmaMappingsReader.DIRECTORY : EnigmaMappingsReader.ZIP).read(path, ProgressListener.none(), saveParameters);
25 }
26
27 if (type.equals("tiny")) {
28 return TinyMappingsReader.INSTANCE.read(path, ProgressListener.none(), saveParameters);
29 }
30
31 MappingFormat format = null;
32 try {
33 format = MappingFormat.valueOf(type.toUpperCase());
34 } catch (IllegalArgumentException ignored) {
35 if (type.equals("tinyv2")) {
36 format = MappingFormat.TINY_V2;
37 }
38 }
39
40 if (format != null) {
41 return format.getReader().read(path, ProgressListener.none(), saveParameters);
42 }
43
44 throw new IllegalArgumentException("no reader for " + type);
45 }
46
47 public static void write(EntryTree<EntryMapping> mappings, String type, Path path, MappingSaveParameters saveParameters) {
48 if (type.equals("enigma")) {
49 EnigmaMappingsWriter.DIRECTORY.write(mappings, path, ProgressListener.none(), saveParameters);
50 return;
51 }
52
53 if (type.startsWith("tinyv2:") || type.startsWith("tiny_v2:")) {
54 String[] split = type.split(":");
55
56 if (split.length != 3) {
57 throw new IllegalArgumentException("specify column names as 'tinyv2:from_namespace:to_namespace'");
58 }
59
60 new TinyV2Writer(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters);
61 return;
62 }
63
64 if (type.startsWith("tiny:")) {
65 String[] split = type.split(":");
66
67 if (split.length != 3) {
68 throw new IllegalArgumentException("specify column names as 'tiny:from_column:to_column'");
69 }
70
71 new TinyMappingsWriter(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters);
72 return;
73 }
74
75 MappingFormat format = null;
76 try {
77 format = MappingFormat.valueOf(type.toUpperCase());
78 } catch (IllegalArgumentException ignored) {}
79
80 if (format != null) {
81 format.getWriter().write(mappings, path, ProgressListener.none(), saveParameters);
82 return;
83 }
84
85 throw new IllegalArgumentException("no writer for " + type);
86 }
87}
diff --git a/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java b/enigma-cli/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java
index f3b9f85..a29bba4 100644
--- a/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java
+++ b/enigma-cli/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java
@@ -5,16 +5,17 @@ import org.junit.Test;
5import java.io.File; 5import java.io.File;
6 6
7public class CheckMappingsCommandTest { 7public class CheckMappingsCommandTest {
8 private static final String PACKAGE_ACCESS = "../enigma/build/test-obf/packageAccess.jar";
8 9
9 @Test(expected = IllegalStateException.class) 10 @Test(expected = IllegalStateException.class)
10 public void testWrong() throws Exception { 11 public void testWrong() throws Exception {
11 new CheckMappingsCommand().run(new File("build/test-obf/packageAccess.jar").getAbsolutePath(), new File("src/test/resources" + 12 new CheckMappingsCommand().run(new File(PACKAGE_ACCESS).getAbsolutePath(), new File("src/test/resources" +
12 "/packageAccess/wrongMappings").getAbsolutePath()); 13 "/packageAccess/wrongMappings").getAbsolutePath());
13 } 14 }
14 15
15 @Test 16 @Test
16 public void testRight() throws Exception { 17 public void testRight() throws Exception {
17 new CheckMappingsCommand().run(new File("build/test-obf/packageAccess.jar").getAbsolutePath(), new File("src/test/resources" + 18 new CheckMappingsCommand().run(new File(PACKAGE_ACCESS).getAbsolutePath(), new File("src/test/resources" +
18 "/packageAccess/correctMappings").getAbsolutePath()); 19 "/packageAccess/correctMappings").getAbsolutePath());
19 } 20 }
20} 21}
diff --git a/src/test/resources/packageAccess/correctMappings/base/Base.mapping b/enigma-cli/src/test/resources/packageAccess/correctMappings/base/Base.mapping
index 0a86def..0a86def 100644
--- a/src/test/resources/packageAccess/correctMappings/base/Base.mapping
+++ b/enigma-cli/src/test/resources/packageAccess/correctMappings/base/Base.mapping
diff --git a/src/test/resources/packageAccess/correctMappings/base/One.mapping b/enigma-cli/src/test/resources/packageAccess/correctMappings/base/One.mapping
index dd4c208..dd4c208 100644
--- a/src/test/resources/packageAccess/correctMappings/base/One.mapping
+++ b/enigma-cli/src/test/resources/packageAccess/correctMappings/base/One.mapping
diff --git a/src/test/resources/packageAccess/correctMappings/two/Two.mapping b/enigma-cli/src/test/resources/packageAccess/correctMappings/two/Two.mapping
index a179349..a179349 100644
--- a/src/test/resources/packageAccess/correctMappings/two/Two.mapping
+++ b/enigma-cli/src/test/resources/packageAccess/correctMappings/two/Two.mapping
diff --git a/src/test/resources/packageAccess/wrongMappings/base/Base.mapping b/enigma-cli/src/test/resources/packageAccess/wrongMappings/base/Base.mapping
index 0a86def..0a86def 100644
--- a/src/test/resources/packageAccess/wrongMappings/base/Base.mapping
+++ b/enigma-cli/src/test/resources/packageAccess/wrongMappings/base/Base.mapping
diff --git a/src/test/resources/packageAccess/wrongMappings/one/One.mapping b/enigma-cli/src/test/resources/packageAccess/wrongMappings/one/One.mapping
index 15b42cf..15b42cf 100644
--- a/src/test/resources/packageAccess/wrongMappings/one/One.mapping
+++ b/enigma-cli/src/test/resources/packageAccess/wrongMappings/one/One.mapping
diff --git a/src/test/resources/packageAccess/wrongMappings/two/Two.mapping b/enigma-cli/src/test/resources/packageAccess/wrongMappings/two/Two.mapping
index a179349..a179349 100644
--- a/src/test/resources/packageAccess/wrongMappings/two/Two.mapping
+++ b/enigma-cli/src/test/resources/packageAccess/wrongMappings/two/Two.mapping
diff --git a/enigma-server/build.gradle b/enigma-server/build.gradle
new file mode 100644
index 0000000..bf72b18
--- /dev/null
+++ b/enigma-server/build.gradle
@@ -0,0 +1,6 @@
1dependencies {
2 implementation project(':enigma')
3 implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3'
4}
5
6jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.network.DedicatedEnigmaServer'
diff --git a/docs/protocol.md b/enigma-server/docs/protocol.md
index c14ecb8..c14ecb8 100644
--- a/docs/protocol.md
+++ b/enigma-server/docs/protocol.md
diff --git a/enigma-server/src/main/java/cuchaz/enigma/network/ClientPacketHandler.java b/enigma-server/src/main/java/cuchaz/enigma/network/ClientPacketHandler.java
new file mode 100644
index 0000000..720744b
--- /dev/null
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/ClientPacketHandler.java
@@ -0,0 +1,29 @@
1package cuchaz.enigma.network;
2
3import cuchaz.enigma.analysis.EntryReference;
4import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.mapping.tree.EntryTree;
6import cuchaz.enigma.network.packet.Packet;
7import cuchaz.enigma.translation.representation.entry.Entry;
8
9import java.util.List;
10
11public interface ClientPacketHandler {
12 void openMappings(EntryTree<EntryMapping> mappings);
13
14 void rename(EntryReference<Entry<?>, Entry<?>> reference, String newName, boolean refreshClassTree, boolean jumpToReference);
15
16 void removeMapping(EntryReference<Entry<?>, Entry<?>> reference, boolean jumpToReference);
17
18 void changeDocs(EntryReference<Entry<?>, Entry<?>> reference, String updatedDocs, boolean jumpToReference);
19
20 void markAsDeobfuscated(EntryReference<Entry<?>, Entry<?>> reference, boolean jumpToReference);
21
22 void disconnectIfConnected(String reason);
23
24 void sendPacket(Packet<ServerPacketHandler> packet);
25
26 void addMessage(Message message);
27
28 void updateUserList(List<String> users);
29}
diff --git a/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java b/enigma-server/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java
index 2cfe823..924302f 100644
--- a/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java
@@ -2,13 +2,14 @@ package cuchaz.enigma.network;
2 2
3import com.google.common.io.MoreFiles; 3import com.google.common.io.MoreFiles;
4import cuchaz.enigma.*; 4import cuchaz.enigma.*;
5import cuchaz.enigma.throwables.MappingParseException; 5import cuchaz.enigma.translation.mapping.serde.MappingParseException;
6import cuchaz.enigma.translation.mapping.EntryRemapper; 6import cuchaz.enigma.translation.mapping.EntryRemapper;
7import cuchaz.enigma.translation.mapping.serde.MappingFormat; 7import cuchaz.enigma.translation.mapping.serde.MappingFormat;
8import cuchaz.enigma.utils.Utils; 8import cuchaz.enigma.utils.Utils;
9import joptsimple.OptionParser; 9import joptsimple.OptionParser;
10import joptsimple.OptionSet; 10import joptsimple.OptionSet;
11import joptsimple.OptionSpec; 11import joptsimple.OptionSpec;
12import joptsimple.ValueConverter;
12 13
13import java.io.IOException; 14import java.io.IOException;
14import java.io.PrintWriter; 15import java.io.PrintWriter;
@@ -62,16 +63,16 @@ public class DedicatedEnigmaServer extends EnigmaServer {
62 OptionSpec<Path> jarOpt = parser.accepts("jar", "Jar file to open at startup") 63 OptionSpec<Path> jarOpt = parser.accepts("jar", "Jar file to open at startup")
63 .withRequiredArg() 64 .withRequiredArg()
64 .required() 65 .required()
65 .withValuesConvertedBy(Main.PathConverter.INSTANCE); 66 .withValuesConvertedBy(PathConverter.INSTANCE);
66 67
67 OptionSpec<Path> mappingsOpt = parser.accepts("mappings", "Mappings file to open at startup") 68 OptionSpec<Path> mappingsOpt = parser.accepts("mappings", "Mappings file to open at startup")
68 .withRequiredArg() 69 .withRequiredArg()
69 .required() 70 .required()
70 .withValuesConvertedBy(Main.PathConverter.INSTANCE); 71 .withValuesConvertedBy(PathConverter.INSTANCE);
71 72
72 OptionSpec<Path> profileOpt = parser.accepts("profile", "Profile json to apply at startup") 73 OptionSpec<Path> profileOpt = parser.accepts("profile", "Profile json to apply at startup")
73 .withRequiredArg() 74 .withRequiredArg()
74 .withValuesConvertedBy(Main.PathConverter.INSTANCE); 75 .withValuesConvertedBy(PathConverter.INSTANCE);
75 76
76 OptionSpec<Integer> portOpt = parser.accepts("port", "Port to run the server on") 77 OptionSpec<Integer> portOpt = parser.accepts("port", "Port to run the server on")
77 .withOptionalArg() 78 .withOptionalArg()
@@ -84,7 +85,7 @@ public class DedicatedEnigmaServer extends EnigmaServer {
84 85
85 OptionSpec<Path> logFileOpt = parser.accepts("log", "The log file to write to") 86 OptionSpec<Path> logFileOpt = parser.accepts("log", "The log file to write to")
86 .withRequiredArg() 87 .withRequiredArg()
87 .withValuesConvertedBy(Main.PathConverter.INSTANCE) 88 .withValuesConvertedBy(PathConverter.INSTANCE)
88 .defaultsTo(Paths.get("log.txt")); 89 .defaultsTo(Paths.get("log.txt"));
89 90
90 OptionSet parsedArgs = parser.parse(args); 91 OptionSet parsedArgs = parser.parse(args);
@@ -161,4 +162,39 @@ public class DedicatedEnigmaServer extends EnigmaServer {
161 mappingFormat.write(getMappings().getObfToDeobf(), getMappings().takeMappingDelta(), mappingsFile, ProgressListener.none(), profile.getMappingSaveParameters()); 162 mappingFormat.write(getMappings().getObfToDeobf(), getMappings().takeMappingDelta(), mappingsFile, ProgressListener.none(), profile.getMappingSaveParameters());
162 log.flush(); 163 log.flush();
163 } 164 }
165
166 public static class PathConverter implements ValueConverter<Path> {
167 public static final ValueConverter<Path> INSTANCE = new PathConverter();
168
169 PathConverter() {
170 }
171
172 @Override
173 public Path convert(String path) {
174 // expand ~ to the home dir
175 if (path.startsWith("~")) {
176 // get the home dir
177 Path dirHome = Paths.get(System.getProperty("user.home"));
178
179 // is the path just ~/ or is it ~user/ ?
180 if (path.startsWith("~/")) {
181 return dirHome.resolve(path.substring(2));
182 } else {
183 return dirHome.getParent().resolve(path.substring(1));
184 }
185 }
186
187 return Paths.get(path);
188 }
189
190 @Override
191 public Class<? extends Path> valueType() {
192 return Path.class;
193 }
194
195 @Override
196 public String valuePattern() {
197 return "path";
198 }
199 }
164} 200}
diff --git a/src/main/java/cuchaz/enigma/network/EnigmaClient.java b/enigma-server/src/main/java/cuchaz/enigma/network/EnigmaClient.java
index bfa53d7..71bd011 100644
--- a/src/main/java/cuchaz/enigma/network/EnigmaClient.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/EnigmaClient.java
@@ -1,30 +1,23 @@
1package cuchaz.enigma.network; 1package cuchaz.enigma.network;
2 2
3import cuchaz.enigma.gui.GuiController;
4import cuchaz.enigma.network.packet.LoginC2SPacket;
5import cuchaz.enigma.network.packet.Packet; 3import cuchaz.enigma.network.packet.Packet;
6import cuchaz.enigma.network.packet.PacketRegistry; 4import cuchaz.enigma.network.packet.PacketRegistry;
7 5
8import javax.swing.SwingUtilities; 6import javax.swing.*;
9import java.io.DataInput; 7import java.io.*;
10import java.io.DataInputStream;
11import java.io.DataOutput;
12import java.io.DataOutputStream;
13import java.io.EOFException;
14import java.io.IOException;
15import java.net.Socket; 8import java.net.Socket;
16import java.net.SocketException; 9import java.net.SocketException;
17 10
18public class EnigmaClient { 11public class EnigmaClient {
19 12
20 private final GuiController controller; 13 private final ClientPacketHandler controller;
21 14
22 private final String ip; 15 private final String ip;
23 private final int port; 16 private final int port;
24 private Socket socket; 17 private Socket socket;
25 private DataOutput output; 18 private DataOutput output;
26 19
27 public EnigmaClient(GuiController controller, String ip, int port) { 20 public EnigmaClient(ClientPacketHandler controller, String ip, int port) {
28 this.controller = controller; 21 this.controller = controller;
29 this.ip = ip; 22 this.ip = ip;
30 this.port = port; 23 this.port = port;
@@ -43,7 +36,7 @@ public class EnigmaClient {
43 } catch (EOFException | SocketException e) { 36 } catch (EOFException | SocketException e) {
44 break; 37 break;
45 } 38 }
46 Packet<GuiController> packet = PacketRegistry.createS2CPacket(packetId); 39 Packet<ClientPacketHandler> packet = PacketRegistry.createS2CPacket(packetId);
47 if (packet == null) { 40 if (packet == null) {
48 throw new IOException("Received invalid packet id " + packetId); 41 throw new IOException("Received invalid packet id " + packetId);
49 } 42 }
diff --git a/src/main/java/cuchaz/enigma/network/EnigmaServer.java b/enigma-server/src/main/java/cuchaz/enigma/network/EnigmaServer.java
index b0e15a3..6027a6b 100644
--- a/src/main/java/cuchaz/enigma/network/EnigmaServer.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/EnigmaServer.java
@@ -1,6 +1,5 @@
1package cuchaz.enigma.network; 1package cuchaz.enigma.network;
2 2
3import cuchaz.enigma.gui.GuiController;
4import cuchaz.enigma.network.packet.KickS2CPacket; 3import cuchaz.enigma.network.packet.KickS2CPacket;
5import cuchaz.enigma.network.packet.MessageS2CPacket; 4import cuchaz.enigma.network.packet.MessageS2CPacket;
6import cuchaz.enigma.network.packet.Packet; 5import cuchaz.enigma.network.packet.Packet;
@@ -11,7 +10,6 @@ import cuchaz.enigma.network.packet.UserListS2CPacket;
11import cuchaz.enigma.translation.mapping.EntryMapping; 10import cuchaz.enigma.translation.mapping.EntryMapping;
12import cuchaz.enigma.translation.mapping.EntryRemapper; 11import cuchaz.enigma.translation.mapping.EntryRemapper;
13import cuchaz.enigma.translation.representation.entry.Entry; 12import cuchaz.enigma.translation.representation.entry.Entry;
14import cuchaz.enigma.utils.Message;
15 13
16import java.io.DataInput; 14import java.io.DataInput;
17import java.io.DataInputStream; 15import java.io.DataInputStream;
@@ -175,7 +173,7 @@ public abstract class EnigmaServer {
175 return usernames.get(client); 173 return usernames.get(client);
176 } 174 }
177 175
178 public void sendPacket(Socket client, Packet<GuiController> packet) { 176 public void sendPacket(Socket client, Packet<ClientPacketHandler> packet) {
179 if (!client.isClosed()) { 177 if (!client.isClosed()) {
180 int packetId = PacketRegistry.getS2CId(packet); 178 int packetId = PacketRegistry.getS2CId(packet);
181 try { 179 try {
@@ -191,13 +189,13 @@ public abstract class EnigmaServer {
191 } 189 }
192 } 190 }
193 191
194 public void sendToAll(Packet<GuiController> packet) { 192 public void sendToAll(Packet<ClientPacketHandler> packet) {
195 for (Socket client : clients) { 193 for (Socket client : clients) {
196 sendPacket(client, packet); 194 sendPacket(client, packet);
197 } 195 }
198 } 196 }
199 197
200 public void sendToAllExcept(Socket excluded, Packet<GuiController> packet) { 198 public void sendToAllExcept(Socket excluded, Packet<ClientPacketHandler> packet) {
201 for (Socket client : clients) { 199 for (Socket client : clients) {
202 if (client != excluded) { 200 if (client != excluded) {
203 sendPacket(client, packet); 201 sendPacket(client, packet);
diff --git a/src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java b/enigma-server/src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java
index 21c6825..21c6825 100644
--- a/src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java
diff --git a/src/main/java/cuchaz/enigma/utils/Message.java b/enigma-server/src/main/java/cuchaz/enigma/network/Message.java
index d7c5f23..c157838 100644
--- a/src/main/java/cuchaz/enigma/utils/Message.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/Message.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.utils; 1package cuchaz.enigma.network;
2 2
3import java.io.DataInput; 3import java.io.DataInput;
4import java.io.DataOutput; 4import java.io.DataOutput;
@@ -7,6 +7,7 @@ import java.util.Objects;
7 7
8import cuchaz.enigma.network.packet.PacketHelper; 8import cuchaz.enigma.network.packet.PacketHelper;
9import cuchaz.enigma.translation.representation.entry.Entry; 9import cuchaz.enigma.translation.representation.entry.Entry;
10import cuchaz.enigma.utils.I18n;
10 11
11public abstract class Message { 12public abstract class Message {
12 13
diff --git a/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java b/enigma-server/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java
index 8618553..8618553 100644
--- a/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java
diff --git a/src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java
index 4d5d86f..1b52cf1 100644
--- a/src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java
@@ -1,10 +1,10 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.translation.mapping.EntryMapping;
3import cuchaz.enigma.network.EnigmaServer; 4import cuchaz.enigma.network.EnigmaServer;
5import cuchaz.enigma.network.Message;
4import cuchaz.enigma.network.ServerPacketHandler; 6import cuchaz.enigma.network.ServerPacketHandler;
5import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.representation.entry.Entry; 7import cuchaz.enigma.translation.representation.entry.Entry;
7import cuchaz.enigma.utils.Message;
8import cuchaz.enigma.utils.Utils; 8import cuchaz.enigma.utils.Utils;
9 9
10import java.io.DataInput; 10import java.io.DataInput;
diff --git a/src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java
index bf5b7cb..12a3025 100644
--- a/src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java
@@ -1,14 +1,14 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.analysis.EntryReference; 3import cuchaz.enigma.analysis.EntryReference;
4import cuchaz.enigma.gui.GuiController; 4import cuchaz.enigma.network.ClientPacketHandler;
5import cuchaz.enigma.translation.representation.entry.Entry; 5import cuchaz.enigma.translation.representation.entry.Entry;
6 6
7import java.io.DataInput; 7import java.io.DataInput;
8import java.io.DataOutput; 8import java.io.DataOutput;
9import java.io.IOException; 9import java.io.IOException;
10 10
11public class ChangeDocsS2CPacket implements Packet<GuiController> { 11public class ChangeDocsS2CPacket implements Packet<ClientPacketHandler> {
12 private int syncId; 12 private int syncId;
13 private Entry<?> entry; 13 private Entry<?> entry;
14 private String newDocs; 14 private String newDocs;
@@ -37,7 +37,7 @@ public class ChangeDocsS2CPacket implements Packet<GuiController> {
37 } 37 }
38 38
39 @Override 39 @Override
40 public void handle(GuiController controller) { 40 public void handle(ClientPacketHandler controller) {
41 controller.changeDocs(new EntryReference<>(entry, entry.getName()), newDocs, false); 41 controller.changeDocs(new EntryReference<>(entry, entry.getName()), newDocs, false);
42 controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); 42 controller.sendPacket(new ConfirmChangeC2SPacket(syncId));
43 } 43 }
diff --git a/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java
index 78ef964..78ef964 100644
--- a/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java
diff --git a/src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java
index bd007d3..9a112a8 100644
--- a/src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java
@@ -1,12 +1,12 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.gui.GuiController; 3import cuchaz.enigma.network.ClientPacketHandler;
4 4
5import java.io.DataInput; 5import java.io.DataInput;
6import java.io.DataOutput; 6import java.io.DataOutput;
7import java.io.IOException; 7import java.io.IOException;
8 8
9public class KickS2CPacket implements Packet<GuiController> { 9public class KickS2CPacket implements Packet<ClientPacketHandler> {
10 private String reason; 10 private String reason;
11 11
12 KickS2CPacket() { 12 KickS2CPacket() {
@@ -27,7 +27,7 @@ public class KickS2CPacket implements Packet<GuiController> {
27 } 27 }
28 28
29 @Override 29 @Override
30 public void handle(GuiController controller) { 30 public void handle(ClientPacketHandler controller) {
31 controller.disconnectIfConnected(reason); 31 controller.disconnectIfConnected(reason);
32 } 32 }
33} 33}
diff --git a/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java
index 722cbbf..da0f44a 100644
--- a/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java
@@ -2,7 +2,7 @@ package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.network.EnigmaServer; 3import cuchaz.enigma.network.EnigmaServer;
4import cuchaz.enigma.network.ServerPacketHandler; 4import cuchaz.enigma.network.ServerPacketHandler;
5import cuchaz.enigma.utils.Message; 5import cuchaz.enigma.network.Message;
6 6
7import java.io.DataInput; 7import java.io.DataInput;
8import java.io.DataOutput; 8import java.io.DataOutput;
diff --git a/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java
index 98d20d9..a41c620 100644
--- a/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java
@@ -3,7 +3,7 @@ package cuchaz.enigma.network.packet;
3import cuchaz.enigma.network.ServerPacketHandler; 3import cuchaz.enigma.network.ServerPacketHandler;
4import cuchaz.enigma.translation.mapping.EntryMapping; 4import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.representation.entry.Entry; 5import cuchaz.enigma.translation.representation.entry.Entry;
6import cuchaz.enigma.utils.Message; 6import cuchaz.enigma.network.Message;
7 7
8import java.io.DataInput; 8import java.io.DataInput;
9import java.io.DataOutput; 9import java.io.DataOutput;
diff --git a/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java
index b7d6eda..7504430 100644
--- a/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java
@@ -1,14 +1,14 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.analysis.EntryReference; 3import cuchaz.enigma.analysis.EntryReference;
4import cuchaz.enigma.gui.GuiController; 4import cuchaz.enigma.network.ClientPacketHandler;
5import cuchaz.enigma.translation.representation.entry.Entry; 5import cuchaz.enigma.translation.representation.entry.Entry;
6 6
7import java.io.DataInput; 7import java.io.DataInput;
8import java.io.DataOutput; 8import java.io.DataOutput;
9import java.io.IOException; 9import java.io.IOException;
10 10
11public class MarkDeobfuscatedS2CPacket implements Packet<GuiController> { 11public class MarkDeobfuscatedS2CPacket implements Packet<ClientPacketHandler> {
12 private int syncId; 12 private int syncId;
13 private Entry<?> entry; 13 private Entry<?> entry;
14 14
@@ -33,7 +33,7 @@ public class MarkDeobfuscatedS2CPacket implements Packet<GuiController> {
33 } 33 }
34 34
35 @Override 35 @Override
36 public void handle(GuiController controller) { 36 public void handle(ClientPacketHandler controller) {
37 controller.markAsDeobfuscated(new EntryReference<>(entry, entry.getName()), false); 37 controller.markAsDeobfuscated(new EntryReference<>(entry, entry.getName()), false);
38 controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); 38 controller.sendPacket(new ConfirmChangeC2SPacket(syncId));
39 } 39 }
diff --git a/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java
index b8e0f14..3bc09e7 100644
--- a/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java
@@ -5,7 +5,7 @@ import java.io.DataOutput;
5import java.io.IOException; 5import java.io.IOException;
6 6
7import cuchaz.enigma.network.ServerPacketHandler; 7import cuchaz.enigma.network.ServerPacketHandler;
8import cuchaz.enigma.utils.Message; 8import cuchaz.enigma.network.Message;
9 9
10public class MessageC2SPacket implements Packet<ServerPacketHandler> { 10public class MessageC2SPacket implements Packet<ServerPacketHandler> {
11 11
diff --git a/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java
index edeaae0..2b07968 100644
--- a/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java
@@ -4,10 +4,10 @@ import java.io.DataInput;
4import java.io.DataOutput; 4import java.io.DataOutput;
5import java.io.IOException; 5import java.io.IOException;
6 6
7import cuchaz.enigma.gui.GuiController; 7import cuchaz.enigma.network.ClientPacketHandler;
8import cuchaz.enigma.utils.Message; 8import cuchaz.enigma.network.Message;
9 9
10public class MessageS2CPacket implements Packet<GuiController> { 10public class MessageS2CPacket implements Packet<ClientPacketHandler> {
11 11
12 private Message message; 12 private Message message;
13 13
@@ -29,7 +29,7 @@ public class MessageS2CPacket implements Packet<GuiController> {
29 } 29 }
30 30
31 @Override 31 @Override
32 public void handle(GuiController handler) { 32 public void handle(ClientPacketHandler handler) {
33 handler.addMessage(message); 33 handler.addMessage(message);
34 } 34 }
35 35
diff --git a/src/main/java/cuchaz/enigma/network/packet/Packet.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/Packet.java
index 2f16dfb..2f16dfb 100644
--- a/src/main/java/cuchaz/enigma/network/packet/Packet.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/Packet.java
diff --git a/src/main/java/cuchaz/enigma/network/packet/PacketHelper.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketHelper.java
index 464606e..464606e 100644
--- a/src/main/java/cuchaz/enigma/network/packet/PacketHelper.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketHelper.java
diff --git a/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java
index ba5d9de..3b8af81 100644
--- a/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java
@@ -1,6 +1,6 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.gui.GuiController; 3import cuchaz.enigma.network.ClientPacketHandler;
4import cuchaz.enigma.network.ServerPacketHandler; 4import cuchaz.enigma.network.ServerPacketHandler;
5 5
6import java.util.HashMap; 6import java.util.HashMap;
@@ -11,15 +11,15 @@ public class PacketRegistry {
11 11
12 private static final Map<Class<? extends Packet<ServerPacketHandler>>, Integer> c2sPacketIds = new HashMap<>(); 12 private static final Map<Class<? extends Packet<ServerPacketHandler>>, Integer> c2sPacketIds = new HashMap<>();
13 private static final Map<Integer, Supplier<? extends Packet<ServerPacketHandler>>> c2sPacketCreators = new HashMap<>(); 13 private static final Map<Integer, Supplier<? extends Packet<ServerPacketHandler>>> c2sPacketCreators = new HashMap<>();
14 private static final Map<Class<? extends Packet<GuiController>>, Integer> s2cPacketIds = new HashMap<>(); 14 private static final Map<Class<? extends Packet<ClientPacketHandler>>, Integer> s2cPacketIds = new HashMap<>();
15 private static final Map<Integer, Supplier<? extends Packet<GuiController>>> s2cPacketCreators = new HashMap<>(); 15 private static final Map<Integer, Supplier<? extends Packet<ClientPacketHandler>>> s2cPacketCreators = new HashMap<>();
16 16
17 private static <T extends Packet<ServerPacketHandler>> void registerC2S(int id, Class<T> clazz, Supplier<T> creator) { 17 private static <T extends Packet<ServerPacketHandler>> void registerC2S(int id, Class<T> clazz, Supplier<T> creator) {
18 c2sPacketIds.put(clazz, id); 18 c2sPacketIds.put(clazz, id);
19 c2sPacketCreators.put(id, creator); 19 c2sPacketCreators.put(id, creator);
20 } 20 }
21 21
22 private static <T extends Packet<GuiController>> void registerS2C(int id, Class<T> clazz, Supplier<T> creator) { 22 private static <T extends Packet<ClientPacketHandler>> void registerS2C(int id, Class<T> clazz, Supplier<T> creator) {
23 s2cPacketIds.put(clazz, id); 23 s2cPacketIds.put(clazz, id);
24 s2cPacketCreators.put(id, creator); 24 s2cPacketCreators.put(id, creator);
25 } 25 }
@@ -52,12 +52,12 @@ public class PacketRegistry {
52 return creator == null ? null : creator.get(); 52 return creator == null ? null : creator.get();
53 } 53 }
54 54
55 public static int getS2CId(Packet<GuiController> packet) { 55 public static int getS2CId(Packet<ClientPacketHandler> packet) {
56 return s2cPacketIds.get(packet.getClass()); 56 return s2cPacketIds.get(packet.getClass());
57 } 57 }
58 58
59 public static Packet<GuiController> createS2CPacket(int id) { 59 public static Packet<ClientPacketHandler> createS2CPacket(int id) {
60 Supplier<? extends Packet<GuiController>> creator = s2cPacketCreators.get(id); 60 Supplier<? extends Packet<ClientPacketHandler>> creator = s2cPacketCreators.get(id);
61 return creator == null ? null : creator.get(); 61 return creator == null ? null : creator.get();
62 } 62 }
63 63
diff --git a/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java
index a3f3d91..3f85228 100644
--- a/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java
@@ -1,9 +1,9 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.network.ServerPacketHandler; 3import cuchaz.enigma.network.ServerPacketHandler;
4import cuchaz.enigma.throwables.IllegalNameException; 4import cuchaz.enigma.translation.mapping.IllegalNameException;
5import cuchaz.enigma.translation.representation.entry.Entry; 5import cuchaz.enigma.translation.representation.entry.Entry;
6import cuchaz.enigma.utils.Message; 6import cuchaz.enigma.network.Message;
7 7
8import java.io.DataInput; 8import java.io.DataInput;
9import java.io.DataOutput; 9import java.io.DataOutput;
diff --git a/src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java
index 7bb1b00..70d803c 100644
--- a/src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java
@@ -1,14 +1,14 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.analysis.EntryReference; 3import cuchaz.enigma.analysis.EntryReference;
4import cuchaz.enigma.gui.GuiController; 4import cuchaz.enigma.network.ClientPacketHandler;
5import cuchaz.enigma.translation.representation.entry.Entry; 5import cuchaz.enigma.translation.representation.entry.Entry;
6 6
7import java.io.DataInput; 7import java.io.DataInput;
8import java.io.DataOutput; 8import java.io.DataOutput;
9import java.io.IOException; 9import java.io.IOException;
10 10
11public class RemoveMappingS2CPacket implements Packet<GuiController> { 11public class RemoveMappingS2CPacket implements Packet<ClientPacketHandler> {
12 private int syncId; 12 private int syncId;
13 private Entry<?> entry; 13 private Entry<?> entry;
14 14
@@ -33,7 +33,7 @@ public class RemoveMappingS2CPacket implements Packet<GuiController> {
33 } 33 }
34 34
35 @Override 35 @Override
36 public void handle(GuiController controller) { 36 public void handle(ClientPacketHandler controller) {
37 controller.removeMapping(new EntryReference<>(entry, entry.getName()), false); 37 controller.removeMapping(new EntryReference<>(entry, entry.getName()), false);
38 controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); 38 controller.sendPacket(new ConfirmChangeC2SPacket(syncId));
39 } 39 }
diff --git a/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java
index 03e95d6..e3e7e37 100644
--- a/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java
@@ -1,10 +1,10 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.network.ServerPacketHandler; 3import cuchaz.enigma.network.ServerPacketHandler;
4import cuchaz.enigma.throwables.IllegalNameException; 4import cuchaz.enigma.translation.mapping.IllegalNameException;
5import cuchaz.enigma.translation.mapping.EntryMapping; 5import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.representation.entry.Entry; 6import cuchaz.enigma.translation.representation.entry.Entry;
7import cuchaz.enigma.utils.Message; 7import cuchaz.enigma.network.Message;
8 8
9import java.io.DataInput; 9import java.io.DataInput;
10import java.io.DataOutput; 10import java.io.DataOutput;
diff --git a/src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java
index 058f0e5..787e89e 100644
--- a/src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java
@@ -1,14 +1,14 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.analysis.EntryReference; 3import cuchaz.enigma.analysis.EntryReference;
4import cuchaz.enigma.gui.GuiController; 4import cuchaz.enigma.network.ClientPacketHandler;
5import cuchaz.enigma.translation.representation.entry.Entry; 5import cuchaz.enigma.translation.representation.entry.Entry;
6 6
7import java.io.DataInput; 7import java.io.DataInput;
8import java.io.DataOutput; 8import java.io.DataOutput;
9import java.io.IOException; 9import java.io.IOException;
10 10
11public class RenameS2CPacket implements Packet<GuiController> { 11public class RenameS2CPacket implements Packet<ClientPacketHandler> {
12 private int syncId; 12 private int syncId;
13 private Entry<?> entry; 13 private Entry<?> entry;
14 private String newName; 14 private String newName;
@@ -41,7 +41,7 @@ public class RenameS2CPacket implements Packet<GuiController> {
41 } 41 }
42 42
43 @Override 43 @Override
44 public void handle(GuiController controller) { 44 public void handle(ClientPacketHandler controller) {
45 controller.rename(new EntryReference<>(entry, entry.getName()), newName, refreshClassTree, false); 45 controller.rename(new EntryReference<>(entry, entry.getName()), newName, refreshClassTree, false);
46 controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); 46 controller.sendPacket(new ConfirmChangeC2SPacket(syncId));
47 } 47 }
diff --git a/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java
index e6378d1..76ecbc7 100644
--- a/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java
@@ -1,11 +1,11 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.gui.GuiController;
4import cuchaz.enigma.network.EnigmaServer;
5import cuchaz.enigma.translation.mapping.EntryMapping; 3import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.mapping.tree.EntryTree; 4import cuchaz.enigma.translation.mapping.tree.EntryTree;
7import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; 5import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
8import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 6import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
7import cuchaz.enigma.network.ClientPacketHandler;
8import cuchaz.enigma.network.EnigmaServer;
9import cuchaz.enigma.translation.representation.entry.Entry; 9import cuchaz.enigma.translation.representation.entry.Entry;
10 10
11import java.io.DataInput; 11import java.io.DataInput;
@@ -15,7 +15,7 @@ import java.util.Collection;
15import java.util.List; 15import java.util.List;
16import java.util.stream.Collectors; 16import java.util.stream.Collectors;
17 17
18public class SyncMappingsS2CPacket implements Packet<GuiController> { 18public class SyncMappingsS2CPacket implements Packet<ClientPacketHandler> {
19 private EntryTree<EntryMapping> mappings; 19 private EntryTree<EntryMapping> mappings;
20 20
21 SyncMappingsS2CPacket() { 21 SyncMappingsS2CPacket() {
@@ -81,7 +81,7 @@ public class SyncMappingsS2CPacket implements Packet<GuiController> {
81 } 81 }
82 82
83 @Override 83 @Override
84 public void handle(GuiController controller) { 84 public void handle(ClientPacketHandler controller) {
85 controller.openMappings(mappings); 85 controller.openMappings(mappings);
86 controller.sendPacket(new ConfirmChangeC2SPacket(EnigmaServer.DUMMY_SYNC_ID)); 86 controller.sendPacket(new ConfirmChangeC2SPacket(EnigmaServer.DUMMY_SYNC_ID));
87 } 87 }
diff --git a/src/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java
index 8904848..b4a277a 100644
--- a/src/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java
@@ -1,14 +1,14 @@
1package cuchaz.enigma.network.packet; 1package cuchaz.enigma.network.packet;
2 2
3import cuchaz.enigma.network.ClientPacketHandler;
4
3import java.io.DataInput; 5import java.io.DataInput;
4import java.io.DataOutput; 6import java.io.DataOutput;
5import java.io.IOException; 7import java.io.IOException;
6import java.util.ArrayList; 8import java.util.ArrayList;
7import java.util.List; 9import java.util.List;
8 10
9import cuchaz.enigma.gui.GuiController; 11public class UserListS2CPacket implements Packet<ClientPacketHandler> {
10
11public class UserListS2CPacket implements Packet<GuiController> {
12 12
13 private List<String> users; 13 private List<String> users;
14 14
@@ -37,7 +37,7 @@ public class UserListS2CPacket implements Packet<GuiController> {
37 } 37 }
38 38
39 @Override 39 @Override
40 public void handle(GuiController handler) { 40 public void handle(ClientPacketHandler handler) {
41 handler.updateUserList(users); 41 handler.updateUserList(users);
42 } 42 }
43 43
diff --git a/enigma-swing/build.gradle b/enigma-swing/build.gradle
new file mode 100644
index 0000000..a1bcafc
--- /dev/null
+++ b/enigma-swing/build.gradle
@@ -0,0 +1,23 @@
1plugins {
2 id 'com.github.johnrengelman.shadow' version '5.2.0'
3}
4
5dependencies {
6 implementation project(':enigma')
7 implementation project(':enigma-server')
8
9 implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3'
10 implementation 'com.bulenkov:darcula:1.0.0-bobbylight'
11 implementation 'de.sciss:syntaxpane:1.2.0'
12 implementation 'com.github.lukeu:swing-dpi:0.6'
13}
14
15jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.gui.Main'
16
17publishing {
18 publications {
19 shadow(MavenPublication) { publication ->
20 project.shadow.component(publication)
21 }
22 }
23} \ No newline at end of file
diff --git a/src/main/java/cuchaz/enigma/gui/BrowserCaret.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/BrowserCaret.java
index af105db..af105db 100644
--- a/src/main/java/cuchaz/enigma/gui/BrowserCaret.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/BrowserCaret.java
diff --git a/src/main/java/cuchaz/enigma/gui/ClassSelector.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/ClassSelector.java
index a23e24c..3d0e04c 100644
--- a/src/main/java/cuchaz/enigma/gui/ClassSelector.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/ClassSelector.java
@@ -28,7 +28,7 @@ import com.google.common.collect.Maps;
28import com.google.common.collect.Multimap; 28import com.google.common.collect.Multimap;
29import cuchaz.enigma.gui.node.ClassSelectorClassNode; 29import cuchaz.enigma.gui.node.ClassSelectorClassNode;
30import cuchaz.enigma.gui.node.ClassSelectorPackageNode; 30import cuchaz.enigma.gui.node.ClassSelectorPackageNode;
31import cuchaz.enigma.throwables.IllegalNameException; 31import cuchaz.enigma.translation.mapping.IllegalNameException;
32import cuchaz.enigma.translation.Translator; 32import cuchaz.enigma.translation.Translator;
33import cuchaz.enigma.translation.representation.entry.ClassEntry; 33import cuchaz.enigma.translation.representation.entry.ClassEntry;
34 34
diff --git a/src/main/java/cuchaz/enigma/gui/CodeReader.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/CodeReader.java
index e119640..356656b 100644
--- a/src/main/java/cuchaz/enigma/gui/CodeReader.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/CodeReader.java
@@ -11,7 +11,7 @@
11 11
12package cuchaz.enigma.gui; 12package cuchaz.enigma.gui;
13 13
14import cuchaz.enigma.analysis.Token; 14import cuchaz.enigma.source.Token;
15 15
16import javax.swing.*; 16import javax.swing.*;
17import javax.swing.text.BadLocationException; 17import javax.swing.text.BadLocationException;
diff --git a/src/main/java/cuchaz/enigma/gui/ConnectionState.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/ConnectionState.java
index db6590d..db6590d 100644
--- a/src/main/java/cuchaz/enigma/gui/ConnectionState.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/ConnectionState.java
diff --git a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
index 08df3e7..aca5d72 100644
--- a/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java
@@ -3,10 +3,11 @@ package cuchaz.enigma.gui;
3import cuchaz.enigma.EnigmaProject; 3import cuchaz.enigma.EnigmaProject;
4import cuchaz.enigma.EnigmaServices; 4import cuchaz.enigma.EnigmaServices;
5import cuchaz.enigma.analysis.EntryReference; 5import cuchaz.enigma.analysis.EntryReference;
6import cuchaz.enigma.analysis.Token; 6import cuchaz.enigma.source.Token;
7import cuchaz.enigma.api.service.NameProposalService; 7import cuchaz.enigma.api.service.NameProposalService;
8import cuchaz.enigma.gui.highlight.TokenHighlightType; 8import cuchaz.enigma.gui.highlight.TokenHighlightType;
9import cuchaz.enigma.source.SourceIndex; 9import cuchaz.enigma.source.SourceIndex;
10import cuchaz.enigma.source.SourceRemapper;
10import cuchaz.enigma.translation.LocalNameGenerator; 11import cuchaz.enigma.translation.LocalNameGenerator;
11import cuchaz.enigma.translation.Translator; 12import cuchaz.enigma.translation.Translator;
12import cuchaz.enigma.translation.mapping.EntryRemapper; 13import cuchaz.enigma.translation.mapping.EntryRemapper;
diff --git a/src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java
index c912be3..c912be3 100644
--- a/src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java
diff --git a/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java
index 42eaa60..2f08a26 100644
--- a/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java
@@ -1,6 +1,6 @@
1package cuchaz.enigma.gui; 1package cuchaz.enigma.gui;
2 2
3import cuchaz.enigma.config.Config; 3import cuchaz.enigma.gui.config.Config;
4import de.sciss.syntaxpane.components.LineNumbersRuler; 4import de.sciss.syntaxpane.components.LineNumbersRuler;
5import de.sciss.syntaxpane.syntaxkits.JavaSyntaxKit; 5import de.sciss.syntaxpane.syntaxkits.JavaSyntaxKit;
6import de.sciss.syntaxpane.util.Configuration; 6import de.sciss.syntaxpane.util.Configuration;
diff --git a/src/main/java/cuchaz/enigma/ExceptionIgnorer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/ExceptionIgnorer.java
index 84331cc..6246192 100644
--- a/src/main/java/cuchaz/enigma/ExceptionIgnorer.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/ExceptionIgnorer.java
@@ -9,7 +9,7 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma; 12package cuchaz.enigma.gui;
13 13
14public class ExceptionIgnorer { 14public class ExceptionIgnorer {
15 15
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java
index ed32469..2ed1010 100644
--- a/src/main/java/cuchaz/enigma/gui/Gui.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java
@@ -25,12 +25,11 @@ import javax.swing.tree.*;
25 25
26import com.google.common.base.Strings; 26import com.google.common.base.Strings;
27import com.google.common.collect.Lists; 27import com.google.common.collect.Lists;
28import cuchaz.enigma.Constants; 28import cuchaz.enigma.Enigma;
29import cuchaz.enigma.EnigmaProfile; 29import cuchaz.enigma.EnigmaProfile;
30import cuchaz.enigma.ExceptionIgnorer;
31import cuchaz.enigma.analysis.*; 30import cuchaz.enigma.analysis.*;
32import cuchaz.enigma.config.Config; 31import cuchaz.enigma.gui.config.Config;
33import cuchaz.enigma.config.Themes; 32import cuchaz.enigma.gui.config.Themes;
34import cuchaz.enigma.gui.dialog.CrashDialog; 33import cuchaz.enigma.gui.dialog.CrashDialog;
35import cuchaz.enigma.gui.dialog.JavadocDialog; 34import cuchaz.enigma.gui.dialog.JavadocDialog;
36import cuchaz.enigma.gui.dialog.SearchDialog; 35import cuchaz.enigma.gui.dialog.SearchDialog;
@@ -46,15 +45,16 @@ import cuchaz.enigma.gui.panels.PanelDeobf;
46import cuchaz.enigma.gui.panels.PanelEditor; 45import cuchaz.enigma.gui.panels.PanelEditor;
47import cuchaz.enigma.gui.panels.PanelIdentifier; 46import cuchaz.enigma.gui.panels.PanelIdentifier;
48import cuchaz.enigma.gui.panels.PanelObf; 47import cuchaz.enigma.gui.panels.PanelObf;
48import cuchaz.enigma.gui.util.GuiUtil;
49import cuchaz.enigma.gui.util.History; 49import cuchaz.enigma.gui.util.History;
50import cuchaz.enigma.network.packet.*; 50import cuchaz.enigma.network.packet.*;
51import cuchaz.enigma.throwables.IllegalNameException; 51import cuchaz.enigma.source.Token;
52import cuchaz.enigma.translation.mapping.IllegalNameException;
52import cuchaz.enigma.translation.mapping.*; 53import cuchaz.enigma.translation.mapping.*;
53import cuchaz.enigma.translation.representation.entry.*; 54import cuchaz.enigma.translation.representation.entry.*;
54import cuchaz.enigma.utils.I18n; 55import cuchaz.enigma.network.Message;
55import cuchaz.enigma.utils.Message;
56import cuchaz.enigma.gui.util.ScaleUtil; 56import cuchaz.enigma.gui.util.ScaleUtil;
57import cuchaz.enigma.utils.Utils; 57import cuchaz.enigma.utils.I18n;
58import de.sciss.syntaxpane.DefaultSyntaxKit; 58import de.sciss.syntaxpane.DefaultSyntaxKit;
59 59
60public class Gui { 60public class Gui {
@@ -127,7 +127,7 @@ public class Gui {
127 Config.getInstance().lookAndFeel.setGlobalLAF(); 127 Config.getInstance().lookAndFeel.setGlobalLAF();
128 128
129 // init frame 129 // init frame
130 this.frame = new JFrame(Constants.NAME); 130 this.frame = new JFrame(Enigma.NAME);
131 final Container pane = this.frame.getContentPane(); 131 final Container pane = this.frame.getContentPane();
132 pane.setLayout(new BorderLayout()); 132 pane.setLayout(new BorderLayout());
133 133
@@ -386,7 +386,7 @@ public class Gui {
386 386
387 public void onFinishOpenJar(String jarName) { 387 public void onFinishOpenJar(String jarName) {
388 // update gui 388 // update gui
389 this.frame.setTitle(Constants.NAME + " - " + jarName); 389 this.frame.setTitle(Enigma.NAME + " - " + jarName);
390 this.classesPanel.removeAll(); 390 this.classesPanel.removeAll();
391 this.classesPanel.add(splitClasses); 391 this.classesPanel.add(splitClasses);
392 setEditorText(null); 392 setEditorText(null);
@@ -401,7 +401,7 @@ public class Gui {
401 public void onCloseJar() { 401 public void onCloseJar() {
402 402
403 // update gui 403 // update gui
404 this.frame.setTitle(Constants.NAME); 404 this.frame.setTitle(Enigma.NAME);
405 setObfClasses(null); 405 setObfClasses(null);
406 setDeobfClasses(null); 406 setDeobfClasses(null);
407 setEditorText(null); 407 setEditorText(null);
@@ -551,7 +551,7 @@ public class Gui {
551 label.setPreferredSize(ScaleUtil.getDimension(100, ScaleUtil.invert(label.getPreferredSize().height))); 551 label.setPreferredSize(ScaleUtil.getDimension(100, ScaleUtil.invert(label.getPreferredSize().height)));
552 panel.add(label); 552 panel.add(label);
553 553
554 panel.add(Utils.unboldLabel(new JLabel(value, JLabel.LEFT))); 554 panel.add(GuiUtil.unboldLabel(new JLabel(value, JLabel.LEFT)));
555 555
556 container.add(panel); 556 container.add(panel);
557 } 557 }
@@ -665,7 +665,7 @@ public class Gui {
665 } catch (IllegalNameException ex) { 665 } catch (IllegalNameException ex) {
666 javadocTextArea.setBorder(BorderFactory.createLineBorder(Color.red, 1)); 666 javadocTextArea.setBorder(BorderFactory.createLineBorder(Color.red, 1));
667 javadocTextArea.setToolTipText(ex.getReason()); 667 javadocTextArea.setToolTipText(ex.getReason());
668 Utils.showToolTipNow(javadocTextArea); 668 GuiUtil.showToolTipNow(javadocTextArea);
669 return; 669 return;
670 } 670 }
671 671
@@ -739,7 +739,7 @@ public class Gui {
739 } catch (IllegalNameException ex) { 739 } catch (IllegalNameException ex) {
740 renameTextField.setBorder(BorderFactory.createLineBorder(Color.red, 1)); 740 renameTextField.setBorder(BorderFactory.createLineBorder(Color.red, 1));
741 renameTextField.setToolTipText(ex.getReason()); 741 renameTextField.setToolTipText(ex.getReason());
742 Utils.showToolTipNow(renameTextField); 742 GuiUtil.showToolTipNow(renameTextField);
743 } 743 }
744 return; 744 return;
745 } 745 }
diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java
index cccc9e8..94979e7 100644
--- a/src/main/java/cuchaz/enigma/gui/GuiController.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java
@@ -18,23 +18,21 @@ import cuchaz.enigma.EnigmaProfile;
18import cuchaz.enigma.EnigmaProject; 18import cuchaz.enigma.EnigmaProject;
19import cuchaz.enigma.analysis.*; 19import cuchaz.enigma.analysis.*;
20import cuchaz.enigma.api.service.ObfuscationTestService; 20import cuchaz.enigma.api.service.ObfuscationTestService;
21import cuchaz.enigma.bytecode.translators.SourceFixVisitor; 21import cuchaz.enigma.gui.config.Config;
22import cuchaz.enigma.config.Config;
23import cuchaz.enigma.gui.dialog.ProgressDialog; 22import cuchaz.enigma.gui.dialog.ProgressDialog;
24import cuchaz.enigma.gui.stats.StatsGenerator; 23import cuchaz.enigma.gui.stats.StatsGenerator;
25import cuchaz.enigma.gui.stats.StatsMember; 24import cuchaz.enigma.gui.stats.StatsMember;
25import cuchaz.enigma.gui.util.GuiUtil;
26import cuchaz.enigma.gui.util.History; 26import cuchaz.enigma.gui.util.History;
27import cuchaz.enigma.network.EnigmaClient; 27import cuchaz.enigma.network.*;
28import cuchaz.enigma.network.EnigmaServer;
29import cuchaz.enigma.network.IntegratedEnigmaServer;
30import cuchaz.enigma.network.ServerPacketHandler;
31import cuchaz.enigma.network.packet.LoginC2SPacket; 28import cuchaz.enigma.network.packet.LoginC2SPacket;
32import cuchaz.enigma.network.packet.Packet; 29import cuchaz.enigma.network.packet.Packet;
33import cuchaz.enigma.source.*; 30import cuchaz.enigma.source.*;
34import cuchaz.enigma.throwables.MappingParseException; 31import cuchaz.enigma.translation.mapping.serde.MappingParseException;
35import cuchaz.enigma.translation.Translator; 32import cuchaz.enigma.translation.Translator;
36import cuchaz.enigma.translation.mapping.*; 33import cuchaz.enigma.translation.mapping.*;
37import cuchaz.enigma.translation.mapping.serde.MappingFormat; 34import cuchaz.enigma.translation.mapping.serde.MappingFormat;
35import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
38import cuchaz.enigma.translation.mapping.tree.EntryTree; 36import cuchaz.enigma.translation.mapping.tree.EntryTree;
39import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 37import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
40import cuchaz.enigma.translation.representation.entry.ClassEntry; 38import cuchaz.enigma.translation.representation.entry.ClassEntry;
@@ -42,10 +40,7 @@ import cuchaz.enigma.translation.representation.entry.Entry;
42import cuchaz.enigma.translation.representation.entry.FieldEntry; 40import cuchaz.enigma.translation.representation.entry.FieldEntry;
43import cuchaz.enigma.translation.representation.entry.MethodEntry; 41import cuchaz.enigma.translation.representation.entry.MethodEntry;
44import cuchaz.enigma.utils.I18n; 42import cuchaz.enigma.utils.I18n;
45import cuchaz.enigma.utils.Message;
46import cuchaz.enigma.utils.ReadableToken;
47import cuchaz.enigma.utils.Utils; 43import cuchaz.enigma.utils.Utils;
48import org.objectweb.asm.tree.ClassNode;
49 44
50import javax.annotation.Nullable; 45import javax.annotation.Nullable;
51import javax.swing.JOptionPane; 46import javax.swing.JOptionPane;
@@ -63,7 +58,7 @@ import java.util.concurrent.Executors;
63import java.util.stream.Collectors; 58import java.util.stream.Collectors;
64import java.util.stream.Stream; 59import java.util.stream.Stream;
65 60
66public class GuiController { 61public class GuiController implements ClientPacketHandler {
67 private static final ExecutorService DECOMPILER_SERVICE = Executors.newSingleThreadExecutor( 62 private static final ExecutorService DECOMPILER_SERVICE = Executors.newSingleThreadExecutor(
68 new ThreadFactoryBuilder() 63 new ThreadFactoryBuilder()
69 .setDaemon(true) 64 .setDaemon(true)
@@ -107,26 +102,12 @@ public class GuiController {
107 return ProgressDialog.runOffThread(gui.getFrame(), progress -> { 102 return ProgressDialog.runOffThread(gui.getFrame(), progress -> {
108 project = enigma.openJar(jarPath, progress); 103 project = enigma.openJar(jarPath, progress);
109 indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex()); 104 indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex());
110 decompiler = createDecompiler(); 105 decompiler = project.createDecompiler(decompilerService);
111 gui.onFinishOpenJar(jarPath.getFileName().toString()); 106 gui.onFinishOpenJar(jarPath.getFileName().toString());
112 refreshClasses(); 107 refreshClasses();
113 }); 108 });
114 } 109 }
115 110
116 private Decompiler createDecompiler() {
117 return decompilerService.create(name -> {
118 ClassNode node = project.getClassCache().getClassNode(name);
119
120 if (node == null) {
121 return null;
122 }
123
124 ClassNode fixedNode = new ClassNode();
125 node.accept(new SourceFixVisitor(Utils.ASM_VERSION, fixedNode, project.getJarIndex()));
126 return fixedNode;
127 }, new SourceSettings(true, true));
128 }
129
130 public void closeJar() { 111 public void closeJar() {
131 this.project = null; 112 this.project = null;
132 this.gui.onCloseJar(); 113 this.gui.onCloseJar();
@@ -155,6 +136,7 @@ public class GuiController {
155 }); 136 });
156 } 137 }
157 138
139 @Override
158 public void openMappings(EntryTree<EntryMapping> mappings) { 140 public void openMappings(EntryTree<EntryMapping> mappings) {
159 if (project == null) return; 141 if (project == null) return;
160 142
@@ -415,10 +397,10 @@ public class GuiController {
415 Rectangle viewportBounds = gui.sourceScroller.getViewport().getViewRect(); 397 Rectangle viewportBounds = gui.sourceScroller.getViewport().getViewRect();
416 // Here we pick an "anchor position", which we want to stay in the same vertical location on the screen after the new text has been set 398 // Here we pick an "anchor position", which we want to stay in the same vertical location on the screen after the new text has been set
417 int anchorModelPos = gui.editor.getSelectionStart(); 399 int anchorModelPos = gui.editor.getSelectionStart();
418 Rectangle anchorViewPos = Utils.safeModelToView(gui.editor, anchorModelPos); 400 Rectangle anchorViewPos = GuiUtil.safeModelToView(gui.editor, anchorModelPos);
419 if (anchorViewPos.y < viewportBounds.y || anchorViewPos.y >= viewportBounds.y + viewportBounds.height) { 401 if (anchorViewPos.y < viewportBounds.y || anchorViewPos.y >= viewportBounds.y + viewportBounds.height) {
420 anchorModelPos = gui.editor.viewToModel(new Point(0, viewportBounds.y)); 402 anchorModelPos = gui.editor.viewToModel(new Point(0, viewportBounds.y));
421 anchorViewPos = Utils.safeModelToView(gui.editor, anchorModelPos); 403 anchorViewPos = GuiUtil.safeModelToView(gui.editor, anchorModelPos);
422 } 404 }
423 int obfAnchorPos = currentSource.getObfuscatedOffset(anchorModelPos); 405 int obfAnchorPos = currentSource.getObfuscatedOffset(anchorModelPos);
424 Rectangle anchorViewPos_f = anchorViewPos; 406 Rectangle anchorViewPos_f = anchorViewPos;
@@ -426,7 +408,7 @@ public class GuiController {
426 408
427 loadClass(currentSource.getEntry(), () -> SwingUtilities.invokeLater(() -> { 409 loadClass(currentSource.getEntry(), () -> SwingUtilities.invokeLater(() -> {
428 int newAnchorModelPos = currentSource.getDeobfuscatedOffset(obfAnchorPos); 410 int newAnchorModelPos = currentSource.getDeobfuscatedOffset(obfAnchorPos);
429 Rectangle newAnchorViewPos = Utils.safeModelToView(gui.editor, newAnchorModelPos); 411 Rectangle newAnchorViewPos = GuiUtil.safeModelToView(gui.editor, newAnchorModelPos);
430 int newScrollY = newAnchorViewPos.y - (anchorViewPos_f.y - viewportBounds.y); 412 int newScrollY = newAnchorViewPos.y - (anchorViewPos_f.y - viewportBounds.y);
431 413
432 gui.editor.select(currentSource.getDeobfuscatedOffset(obfSelectionStart), currentSource.getDeobfuscatedOffset(obfSelectionEnd)); 414 gui.editor.select(currentSource.getDeobfuscatedOffset(obfSelectionStart), currentSource.getDeobfuscatedOffset(obfSelectionEnd));
@@ -579,6 +561,7 @@ public class GuiController {
579 rename(reference, newName, refreshClassTree, true); 561 rename(reference, newName, refreshClassTree, true);
580 } 562 }
581 563
564 @Override
582 public void rename(EntryReference<Entry<?>, Entry<?>> reference, String newName, boolean refreshClassTree, boolean jumpToReference) { 565 public void rename(EntryReference<Entry<?>, Entry<?>> reference, String newName, boolean refreshClassTree, boolean jumpToReference) {
583 Entry<?> entry = reference.getNameableEntry(); 566 Entry<?> entry = reference.getNameableEntry();
584 project.getMapper().mapFromObf(entry, new EntryMapping(newName)); 567 project.getMapper().mapFromObf(entry, new EntryMapping(newName));
@@ -593,6 +576,7 @@ public class GuiController {
593 removeMapping(reference, true); 576 removeMapping(reference, true);
594 } 577 }
595 578
579 @Override
596 public void removeMapping(EntryReference<Entry<?>, Entry<?>> reference, boolean jumpToReference) { 580 public void removeMapping(EntryReference<Entry<?>, Entry<?>> reference, boolean jumpToReference) {
597 project.getMapper().removeByObf(reference.getNameableEntry()); 581 project.getMapper().removeByObf(reference.getNameableEntry());
598 582
@@ -605,6 +589,7 @@ public class GuiController {
605 changeDocs(reference, updatedDocs, true); 589 changeDocs(reference, updatedDocs, true);
606 } 590 }
607 591
592 @Override
608 public void changeDocs(EntryReference<Entry<?>, Entry<?>> reference, String updatedDocs, boolean jumpToReference) { 593 public void changeDocs(EntryReference<Entry<?>, Entry<?>> reference, String updatedDocs, boolean jumpToReference) {
609 changeDoc(reference.entry, Utils.isBlank(updatedDocs) ? null : updatedDocs); 594 changeDoc(reference.entry, Utils.isBlank(updatedDocs) ? null : updatedDocs);
610 595
@@ -628,6 +613,7 @@ public class GuiController {
628 markAsDeobfuscated(reference, true); 613 markAsDeobfuscated(reference, true);
629 } 614 }
630 615
616 @Override
631 public void markAsDeobfuscated(EntryReference<Entry<?>, Entry<?>> reference, boolean jumpToReference) { 617 public void markAsDeobfuscated(EntryReference<Entry<?>, Entry<?>> reference, boolean jumpToReference) {
632 EntryRemapper mapper = project.getMapper(); 618 EntryRemapper mapper = project.getMapper();
633 Entry<?> entry = reference.getNameableEntry(); 619 Entry<?> entry = reference.getNameableEntry();
@@ -663,7 +649,7 @@ public class GuiController {
663 public void setDecompiler(DecompilerService service) { 649 public void setDecompiler(DecompilerService service) {
664 uncommentedSource = null; 650 uncommentedSource = null;
665 decompilerService = service; 651 decompilerService = service;
666 decompiler = createDecompiler(); 652 decompiler = project.createDecompiler(decompilerService);
667 refreshCurrentClass(null, RefreshMode.FULL); 653 refreshCurrentClass(null, RefreshMode.FULL);
668 } 654 }
669 655
@@ -691,6 +677,7 @@ public class GuiController {
691 gui.setConnectionState(ConnectionState.HOSTING); 677 gui.setConnectionState(ConnectionState.HOSTING);
692 } 678 }
693 679
680 @Override
694 public synchronized void disconnectIfConnected(String reason) { 681 public synchronized void disconnectIfConnected(String reason) {
695 if (client == null && server == null) { 682 if (client == null && server == null) {
696 return; 683 return;
@@ -712,16 +699,19 @@ public class GuiController {
712 }); 699 });
713 } 700 }
714 701
702 @Override
715 public void sendPacket(Packet<ServerPacketHandler> packet) { 703 public void sendPacket(Packet<ServerPacketHandler> packet) {
716 if (client != null) { 704 if (client != null) {
717 client.sendPacket(packet); 705 client.sendPacket(packet);
718 } 706 }
719 } 707 }
720 708
709 @Override
721 public void addMessage(Message message) { 710 public void addMessage(Message message) {
722 gui.addMessage(message); 711 gui.addMessage(message);
723 } 712 }
724 713
714 @Override
725 public void updateUserList(List<String> users) { 715 public void updateUserList(List<String> users) {
726 gui.setUserList(users); 716 gui.setUserList(users);
727 } 717 }
diff --git a/src/main/java/cuchaz/enigma/Main.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java
index 7c87669..1f3aa2c 100644
--- a/src/main/java/cuchaz/enigma/Main.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java
@@ -9,12 +9,13 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma; 12package cuchaz.enigma.gui;
13 13
14import cuchaz.enigma.gui.Gui; 14import cuchaz.enigma.EnigmaProfile;
15import cuchaz.enigma.gui.GuiController; 15import cuchaz.enigma.gui.config.Config;
16import cuchaz.enigma.translation.mapping.serde.MappingFormat; 16import cuchaz.enigma.translation.mapping.serde.MappingFormat;
17 17
18import cuchaz.enigma.utils.I18n;
18import joptsimple.*; 19import joptsimple.*;
19 20
20import java.io.IOException; 21import java.io.IOException;
@@ -53,6 +54,7 @@ public class Main {
53 54
54 EnigmaProfile parsedProfile = EnigmaProfile.read(options.valueOf(profile)); 55 EnigmaProfile parsedProfile = EnigmaProfile.read(options.valueOf(profile));
55 56
57 I18n.setLanguage(Config.getInstance().language);
56 Gui gui = new Gui(parsedProfile); 58 Gui gui = new Gui(parsedProfile);
57 GuiController controller = gui.getController(); 59 GuiController controller = gui.getController();
58 60
diff --git a/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java
index c9e38cb..1d60340 100644
--- a/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java
@@ -5,7 +5,7 @@ import java.awt.Component;
5import javax.swing.DefaultListCellRenderer; 5import javax.swing.DefaultListCellRenderer;
6import javax.swing.JList; 6import javax.swing.JList;
7 7
8import cuchaz.enigma.utils.Message; 8import cuchaz.enigma.network.Message;
9 9
10// For now, just render the translated text. 10// For now, just render the translated text.
11// TODO: Icons or something later? 11// TODO: Icons or something later?
diff --git a/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java
index 05d90a9..1eead6e 100644
--- a/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java
@@ -12,7 +12,7 @@
12package cuchaz.enigma.gui; 12package cuchaz.enigma.gui;
13 13
14import cuchaz.enigma.analysis.MethodInheritanceTreeNode; 14import cuchaz.enigma.analysis.MethodInheritanceTreeNode;
15import cuchaz.enigma.config.Config; 15import cuchaz.enigma.gui.config.Config;
16 16
17import javax.swing.*; 17import javax.swing.*;
18import javax.swing.tree.TreeCellRenderer; 18import javax.swing.tree.TreeCellRenderer;
diff --git a/src/main/java/cuchaz/enigma/gui/QuickFindAction.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/QuickFindAction.java
index b7fa2eb..b7fa2eb 100644
--- a/src/main/java/cuchaz/enigma/gui/QuickFindAction.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/QuickFindAction.java
diff --git a/src/main/java/cuchaz/enigma/utils/ReadableToken.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/ReadableToken.java
index de152fe..3e4b30c 100644
--- a/src/main/java/cuchaz/enigma/utils/ReadableToken.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/ReadableToken.java
@@ -9,7 +9,7 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma.utils; 12package cuchaz.enigma.gui;
13 13
14public class ReadableToken { 14public class ReadableToken {
15 15
diff --git a/src/main/java/cuchaz/enigma/gui/RefreshMode.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/RefreshMode.java
index 87cb83b..87cb83b 100644
--- a/src/main/java/cuchaz/enigma/gui/RefreshMode.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/RefreshMode.java
diff --git a/src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java
index 7375111..10c418c 100644
--- a/src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java
@@ -11,7 +11,7 @@
11 11
12package cuchaz.enigma.gui; 12package cuchaz.enigma.gui;
13 13
14import cuchaz.enigma.analysis.Token; 14import cuchaz.enigma.source.Token;
15 15
16import javax.swing.*; 16import javax.swing.*;
17import java.awt.*; 17import java.awt.*;
diff --git a/src/main/java/cuchaz/enigma/config/Config.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/Config.java
index e116fce..373dcf0 100644
--- a/src/main/java/cuchaz/enigma/config/Config.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/Config.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.config; 1package cuchaz.enigma.gui.config;
2 2
3import com.bulenkov.darcula.DarculaLaf; 3import com.bulenkov.darcula.DarculaLaf;
4import com.google.common.io.Files; 4import com.google.common.io.Files;
diff --git a/src/main/java/cuchaz/enigma/config/Themes.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/Themes.java
index 547a420..035b238 100644
--- a/src/main/java/cuchaz/enigma/config/Themes.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/Themes.java
@@ -1,12 +1,9 @@
1package cuchaz.enigma.config; 1package cuchaz.enigma.gui.config;
2 2
3import java.awt.Font;
4import java.io.IOException; 3import java.io.IOException;
5import java.lang.reflect.Field;
6 4
7import javax.swing.SwingUtilities; 5import javax.swing.SwingUtilities;
8 6
9import com.github.swingdpi.UiDefaultsScaler;
10import com.google.common.collect.ImmutableMap; 7import com.google.common.collect.ImmutableMap;
11import cuchaz.enigma.gui.EnigmaSyntaxKit; 8import cuchaz.enigma.gui.EnigmaSyntaxKit;
12import cuchaz.enigma.gui.Gui; 9import cuchaz.enigma.gui.Gui;
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java
index 43b8265..fff755d 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java
@@ -11,7 +11,8 @@
11 11
12package cuchaz.enigma.gui.dialog; 12package cuchaz.enigma.gui.dialog;
13 13
14import cuchaz.enigma.Constants; 14import cuchaz.enigma.Enigma;
15import cuchaz.enigma.gui.util.GuiUtil;
15import cuchaz.enigma.utils.I18n; 16import cuchaz.enigma.utils.I18n;
16import cuchaz.enigma.gui.util.ScaleUtil; 17import cuchaz.enigma.gui.util.ScaleUtil;
17import cuchaz.enigma.utils.Utils; 18import cuchaz.enigma.utils.Utils;
@@ -24,14 +25,14 @@ public class AboutDialog {
24 25
25 public static void show(JFrame parent) { 26 public static void show(JFrame parent) {
26 // init frame 27 // init frame
27 final JFrame frame = new JFrame(String.format(I18n.translate("menu.help.about.title"), Constants.NAME)); 28 final JFrame frame = new JFrame(String.format(I18n.translate("menu.help.about.title"), Enigma.NAME));
28 final Container pane = frame.getContentPane(); 29 final Container pane = frame.getContentPane();
29 pane.setLayout(new FlowLayout()); 30 pane.setLayout(new FlowLayout());
30 31
31 // load the content 32 // load the content
32 try { 33 try {
33 String html = Utils.readResourceToString("/about.html"); 34 String html = Utils.readResourceToString("/about.html");
34 html = String.format(html, Constants.NAME, Constants.VERSION); 35 html = String.format(html, Enigma.NAME, Enigma.VERSION);
35 JLabel label = new JLabel(html); 36 JLabel label = new JLabel(html);
36 label.setHorizontalAlignment(JLabel.CENTER); 37 label.setHorizontalAlignment(JLabel.CENTER);
37 pane.add(label); 38 pane.add(label);
@@ -41,9 +42,9 @@ public class AboutDialog {
41 42
42 // show the link 43 // show the link
43 String html = "<html><a href=\"%s\">%s</a></html>"; 44 String html = "<html><a href=\"%s\">%s</a></html>";
44 html = String.format(html, Constants.URL, Constants.URL); 45 html = String.format(html, Enigma.URL, Enigma.URL);
45 JButton link = new JButton(html); 46 JButton link = new JButton(html);
46 link.addActionListener(event -> Utils.openUrl(Constants.URL)); 47 link.addActionListener(event -> GuiUtil.openUrl(Enigma.URL));
47 link.setBorderPainted(false); 48 link.setBorderPainted(false);
48 link.setOpaque(false); 49 link.setOpaque(false);
49 link.setBackground(Color.WHITE); 50 link.setBackground(Color.WHITE);
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java
index 64219ab..64219ab 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java
index c5f505c..c5f505c 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java
index 908b42e..c2a93fa 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java
@@ -11,10 +11,10 @@
11 11
12package cuchaz.enigma.gui.dialog; 12package cuchaz.enigma.gui.dialog;
13 13
14import cuchaz.enigma.Constants; 14import cuchaz.enigma.Enigma;
15import cuchaz.enigma.gui.util.GuiUtil;
15import cuchaz.enigma.utils.I18n; 16import cuchaz.enigma.utils.I18n;
16import cuchaz.enigma.gui.util.ScaleUtil; 17import cuchaz.enigma.gui.util.ScaleUtil;
17import cuchaz.enigma.utils.Utils;
18 18
19import javax.swing.*; 19import javax.swing.*;
20import java.awt.*; 20import java.awt.*;
@@ -33,11 +33,11 @@ public class CrashDialog {
33 33
34 private CrashDialog(JFrame parent) { 34 private CrashDialog(JFrame parent) {
35 // init frame 35 // init frame
36 frame = new JFrame(String.format(I18n.translate("crash.title"), Constants.NAME)); 36 frame = new JFrame(String.format(I18n.translate("crash.title"), Enigma.NAME));
37 final Container pane = frame.getContentPane(); 37 final Container pane = frame.getContentPane();
38 pane.setLayout(new BorderLayout()); 38 pane.setLayout(new BorderLayout());
39 39
40 JLabel label = new JLabel(String.format(I18n.translate("crash.summary"), Constants.NAME)); 40 JLabel label = new JLabel(String.format(I18n.translate("crash.summary"), Enigma.NAME));
41 label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 41 label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
42 pane.add(label, BorderLayout.NORTH); 42 pane.add(label, BorderLayout.NORTH);
43 43
@@ -66,7 +66,7 @@ public class CrashDialog {
66 }); 66 });
67 buttonsPanel.add(exportButton); 67 buttonsPanel.add(exportButton);
68 buttonsPanel.add(Box.createHorizontalGlue()); 68 buttonsPanel.add(Box.createHorizontalGlue());
69 buttonsPanel.add(Utils.unboldLabel(new JLabel(I18n.translate("crash.exit.warning")))); 69 buttonsPanel.add(GuiUtil.unboldLabel(new JLabel(I18n.translate("crash.exit.warning"))));
70 JButton ignoreButton = new JButton(I18n.translate("crash.ignore")); 70 JButton ignoreButton = new JButton(I18n.translate("crash.ignore"));
71 ignoreButton.addActionListener(event -> { 71 ignoreButton.addActionListener(event -> {
72 // close (hide) the dialog 72 // close (hide) the dialog
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java
index eea1dff..eea1dff 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java
index 7e41441..d81460a 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java
@@ -11,9 +11,9 @@
11 11
12package cuchaz.enigma.gui.dialog; 12package cuchaz.enigma.gui.dialog;
13 13
14import cuchaz.enigma.gui.util.GuiUtil;
14import cuchaz.enigma.utils.I18n; 15import cuchaz.enigma.utils.I18n;
15import cuchaz.enigma.gui.util.ScaleUtil; 16import cuchaz.enigma.gui.util.ScaleUtil;
16import cuchaz.enigma.utils.Utils;
17 17
18import javax.swing.*; 18import javax.swing.*;
19import javax.swing.text.html.HTML; 19import javax.swing.text.html.HTML;
@@ -59,7 +59,7 @@ public class JavadocDialog {
59 FlowLayout buttonsLayout = new FlowLayout(); 59 FlowLayout buttonsLayout = new FlowLayout();
60 buttonsLayout.setAlignment(FlowLayout.RIGHT); 60 buttonsLayout.setAlignment(FlowLayout.RIGHT);
61 buttonsPanel.setLayout(buttonsLayout); 61 buttonsPanel.setLayout(buttonsLayout);
62 buttonsPanel.add(Utils.unboldLabel(new JLabel(I18n.translate("javadocs.instruction")))); 62 buttonsPanel.add(GuiUtil.unboldLabel(new JLabel(I18n.translate("javadocs.instruction"))));
63 JButton cancelButton = new JButton(I18n.translate("javadocs.cancel")); 63 JButton cancelButton = new JButton(I18n.translate("javadocs.cancel"));
64 cancelButton.addActionListener(event -> { 64 cancelButton.addActionListener(event -> {
65 // close (hide) the dialog 65 // close (hide) the dialog
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java
index e33ae82..fa40af7 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java
@@ -11,11 +11,11 @@
11 11
12package cuchaz.enigma.gui.dialog; 12package cuchaz.enigma.gui.dialog;
13 13
14import cuchaz.enigma.Constants; 14import cuchaz.enigma.Enigma;
15import cuchaz.enigma.ProgressListener; 15import cuchaz.enigma.ProgressListener;
16import cuchaz.enigma.gui.util.GuiUtil;
16import cuchaz.enigma.utils.I18n; 17import cuchaz.enigma.utils.I18n;
17import cuchaz.enigma.gui.util.ScaleUtil; 18import cuchaz.enigma.gui.util.ScaleUtil;
18import cuchaz.enigma.utils.Utils;
19 19
20import javax.swing.*; 20import javax.swing.*;
21import java.awt.*; 21import java.awt.*;
@@ -31,7 +31,7 @@ public class ProgressDialog implements ProgressListener, AutoCloseable {
31 public ProgressDialog(JFrame parent) { 31 public ProgressDialog(JFrame parent) {
32 32
33 // init frame 33 // init frame
34 this.frame = new JFrame(String.format(I18n.translate("progress.operation"), Constants.NAME)); 34 this.frame = new JFrame(String.format(I18n.translate("progress.operation"), Enigma.NAME));
35 final Container pane = this.frame.getContentPane(); 35 final Container pane = this.frame.getContentPane();
36 FlowLayout layout = new FlowLayout(); 36 FlowLayout layout = new FlowLayout();
37 layout.setAlignment(FlowLayout.LEFT); 37 layout.setAlignment(FlowLayout.LEFT);
@@ -44,7 +44,7 @@ public class ProgressDialog implements ProgressListener, AutoCloseable {
44 JPanel panel = new JPanel(); 44 JPanel panel = new JPanel();
45 pane.add(panel); 45 pane.add(panel);
46 panel.setLayout(new BorderLayout()); 46 panel.setLayout(new BorderLayout());
47 this.labelText = Utils.unboldLabel(new JLabel()); 47 this.labelText = GuiUtil.unboldLabel(new JLabel());
48 this.progress = new JProgressBar(); 48 this.progress = new JProgressBar();
49 this.labelText.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); 49 this.labelText.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
50 panel.add(this.labelText, BorderLayout.NORTH); 50 panel.add(this.labelText, BorderLayout.NORTH);
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java
index b283a37..2d396c3 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java
@@ -30,8 +30,8 @@ import cuchaz.enigma.gui.util.AbstractListCellRenderer;
30import cuchaz.enigma.gui.util.ScaleUtil; 30import cuchaz.enigma.gui.util.ScaleUtil;
31import cuchaz.enigma.translation.representation.entry.ClassEntry; 31import cuchaz.enigma.translation.representation.entry.ClassEntry;
32import cuchaz.enigma.utils.I18n; 32import cuchaz.enigma.utils.I18n;
33import cuchaz.enigma.utils.search.SearchEntry; 33import cuchaz.enigma.gui.search.SearchEntry;
34import cuchaz.enigma.utils.search.SearchUtil; 34import cuchaz.enigma.gui.search.SearchUtil;
35 35
36public class SearchDialog { 36public class SearchDialog {
37 37
diff --git a/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java
index 868eba7..868eba7 100644
--- a/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java
diff --git a/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java
index fb497b1..fb497b1 100644
--- a/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java
diff --git a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
index dc2cf8f..24f42ff 100644
--- a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
@@ -1,7 +1,7 @@
1package cuchaz.enigma.gui.elements; 1package cuchaz.enigma.gui.elements;
2 2
3import cuchaz.enigma.config.Config; 3import cuchaz.enigma.gui.config.Config;
4import cuchaz.enigma.config.Themes; 4import cuchaz.enigma.gui.config.Themes;
5import cuchaz.enigma.gui.Gui; 5import cuchaz.enigma.gui.Gui;
6import cuchaz.enigma.gui.dialog.AboutDialog; 6import cuchaz.enigma.gui.dialog.AboutDialog;
7import cuchaz.enigma.gui.dialog.ChangeDialog; 7import cuchaz.enigma.gui.dialog.ChangeDialog;
diff --git a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java
index b92041c..b92041c 100644
--- a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java
diff --git a/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java
index f5f6628..f5f6628 100644
--- a/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java
diff --git a/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java
index cea11a6..cea11a6 100644
--- a/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java
diff --git a/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java
index c16e0af..c16e0af 100644
--- a/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java
diff --git a/src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java
index cef6494..3ae4380 100644
--- a/src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java
@@ -11,7 +11,7 @@
11 11
12package cuchaz.enigma.gui.highlight; 12package cuchaz.enigma.gui.highlight;
13 13
14import cuchaz.enigma.config.Config; 14import cuchaz.enigma.gui.config.Config;
15 15
16import javax.swing.text.BadLocationException; 16import javax.swing.text.BadLocationException;
17import javax.swing.text.Highlighter; 17import javax.swing.text.Highlighter;
diff --git a/src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java
index 81a70a9..2e4e462 100644
--- a/src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java
@@ -11,7 +11,7 @@
11 11
12package cuchaz.enigma.gui.highlight; 12package cuchaz.enigma.gui.highlight;
13 13
14import cuchaz.enigma.config.Config; 14import cuchaz.enigma.gui.config.Config;
15 15
16import javax.swing.text.Highlighter; 16import javax.swing.text.Highlighter;
17import javax.swing.text.JTextComponent; 17import javax.swing.text.JTextComponent;
diff --git a/src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java
index ae23f32..ae23f32 100644
--- a/src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java
diff --git a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java
index 922f8f2..922f8f2 100644
--- a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java
diff --git a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java
index caa985c..caa985c 100644
--- a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java
index c24226b..c24226b 100644
--- a/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java
index 8637afd..346d665 100644
--- a/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java
@@ -2,7 +2,7 @@ package cuchaz.enigma.gui.panels;
2 2
3import cuchaz.enigma.EnigmaProject; 3import cuchaz.enigma.EnigmaProject;
4import cuchaz.enigma.analysis.EntryReference; 4import cuchaz.enigma.analysis.EntryReference;
5import cuchaz.enigma.config.Config; 5import cuchaz.enigma.gui.config.Config;
6import cuchaz.enigma.gui.BrowserCaret; 6import cuchaz.enigma.gui.BrowserCaret;
7import cuchaz.enigma.gui.Gui; 7import cuchaz.enigma.gui.Gui;
8import cuchaz.enigma.translation.representation.entry.ClassEntry; 8import cuchaz.enigma.translation.representation.entry.ClassEntry;
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java
index de069bc..8c19efb 100644
--- a/src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java
@@ -1,9 +1,9 @@
1package cuchaz.enigma.gui.panels; 1package cuchaz.enigma.gui.panels;
2 2
3import cuchaz.enigma.gui.Gui; 3import cuchaz.enigma.gui.Gui;
4import cuchaz.enigma.gui.util.GuiUtil;
4import cuchaz.enigma.utils.I18n; 5import cuchaz.enigma.utils.I18n;
5import cuchaz.enigma.gui.util.ScaleUtil; 6import cuchaz.enigma.gui.util.ScaleUtil;
6import cuchaz.enigma.utils.Utils;
7 7
8import javax.swing.*; 8import javax.swing.*;
9import java.awt.*; 9import java.awt.*;
@@ -23,7 +23,7 @@ public class PanelIdentifier extends JPanel {
23 public void clearReference() { 23 public void clearReference() {
24 this.removeAll(); 24 this.removeAll();
25 JLabel label = new JLabel(I18n.translate("info_panel.identifier.none")); 25 JLabel label = new JLabel(I18n.translate("info_panel.identifier.none"));
26 Utils.unboldLabel(label); 26 GuiUtil.unboldLabel(label);
27 label.setHorizontalAlignment(JLabel.CENTER); 27 label.setHorizontalAlignment(JLabel.CENTER);
28 this.add(label); 28 this.add(label);
29 29
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java
index dd7f9f9..dd7f9f9 100644
--- a/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java
diff --git a/src/main/java/cuchaz/enigma/utils/search/SearchEntry.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchEntry.java
index 48b255f..91727c3 100644
--- a/src/main/java/cuchaz/enigma/utils/search/SearchEntry.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchEntry.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.utils.search; 1package cuchaz.enigma.gui.search;
2 2
3import java.util.List; 3import java.util.List;
4 4
diff --git a/src/main/java/cuchaz/enigma/utils/search/SearchUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchUtil.java
index a51afbb..a3b35fa 100644
--- a/src/main/java/cuchaz/enigma/utils/search/SearchUtil.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchUtil.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.utils.search; 1package cuchaz.enigma.gui.search;
2 2
3import java.util.*; 3import java.util.*;
4import java.util.concurrent.Executor; 4import java.util.concurrent.Executor;
diff --git a/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java
index e783530..d7f7ec0 100644
--- a/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java
@@ -46,7 +46,7 @@ public class StatsGenerator {
46 totalWork += entryIndex.getClasses().size(); 46 totalWork += entryIndex.getClasses().size();
47 } 47 }
48 48
49 progress.init(totalWork, I18n.translate("progress.stats")); 49 progress.init(totalWork, "progress.stats");
50 50
51 Map<String, Integer> counts = new HashMap<>(); 51 Map<String, Integer> counts = new HashMap<>();
52 52
diff --git a/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java
index 70b4f40..70b4f40 100644
--- a/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java
diff --git a/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java
index 612e3e9..612e3e9 100644
--- a/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
new file mode 100644
index 0000000..70172fe
--- /dev/null
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
@@ -0,0 +1,56 @@
1package cuchaz.enigma.gui.util;
2
3import javax.swing.*;
4import javax.swing.text.BadLocationException;
5import javax.swing.text.JTextComponent;
6import java.awt.*;
7import java.awt.event.MouseEvent;
8import java.io.IOException;
9import java.net.URI;
10import java.net.URISyntaxException;
11import java.util.Locale;
12import java.util.StringJoiner;
13
14public class GuiUtil {
15 public static void openUrl(String url) {
16 if (Desktop.isDesktopSupported()) {
17 Desktop desktop = Desktop.getDesktop();
18 try {
19 desktop.browse(new URI(url));
20 } catch (IOException ex) {
21 throw new Error(ex);
22 } catch (URISyntaxException ex) {
23 throw new IllegalArgumentException(ex);
24 }
25 }
26 }
27
28 public static JLabel unboldLabel(JLabel label) {
29 Font font = label.getFont();
30 label.setFont(font.deriveFont(font.getStyle() & ~Font.BOLD));
31 return label;
32 }
33
34 public static void showToolTipNow(JComponent component) {
35 // HACKHACK: trick the tooltip manager into showing the tooltip right now
36 ToolTipManager manager = ToolTipManager.sharedInstance();
37 int oldDelay = manager.getInitialDelay();
38 manager.setInitialDelay(0);
39 manager.mouseMoved(new MouseEvent(component, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, 0, 0, 0, false));
40 manager.setInitialDelay(oldDelay);
41 }
42
43 public static Rectangle safeModelToView(JTextComponent component, int modelPos) {
44 if (modelPos < 0) {
45 modelPos = 0;
46 } else if (modelPos >= component.getText().length()) {
47 modelPos = component.getText().length();
48 }
49 try {
50 return component.modelToView(modelPos);
51 } catch (BadLocationException e) {
52 throw new RuntimeException(e);
53 }
54 }
55
56}
diff --git a/src/main/java/cuchaz/enigma/gui/util/History.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/History.java
index 94f3105..b128699 100644
--- a/src/main/java/cuchaz/enigma/gui/util/History.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/History.java
@@ -1,49 +1,49 @@
1package cuchaz.enigma.gui.util; 1package cuchaz.enigma.gui.util;
2 2
3import com.google.common.collect.Queues; 3import com.google.common.collect.Queues;
4 4
5import java.util.Deque; 5import java.util.Deque;
6 6
7public class History<T> { 7public class History<T> {
8 private final Deque<T> previous = Queues.newArrayDeque(); 8 private final Deque<T> previous = Queues.newArrayDeque();
9 private final Deque<T> next = Queues.newArrayDeque(); 9 private final Deque<T> next = Queues.newArrayDeque();
10 private T current; 10 private T current;
11 11
12 public History(T initial) { 12 public History(T initial) {
13 current = initial; 13 current = initial;
14 } 14 }
15 15
16 public T getCurrent() { 16 public T getCurrent() {
17 return current; 17 return current;
18 } 18 }
19 19
20 public void push(T value) { 20 public void push(T value) {
21 previous.addLast(current); 21 previous.addLast(current);
22 current = value; 22 current = value;
23 next.clear(); 23 next.clear();
24 } 24 }
25 25
26 public void replace(T value) { 26 public void replace(T value) {
27 current = value; 27 current = value;
28 } 28 }
29 29
30 public boolean canGoBack() { 30 public boolean canGoBack() {
31 return !previous.isEmpty(); 31 return !previous.isEmpty();
32 } 32 }
33 33
34 public T goBack() { 34 public T goBack() {
35 next.addFirst(current); 35 next.addFirst(current);
36 current = previous.removeLast(); 36 current = previous.removeLast();
37 return current; 37 return current;
38 } 38 }
39 39
40 public boolean canGoForward() { 40 public boolean canGoForward() {
41 return !next.isEmpty(); 41 return !next.isEmpty();
42 } 42 }
43 43
44 public T goForward() { 44 public T goForward() {
45 previous.addLast(current); 45 previous.addLast(current);
46 current = next.removeFirst(); 46 current = next.removeFirst();
47 return current; 47 return current;
48 } 48 }
49} 49}
diff --git a/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java
index d045c6d..d045c6d 100644
--- a/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java
diff --git a/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java
index 9f722e9..e7ee565 100644
--- a/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java
@@ -16,7 +16,7 @@ import com.github.swingdpi.plaf.BasicTweaker;
16import com.github.swingdpi.plaf.MetalTweaker; 16import com.github.swingdpi.plaf.MetalTweaker;
17import com.github.swingdpi.plaf.NimbusTweaker; 17import com.github.swingdpi.plaf.NimbusTweaker;
18import com.github.swingdpi.plaf.WindowsTweaker; 18import com.github.swingdpi.plaf.WindowsTweaker;
19import cuchaz.enigma.config.Config; 19import cuchaz.enigma.gui.config.Config;
20import de.sciss.syntaxpane.DefaultSyntaxKit; 20import de.sciss.syntaxpane.DefaultSyntaxKit;
21 21
22public class ScaleUtil { 22public class ScaleUtil {
diff --git a/src/main/resources/about.html b/enigma-swing/src/main/resources/about.html
index b75c1bf..b75c1bf 100644
--- a/src/main/resources/about.html
+++ b/enigma-swing/src/main/resources/about.html
diff --git a/src/main/resources/stats.html b/enigma-swing/src/main/resources/stats.html
index fcff7c0..fcff7c0 100644
--- a/src/main/resources/stats.html
+++ b/enigma-swing/src/main/resources/stats.html
diff --git a/enigma/build.gradle b/enigma/build.gradle
new file mode 100644
index 0000000..7cebcd1
--- /dev/null
+++ b/enigma/build.gradle
@@ -0,0 +1,63 @@
1configurations {
2 proGuard
3}
4
5dependencies {
6 implementation 'org.ow2.asm:asm:8.0'
7 implementation 'org.ow2.asm:asm-commons:8.0'
8 implementation 'org.ow2.asm:asm-tree:8.0'
9 implementation 'org.ow2.asm:asm-util:8.0'
10
11 implementation 'net.fabricmc:procyon-fabric-compilertools:0.5.35.13'
12 implementation 'net.fabricmc:cfr:0.0.1'
13
14 testImplementation 'junit:junit:4.+'
15 testImplementation 'org.hamcrest:hamcrest-all:1.+'
16 proGuard 'net.sf.proguard:proguard-base:6.+'
17}
18
19// Generate "version.txt" file
20
21ext.genOutputDir = file("$buildDir/generated-resources")
22
23task generateVersionFile {
24 ext.outputFile = file("$genOutputDir/version.txt")
25 outputs.file(outputFile)
26 doLast {
27 outputFile.text = "${project.version}"
28 }
29}
30
31sourceSets.main.output.dir genOutputDir, builtBy: generateVersionFile
32
33// Generate obfuscated JARs for tests
34
35def libraryJarsArg = JavaVersion.current().java9Compatible ? "<java.home>/jmods" : "<java.home>/lib/rt.jar"
36
37file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile ->
38 if (theFile.directory) {
39 task("${theFile.name}TestJar", type: Jar) {
40 from(sourceSets.test.output) {
41 include "cuchaz/enigma/inputs/$theFile.name/**/*.class"
42 include 'cuchaz/enigma/inputs/Keep.class'
43 }
44
45 archiveFileName = theFile.name + '.jar'
46 destinationDirectory = file('build/test-inputs')
47 }
48
49 task("${theFile.name}TestObf", type: JavaExec,
50 dependsOn: "${theFile.name}TestJar") {
51 main 'proguard.ProGuard'
52 classpath configurations.proGuard
53
54 args '@src/test/resources/proguard-test.conf', '-injars', file('build/test-inputs/' +
55 "${theFile.name}.jar"), '-libraryjars', libraryJarsArg,
56 '-outjars', file('build/test-obf/' + "${theFile.name}.jar")
57 }
58
59 test.dependsOn "${theFile.name}TestObf"
60 }
61}
62
63test.dependsOn 'translationTestObf'
diff --git a/src/main/java/cuchaz/enigma/ClassProvider.java b/enigma/src/main/java/cuchaz/enigma/ClassProvider.java
index 2b91379..2b91379 100644
--- a/src/main/java/cuchaz/enigma/ClassProvider.java
+++ b/enigma/src/main/java/cuchaz/enigma/ClassProvider.java
diff --git a/src/main/java/cuchaz/enigma/Enigma.java b/enigma/src/main/java/cuchaz/enigma/Enigma.java
index f5f0649..73c9a09 100644
--- a/src/main/java/cuchaz/enigma/Enigma.java
+++ b/enigma/src/main/java/cuchaz/enigma/Enigma.java
@@ -22,6 +22,7 @@ import cuchaz.enigma.api.service.EnigmaServiceFactory;
22import cuchaz.enigma.api.service.EnigmaServiceType; 22import cuchaz.enigma.api.service.EnigmaServiceType;
23import cuchaz.enigma.api.service.JarIndexerService; 23import cuchaz.enigma.api.service.JarIndexerService;
24import cuchaz.enigma.utils.Utils; 24import cuchaz.enigma.utils.Utils;
25import org.objectweb.asm.Opcodes;
25 26
26import java.io.IOException; 27import java.io.IOException;
27import java.nio.file.Path; 28import java.nio.file.Path;
@@ -29,7 +30,12 @@ import java.util.List;
29import java.util.ServiceLoader; 30import java.util.ServiceLoader;
30 31
31public class Enigma { 32public class Enigma {
32 private final EnigmaProfile profile; 33 public static final String NAME = "Enigma";
34 public static final String VERSION;
35 public static final String URL = "https://fabricmc.net";
36 public static final int ASM_VERSION = Opcodes.ASM8;
37
38 private final EnigmaProfile profile;
33 private final EnigmaServices services; 39 private final EnigmaServices services;
34 40
35 private Enigma(EnigmaProfile profile, EnigmaServices services) { 41 private Enigma(EnigmaProfile profile, EnigmaServices services) {
@@ -118,4 +124,16 @@ public class Enigma {
118 return new EnigmaServices(services.build()); 124 return new EnigmaServices(services.build());
119 } 125 }
120 } 126 }
127
128 static {
129 String version = null;
130
131 try {
132 version = Utils.readResourceToString("/version.txt");
133 } catch (Throwable t) {
134 version = "Unknown Version";
135 }
136
137 VERSION = version;
138 }
121} 139}
diff --git a/src/main/java/cuchaz/enigma/EnigmaProfile.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProfile.java
index 09b90f5..daf2727 100644
--- a/src/main/java/cuchaz/enigma/EnigmaProfile.java
+++ b/enigma/src/main/java/cuchaz/enigma/EnigmaProfile.java
@@ -11,8 +11,8 @@ import com.google.gson.JsonParseException;
11import com.google.gson.annotations.SerializedName; 11import com.google.gson.annotations.SerializedName;
12import com.google.gson.reflect.TypeToken; 12import com.google.gson.reflect.TypeToken;
13import cuchaz.enigma.api.service.EnigmaServiceType; 13import cuchaz.enigma.api.service.EnigmaServiceType;
14import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 14import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
15import cuchaz.enigma.translation.mapping.MappingSaveParameters; 15import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
16 16
17import javax.annotation.Nullable; 17import javax.annotation.Nullable;
18import java.io.BufferedReader; 18import java.io.BufferedReader;
@@ -54,7 +54,7 @@ public final class EnigmaProfile {
54 return EnigmaProfile.parse(reader); 54 return EnigmaProfile.parse(reader);
55 } 55 }
56 } else { 56 } else {
57 try (BufferedReader reader = new BufferedReader(new InputStreamReader(Main.class.getResourceAsStream("/profile.json"), StandardCharsets.UTF_8))) { 57 try (BufferedReader reader = new BufferedReader(new InputStreamReader(EnigmaProfile.class.getResourceAsStream("/profile.json"), StandardCharsets.UTF_8))) {
58 return EnigmaProfile.parse(reader); 58 return EnigmaProfile.parse(reader);
59 } catch (IOException ex) { 59 } catch (IOException ex) {
60 System.err.println("Failed to load default profile, will use empty profile: " + ex.getMessage()); 60 System.err.println("Failed to load default profile, will use empty profile: " + ex.getMessage());
diff --git a/src/main/java/cuchaz/enigma/EnigmaProject.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
index b345fb3..43ea14e 100644
--- a/src/main/java/cuchaz/enigma/EnigmaProject.java
+++ b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java
@@ -8,8 +8,8 @@ import cuchaz.enigma.analysis.index.JarIndex;
8import cuchaz.enigma.api.service.NameProposalService; 8import cuchaz.enigma.api.service.NameProposalService;
9import cuchaz.enigma.bytecode.translators.SourceFixVisitor; 9import cuchaz.enigma.bytecode.translators.SourceFixVisitor;
10import cuchaz.enigma.bytecode.translators.TranslationClassVisitor; 10import cuchaz.enigma.bytecode.translators.TranslationClassVisitor;
11import cuchaz.enigma.network.EnigmaServer;
12import cuchaz.enigma.source.*; 11import cuchaz.enigma.source.*;
12import cuchaz.enigma.translation.ProposingTranslator;
13import cuchaz.enigma.translation.Translator; 13import cuchaz.enigma.translation.Translator;
14import cuchaz.enigma.translation.mapping.*; 14import cuchaz.enigma.translation.mapping.*;
15import cuchaz.enigma.translation.mapping.tree.DeltaTrackingTree; 15import cuchaz.enigma.translation.mapping.tree.DeltaTrackingTree;
@@ -20,9 +20,7 @@ import cuchaz.enigma.translation.representation.entry.LocalVariableEntry;
20import cuchaz.enigma.translation.representation.entry.MethodEntry; 20import cuchaz.enigma.translation.representation.entry.MethodEntry;
21import cuchaz.enigma.utils.I18n; 21import cuchaz.enigma.utils.I18n;
22 22
23import cuchaz.enigma.utils.Utils;
24import org.objectweb.asm.ClassWriter; 23import org.objectweb.asm.ClassWriter;
25import org.objectweb.asm.Opcodes;
26import org.objectweb.asm.tree.ClassNode; 24import org.objectweb.asm.tree.ClassNode;
27 25
28import java.io.*; 26import java.io.*;
@@ -46,7 +44,7 @@ public class EnigmaProject {
46 private EntryRemapper mapper; 44 private EntryRemapper mapper;
47 45
48 public EnigmaProject(Enigma enigma, ClassCache classCache, JarIndex jarIndex, byte[] jarChecksum) { 46 public EnigmaProject(Enigma enigma, ClassCache classCache, JarIndex jarIndex, byte[] jarChecksum) {
49 Preconditions.checkArgument(jarChecksum.length == EnigmaServer.CHECKSUM_SIZE); 47 Preconditions.checkArgument(jarChecksum.length == 20);
50 this.enigma = enigma; 48 this.enigma = enigma;
51 this.classCache = classCache; 49 this.classCache = classCache;
52 this.jarIndex = jarIndex; 50 this.jarIndex = jarIndex;
@@ -105,6 +103,20 @@ public class EnigmaProject {
105 return droppedMappings.keySet(); 103 return droppedMappings.keySet();
106 } 104 }
107 105
106 public Decompiler createDecompiler(DecompilerService decompilerService) {
107 return decompilerService.create(name -> {
108 ClassNode node = this.getClassCache().getClassNode(name);
109
110 if (node == null) {
111 return null;
112 }
113
114 ClassNode fixedNode = new ClassNode();
115 node.accept(new SourceFixVisitor(Enigma.ASM_VERSION, fixedNode, getJarIndex()));
116 return fixedNode;
117 }, new SourceSettings(true, true));
118 }
119
108 public boolean isRenamable(Entry<?> obfEntry) { 120 public boolean isRenamable(Entry<?> obfEntry) {
109 if (obfEntry instanceof MethodEntry) { 121 if (obfEntry instanceof MethodEntry) {
110 // HACKHACK: Object methods are not obfuscated identifiers 122 // HACKHACK: Object methods are not obfuscated identifiers
@@ -162,7 +174,7 @@ public class EnigmaProject {
162 ClassNode node = classCache.getClassNode(entry.getFullName()); 174 ClassNode node = classCache.getClassNode(entry.getFullName());
163 if (node != null) { 175 if (node != null) {
164 ClassNode translatedNode = new ClassNode(); 176 ClassNode translatedNode = new ClassNode();
165 node.accept(new TranslationClassVisitor(deobfuscator, Utils.ASM_VERSION, new SourceFixVisitor(Utils.ASM_VERSION, translatedNode, jarIndex))); 177 node.accept(new TranslationClassVisitor(deobfuscator, Enigma.ASM_VERSION, new SourceFixVisitor(Enigma.ASM_VERSION, translatedNode, jarIndex)));
166 return translatedNode; 178 return translatedNode;
167 } 179 }
168 180
diff --git a/src/main/java/cuchaz/enigma/EnigmaServices.java b/enigma/src/main/java/cuchaz/enigma/EnigmaServices.java
index df3b7bb..df3b7bb 100644
--- a/src/main/java/cuchaz/enigma/EnigmaServices.java
+++ b/enigma/src/main/java/cuchaz/enigma/EnigmaServices.java
diff --git a/src/main/java/cuchaz/enigma/ProgressListener.java b/enigma/src/main/java/cuchaz/enigma/ProgressListener.java
index 6da3b81..6da3b81 100644
--- a/src/main/java/cuchaz/enigma/ProgressListener.java
+++ b/enigma/src/main/java/cuchaz/enigma/ProgressListener.java
diff --git a/src/main/java/cuchaz/enigma/analysis/Access.java b/enigma/src/main/java/cuchaz/enigma/analysis/Access.java
index 82ca669..82ca669 100644
--- a/src/main/java/cuchaz/enigma/analysis/Access.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/Access.java
diff --git a/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java b/enigma/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java
index dc3f553..4685b39 100644
--- a/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java
@@ -1,18 +1,17 @@
1package cuchaz.enigma.analysis; 1package cuchaz.enigma.analysis;
2 2
3import cuchaz.enigma.Enigma;
3import cuchaz.enigma.api.EnigmaPlugin; 4import cuchaz.enigma.api.EnigmaPlugin;
4import cuchaz.enigma.api.EnigmaPluginContext; 5import cuchaz.enigma.api.EnigmaPluginContext;
5import cuchaz.enigma.api.service.JarIndexerService; 6import cuchaz.enigma.api.service.JarIndexerService;
6import cuchaz.enigma.api.service.NameProposalService; 7import cuchaz.enigma.api.service.NameProposalService;
7import cuchaz.enigma.source.DecompilerService; 8import cuchaz.enigma.source.DecompilerService;
8import cuchaz.enigma.source.Decompilers; 9import cuchaz.enigma.source.Decompilers;
9import cuchaz.enigma.source.procyon.ProcyonDecompiler;
10import cuchaz.enigma.translation.representation.TypeDescriptor; 10import cuchaz.enigma.translation.representation.TypeDescriptor;
11import cuchaz.enigma.translation.representation.entry.ClassEntry; 11import cuchaz.enigma.translation.representation.entry.ClassEntry;
12import cuchaz.enigma.translation.representation.entry.Entry; 12import cuchaz.enigma.translation.representation.entry.Entry;
13import cuchaz.enigma.translation.representation.entry.FieldEntry; 13import cuchaz.enigma.translation.representation.entry.FieldEntry;
14import cuchaz.enigma.utils.Pair; 14import cuchaz.enigma.utils.Pair;
15import cuchaz.enigma.utils.Utils;
16import org.objectweb.asm.ClassReader; 15import org.objectweb.asm.ClassReader;
17import org.objectweb.asm.ClassVisitor; 16import org.objectweb.asm.ClassVisitor;
18import org.objectweb.asm.FieldVisitor; 17import org.objectweb.asm.FieldVisitor;
@@ -70,7 +69,7 @@ public final class BuiltinPlugin implements EnigmaPlugin {
70 private final List<MethodNode> classInits = new ArrayList<>(); 69 private final List<MethodNode> classInits = new ArrayList<>();
71 70
72 EnumFieldNameFindingVisitor(Map<Entry<?>, String> mappings) { 71 EnumFieldNameFindingVisitor(Map<Entry<?>, String> mappings) {
73 super(Utils.ASM_VERSION); 72 super(Enigma.ASM_VERSION);
74 this.mappings = mappings; 73 this.mappings = mappings;
75 } 74 }
76 75
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassCache.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassCache.java
index f694bf3..a3d24e3 100644
--- a/src/main/java/cuchaz/enigma/analysis/ClassCache.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ClassCache.java
@@ -4,13 +4,12 @@ import com.google.common.cache.Cache;
4import com.google.common.cache.CacheBuilder; 4import com.google.common.cache.CacheBuilder;
5import com.google.common.collect.ImmutableSet; 5import com.google.common.collect.ImmutableSet;
6import cuchaz.enigma.ClassProvider; 6import cuchaz.enigma.ClassProvider;
7import cuchaz.enigma.Enigma;
7import cuchaz.enigma.ProgressListener; 8import cuchaz.enigma.ProgressListener;
8import cuchaz.enigma.analysis.index.JarIndex; 9import cuchaz.enigma.analysis.index.JarIndex;
9import cuchaz.enigma.bytecode.translators.LocalVariableFixVisitor; 10import cuchaz.enigma.bytecode.translators.LocalVariableFixVisitor;
10import cuchaz.enigma.utils.Utils;
11import org.objectweb.asm.ClassReader; 11import org.objectweb.asm.ClassReader;
12import org.objectweb.asm.ClassVisitor; 12import org.objectweb.asm.ClassVisitor;
13import org.objectweb.asm.Opcodes;
14import org.objectweb.asm.tree.ClassNode; 13import org.objectweb.asm.tree.ClassNode;
15 14
16import javax.annotation.Nullable; 15import javax.annotation.Nullable;
@@ -78,7 +77,7 @@ public final class ClassCache implements AutoCloseable, ClassProvider {
78 77
79 ClassNode node = new ClassNode(); 78 ClassNode node = new ClassNode();
80 79
81 LocalVariableFixVisitor visitor = new LocalVariableFixVisitor(Utils.ASM_VERSION, node); 80 LocalVariableFixVisitor visitor = new LocalVariableFixVisitor(Enigma.ASM_VERSION, node);
82 reader.accept(visitor, 0); 81 reader.accept(visitor, 0);
83 82
84 return node; 83 return node;
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
index 0fc44ca..0fc44ca 100644
--- a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
index 7904c5f..7904c5f 100644
--- a/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
index 90d8a6c..90d8a6c 100644
--- a/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/EntryReference.java b/enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java
index 2e738c0..320f945 100644
--- a/src/main/java/cuchaz/enigma/analysis/EntryReference.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java
@@ -19,10 +19,10 @@ import cuchaz.enigma.translation.mapping.EntryMap;
19import cuchaz.enigma.translation.representation.entry.ClassEntry; 19import cuchaz.enigma.translation.representation.entry.ClassEntry;
20import cuchaz.enigma.translation.representation.entry.Entry; 20import cuchaz.enigma.translation.representation.entry.Entry;
21import cuchaz.enigma.translation.representation.entry.MethodEntry; 21import cuchaz.enigma.translation.representation.entry.MethodEntry;
22import cuchaz.enigma.utils.Utils;
23 22
24import java.util.Arrays; 23import java.util.Arrays;
25import java.util.List; 24import java.util.List;
25import java.util.Objects;
26 26
27public class EntryReference<E extends Entry<?>, C extends Entry<?>> implements Translatable { 27public class EntryReference<E extends Entry<?>, C extends Entry<?>> implements Translatable {
28 28
@@ -89,7 +89,7 @@ public class EntryReference<E extends Entry<?>, C extends Entry<?>> implements T
89 @Override 89 @Override
90 public int hashCode() { 90 public int hashCode() {
91 if (context != null) { 91 if (context != null) {
92 return Utils.combineHashesOrdered(entry.hashCode(), context.hashCode()); 92 return Objects.hash(entry.hashCode(), context.hashCode());
93 } 93 }
94 return entry.hashCode(); 94 return entry.hashCode();
95 } 95 }
diff --git a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
index 4beab7f..4beab7f 100644
--- a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java b/enigma/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java
index 80a7154..ec8f323 100644
--- a/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java
@@ -1,11 +1,11 @@
1package cuchaz.enigma.analysis; 1package cuchaz.enigma.analysis;
2 2
3import cuchaz.enigma.Enigma;
3import cuchaz.enigma.analysis.index.EntryIndex; 4import cuchaz.enigma.analysis.index.EntryIndex;
4import cuchaz.enigma.analysis.index.InheritanceIndex; 5import cuchaz.enigma.analysis.index.InheritanceIndex;
5import cuchaz.enigma.translation.representation.AccessFlags; 6import cuchaz.enigma.translation.representation.AccessFlags;
6import cuchaz.enigma.translation.representation.entry.ClassDefEntry; 7import cuchaz.enigma.translation.representation.entry.ClassDefEntry;
7import cuchaz.enigma.translation.representation.entry.ClassEntry; 8import cuchaz.enigma.translation.representation.entry.ClassEntry;
8import cuchaz.enigma.utils.Utils;
9import org.objectweb.asm.Type; 9import org.objectweb.asm.Type;
10import org.objectweb.asm.tree.analysis.BasicValue; 10import org.objectweb.asm.tree.analysis.BasicValue;
11import org.objectweb.asm.tree.analysis.SimpleVerifier; 11import org.objectweb.asm.tree.analysis.SimpleVerifier;
@@ -18,7 +18,7 @@ public class IndexSimpleVerifier extends SimpleVerifier {
18 private final InheritanceIndex inheritanceIndex; 18 private final InheritanceIndex inheritanceIndex;
19 19
20 public IndexSimpleVerifier(EntryIndex entryIndex, InheritanceIndex inheritanceIndex) { 20 public IndexSimpleVerifier(EntryIndex entryIndex, InheritanceIndex inheritanceIndex) {
21 super(Utils.ASM_VERSION, null, null, null, false); 21 super(Enigma.ASM_VERSION, null, null, null, false);
22 this.entryIndex = entryIndex; 22 this.entryIndex = entryIndex;
23 this.inheritanceIndex = inheritanceIndex; 23 this.inheritanceIndex = inheritanceIndex;
24 } 24 }
diff --git a/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java b/enigma/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java
index 0c2dfd7..0c2dfd7 100644
--- a/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java
diff --git a/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java b/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java
index 8a1c238..fad10bf 100644
--- a/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java
@@ -1,7 +1,6 @@
1package cuchaz.enigma.analysis; 1package cuchaz.enigma.analysis;
2 2
3import cuchaz.enigma.utils.Utils; 3import cuchaz.enigma.Enigma;
4import org.objectweb.asm.Opcodes;
5import org.objectweb.asm.Type; 4import org.objectweb.asm.Type;
6import org.objectweb.asm.tree.AbstractInsnNode; 5import org.objectweb.asm.tree.AbstractInsnNode;
7import org.objectweb.asm.tree.analysis.AnalyzerException; 6import org.objectweb.asm.tree.analysis.AnalyzerException;
@@ -17,7 +16,7 @@ public class InterpreterPair<V extends Value, W extends Value> extends Interpret
17 private final Interpreter<W> right; 16 private final Interpreter<W> right;
18 17
19 public InterpreterPair(Interpreter<V> left, Interpreter<W> right) { 18 public InterpreterPair(Interpreter<V> left, Interpreter<W> right) {
20 super(Utils.ASM_VERSION); 19 super(Enigma.ASM_VERSION);
21 this.left = left; 20 this.left = left;
22 this.right = right; 21 this.right = right;
23 } 22 }
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
index b09f7ac..b09f7ac 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
index e77b5cc..e77b5cc 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java
index 8117103..8117103 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
index 8995eb5..8995eb5 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java b/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java
index 5b19d18..5b19d18 100644
--- a/src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java
diff --git a/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java
index c0a3a75..c0a3a75 100644
--- a/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java
index a4b1aac..a4b1aac 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java
index 9a2726e..9a2726e 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java
index f9cb23c..f9cb23c 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java
index f3d419e..f3d419e 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java
index 1ab2abd..1ab2abd 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java
index e401c2f..de3f5f5 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java
@@ -13,6 +13,7 @@ package cuchaz.enigma.analysis.index;
13 13
14import com.google.common.collect.HashMultimap; 14import com.google.common.collect.HashMultimap;
15import com.google.common.collect.Multimap; 15import com.google.common.collect.Multimap;
16import cuchaz.enigma.Enigma;
16import cuchaz.enigma.ProgressListener; 17import cuchaz.enigma.ProgressListener;
17import cuchaz.enigma.analysis.ClassCache; 18import cuchaz.enigma.analysis.ClassCache;
18import cuchaz.enigma.analysis.ReferenceTargetType; 19import cuchaz.enigma.analysis.ReferenceTargetType;
@@ -22,9 +23,7 @@ import cuchaz.enigma.translation.representation.Lambda;
22import cuchaz.enigma.translation.representation.entry.*; 23import cuchaz.enigma.translation.representation.entry.*;
23import cuchaz.enigma.utils.I18n; 24import cuchaz.enigma.utils.I18n;
24 25
25import cuchaz.enigma.utils.Utils;
26import org.objectweb.asm.ClassReader; 26import org.objectweb.asm.ClassReader;
27import org.objectweb.asm.Opcodes;
28 27
29import java.util.Arrays; 28import java.util.Arrays;
30import java.util.Collection; 29import java.util.Collection;
@@ -64,10 +63,10 @@ public class JarIndex implements JarIndexer {
64 progress.init(4, I18n.translate("progress.jar.indexing")); 63 progress.init(4, I18n.translate("progress.jar.indexing"));
65 64
66 progress.step(1, I18n.translate("progress.jar.indexing.entries")); 65 progress.step(1, I18n.translate("progress.jar.indexing.entries"));
67 classCache.visit(() -> new IndexClassVisitor(this, Utils.ASM_VERSION), ClassReader.SKIP_CODE); 66 classCache.visit(() -> new IndexClassVisitor(this, Enigma.ASM_VERSION), ClassReader.SKIP_CODE);
68 67
69 progress.step(2, I18n.translate("progress.jar.indexing.references")); 68 progress.step(2, I18n.translate("progress.jar.indexing.references"));
70 classCache.visit(() -> new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Utils.ASM_VERSION), 0); 69 classCache.visit(() -> new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Enigma.ASM_VERSION), 0);
71 70
72 progress.step(3, I18n.translate("progress.jar.indexing.methods")); 71 progress.step(3, I18n.translate("progress.jar.indexing.methods"));
73 bridgeMethodIndex.findBridgeMethods(); 72 bridgeMethodIndex.findBridgeMethods();
diff --git a/src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java
index f17e7c9..f17e7c9 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java
diff --git a/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java
index 63eb730..64de5f3 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java
@@ -1,147 +1,147 @@
1package cuchaz.enigma.analysis.index; 1package cuchaz.enigma.analysis.index;
2 2
3import com.google.common.collect.HashMultimap; 3import com.google.common.collect.HashMultimap;
4import com.google.common.collect.Lists; 4import com.google.common.collect.Lists;
5import com.google.common.collect.Maps; 5import com.google.common.collect.Maps;
6import com.google.common.collect.Sets; 6import com.google.common.collect.Sets;
7import cuchaz.enigma.analysis.EntryReference; 7import cuchaz.enigma.analysis.EntryReference;
8import cuchaz.enigma.analysis.ReferenceTargetType; 8import cuchaz.enigma.analysis.ReferenceTargetType;
9import cuchaz.enigma.translation.representation.AccessFlags; 9import cuchaz.enigma.translation.representation.AccessFlags;
10import cuchaz.enigma.translation.representation.entry.*; 10import cuchaz.enigma.translation.representation.entry.*;
11 11
12import java.util.*; 12import java.util.*;
13 13
14public class PackageVisibilityIndex implements JarIndexer { 14public class PackageVisibilityIndex implements JarIndexer {
15 private static boolean requiresSamePackage(AccessFlags entryAcc, EntryReference ref, InheritanceIndex inheritanceIndex) { 15 private static boolean requiresSamePackage(AccessFlags entryAcc, EntryReference ref, InheritanceIndex inheritanceIndex) {
16 if (entryAcc.isPublic()) { 16 if (entryAcc.isPublic()) {
17 return false; 17 return false;
18 } 18 }
19 19
20 if (entryAcc.isProtected()) { 20 if (entryAcc.isProtected()) {
21 ClassEntry contextClass = ref.context.getContainingClass(); 21 ClassEntry contextClass = ref.context.getContainingClass();
22 ClassEntry referencedClass = ref.entry.getContainingClass(); 22 ClassEntry referencedClass = ref.entry.getContainingClass();
23 23
24 if (!inheritanceIndex.getAncestors(contextClass).contains(referencedClass)) { 24 if (!inheritanceIndex.getAncestors(contextClass).contains(referencedClass)) {
25 return true; // access to protected member not in superclass 25 return true; // access to protected member not in superclass
26 } 26 }
27 27
28 if (ref.targetType.getKind() == ReferenceTargetType.Kind.NONE) { 28 if (ref.targetType.getKind() == ReferenceTargetType.Kind.NONE) {
29 return false; // access to superclass or static superclass member 29 return false; // access to superclass or static superclass member
30 } 30 }
31 31
32 // access to instance member only valid if target's class assignable to context class 32 // access to instance member only valid if target's class assignable to context class
33 return !(ref.targetType.getKind() == ReferenceTargetType.Kind.UNINITIALIZED || 33 return !(ref.targetType.getKind() == ReferenceTargetType.Kind.UNINITIALIZED ||
34 ((ReferenceTargetType.ClassType) ref.targetType).getEntry().equals(contextClass) || 34 ((ReferenceTargetType.ClassType) ref.targetType).getEntry().equals(contextClass) ||
35 inheritanceIndex.getAncestors(((ReferenceTargetType.ClassType) ref.targetType).getEntry()).contains(contextClass)); 35 inheritanceIndex.getAncestors(((ReferenceTargetType.ClassType) ref.targetType).getEntry()).contains(contextClass));
36 } 36 }
37 37
38 return true; 38 return true;
39 } 39 }
40 40
41 private final HashMultimap<ClassEntry, ClassEntry> connections = HashMultimap.create(); 41 private final HashMultimap<ClassEntry, ClassEntry> connections = HashMultimap.create();
42 private final List<Set<ClassEntry>> partitions = Lists.newArrayList(); 42 private final List<Set<ClassEntry>> partitions = Lists.newArrayList();
43 private final Map<ClassEntry, Set<ClassEntry>> classPartitions = Maps.newHashMap(); 43 private final Map<ClassEntry, Set<ClassEntry>> classPartitions = Maps.newHashMap();
44 44
45 private void addConnection(ClassEntry classA, ClassEntry classB) { 45 private void addConnection(ClassEntry classA, ClassEntry classB) {
46 if (classA != classB) { 46 if (classA != classB) {
47 connections.put(classA, classB); 47 connections.put(classA, classB);
48 connections.put(classB, classA); 48 connections.put(classB, classA);
49 } 49 }
50 } 50 }
51 51
52 private void buildPartition(Set<ClassEntry> unassignedClasses, Set<ClassEntry> partition, ClassEntry member) { 52 private void buildPartition(Set<ClassEntry> unassignedClasses, Set<ClassEntry> partition, ClassEntry member) {
53 for (ClassEntry connected : connections.get(member)) { 53 for (ClassEntry connected : connections.get(member)) {
54 if (unassignedClasses.remove(connected)) { 54 if (unassignedClasses.remove(connected)) {
55 partition.add(connected); 55 partition.add(connected);
56 buildPartition(unassignedClasses, partition, connected); 56 buildPartition(unassignedClasses, partition, connected);
57 } 57 }
58 } 58 }
59 } 59 }
60 60
61 private void addConnections(EntryIndex entryIndex, ReferenceIndex referenceIndex, InheritanceIndex inheritanceIndex) { 61 private void addConnections(EntryIndex entryIndex, ReferenceIndex referenceIndex, InheritanceIndex inheritanceIndex) {
62 for (FieldEntry entry : entryIndex.getFields()) { 62 for (FieldEntry entry : entryIndex.getFields()) {
63 AccessFlags entryAcc = entryIndex.getFieldAccess(entry); 63 AccessFlags entryAcc = entryIndex.getFieldAccess(entry);
64 if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { 64 if (!entryAcc.isPublic() && !entryAcc.isPrivate()) {
65 for (EntryReference<FieldEntry, MethodDefEntry> ref : referenceIndex.getReferencesToField(entry)) { 65 for (EntryReference<FieldEntry, MethodDefEntry> ref : referenceIndex.getReferencesToField(entry)) {
66 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { 66 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) {
67 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); 67 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass());
68 } 68 }
69 } 69 }
70 } 70 }
71 } 71 }
72 72
73 for (MethodEntry entry : entryIndex.getMethods()) { 73 for (MethodEntry entry : entryIndex.getMethods()) {
74 AccessFlags entryAcc = entryIndex.getMethodAccess(entry); 74 AccessFlags entryAcc = entryIndex.getMethodAccess(entry);
75 if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { 75 if (!entryAcc.isPublic() && !entryAcc.isPrivate()) {
76 for (EntryReference<MethodEntry, MethodDefEntry> ref : referenceIndex.getReferencesToMethod(entry)) { 76 for (EntryReference<MethodEntry, MethodDefEntry> ref : referenceIndex.getReferencesToMethod(entry)) {
77 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { 77 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) {
78 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); 78 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass());
79 } 79 }
80 } 80 }
81 } 81 }
82 } 82 }
83 83
84 for (ClassEntry entry : entryIndex.getClasses()) { 84 for (ClassEntry entry : entryIndex.getClasses()) {
85 AccessFlags entryAcc = entryIndex.getClassAccess(entry); 85 AccessFlags entryAcc = entryIndex.getClassAccess(entry);
86 if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { 86 if (!entryAcc.isPublic() && !entryAcc.isPrivate()) {
87 for (EntryReference<ClassEntry, FieldDefEntry> ref : referenceIndex.getFieldTypeReferencesToClass(entry)) { 87 for (EntryReference<ClassEntry, FieldDefEntry> ref : referenceIndex.getFieldTypeReferencesToClass(entry)) {
88 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { 88 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) {
89 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); 89 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass());
90 } 90 }
91 } 91 }
92 92
93 for (EntryReference<ClassEntry, MethodDefEntry> ref : referenceIndex.getMethodTypeReferencesToClass(entry)) { 93 for (EntryReference<ClassEntry, MethodDefEntry> ref : referenceIndex.getMethodTypeReferencesToClass(entry)) {
94 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { 94 if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) {
95 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); 95 addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass());
96 } 96 }
97 } 97 }
98 } 98 }
99 99
100 for (ClassEntry parent : inheritanceIndex.getParents(entry)) { 100 for (ClassEntry parent : inheritanceIndex.getParents(entry)) {
101 AccessFlags parentAcc = entryIndex.getClassAccess(parent); 101 AccessFlags parentAcc = entryIndex.getClassAccess(parent);
102 if (parentAcc != null && !parentAcc.isPublic() && !parentAcc.isPrivate()) { 102 if (parentAcc != null && !parentAcc.isPublic() && !parentAcc.isPrivate()) {
103 addConnection(entry, parent); 103 addConnection(entry, parent);
104 } 104 }
105 } 105 }
106 106
107 ClassEntry outerClass = entry.getOuterClass(); 107 ClassEntry outerClass = entry.getOuterClass();
108 if (outerClass != null) { 108 if (outerClass != null) {
109 addConnection(entry, outerClass); 109 addConnection(entry, outerClass);
110 } 110 }
111 } 111 }
112 } 112 }
113 113
114 private void addPartitions(EntryIndex entryIndex) { 114 private void addPartitions(EntryIndex entryIndex) {
115 Set<ClassEntry> unassignedClasses = Sets.newHashSet(entryIndex.getClasses()); 115 Set<ClassEntry> unassignedClasses = Sets.newHashSet(entryIndex.getClasses());
116 while (!unassignedClasses.isEmpty()) { 116 while (!unassignedClasses.isEmpty()) {
117 Iterator<ClassEntry> iterator = unassignedClasses.iterator(); 117 Iterator<ClassEntry> iterator = unassignedClasses.iterator();
118 ClassEntry initialEntry = iterator.next(); 118 ClassEntry initialEntry = iterator.next();
119 iterator.remove(); 119 iterator.remove();
120 120
121 HashSet<ClassEntry> partition = Sets.newHashSet(); 121 HashSet<ClassEntry> partition = Sets.newHashSet();
122 partition.add(initialEntry); 122 partition.add(initialEntry);
123 buildPartition(unassignedClasses, partition, initialEntry); 123 buildPartition(unassignedClasses, partition, initialEntry);
124 partitions.add(partition); 124 partitions.add(partition);
125 for (ClassEntry entry : partition) { 125 for (ClassEntry entry : partition) {
126 classPartitions.put(entry, partition); 126 classPartitions.put(entry, partition);
127 } 127 }
128 } 128 }
129 } 129 }
130 130
131 public Collection<Set<ClassEntry>> getPartitions() { 131 public Collection<Set<ClassEntry>> getPartitions() {
132 return partitions; 132 return partitions;
133 } 133 }
134 134
135 public Set<ClassEntry> getPartition(ClassEntry classEntry) { 135 public Set<ClassEntry> getPartition(ClassEntry classEntry) {
136 return classPartitions.get(classEntry); 136 return classPartitions.get(classEntry);
137 } 137 }
138 138
139 @Override 139 @Override
140 public void processIndex(JarIndex index) { 140 public void processIndex(JarIndex index) {
141 EntryIndex entryIndex = index.getEntryIndex(); 141 EntryIndex entryIndex = index.getEntryIndex();
142 ReferenceIndex referenceIndex = index.getReferenceIndex(); 142 ReferenceIndex referenceIndex = index.getReferenceIndex();
143 InheritanceIndex inheritanceIndex = index.getInheritanceIndex(); 143 InheritanceIndex inheritanceIndex = index.getInheritanceIndex();
144 addConnections(entryIndex, referenceIndex, inheritanceIndex); 144 addConnections(entryIndex, referenceIndex, inheritanceIndex);
145 addPartitions(entryIndex); 145 addPartitions(entryIndex);
146 } 146 }
147} 147}
diff --git a/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java
index b6797c2..b6797c2 100644
--- a/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java
diff --git a/src/main/java/cuchaz/enigma/api/EnigmaPlugin.java b/enigma/src/main/java/cuchaz/enigma/api/EnigmaPlugin.java
index bdd6015..bdd6015 100644
--- a/src/main/java/cuchaz/enigma/api/EnigmaPlugin.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/EnigmaPlugin.java
diff --git a/src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java b/enigma/src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java
index a59051a..a59051a 100644
--- a/src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java
diff --git a/src/main/java/cuchaz/enigma/api/service/EnigmaService.java b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaService.java
index 526dda7..526dda7 100644
--- a/src/main/java/cuchaz/enigma/api/service/EnigmaService.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaService.java
diff --git a/src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java
index 9e433fb..9e433fb 100644
--- a/src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java
diff --git a/src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java
index 7c10ac2..7c10ac2 100644
--- a/src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java
diff --git a/src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java
index 358828f..358828f 100644
--- a/src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java
diff --git a/src/main/java/cuchaz/enigma/api/service/JarIndexerService.java b/enigma/src/main/java/cuchaz/enigma/api/service/JarIndexerService.java
index 0cda199..0cda199 100644
--- a/src/main/java/cuchaz/enigma/api/service/JarIndexerService.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/JarIndexerService.java
diff --git a/src/main/java/cuchaz/enigma/api/service/NameProposalService.java b/enigma/src/main/java/cuchaz/enigma/api/service/NameProposalService.java
index 4c357db..4c357db 100644
--- a/src/main/java/cuchaz/enigma/api/service/NameProposalService.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/NameProposalService.java
diff --git a/src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java b/enigma/src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java
index af0cf30..af0cf30 100644
--- a/src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java
+++ b/enigma/src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java
index 1a2b47f..1a2b47f 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java
index cfd8fbe..cfd8fbe 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java
index 2b750ea..2b750ea 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java
index cb843ad..cb843ad 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java
index e4c41d3..e4c41d3 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java
index 28fc199..28fc199 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
index a82df1b..a82df1b 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java
index eebd650..bc4a2f0 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java
@@ -1,6 +1,6 @@
1package cuchaz.enigma.bytecode.translators; 1package cuchaz.enigma.bytecode.translators;
2 2
3import cuchaz.enigma.utils.Utils; 3import cuchaz.enigma.Enigma;
4import org.objectweb.asm.signature.SignatureVisitor; 4import org.objectweb.asm.signature.SignatureVisitor;
5 5
6import java.util.Stack; 6import java.util.Stack;
@@ -13,7 +13,7 @@ public class TranslationSignatureVisitor extends SignatureVisitor {
13 private final Stack<String> classStack = new Stack<>(); 13 private final Stack<String> classStack = new Stack<>();
14 14
15 public TranslationSignatureVisitor(Function<String, String> remapper, SignatureVisitor sv) { 15 public TranslationSignatureVisitor(Function<String, String> remapper, SignatureVisitor sv) {
16 super(Utils.ASM_VERSION); 16 super(Enigma.ASM_VERSION);
17 this.remapper = remapper; 17 this.remapper = remapper;
18 this.sv = sv; 18 this.sv = sv;
19 } 19 }
diff --git a/src/main/java/cuchaz/enigma/source/Decompiler.java b/enigma/src/main/java/cuchaz/enigma/source/Decompiler.java
index c9666d5..c9666d5 100644
--- a/src/main/java/cuchaz/enigma/source/Decompiler.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/Decompiler.java
diff --git a/src/main/java/cuchaz/enigma/source/DecompilerService.java b/enigma/src/main/java/cuchaz/enigma/source/DecompilerService.java
index 377ccbc..377ccbc 100644
--- a/src/main/java/cuchaz/enigma/source/DecompilerService.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/DecompilerService.java
diff --git a/src/main/java/cuchaz/enigma/source/Decompilers.java b/enigma/src/main/java/cuchaz/enigma/source/Decompilers.java
index 7d154a6..7d154a6 100644
--- a/src/main/java/cuchaz/enigma/source/Decompilers.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/Decompilers.java
diff --git a/src/main/java/cuchaz/enigma/source/Source.java b/enigma/src/main/java/cuchaz/enigma/source/Source.java
index 43c4de0..43c4de0 100644
--- a/src/main/java/cuchaz/enigma/source/Source.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/Source.java
diff --git a/src/main/java/cuchaz/enigma/source/SourceIndex.java b/enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java
index 6a335ec..178ce20 100644
--- a/src/main/java/cuchaz/enigma/source/SourceIndex.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java
@@ -5,8 +5,6 @@ import com.google.common.collect.Lists;
5import com.google.common.collect.Maps; 5import com.google.common.collect.Maps;
6import com.google.common.collect.Multimap; 6import com.google.common.collect.Multimap;
7import cuchaz.enigma.analysis.EntryReference; 7import cuchaz.enigma.analysis.EntryReference;
8import cuchaz.enigma.analysis.Token;
9import cuchaz.enigma.gui.SourceRemapper;
10import cuchaz.enigma.translation.mapping.EntryResolver; 8import cuchaz.enigma.translation.mapping.EntryResolver;
11import cuchaz.enigma.translation.mapping.ResolutionStrategy; 9import cuchaz.enigma.translation.mapping.ResolutionStrategy;
12import cuchaz.enigma.translation.representation.entry.Entry; 10import cuchaz.enigma.translation.representation.entry.Entry;
diff --git a/src/main/java/cuchaz/enigma/gui/SourceRemapper.java b/enigma/src/main/java/cuchaz/enigma/source/SourceRemapper.java
index f38f44e..b5f8006 100644
--- a/src/main/java/cuchaz/enigma/gui/SourceRemapper.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/SourceRemapper.java
@@ -1,6 +1,4 @@
1package cuchaz.enigma.gui; 1package cuchaz.enigma.source;
2
3import cuchaz.enigma.analysis.Token;
4 2
5import java.util.HashMap; 3import java.util.HashMap;
6import java.util.Map; 4import java.util.Map;
diff --git a/src/main/java/cuchaz/enigma/source/SourceSettings.java b/enigma/src/main/java/cuchaz/enigma/source/SourceSettings.java
index f6c68e9..f6c68e9 100644
--- a/src/main/java/cuchaz/enigma/source/SourceSettings.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/SourceSettings.java
diff --git a/src/main/java/cuchaz/enigma/analysis/Token.java b/enigma/src/main/java/cuchaz/enigma/source/Token.java
index f0155e5..fad733f 100644
--- a/src/main/java/cuchaz/enigma/analysis/Token.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/Token.java
@@ -9,7 +9,7 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma.analysis; 12package cuchaz.enigma.source;
13 13
14public class Token implements Comparable<Token> { 14public class Token implements Comparable<Token> {
15 15
diff --git a/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java b/enigma/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java
index 9e37f16..9e37f16 100644
--- a/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java
diff --git a/src/main/java/cuchaz/enigma/source/cfr/CfrSource.java b/enigma/src/main/java/cuchaz/enigma/source/cfr/CfrSource.java
index d4f2da6..d4f2da6 100644
--- a/src/main/java/cuchaz/enigma/source/cfr/CfrSource.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/cfr/CfrSource.java
diff --git a/src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java b/enigma/src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java
index 09e0a9b..e05a6ff 100644
--- a/src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java
@@ -1,6 +1,6 @@
1package cuchaz.enigma.source.cfr; 1package cuchaz.enigma.source.cfr;
2 2
3import cuchaz.enigma.analysis.Token; 3import cuchaz.enigma.source.Token;
4import cuchaz.enigma.source.SourceIndex; 4import cuchaz.enigma.source.SourceIndex;
5import cuchaz.enigma.translation.representation.MethodDescriptor; 5import cuchaz.enigma.translation.representation.MethodDescriptor;
6import cuchaz.enigma.translation.representation.TypeDescriptor; 6import cuchaz.enigma.translation.representation.TypeDescriptor;
diff --git a/src/main/java/cuchaz/enigma/source/procyon/EntryParser.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/EntryParser.java
index 2fae61a..2fae61a 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/EntryParser.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/EntryParser.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java
index 37bc0c8..3cbd680 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java
@@ -12,7 +12,6 @@ import com.strobel.decompiler.languages.java.ast.AstBuilder;
12import com.strobel.decompiler.languages.java.ast.CompilationUnit; 12import com.strobel.decompiler.languages.java.ast.CompilationUnit;
13import com.strobel.decompiler.languages.java.ast.InsertParenthesesVisitor; 13import com.strobel.decompiler.languages.java.ast.InsertParenthesesVisitor;
14import cuchaz.enigma.ClassProvider; 14import cuchaz.enigma.ClassProvider;
15import cuchaz.enigma.api.EnigmaPluginContext;
16import cuchaz.enigma.source.Source; 15import cuchaz.enigma.source.Source;
17import cuchaz.enigma.source.Decompiler; 16import cuchaz.enigma.source.Decompiler;
18import cuchaz.enigma.source.SourceSettings; 17import cuchaz.enigma.source.SourceSettings;
@@ -20,7 +19,6 @@ import cuchaz.enigma.source.procyon.transformers.*;
20import cuchaz.enigma.source.procyon.typeloader.CompiledSourceTypeLoader; 19import cuchaz.enigma.source.procyon.typeloader.CompiledSourceTypeLoader;
21import cuchaz.enigma.source.procyon.typeloader.NoRetryMetadataSystem; 20import cuchaz.enigma.source.procyon.typeloader.NoRetryMetadataSystem;
22import cuchaz.enigma.source.procyon.typeloader.SynchronizedTypeLoader; 21import cuchaz.enigma.source.procyon.typeloader.SynchronizedTypeLoader;
23import cuchaz.enigma.utils.Utils;
24 22
25public class ProcyonDecompiler implements Decompiler { 23public class ProcyonDecompiler implements Decompiler {
26 private final SourceSettings settings; 24 private final SourceSettings settings;
@@ -34,11 +32,11 @@ public class ProcyonDecompiler implements Decompiler {
34 metadataSystem.setEagerMethodLoadingEnabled(true); 32 metadataSystem.setEagerMethodLoadingEnabled(true);
35 33
36 decompilerSettings = DecompilerSettings.javaDefaults(); 34 decompilerSettings = DecompilerSettings.javaDefaults();
37 decompilerSettings.setMergeVariables(Utils.getSystemPropertyAsBoolean("enigma.mergeVariables", true)); 35 decompilerSettings.setMergeVariables(getSystemPropertyAsBoolean("enigma.mergeVariables", true));
38 decompilerSettings.setForceExplicitImports(Utils.getSystemPropertyAsBoolean("enigma.forceExplicitImports", true)); 36 decompilerSettings.setForceExplicitImports(getSystemPropertyAsBoolean("enigma.forceExplicitImports", true));
39 decompilerSettings.setForceExplicitTypeArguments(Utils.getSystemPropertyAsBoolean("enigma.forceExplicitTypeArguments", true)); 37 decompilerSettings.setForceExplicitTypeArguments(getSystemPropertyAsBoolean("enigma.forceExplicitTypeArguments", true));
40 decompilerSettings.setShowDebugLineNumbers(Utils.getSystemPropertyAsBoolean("enigma.showDebugLineNumbers", false)); 38 decompilerSettings.setShowDebugLineNumbers(getSystemPropertyAsBoolean("enigma.showDebugLineNumbers", false));
41 decompilerSettings.setShowSyntheticMembers(Utils.getSystemPropertyAsBoolean("enigma.showSyntheticMembers", false)); 39 decompilerSettings.setShowSyntheticMembers(getSystemPropertyAsBoolean("enigma.showSyntheticMembers", false));
42 decompilerSettings.setTypeLoader(typeLoader); 40 decompilerSettings.setTypeLoader(typeLoader);
43 41
44 JavaFormattingOptions formattingOptions = decompilerSettings.getJavaFormattingOptions(); 42 JavaFormattingOptions formattingOptions = decompilerSettings.getJavaFormattingOptions();
@@ -78,4 +76,9 @@ public class ProcyonDecompiler implements Decompiler {
78 76
79 return new ProcyonSource(source, decompilerSettings); 77 return new ProcyonSource(source, decompilerSettings);
80 } 78 }
79
80 private static boolean getSystemPropertyAsBoolean(String property, boolean defValue) {
81 String value = System.getProperty(property);
82 return value == null ? defValue : Boolean.parseBoolean(value);
83 }
81} 84}
diff --git a/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java
index 53c8c70..53c8c70 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java
index f6eeb15..f6eeb15 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java
index 0e8bc51..0e8bc51 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java
index dad505f..dad505f 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java
index 62e7c10..dc36865 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java
@@ -5,7 +5,7 @@ import com.strobel.decompiler.languages.java.ast.AstNode;
5import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration; 5import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration;
6import com.strobel.decompiler.languages.java.ast.Identifier; 6import com.strobel.decompiler.languages.java.ast.Identifier;
7import com.strobel.decompiler.languages.java.ast.TypeDeclaration; 7import com.strobel.decompiler.languages.java.ast.TypeDeclaration;
8import cuchaz.enigma.analysis.Token; 8import cuchaz.enigma.source.Token;
9import cuchaz.enigma.source.SourceIndex; 9import cuchaz.enigma.source.SourceIndex;
10 10
11import java.util.regex.Pattern; 11import java.util.regex.Pattern;
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java
index 70fc8c6..70fc8c6 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java
index 39e599d..39e599d 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java
index b8c087b..b8c087b 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java
index 34d95fa..34d95fa 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java
index 8accfc7..8accfc7 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java
index 32bb72f..32bb72f 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java
index cf0376f..cf0376f 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java
index d3ddaab..d3ddaab 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java
index e702956..e702956 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java
index 5be5ddd..5be5ddd 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java
index e703d3b..e703d3b 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java
index c4732b0..c4732b0 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java
diff --git a/src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java
index 86c6ecc..86c6ecc 100644
--- a/src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java
+++ b/enigma/src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java
diff --git a/src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java b/enigma/src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java
index 18c966c..18c966c 100644
--- a/src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java
diff --git a/src/main/java/cuchaz/enigma/translation/MappingTranslator.java b/enigma/src/main/java/cuchaz/enigma/translation/MappingTranslator.java
index 529d0ed..529d0ed 100644
--- a/src/main/java/cuchaz/enigma/translation/MappingTranslator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/MappingTranslator.java
diff --git a/src/main/java/cuchaz/enigma/ProposingTranslator.java b/enigma/src/main/java/cuchaz/enigma/translation/ProposingTranslator.java
index 018fbfd..97866e9 100644
--- a/src/main/java/cuchaz/enigma/ProposingTranslator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/ProposingTranslator.java
@@ -1,8 +1,6 @@
1package cuchaz.enigma; 1package cuchaz.enigma.translation;
2 2
3import cuchaz.enigma.api.service.NameProposalService; 3import cuchaz.enigma.api.service.NameProposalService;
4import cuchaz.enigma.translation.Translatable;
5import cuchaz.enigma.translation.Translator;
6import cuchaz.enigma.translation.mapping.EntryRemapper; 4import cuchaz.enigma.translation.mapping.EntryRemapper;
7import cuchaz.enigma.translation.mapping.ResolutionStrategy; 5import cuchaz.enigma.translation.mapping.ResolutionStrategy;
8import cuchaz.enigma.translation.representation.entry.Entry; 6import cuchaz.enigma.translation.representation.entry.Entry;
diff --git a/src/main/java/cuchaz/enigma/translation/SignatureUpdater.java b/enigma/src/main/java/cuchaz/enigma/translation/SignatureUpdater.java
index 3783053..3783053 100644
--- a/src/main/java/cuchaz/enigma/translation/SignatureUpdater.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/SignatureUpdater.java
diff --git a/src/main/java/cuchaz/enigma/translation/Translatable.java b/enigma/src/main/java/cuchaz/enigma/translation/Translatable.java
index 0370ef1..0370ef1 100644
--- a/src/main/java/cuchaz/enigma/translation/Translatable.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/Translatable.java
diff --git a/src/main/java/cuchaz/enigma/translation/TranslationDirection.java b/enigma/src/main/java/cuchaz/enigma/translation/TranslationDirection.java
index 2ecb30b..2ecb30b 100644
--- a/src/main/java/cuchaz/enigma/translation/TranslationDirection.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/TranslationDirection.java
diff --git a/src/main/java/cuchaz/enigma/translation/Translator.java b/enigma/src/main/java/cuchaz/enigma/translation/Translator.java
index c70141f..c70141f 100644
--- a/src/main/java/cuchaz/enigma/translation/Translator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/Translator.java
diff --git a/src/main/java/cuchaz/enigma/translation/VoidTranslator.java b/enigma/src/main/java/cuchaz/enigma/translation/VoidTranslator.java
index c010833..c010833 100644
--- a/src/main/java/cuchaz/enigma/translation/VoidTranslator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/VoidTranslator.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java
index 5b79b79..5b79b79 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java
index e1a3253..e1a3253 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java
index c607817..c607817 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java
index ad36c97..1dd7eac 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java
@@ -11,7 +11,6 @@ import cuchaz.enigma.translation.representation.entry.Entry;
11 11
12import javax.annotation.Nullable; 12import javax.annotation.Nullable;
13import java.util.Collection; 13import java.util.Collection;
14import java.util.function.UnaryOperator;
15import java.util.stream.Stream; 14import java.util.stream.Stream;
16 15
17public class EntryRemapper { 16public class EntryRemapper {
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java
index 521f72d..521f72d 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java
diff --git a/src/main/java/cuchaz/enigma/throwables/IllegalNameException.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IllegalNameException.java
index 0155ad2..a7f83cd 100644
--- a/src/main/java/cuchaz/enigma/throwables/IllegalNameException.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IllegalNameException.java
@@ -9,7 +9,7 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma.throwables; 12package cuchaz.enigma.translation.mapping;
13 13
14public class IllegalNameException extends RuntimeException { 14public class IllegalNameException extends RuntimeException {
15 15
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java
index 78231dd..78231dd 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java
index 1407bb6..1407bb6 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingOperations.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingOperations.java
new file mode 100644
index 0000000..2c03748
--- /dev/null
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingOperations.java
@@ -0,0 +1,71 @@
1package cuchaz.enigma.translation.mapping;
2
3import cuchaz.enigma.translation.mapping.tree.EntryTree;
4import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
5import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
6import cuchaz.enigma.translation.MappingTranslator;
7import cuchaz.enigma.translation.Translator;
8import cuchaz.enigma.translation.representation.entry.ClassEntry;
9import cuchaz.enigma.translation.representation.entry.Entry;
10import cuchaz.enigma.translation.representation.entry.FieldEntry;
11import cuchaz.enigma.translation.representation.entry.MethodEntry;
12
13import java.util.HashSet;
14import java.util.Set;
15
16public class MappingOperations {
17 public static EntryTree<EntryMapping> invert(EntryTree<EntryMapping> mappings) {
18 Translator translator = new MappingTranslator(mappings, VoidEntryResolver.INSTANCE);
19 EntryTree<EntryMapping> result = new HashEntryTree<>();
20
21 for (EntryTreeNode<EntryMapping> node : mappings) {
22 Entry<?> leftEntry = node.getEntry();
23 EntryMapping leftMapping = node.getValue();
24
25 if (!(leftEntry instanceof ClassEntry || leftEntry instanceof MethodEntry || leftEntry instanceof FieldEntry)) {
26 result.insert(translator.translate(leftEntry), leftMapping);
27 continue;
28 }
29
30 Entry<?> rightEntry = translator.translate(leftEntry);
31
32 result.insert(rightEntry, leftMapping == null ? null : leftMapping.withName(leftEntry.getName()));
33 }
34
35 return result;
36 }
37
38 public static EntryTree<EntryMapping> compose(EntryTree<EntryMapping> left, EntryTree<EntryMapping> right, boolean keepLeftOnly, boolean keepRightOnly) {
39 Translator leftTranslator = new MappingTranslator(left, VoidEntryResolver.INSTANCE);
40 EntryTree<EntryMapping> result = new HashEntryTree<>();
41 Set<Entry<?>> addedMappings = new HashSet<>();
42
43 for (EntryTreeNode<EntryMapping> node : left) {
44 Entry<?> leftEntry = node.getEntry();
45 EntryMapping leftMapping = node.getValue();
46
47 Entry<?> rightEntry = leftTranslator.translate(leftEntry);
48
49 EntryMapping rightMapping = right.get(rightEntry);
50 if (rightMapping != null) {
51 result.insert(leftEntry, rightMapping);
52 addedMappings.add(rightEntry);
53 } else if (keepLeftOnly) {
54 result.insert(leftEntry, leftMapping);
55 }
56 }
57
58 if (keepRightOnly) {
59 Translator leftInverseTranslator = new MappingTranslator(invert(left), VoidEntryResolver.INSTANCE);
60 for (EntryTreeNode<EntryMapping> node : right) {
61 Entry<?> rightEntry = node.getEntry();
62 EntryMapping rightMapping = node.getValue();
63
64 if (!addedMappings.contains(rightEntry)) {
65 result.insert(leftInverseTranslator.translate(rightEntry), rightMapping);
66 }
67 }
68 }
69 return result;
70 }
71}
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java
index 5d39e3d..5d39e3d 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
index dffcb0c..ae615da 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
@@ -2,7 +2,6 @@ package cuchaz.enigma.translation.mapping;
2 2
3import cuchaz.enigma.analysis.index.InheritanceIndex; 3import cuchaz.enigma.analysis.index.InheritanceIndex;
4import cuchaz.enigma.analysis.index.JarIndex; 4import cuchaz.enigma.analysis.index.JarIndex;
5import cuchaz.enigma.throwables.IllegalNameException;
6import cuchaz.enigma.translation.Translator; 5import cuchaz.enigma.translation.Translator;
7import cuchaz.enigma.translation.mapping.tree.EntryTree; 6import cuchaz.enigma.translation.mapping.tree.EntryTree;
8import cuchaz.enigma.translation.representation.entry.ClassEntry; 7import cuchaz.enigma.translation.representation.entry.ClassEntry;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java
index 5d9794f..5d9794f 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java
index 5bc2f67..74ba633 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java
@@ -11,9 +11,6 @@
11 11
12package cuchaz.enigma.translation.mapping; 12package cuchaz.enigma.translation.mapping;
13 13
14import cuchaz.enigma.throwables.IllegalNameException;
15import cuchaz.enigma.translation.representation.entry.ClassEntry;
16
17import java.util.Arrays; 14import java.util.Arrays;
18import java.util.List; 15import java.util.List;
19import java.util.regex.Pattern; 16import java.util.regex.Pattern;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java
index 1c28e02..1c28e02 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java
index 2eab55f..2eab55f 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/LfPrintWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/LfPrintWriter.java
new file mode 100644
index 0000000..441949c
--- /dev/null
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/LfPrintWriter.java
@@ -0,0 +1,16 @@
1package cuchaz.enigma.translation.mapping.serde;
2
3import java.io.PrintWriter;
4import java.io.Writer;
5
6public class LfPrintWriter extends PrintWriter {
7 public LfPrintWriter(Writer out) {
8 super(out);
9 }
10
11 @Override
12 public void println() {
13 // https://stackoverflow.com/a/14749004
14 write('\n');
15 }
16}
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFileNameFormat.java
index e40bfe7..9bc013c 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFileNameFormat.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.translation.mapping; 1package cuchaz.enigma.translation.mapping.serde;
2 2
3import com.google.gson.annotations.SerializedName; 3import com.google.gson.annotations.SerializedName;
4 4
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java
index 6c8c343..ca275eb 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java
@@ -1,10 +1,16 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde;
2 2
3import cuchaz.enigma.ProgressListener; 3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.throwables.MappingParseException;
5import cuchaz.enigma.translation.mapping.EntryMapping; 4import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.mapping.MappingDelta; 5import cuchaz.enigma.translation.mapping.MappingDelta;
7import cuchaz.enigma.translation.mapping.MappingSaveParameters; 6import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader;
7import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsWriter;
8import cuchaz.enigma.translation.mapping.serde.proguard.ProguardMappingsReader;
9import cuchaz.enigma.translation.mapping.serde.srg.SrgMappingsWriter;
10import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsReader;
11import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsWriter;
12import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Reader;
13import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer;
8import cuchaz.enigma.translation.mapping.tree.EntryTree; 14import cuchaz.enigma.translation.mapping.tree.EntryTree;
9 15
10import javax.annotation.Nullable; 16import javax.annotation.Nullable;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java
index 7c8f6cc..7c8f6cc 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java
diff --git a/src/main/java/cuchaz/enigma/throwables/MappingParseException.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java
index b7e6d42..9d04b97 100644
--- a/src/main/java/cuchaz/enigma/throwables/MappingParseException.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java
@@ -9,7 +9,7 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma.throwables; 12package cuchaz.enigma.translation.mapping.serde;
13 13
14import java.io.File; 14import java.io.File;
15import java.util.function.Supplier; 15import java.util.function.Supplier;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingSaveParameters.java
index 07065d6..e78fd95 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingSaveParameters.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.translation.mapping; 1package cuchaz.enigma.translation.mapping.serde;
2 2
3import com.google.gson.annotations.SerializedName; 3import com.google.gson.annotations.SerializedName;
4 4
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java
index 4c60787..2f01375 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java
@@ -1,9 +1,7 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde;
2 2
3import cuchaz.enigma.ProgressListener; 3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.throwables.MappingParseException;
5import cuchaz.enigma.translation.mapping.EntryMapping; 4import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.mapping.MappingSaveParameters;
7import cuchaz.enigma.translation.mapping.tree.EntryTree; 5import cuchaz.enigma.translation.mapping.tree.EntryTree;
8 6
9import java.io.IOException; 7import java.io.IOException;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java
index 8815986..68a8dbb 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java
@@ -3,7 +3,6 @@ package cuchaz.enigma.translation.mapping.serde;
3import cuchaz.enigma.ProgressListener; 3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.translation.mapping.EntryMapping; 4import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.mapping.MappingDelta; 5import cuchaz.enigma.translation.mapping.MappingDelta;
6import cuchaz.enigma.translation.mapping.MappingSaveParameters;
7import cuchaz.enigma.translation.mapping.tree.EntryTree; 6import cuchaz.enigma.translation.mapping.tree.EntryTree;
8 7
9import java.nio.file.Path; 8import java.nio.file.Path;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java
index afb40e9..79587a0 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java
@@ -6,25 +6,25 @@ import cuchaz.enigma.translation.mapping.EntryMapping;
6import java.util.ArrayList; 6import java.util.ArrayList;
7import java.util.List; 7import java.util.List;
8 8
9final class RawEntryMapping { 9public final class RawEntryMapping {
10 private final String targetName; 10 private final String targetName;
11 private final AccessModifier access; 11 private final AccessModifier access;
12 private List<String> javadocs = new ArrayList<>(); 12 private List<String> javadocs = new ArrayList<>();
13 13
14 RawEntryMapping(String targetName) { 14 public RawEntryMapping(String targetName) {
15 this(targetName, null); 15 this(targetName, null);
16 } 16 }
17 17
18 RawEntryMapping(String targetName, AccessModifier access) { 18 public RawEntryMapping(String targetName, AccessModifier access) {
19 this.access = access; 19 this.access = access;
20 this.targetName = targetName; 20 this.targetName = targetName;
21 } 21 }
22 22
23 void addJavadocLine(String line) { 23 public void addJavadocLine(String line) {
24 javadocs.add(line); 24 javadocs.add(line);
25 } 25 }
26 26
27 EntryMapping bake() { 27 public EntryMapping bake() {
28 return new EntryMapping(targetName, access, javadocs.isEmpty() ? null : String.join("\n", javadocs)); 28 return new EntryMapping(targetName, access, javadocs.isEmpty() ? null : String.join("\n", javadocs));
29 } 29 }
30} 30}
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaFormat.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaFormat.java
index af92ffb..210d328 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaFormat.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaFormat.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.enigma;
2 2
3public class EnigmaFormat { 3public class EnigmaFormat {
4 public static final String COMMENT = "COMMENT"; 4 public static final String COMMENT = "COMMENT";
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java
index 53bbaa3..30de85f 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java
@@ -1,12 +1,15 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.enigma;
2 2
3import com.google.common.base.Charsets; 3import com.google.common.base.Charsets;
4import cuchaz.enigma.ProgressListener; 4import cuchaz.enigma.ProgressListener;
5import cuchaz.enigma.throwables.MappingParseException; 5import cuchaz.enigma.translation.mapping.serde.MappingParseException;
6import cuchaz.enigma.translation.mapping.AccessModifier; 6import cuchaz.enigma.translation.mapping.AccessModifier;
7import cuchaz.enigma.translation.mapping.EntryMapping; 7import cuchaz.enigma.translation.mapping.EntryMapping;
8import cuchaz.enigma.translation.mapping.MappingPair; 8import cuchaz.enigma.translation.mapping.MappingPair;
9import cuchaz.enigma.translation.mapping.MappingSaveParameters; 9import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
10import cuchaz.enigma.translation.mapping.serde.MappingHelper;
11import cuchaz.enigma.translation.mapping.serde.MappingsReader;
12import cuchaz.enigma.translation.mapping.serde.RawEntryMapping;
10import cuchaz.enigma.translation.mapping.tree.EntryTree; 13import cuchaz.enigma.translation.mapping.tree.EntryTree;
11import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 14import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
12import cuchaz.enigma.translation.representation.MethodDescriptor; 15import cuchaz.enigma.translation.representation.MethodDescriptor;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java
index be0fceb..7570d4b 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java
@@ -9,7 +9,7 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma.translation.mapping.serde; 12package cuchaz.enigma.translation.mapping.serde.enigma;
13 13
14import java.io.IOException; 14import java.io.IOException;
15import java.io.PrintWriter; 15import java.io.PrintWriter;
@@ -35,9 +35,12 @@ import cuchaz.enigma.translation.Translator;
35import cuchaz.enigma.translation.mapping.AccessModifier; 35import cuchaz.enigma.translation.mapping.AccessModifier;
36import cuchaz.enigma.translation.mapping.EntryMapping; 36import cuchaz.enigma.translation.mapping.EntryMapping;
37import cuchaz.enigma.translation.mapping.MappingDelta; 37import cuchaz.enigma.translation.mapping.MappingDelta;
38import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 38import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
39import cuchaz.enigma.translation.mapping.MappingSaveParameters; 39import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
40import cuchaz.enigma.translation.mapping.VoidEntryResolver; 40import cuchaz.enigma.translation.mapping.VoidEntryResolver;
41import cuchaz.enigma.translation.mapping.serde.LfPrintWriter;
42import cuchaz.enigma.translation.mapping.serde.MappingHelper;
43import cuchaz.enigma.translation.mapping.serde.MappingsWriter;
41import cuchaz.enigma.translation.mapping.tree.EntryTree; 44import cuchaz.enigma.translation.mapping.tree.EntryTree;
42import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; 45import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
43import cuchaz.enigma.translation.representation.entry.ClassEntry; 46import cuchaz.enigma.translation.representation.entry.ClassEntry;
@@ -46,7 +49,6 @@ import cuchaz.enigma.translation.representation.entry.FieldEntry;
46import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; 49import cuchaz.enigma.translation.representation.entry.LocalVariableEntry;
47import cuchaz.enigma.translation.representation.entry.MethodEntry; 50import cuchaz.enigma.translation.representation.entry.MethodEntry;
48import cuchaz.enigma.utils.I18n; 51import cuchaz.enigma.utils.I18n;
49import cuchaz.enigma.utils.LFPrintWriter;
50 52
51public enum EnigmaMappingsWriter implements MappingsWriter { 53public enum EnigmaMappingsWriter implements MappingsWriter {
52 FILE { 54 FILE {
@@ -60,7 +62,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter {
60 progress.init(classes.size(), I18n.translate("progress.mappings.enigma_file.writing")); 62 progress.init(classes.size(), I18n.translate("progress.mappings.enigma_file.writing"));
61 63
62 int steps = 0; 64 int steps = 0;
63 try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(path))) { 65 try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) {
64 for (ClassEntry classEntry : classes) { 66 for (ClassEntry classEntry : classes) {
65 progress.step(steps++, classEntry.getFullName()); 67 progress.step(steps++, classEntry.getFullName());
66 writeRoot(writer, mappings, classEntry); 68 writeRoot(writer, mappings, classEntry);
@@ -98,7 +100,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter {
98 Files.createDirectories(classPath.getParent()); 100 Files.createDirectories(classPath.getParent());
99 Files.deleteIfExists(classPath); 101 Files.deleteIfExists(classPath);
100 102
101 try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(classPath))) { 103 try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(classPath))) {
102 writeRoot(writer, mappings, classEntry); 104 writeRoot(writer, mappings, classEntry);
103 } 105 }
104 } catch (Throwable t) { 106 } catch (Throwable t) {
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/ProguardMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java
index b5ede39..034fb41 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/ProguardMappingsReader.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java
@@ -1,10 +1,11 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.proguard;
2 2
3import cuchaz.enigma.ProgressListener; 3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.command.MappingCommandsUtil; 4import cuchaz.enigma.translation.mapping.MappingOperations;
5import cuchaz.enigma.throwables.MappingParseException; 5import cuchaz.enigma.translation.mapping.serde.MappingParseException;
6import cuchaz.enigma.translation.mapping.EntryMapping; 6import cuchaz.enigma.translation.mapping.EntryMapping;
7import cuchaz.enigma.translation.mapping.MappingSaveParameters; 7import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
8import cuchaz.enigma.translation.mapping.serde.MappingsReader;
8import cuchaz.enigma.translation.mapping.tree.EntryTree; 9import cuchaz.enigma.translation.mapping.tree.EntryTree;
9import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 10import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
10import cuchaz.enigma.translation.representation.MethodDescriptor; 11import cuchaz.enigma.translation.representation.MethodDescriptor;
@@ -79,7 +80,7 @@ public class ProguardMappingsReader implements MappingsReader {
79 } 80 }
80 } 81 }
81 82
82 return MappingCommandsUtil.invert(mappings); 83 return MappingOperations.invert(mappings);
83 } 84 }
84 85
85 private String getDescriptor(String type) { 86 private String getDescriptor(String type) {
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java
index f67f8fc..9c9f103 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.srg;
2 2
3import com.google.common.collect.Lists; 3import com.google.common.collect.Lists;
4import cuchaz.enigma.ProgressListener; 4import cuchaz.enigma.ProgressListener;
@@ -6,8 +6,10 @@ import cuchaz.enigma.translation.MappingTranslator;
6import cuchaz.enigma.translation.Translator; 6import cuchaz.enigma.translation.Translator;
7import cuchaz.enigma.translation.mapping.EntryMapping; 7import cuchaz.enigma.translation.mapping.EntryMapping;
8import cuchaz.enigma.translation.mapping.MappingDelta; 8import cuchaz.enigma.translation.mapping.MappingDelta;
9import cuchaz.enigma.translation.mapping.MappingSaveParameters; 9import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
10import cuchaz.enigma.translation.mapping.VoidEntryResolver; 10import cuchaz.enigma.translation.mapping.VoidEntryResolver;
11import cuchaz.enigma.translation.mapping.serde.LfPrintWriter;
12import cuchaz.enigma.translation.mapping.serde.MappingsWriter;
11import cuchaz.enigma.translation.mapping.tree.EntryTree; 13import cuchaz.enigma.translation.mapping.tree.EntryTree;
12import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; 14import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
13import cuchaz.enigma.translation.representation.entry.ClassEntry; 15import cuchaz.enigma.translation.representation.entry.ClassEntry;
@@ -15,7 +17,6 @@ import cuchaz.enigma.translation.representation.entry.Entry;
15import cuchaz.enigma.translation.representation.entry.FieldEntry; 17import cuchaz.enigma.translation.representation.entry.FieldEntry;
16import cuchaz.enigma.translation.representation.entry.MethodEntry; 18import cuchaz.enigma.translation.representation.entry.MethodEntry;
17import cuchaz.enigma.utils.I18n; 19import cuchaz.enigma.utils.I18n;
18import cuchaz.enigma.utils.LFPrintWriter;
19 20
20import java.io.IOException; 21import java.io.IOException;
21import java.io.PrintWriter; 22import java.io.PrintWriter;
@@ -55,7 +56,7 @@ public enum SrgMappingsWriter implements MappingsWriter {
55 } 56 }
56 57
57 progress.init(3, I18n.translate("progress.mappings.srg_file.writing")); 58 progress.init(3, I18n.translate("progress.mappings.srg_file.writing"));
58 try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(path))) { 59 try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) {
59 progress.step(0, I18n.translate("type.classes")); 60 progress.step(0, I18n.translate("type.classes"));
60 classLines.forEach(writer::println); 61 classLines.forEach(writer::println);
61 progress.step(1, I18n.translate("type.fields")); 62 progress.step(1, I18n.translate("type.fields"));
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java
index 773c95e..f3c66df 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java
@@ -1,11 +1,12 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.tiny;
2 2
3import com.google.common.base.Charsets; 3import com.google.common.base.Charsets;
4import cuchaz.enigma.ProgressListener; 4import cuchaz.enigma.ProgressListener;
5import cuchaz.enigma.throwables.MappingParseException; 5import cuchaz.enigma.translation.mapping.serde.MappingParseException;
6import cuchaz.enigma.translation.mapping.EntryMapping; 6import cuchaz.enigma.translation.mapping.EntryMapping;
7import cuchaz.enigma.translation.mapping.MappingPair; 7import cuchaz.enigma.translation.mapping.MappingPair;
8import cuchaz.enigma.translation.mapping.MappingSaveParameters; 8import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
9import cuchaz.enigma.translation.mapping.serde.MappingsReader;
9import cuchaz.enigma.translation.mapping.tree.EntryTree; 10import cuchaz.enigma.translation.mapping.tree.EntryTree;
10import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 11import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
11import cuchaz.enigma.translation.representation.MethodDescriptor; 12import cuchaz.enigma.translation.representation.MethodDescriptor;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsWriter.java
index c82f262..4f78e6f 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsWriter.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.tiny;
2 2
3import com.google.common.base.Joiner; 3import com.google.common.base.Joiner;
4import com.google.common.collect.Lists; 4import com.google.common.collect.Lists;
@@ -7,8 +7,9 @@ import cuchaz.enigma.translation.MappingTranslator;
7import cuchaz.enigma.translation.Translator; 7import cuchaz.enigma.translation.Translator;
8import cuchaz.enigma.translation.mapping.EntryMapping; 8import cuchaz.enigma.translation.mapping.EntryMapping;
9import cuchaz.enigma.translation.mapping.MappingDelta; 9import cuchaz.enigma.translation.mapping.MappingDelta;
10import cuchaz.enigma.translation.mapping.MappingSaveParameters; 10import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
11import cuchaz.enigma.translation.mapping.VoidEntryResolver; 11import cuchaz.enigma.translation.mapping.VoidEntryResolver;
12import cuchaz.enigma.translation.mapping.serde.MappingsWriter;
12import cuchaz.enigma.translation.mapping.tree.EntryTree; 13import cuchaz.enigma.translation.mapping.tree.EntryTree;
13import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; 14import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
14import cuchaz.enigma.translation.representation.entry.ClassEntry; 15import cuchaz.enigma.translation.representation.entry.ClassEntry;
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Reader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java
index d81cbdb..dc25569 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Reader.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java
@@ -1,10 +1,12 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.tinyv2;
2 2
3import cuchaz.enigma.ProgressListener; 3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.throwables.MappingParseException; 4import cuchaz.enigma.translation.mapping.serde.MappingParseException;
5import cuchaz.enigma.translation.mapping.EntryMapping; 5import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.translation.mapping.MappingPair; 6import cuchaz.enigma.translation.mapping.MappingPair;
7import cuchaz.enigma.translation.mapping.MappingSaveParameters; 7import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
8import cuchaz.enigma.translation.mapping.serde.MappingsReader;
9import cuchaz.enigma.translation.mapping.serde.RawEntryMapping;
8import cuchaz.enigma.translation.mapping.tree.EntryTree; 10import cuchaz.enigma.translation.mapping.tree.EntryTree;
9import cuchaz.enigma.translation.mapping.tree.HashEntryTree; 11import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
10import cuchaz.enigma.translation.representation.MethodDescriptor; 12import cuchaz.enigma.translation.representation.MethodDescriptor;
@@ -14,7 +16,6 @@ import cuchaz.enigma.translation.representation.entry.Entry;
14import cuchaz.enigma.translation.representation.entry.FieldEntry; 16import cuchaz.enigma.translation.representation.entry.FieldEntry;
15import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; 17import cuchaz.enigma.translation.representation.entry.LocalVariableEntry;
16import cuchaz.enigma.translation.representation.entry.MethodEntry; 18import cuchaz.enigma.translation.representation.entry.MethodEntry;
17import cuchaz.enigma.utils.I18n;
18 19
19import java.io.IOException; 20import java.io.IOException;
20import java.nio.charset.StandardCharsets; 21import java.nio.charset.StandardCharsets;
@@ -23,7 +24,7 @@ import java.nio.file.Path;
23import java.util.BitSet; 24import java.util.BitSet;
24import java.util.List; 25import java.util.List;
25 26
26final class TinyV2Reader implements MappingsReader { 27public final class TinyV2Reader implements MappingsReader {
27 28
28 private static final String MINOR_VERSION = "0"; 29 private static final String MINOR_VERSION = "0";
29 // 0 indent 30 // 0 indent
@@ -46,7 +47,7 @@ final class TinyV2Reader implements MappingsReader {
46 private EntryTree<EntryMapping> read(Path path, List<String> lines, ProgressListener progress) throws MappingParseException { 47 private EntryTree<EntryMapping> read(Path path, List<String> lines, ProgressListener progress) throws MappingParseException {
47 EntryTree<EntryMapping> mappings = new HashEntryTree<>(); 48 EntryTree<EntryMapping> mappings = new HashEntryTree<>();
48 49
49 progress.init(lines.size(), I18n.translate("progress.mappings.tiny_v2.loading")); 50 progress.init(lines.size(), "progress.mappings.tiny_v2.loading");
50 51
51 BitSet state = new BitSet(STATE_SIZE); 52 BitSet state = new BitSet(STATE_SIZE);
52 @SuppressWarnings({"unchecked", "rawtypes"}) 53 @SuppressWarnings({"unchecked", "rawtypes"})
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Writer.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java
index 95e04c3..5546b2f 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Writer.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java
@@ -1,11 +1,14 @@
1package cuchaz.enigma.translation.mapping.serde; 1package cuchaz.enigma.translation.mapping.serde.tinyv2;
2 2
3import com.google.common.base.Strings; 3import com.google.common.base.Strings;
4import cuchaz.enigma.ProgressListener; 4import cuchaz.enigma.ProgressListener;
5import cuchaz.enigma.translation.mapping.EntryMap; 5import cuchaz.enigma.translation.mapping.EntryMap;
6import cuchaz.enigma.translation.mapping.EntryMapping; 6import cuchaz.enigma.translation.mapping.EntryMapping;
7import cuchaz.enigma.translation.mapping.MappingDelta; 7import cuchaz.enigma.translation.mapping.MappingDelta;
8import cuchaz.enigma.translation.mapping.MappingSaveParameters; 8import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
9import cuchaz.enigma.translation.mapping.serde.LfPrintWriter;
10import cuchaz.enigma.translation.mapping.serde.MappingHelper;
11import cuchaz.enigma.translation.mapping.serde.MappingsWriter;
9import cuchaz.enigma.translation.mapping.tree.EntryTree; 12import cuchaz.enigma.translation.mapping.tree.EntryTree;
10import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; 13import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
11import cuchaz.enigma.translation.representation.entry.ClassEntry; 14import cuchaz.enigma.translation.representation.entry.ClassEntry;
@@ -13,7 +16,6 @@ import cuchaz.enigma.translation.representation.entry.Entry;
13import cuchaz.enigma.translation.representation.entry.FieldEntry; 16import cuchaz.enigma.translation.representation.entry.FieldEntry;
14import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; 17import cuchaz.enigma.translation.representation.entry.LocalVariableEntry;
15import cuchaz.enigma.translation.representation.entry.MethodEntry; 18import cuchaz.enigma.translation.representation.entry.MethodEntry;
16import cuchaz.enigma.utils.LFPrintWriter;
17 19
18import java.io.IOException; 20import java.io.IOException;
19import java.io.PrintWriter; 21import java.io.PrintWriter;
@@ -40,7 +42,7 @@ public final class TinyV2Writer implements MappingsWriter {
40 public void write(EntryTree<EntryMapping> mappings, MappingDelta<EntryMapping> delta, Path path, ProgressListener progress, MappingSaveParameters parameters) { 42 public void write(EntryTree<EntryMapping> mappings, MappingDelta<EntryMapping> delta, Path path, ProgressListener progress, MappingSaveParameters parameters) {
41 List<EntryTreeNode<EntryMapping>> classes = StreamSupport.stream(mappings.spliterator(), false).filter(node -> node.getEntry() instanceof ClassEntry).collect(Collectors.toList()); 43 List<EntryTreeNode<EntryMapping>> classes = StreamSupport.stream(mappings.spliterator(), false).filter(node -> node.getEntry() instanceof ClassEntry).collect(Collectors.toList());
42 44
43 try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(path))) { 45 try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) {
44 writer.println("tiny\t2\t" + MINOR_VERSION + "\t" + obfHeader + "\t" + deobfHeader); 46 writer.println("tiny\t2\t" + MINOR_VERSION + "\t" + obfHeader + "\t" + deobfHeader);
45 47
46 // no escape names 48 // no escape names
@@ -166,4 +168,5 @@ public final class TinyV2Writer implements MappingsWriter {
166 private String indent(int level) { 168 private String indent(int level) {
167 return Strings.repeat("\t", level); 169 return Strings.repeat("\t", level);
168 } 170 }
171
169} 172}
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java
index 255fa5f..255fa5f 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java
index daaefcc..daaefcc 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java
index affcd50..affcd50 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java
index 570941c..570941c 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java
index 0a990bd..0a990bd 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java
index b280eef..b280eef 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/Lambda.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/Lambda.java
index 63eb563..ad9389c 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/Lambda.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/Lambda.java
@@ -1,105 +1,105 @@
1package cuchaz.enigma.translation.representation; 1package cuchaz.enigma.translation.representation;
2 2
3import cuchaz.enigma.translation.Translatable; 3import cuchaz.enigma.translation.Translatable;
4import cuchaz.enigma.translation.Translator; 4import cuchaz.enigma.translation.Translator;
5import cuchaz.enigma.translation.mapping.EntryMap; 5import cuchaz.enigma.translation.mapping.EntryMap;
6import cuchaz.enigma.translation.mapping.EntryMapping; 6import cuchaz.enigma.translation.mapping.EntryMapping;
7import cuchaz.enigma.translation.mapping.EntryResolver; 7import cuchaz.enigma.translation.mapping.EntryResolver;
8import cuchaz.enigma.translation.mapping.ResolutionStrategy; 8import cuchaz.enigma.translation.mapping.ResolutionStrategy;
9import cuchaz.enigma.translation.representation.entry.ClassEntry; 9import cuchaz.enigma.translation.representation.entry.ClassEntry;
10import cuchaz.enigma.translation.representation.entry.MethodEntry; 10import cuchaz.enigma.translation.representation.entry.MethodEntry;
11import cuchaz.enigma.translation.representation.entry.ParentedEntry; 11import cuchaz.enigma.translation.representation.entry.ParentedEntry;
12 12
13import java.util.Objects; 13import java.util.Objects;
14 14
15public class Lambda implements Translatable { 15public class Lambda implements Translatable {
16 private final String invokedName; 16 private final String invokedName;
17 private final MethodDescriptor invokedType; 17 private final MethodDescriptor invokedType;
18 private final MethodDescriptor samMethodType; 18 private final MethodDescriptor samMethodType;
19 private final ParentedEntry<?> implMethod; 19 private final ParentedEntry<?> implMethod;
20 private final MethodDescriptor instantiatedMethodType; 20 private final MethodDescriptor instantiatedMethodType;
21 21
22 public Lambda(String invokedName, MethodDescriptor invokedType, MethodDescriptor samMethodType, ParentedEntry<?> implMethod, MethodDescriptor instantiatedMethodType) { 22 public Lambda(String invokedName, MethodDescriptor invokedType, MethodDescriptor samMethodType, ParentedEntry<?> implMethod, MethodDescriptor instantiatedMethodType) {
23 this.invokedName = invokedName; 23 this.invokedName = invokedName;
24 this.invokedType = invokedType; 24 this.invokedType = invokedType;
25 this.samMethodType = samMethodType; 25 this.samMethodType = samMethodType;
26 this.implMethod = implMethod; 26 this.implMethod = implMethod;
27 this.instantiatedMethodType = instantiatedMethodType; 27 this.instantiatedMethodType = instantiatedMethodType;
28 } 28 }
29 29
30 @Override 30 @Override
31 public Lambda translate(Translator translator, EntryResolver resolver, EntryMap<EntryMapping> mappings) { 31 public Lambda translate(Translator translator, EntryResolver resolver, EntryMap<EntryMapping> mappings) {
32 MethodEntry samMethod = new MethodEntry(getInterface(), invokedName, samMethodType); 32 MethodEntry samMethod = new MethodEntry(getInterface(), invokedName, samMethodType);
33 EntryMapping samMethodMapping = resolveMapping(resolver, mappings, samMethod); 33 EntryMapping samMethodMapping = resolveMapping(resolver, mappings, samMethod);
34 34
35 return new Lambda( 35 return new Lambda(
36 samMethodMapping != null ? samMethodMapping.getTargetName() : invokedName, 36 samMethodMapping != null ? samMethodMapping.getTargetName() : invokedName,
37 invokedType.translate(translator, resolver, mappings), 37 invokedType.translate(translator, resolver, mappings),
38 samMethodType.translate(translator, resolver, mappings), 38 samMethodType.translate(translator, resolver, mappings),
39 implMethod.translate(translator, resolver, mappings), 39 implMethod.translate(translator, resolver, mappings),
40 instantiatedMethodType.translate(translator, resolver, mappings) 40 instantiatedMethodType.translate(translator, resolver, mappings)
41 ); 41 );
42 } 42 }
43 43
44 private EntryMapping resolveMapping(EntryResolver resolver, EntryMap<EntryMapping> mappings, MethodEntry methodEntry) { 44 private EntryMapping resolveMapping(EntryResolver resolver, EntryMap<EntryMapping> mappings, MethodEntry methodEntry) {
45 for (MethodEntry entry : resolver.resolveEntry(methodEntry, ResolutionStrategy.RESOLVE_ROOT)) { 45 for (MethodEntry entry : resolver.resolveEntry(methodEntry, ResolutionStrategy.RESOLVE_ROOT)) {
46 EntryMapping mapping = mappings.get(entry); 46 EntryMapping mapping = mappings.get(entry);
47 if (mapping != null) { 47 if (mapping != null) {
48 return mapping; 48 return mapping;
49 } 49 }
50 } 50 }
51 return null; 51 return null;
52 } 52 }
53 53
54 public ClassEntry getInterface() { 54 public ClassEntry getInterface() {
55 return invokedType.getReturnDesc().getTypeEntry(); 55 return invokedType.getReturnDesc().getTypeEntry();
56 } 56 }
57 57
58 public String getInvokedName() { 58 public String getInvokedName() {
59 return invokedName; 59 return invokedName;
60 } 60 }
61 61
62 public MethodDescriptor getInvokedType() { 62 public MethodDescriptor getInvokedType() {
63 return invokedType; 63 return invokedType;
64 } 64 }
65 65
66 public MethodDescriptor getSamMethodType() { 66 public MethodDescriptor getSamMethodType() {
67 return samMethodType; 67 return samMethodType;
68 } 68 }
69 69
70 public ParentedEntry<?> getImplMethod() { 70 public ParentedEntry<?> getImplMethod() {
71 return implMethod; 71 return implMethod;
72 } 72 }
73 73
74 public MethodDescriptor getInstantiatedMethodType() { 74 public MethodDescriptor getInstantiatedMethodType() {
75 return instantiatedMethodType; 75 return instantiatedMethodType;
76 } 76 }
77 77
78 @Override 78 @Override
79 public boolean equals(Object o) { 79 public boolean equals(Object o) {
80 if (this == o) return true; 80 if (this == o) return true;
81 if (o == null || getClass() != o.getClass()) return false; 81 if (o == null || getClass() != o.getClass()) return false;
82 Lambda lambda = (Lambda) o; 82 Lambda lambda = (Lambda) o;
83 return Objects.equals(invokedName, lambda.invokedName) && 83 return Objects.equals(invokedName, lambda.invokedName) &&
84 Objects.equals(invokedType, lambda.invokedType) && 84 Objects.equals(invokedType, lambda.invokedType) &&
85 Objects.equals(samMethodType, lambda.samMethodType) && 85 Objects.equals(samMethodType, lambda.samMethodType) &&
86 Objects.equals(implMethod, lambda.implMethod) && 86 Objects.equals(implMethod, lambda.implMethod) &&
87 Objects.equals(instantiatedMethodType, lambda.instantiatedMethodType); 87 Objects.equals(instantiatedMethodType, lambda.instantiatedMethodType);
88 } 88 }
89 89
90 @Override 90 @Override
91 public int hashCode() { 91 public int hashCode() {
92 return Objects.hash(invokedName, invokedType, samMethodType, implMethod, instantiatedMethodType); 92 return Objects.hash(invokedName, invokedType, samMethodType, implMethod, instantiatedMethodType);
93 } 93 }
94 94
95 @Override 95 @Override
96 public String toString() { 96 public String toString() {
97 return "Lambda{" + 97 return "Lambda{" +
98 "invokedName='" + invokedName + '\'' + 98 "invokedName='" + invokedName + '\'' +
99 ", invokedType=" + invokedType + 99 ", invokedType=" + invokedType +
100 ", samMethodType=" + samMethodType + 100 ", samMethodType=" + samMethodType +
101 ", implMethod=" + implMethod + 101 ", implMethod=" + implMethod +
102 ", instantiatedMethodType=" + instantiatedMethodType + 102 ", instantiatedMethodType=" + instantiatedMethodType +
103 '}'; 103 '}';
104 } 104 }
105} 105}
diff --git a/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java
index 37a7014..03c8686 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java
@@ -18,10 +18,10 @@ import cuchaz.enigma.translation.mapping.EntryMapping;
18import cuchaz.enigma.translation.mapping.EntryResolver; 18import cuchaz.enigma.translation.mapping.EntryResolver;
19import cuchaz.enigma.translation.mapping.EntryMap; 19import cuchaz.enigma.translation.mapping.EntryMap;
20import cuchaz.enigma.translation.representation.entry.ClassEntry; 20import cuchaz.enigma.translation.representation.entry.ClassEntry;
21import cuchaz.enigma.utils.Utils;
22 21
23import java.util.ArrayList; 22import java.util.ArrayList;
24import java.util.List; 23import java.util.List;
24import java.util.Objects;
25import java.util.function.Function; 25import java.util.function.Function;
26 26
27public class MethodDescriptor implements Translatable { 27public class MethodDescriptor implements Translatable {
@@ -97,7 +97,7 @@ public class MethodDescriptor implements Translatable {
97 97
98 @Override 98 @Override
99 public int hashCode() { 99 public int hashCode() {
100 return Utils.combineHashesOrdered(this.argumentDescs.hashCode(), this.returnDesc.hashCode()); 100 return Objects.hash(this.argumentDescs.hashCode(), this.returnDesc.hashCode());
101 } 101 }
102 102
103 public boolean hasClass(ClassEntry classEntry) { 103 public boolean hasClass(ClassEntry classEntry) {
diff --git a/src/main/java/cuchaz/enigma/translation/representation/Signature.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/Signature.java
index 424088a..424088a 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/Signature.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/Signature.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java
index f7ba849..f7ba849 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java
index 6930765..6930765 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java
index d6171f1..7d4b2ba 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java
@@ -11,7 +11,7 @@
11 11
12package cuchaz.enigma.translation.representation.entry; 12package cuchaz.enigma.translation.representation.entry;
13 13
14import cuchaz.enigma.throwables.IllegalNameException; 14import cuchaz.enigma.translation.mapping.IllegalNameException;
15import cuchaz.enigma.translation.Translator; 15import cuchaz.enigma.translation.Translator;
16import cuchaz.enigma.translation.mapping.EntryMapping; 16import cuchaz.enigma.translation.mapping.EntryMapping;
17import cuchaz.enigma.translation.mapping.NameValidator; 17import cuchaz.enigma.translation.mapping.NameValidator;
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java
index 82536c7..82536c7 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java
index 72b0391..40bff31 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java
@@ -11,7 +11,7 @@
11 11
12package cuchaz.enigma.translation.representation.entry; 12package cuchaz.enigma.translation.representation.entry;
13 13
14import cuchaz.enigma.throwables.IllegalNameException; 14import cuchaz.enigma.translation.mapping.IllegalNameException;
15import cuchaz.enigma.translation.Translatable; 15import cuchaz.enigma.translation.Translatable;
16import cuchaz.enigma.translation.mapping.NameValidator; 16import cuchaz.enigma.translation.mapping.NameValidator;
17 17
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java
index f9282b2..f9282b2 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java
index bef0edf..0e47878 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java
@@ -15,9 +15,9 @@ import com.google.common.base.Preconditions;
15import cuchaz.enigma.translation.Translator; 15import cuchaz.enigma.translation.Translator;
16import cuchaz.enigma.translation.mapping.EntryMapping; 16import cuchaz.enigma.translation.mapping.EntryMapping;
17import cuchaz.enigma.translation.representation.TypeDescriptor; 17import cuchaz.enigma.translation.representation.TypeDescriptor;
18import cuchaz.enigma.utils.Utils;
19 18
20import javax.annotation.Nullable; 19import javax.annotation.Nullable;
20import java.util.Objects;
21 21
22public class FieldEntry extends ParentedEntry<ClassEntry> implements Comparable<FieldEntry> { 22public class FieldEntry extends ParentedEntry<ClassEntry> implements Comparable<FieldEntry> {
23 protected final TypeDescriptor desc; 23 protected final TypeDescriptor desc;
@@ -67,7 +67,7 @@ public class FieldEntry extends ParentedEntry<ClassEntry> implements Comparable<
67 67
68 @Override 68 @Override
69 public int hashCode() { 69 public int hashCode() {
70 return Utils.combineHashesOrdered(this.parent, this.name, this.desc); 70 return Objects.hash(this.parent, this.name, this.desc);
71 } 71 }
72 72
73 @Override 73 @Override
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java
index aad4236..aad4236 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java
index 3ccb1fa..3f98f03 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java
@@ -3,9 +3,9 @@ package cuchaz.enigma.translation.representation.entry;
3import com.google.common.base.Preconditions; 3import com.google.common.base.Preconditions;
4import cuchaz.enigma.translation.Translator; 4import cuchaz.enigma.translation.Translator;
5import cuchaz.enigma.translation.mapping.EntryMapping; 5import cuchaz.enigma.translation.mapping.EntryMapping;
6import cuchaz.enigma.utils.Utils;
7 6
8import javax.annotation.Nullable; 7import javax.annotation.Nullable;
8import java.util.Objects;
9 9
10/** 10/**
11 * TypeDescriptor... 11 * TypeDescriptor...
@@ -64,7 +64,7 @@ public class LocalVariableEntry extends ParentedEntry<MethodEntry> implements Co
64 64
65 @Override 65 @Override
66 public int hashCode() { 66 public int hashCode() {
67 return Utils.combineHashesOrdered(this.parent, this.index); 67 return Objects.hash(this.parent, this.index);
68 } 68 }
69 69
70 @Override 70 @Override
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java
index 4e75a5c..4e75a5c 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java
index e1ffad3..086a5c1 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java
@@ -15,9 +15,9 @@ import com.google.common.base.Preconditions;
15import cuchaz.enigma.translation.Translator; 15import cuchaz.enigma.translation.Translator;
16import cuchaz.enigma.translation.mapping.EntryMapping; 16import cuchaz.enigma.translation.mapping.EntryMapping;
17import cuchaz.enigma.translation.representation.MethodDescriptor; 17import cuchaz.enigma.translation.representation.MethodDescriptor;
18import cuchaz.enigma.utils.Utils;
19 18
20import javax.annotation.Nullable; 19import javax.annotation.Nullable;
20import java.util.Objects;
21 21
22public class MethodEntry extends ParentedEntry<ClassEntry> implements Comparable<MethodEntry> { 22public class MethodEntry extends ParentedEntry<ClassEntry> implements Comparable<MethodEntry> {
23 23
@@ -72,7 +72,7 @@ public class MethodEntry extends ParentedEntry<ClassEntry> implements Comparable
72 72
73 @Override 73 @Override
74 public int hashCode() { 74 public int hashCode() {
75 return Utils.combineHashesOrdered(this.parent, this.name, this.descriptor); 75 return Objects.hash(this.parent, this.name, this.descriptor);
76 } 76 }
77 77
78 @Override 78 @Override
diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java
index cbc5faf..95be22c 100644
--- a/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java
@@ -12,7 +12,6 @@
12package cuchaz.enigma.translation.representation.entry; 12package cuchaz.enigma.translation.representation.entry;
13 13
14import com.google.common.base.Preconditions; 14import com.google.common.base.Preconditions;
15import cuchaz.enigma.translation.Translatable;
16import cuchaz.enigma.translation.Translator; 15import cuchaz.enigma.translation.Translator;
17import cuchaz.enigma.translation.mapping.EntryMap; 16import cuchaz.enigma.translation.mapping.EntryMap;
18import cuchaz.enigma.translation.mapping.EntryMapping; 17import cuchaz.enigma.translation.mapping.EntryMapping;
diff --git a/src/main/java/cuchaz/enigma/utils/I18n.java b/enigma/src/main/java/cuchaz/enigma/utils/I18n.java
index f91c916..e18532b 100644
--- a/src/main/java/cuchaz/enigma/utils/I18n.java
+++ b/enigma/src/main/java/cuchaz/enigma/utils/I18n.java
@@ -16,8 +16,6 @@ import com.google.common.reflect.ClassPath;
16import com.google.common.reflect.ClassPath.ResourceInfo; 16import com.google.common.reflect.ClassPath.ResourceInfo;
17import com.google.gson.Gson; 17import com.google.gson.Gson;
18 18
19import cuchaz.enigma.config.Config;
20
21public class I18n { 19public class I18n {
22 public static final String DEFAULT_LANGUAGE = "en_us"; 20 public static final String DEFAULT_LANGUAGE = "en_us";
23 private static final Gson GSON = new Gson(); 21 private static final Gson GSON = new Gson();
@@ -26,8 +24,8 @@ public class I18n {
26 private static Map<String, String> languageNames = Maps.newHashMap(); 24 private static Map<String, String> languageNames = Maps.newHashMap();
27 25
28 static { 26 static {
29 translations = load(Config.getInstance().language);
30 defaultTranslations = load(DEFAULT_LANGUAGE); 27 defaultTranslations = load(DEFAULT_LANGUAGE);
28 translations = defaultTranslations;
31 } 29 }
32 30
33 @SuppressWarnings("unchecked") 31 @SuppressWarnings("unchecked")
@@ -61,12 +59,7 @@ public class I18n {
61 } 59 }
62 60
63 public static void setLanguage(String language) { 61 public static void setLanguage(String language) {
64 Config.getInstance().language = language; 62 translations = load(language);
65 try {
66 Config.getInstance().saveConfig();
67 } catch (IOException e) {
68 e.printStackTrace();
69 }
70 } 63 }
71 64
72 public static ArrayList<String> getAvailableLanguages() { 65 public static ArrayList<String> getAvailableLanguages() {
diff --git a/src/main/java/cuchaz/enigma/utils/Pair.java b/enigma/src/main/java/cuchaz/enigma/utils/Pair.java
index bf02cef..bf02cef 100644
--- a/src/main/java/cuchaz/enigma/utils/Pair.java
+++ b/enigma/src/main/java/cuchaz/enigma/utils/Pair.java
diff --git a/enigma/src/main/java/cuchaz/enigma/utils/Utils.java b/enigma/src/main/java/cuchaz/enigma/utils/Utils.java
new file mode 100644
index 0000000..2664099
--- /dev/null
+++ b/enigma/src/main/java/cuchaz/enigma/utils/Utils.java
@@ -0,0 +1,92 @@
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 ******************************************************************************/
11
12package cuchaz.enigma.utils;
13
14import com.google.common.io.CharStreams;
15
16import java.io.IOException;
17import java.io.InputStream;
18import java.io.InputStreamReader;
19import java.nio.charset.StandardCharsets;
20import java.nio.file.Files;
21import java.nio.file.Path;
22import java.security.MessageDigest;
23import java.security.NoSuchAlgorithmException;
24import java.util.Collections;
25import java.util.Comparator;
26import java.util.List;
27import java.util.Locale;
28import java.util.stream.Collectors;
29import java.util.zip.ZipEntry;
30import java.util.zip.ZipFile;
31
32public class Utils {
33 public static String readStreamToString(InputStream in) throws IOException {
34 return CharStreams.toString(new InputStreamReader(in, StandardCharsets.UTF_8));
35 }
36
37 public static String readResourceToString(String path) throws IOException {
38 InputStream in = Utils.class.getResourceAsStream(path);
39 if (in == null) {
40 throw new IllegalArgumentException("Resource not found! " + path);
41 }
42 return readStreamToString(in);
43 }
44
45 public static void delete(Path path) throws IOException {
46 if (Files.exists(path)) {
47 for (Path p : Files.walk(path).sorted(Comparator.reverseOrder()).collect(Collectors.toList())) {
48 Files.delete(p);
49 }
50 }
51 }
52
53 public static byte[] zipSha1(Path path) throws IOException {
54 MessageDigest digest;
55 try {
56 digest = MessageDigest.getInstance("SHA-1");
57 } catch (NoSuchAlgorithmException e) {
58 // Algorithm guaranteed to be supported
59 throw new RuntimeException(e);
60 }
61 try (ZipFile zip = new ZipFile(path.toFile())) {
62 List<? extends ZipEntry> entries = Collections.list(zip.entries());
63 // only compare classes (some implementations may not generate directory entries)
64 entries.removeIf(entry -> !entry.getName().toLowerCase(Locale.ROOT).endsWith(".class"));
65 // different implementations may add zip entries in a different order
66 entries.sort(Comparator.comparing(ZipEntry::getName));
67 byte[] buffer = new byte[8192];
68 for (ZipEntry entry : entries) {
69 digest.update(entry.getName().getBytes(StandardCharsets.UTF_8));
70 try (InputStream in = zip.getInputStream(entry)) {
71 int n;
72 while ((n = in.read(buffer)) != -1) {
73 digest.update(buffer, 0, n);
74 }
75 }
76 }
77 }
78 return digest.digest();
79 }
80
81 public static boolean isBlank(String input) {
82 if (input == null) {
83 return true;
84 }
85 for (int i = 0; i < input.length(); i++) {
86 if (!Character.isWhitespace(input.charAt(i))) {
87 return false;
88 }
89 }
90 return true;
91 }
92}
diff --git a/src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin b/enigma/src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin
index 136a3e7..136a3e7 100644
--- a/src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin
+++ b/enigma/src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin
diff --git a/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json
index dbf4b93..dbf4b93 100644
--- a/src/main/resources/lang/en_us.json
+++ b/enigma/src/main/resources/lang/en_us.json
diff --git a/src/main/resources/lang/fr_fr.json b/enigma/src/main/resources/lang/fr_fr.json
index d169b9a..d169b9a 100644
--- a/src/main/resources/lang/fr_fr.json
+++ b/enigma/src/main/resources/lang/fr_fr.json
diff --git a/src/main/resources/lang/zh_cn.json b/enigma/src/main/resources/lang/zh_cn.json
index f3f503a..f3f503a 100644
--- a/src/main/resources/lang/zh_cn.json
+++ b/enigma/src/main/resources/lang/zh_cn.json
diff --git a/src/main/resources/profile.json b/enigma/src/main/resources/profile.json
index e1af4cd..e1af4cd 100644
--- a/src/main/resources/profile.json
+++ b/enigma/src/main/resources/profile.json
diff --git a/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java b/enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java
index 1dc9748..1dc9748 100644
--- a/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java
+++ b/enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java
diff --git a/src/test/java/cuchaz/enigma/TestDeobfed.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java
index d64a745..494d959 100644
--- a/src/test/java/cuchaz/enigma/TestDeobfed.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java
@@ -13,13 +13,14 @@ package cuchaz.enigma;
13 13
14import cuchaz.enigma.analysis.ClassCache; 14import cuchaz.enigma.analysis.ClassCache;
15import cuchaz.enigma.analysis.index.JarIndex; 15import cuchaz.enigma.analysis.index.JarIndex;
16import cuchaz.enigma.network.EnigmaServer;
17import cuchaz.enigma.source.Decompiler; 16import cuchaz.enigma.source.Decompiler;
18import cuchaz.enigma.source.Decompilers; 17import cuchaz.enigma.source.Decompilers;
19import cuchaz.enigma.source.SourceSettings; 18import cuchaz.enigma.source.SourceSettings;
20import org.junit.BeforeClass; 19import org.junit.BeforeClass;
21import org.junit.Test; 20import org.junit.Test;
22 21
22import java.nio.file.Files;
23import java.nio.file.Path;
23import java.nio.file.Paths; 24import java.nio.file.Paths;
24 25
25import static cuchaz.enigma.TestEntryFactory.newClass; 26import static cuchaz.enigma.TestEntryFactory.newClass;
@@ -27,7 +28,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
27import static org.hamcrest.Matchers.containsInAnyOrder; 28import static org.hamcrest.Matchers.containsInAnyOrder;
28 29
29public class TestDeobfed { 30public class TestDeobfed {
30
31 private static Enigma enigma; 31 private static Enigma enigma;
32 private static ClassCache classCache; 32 private static ClassCache classCache;
33 private static JarIndex index; 33 private static JarIndex index;
@@ -36,7 +36,13 @@ public class TestDeobfed {
36 public static void beforeClass() throws Exception { 36 public static void beforeClass() throws Exception {
37 enigma = Enigma.create(); 37 enigma = Enigma.create();
38 38
39 classCache = ClassCache.of(Paths.get("build/test-deobf/translation.jar")); 39 Path obf = Paths.get("build/test-obf/translation.jar");
40 Path deobf = Paths.get("build/test-deobf/translation.jar");
41 Files.createDirectories(deobf.getParent());
42 EnigmaProject project = enigma.openJar(obf, ProgressListener.none());
43 project.exportRemappedJar(ProgressListener.none()).write(deobf, ProgressListener.none());
44
45 classCache = ClassCache.of(deobf);
40 index = classCache.index(ProgressListener.none()); 46 index = classCache.index(ProgressListener.none());
41 } 47 }
42 48
@@ -71,7 +77,7 @@ public class TestDeobfed {
71 77
72 @Test 78 @Test
73 public void decompile() { 79 public void decompile() {
74 EnigmaProject project = new EnigmaProject(enigma, classCache, index, new byte[EnigmaServer.CHECKSUM_SIZE]); 80 EnigmaProject project = new EnigmaProject(enigma, classCache, index, new byte[20]);
75 Decompiler decompiler = Decompilers.PROCYON.create(project.getClassCache(), new SourceSettings(false, false)); 81 Decompiler decompiler = Decompilers.PROCYON.create(project.getClassCache(), new SourceSettings(false, false));
76 82
77 decompiler.getSource("a"); 83 decompiler.getSource("a");
diff --git a/src/test/java/cuchaz/enigma/TestDeobfuscator.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java
index 6619d26..6619d26 100644
--- a/src/test/java/cuchaz/enigma/TestDeobfuscator.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java
diff --git a/src/test/java/cuchaz/enigma/TestEntryFactory.java b/enigma/src/test/java/cuchaz/enigma/TestEntryFactory.java
index 9e1425a..9e1425a 100644
--- a/src/test/java/cuchaz/enigma/TestEntryFactory.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestEntryFactory.java
diff --git a/src/test/java/cuchaz/enigma/TestInnerClasses.java b/enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java
index 85c72f8..85c72f8 100644
--- a/src/test/java/cuchaz/enigma/TestInnerClasses.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java
diff --git a/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java b/enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java
index 48975c8..48975c8 100644
--- a/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java
diff --git a/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java b/enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java
index 76e379c..76e379c 100644
--- a/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java
diff --git a/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java b/enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java
index 103c366..103c366 100644
--- a/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java
diff --git a/src/test/java/cuchaz/enigma/TestMethodDescriptor.java b/enigma/src/test/java/cuchaz/enigma/TestMethodDescriptor.java
index a73880d..a73880d 100644
--- a/src/test/java/cuchaz/enigma/TestMethodDescriptor.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestMethodDescriptor.java
diff --git a/src/test/java/cuchaz/enigma/TestTokensConstructors.java b/enigma/src/test/java/cuchaz/enigma/TestTokensConstructors.java
index 0398de4..0398de4 100644
--- a/src/test/java/cuchaz/enigma/TestTokensConstructors.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestTokensConstructors.java
diff --git a/src/test/java/cuchaz/enigma/TestTranslator.java b/enigma/src/test/java/cuchaz/enigma/TestTranslator.java
index a420afe..a420afe 100644
--- a/src/test/java/cuchaz/enigma/TestTranslator.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestTranslator.java
diff --git a/src/test/java/cuchaz/enigma/TestTypeDescriptor.java b/enigma/src/test/java/cuchaz/enigma/TestTypeDescriptor.java
index b9ebe55..b9ebe55 100644
--- a/src/test/java/cuchaz/enigma/TestTypeDescriptor.java
+++ b/enigma/src/test/java/cuchaz/enigma/TestTypeDescriptor.java
diff --git a/src/test/java/cuchaz/enigma/TokenChecker.java b/enigma/src/test/java/cuchaz/enigma/TokenChecker.java
index 48d0c83..96fc6da 100644
--- a/src/test/java/cuchaz/enigma/TokenChecker.java
+++ b/enigma/src/test/java/cuchaz/enigma/TokenChecker.java
@@ -16,7 +16,7 @@ import cuchaz.enigma.analysis.ClassCache;
16import cuchaz.enigma.analysis.EntryReference; 16import cuchaz.enigma.analysis.EntryReference;
17import cuchaz.enigma.source.SourceIndex; 17import cuchaz.enigma.source.SourceIndex;
18import cuchaz.enigma.source.*; 18import cuchaz.enigma.source.*;
19import cuchaz.enigma.analysis.Token; 19import cuchaz.enigma.source.Token;
20import cuchaz.enigma.translation.representation.entry.Entry; 20import cuchaz.enigma.translation.representation.entry.Entry;
21 21
22import java.io.IOException; 22import java.io.IOException;
diff --git a/src/test/java/cuchaz/enigma/inputs/Keep.java b/enigma/src/test/java/cuchaz/enigma/inputs/Keep.java
index 4dbe8e2..4dbe8e2 100644
--- a/src/test/java/cuchaz/enigma/inputs/Keep.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/Keep.java
diff --git a/src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java
index f07e1f8..f07e1f8 100644
--- a/src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/constructors/Caller.java b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/Caller.java
index 71439fd..71439fd 100644
--- a/src/test/java/cuchaz/enigma/inputs/constructors/Caller.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/Caller.java
diff --git a/src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java
index c3d4170..c3d4170 100644
--- a/src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java
diff --git a/src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java
index bc56b3b..bc56b3b 100644
--- a/src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java
index 87b69d3..87b69d3 100644
--- a/src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java
index b9c4929..b9c4929 100644
--- a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java
index 50e963c..50e963c 100644
--- a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java
diff --git a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java
index d0dd664..d0dd664 100644
--- a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java
diff --git a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java
index c584570..c584570 100644
--- a/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java
diff --git a/src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java
index f652d87..f652d87 100644
--- a/src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java
diff --git a/src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java
index d1b7601..d1b7601 100644
--- a/src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java
diff --git a/src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java
index 94061fa..94061fa 100644
--- a/src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java
diff --git a/src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java
index 71b3a6d..71b3a6d 100644
--- a/src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java
diff --git a/src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java
index 976ec42..976ec42 100644
--- a/src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java
diff --git a/src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java
index b1de3c9..b1de3c9 100644
--- a/src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java
diff --git a/src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java
index ddc4e31..ddc4e31 100644
--- a/src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java b/enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java
index 6f5fe30..6f5fe30 100644
--- a/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java
diff --git a/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java b/enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java
index cf0f657..cf0f657 100644
--- a/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java
diff --git a/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java b/enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java
index 19fb19c..19fb19c 100644
--- a/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java
index 26f3718..26f3718 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java
index fd7f6e7..fd7f6e7 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java
index 9d74e44..9d74e44 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java
index 99c83bb..99c83bb 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java
index 0b8cf2a..0b8cf2a 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java
index 8a92792..8a92792 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java
index a1e6a85..a1e6a85 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java
index 013c55a..013c55a 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java
diff --git a/src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java b/enigma/src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java
index fd2ebdd..fd2ebdd 100644
--- a/src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java
diff --git a/src/test/java/cuchaz/enigma/mapping/TestComments.java b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestComments.java
index b3a6005..e831943 100644
--- a/src/test/java/cuchaz/enigma/mapping/TestComments.java
+++ b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestComments.java
@@ -1,4 +1,4 @@
1package cuchaz.enigma.mapping; 1package cuchaz.enigma.translation.mapping;
2 2
3import java.io.IOException; 3import java.io.IOException;
4import java.net.URISyntaxException; 4import java.net.URISyntaxException;
@@ -6,12 +6,11 @@ import java.nio.file.Path;
6import java.nio.file.Paths; 6import java.nio.file.Paths;
7 7
8import cuchaz.enigma.ProgressListener; 8import cuchaz.enigma.ProgressListener;
9import cuchaz.enigma.throwables.MappingParseException; 9import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
10import cuchaz.enigma.translation.mapping.EntryMapping; 10import cuchaz.enigma.translation.mapping.serde.MappingParseException;
11import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 11import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
12import cuchaz.enigma.translation.mapping.MappingSaveParameters; 12import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader;
13import cuchaz.enigma.translation.mapping.serde.EnigmaMappingsReader; 13import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer;
14import cuchaz.enigma.translation.mapping.serde.TinyV2Writer;
15import cuchaz.enigma.translation.mapping.tree.EntryTree; 14import cuchaz.enigma.translation.mapping.tree.EntryTree;
16import org.junit.Test; 15import org.junit.Test;
17 16
diff --git a/src/test/java/cuchaz/enigma/mapping/TestTinyV2InnerClasses.java b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java
index 7cfdaca..65941e5 100644
--- a/src/test/java/cuchaz/enigma/mapping/TestTinyV2InnerClasses.java
+++ b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java
@@ -9,20 +9,16 @@
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11 11
12package cuchaz.enigma.mapping; 12package cuchaz.enigma.translation.mapping;
13 13
14import cuchaz.enigma.Enigma; 14import cuchaz.enigma.Enigma;
15import cuchaz.enigma.EnigmaProject; 15import cuchaz.enigma.EnigmaProject;
16import cuchaz.enigma.ProgressListener; 16import cuchaz.enigma.ProgressListener;
17import cuchaz.enigma.translation.mapping.serde.EnigmaMappingsReader; 17import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader;
18import cuchaz.enigma.translation.representation.entry.ClassEntry;
19import org.junit.Test;
20 18
21import java.nio.file.Path; 19import java.nio.file.Path;
22import java.nio.file.Paths; 20import java.nio.file.Paths;
23 21
24import static cuchaz.enigma.TestEntryFactory.newClass;
25
26public final class TestTinyV2InnerClasses { 22public final class TestTinyV2InnerClasses {
27 private Path jar; 23 private Path jar;
28 private Path mappings; 24 private Path mappings;
diff --git a/src/test/java/cuchaz/enigma/mapping/TestV2Main.java b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestV2Main.java
index 021a90c..6e4d7b9 100644
--- a/src/test/java/cuchaz/enigma/mapping/TestV2Main.java
+++ b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestV2Main.java
@@ -1,11 +1,10 @@
1package cuchaz.enigma.mapping; 1package cuchaz.enigma.translation.mapping;
2 2
3import cuchaz.enigma.ProgressListener; 3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.translation.mapping.EntryMapping; 4import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat;
5import cuchaz.enigma.translation.mapping.MappingFileNameFormat; 5import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
6import cuchaz.enigma.translation.mapping.MappingSaveParameters; 6import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader;
7import cuchaz.enigma.translation.mapping.serde.EnigmaMappingsReader; 7import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer;
8import cuchaz.enigma.translation.mapping.serde.TinyV2Writer;
9import cuchaz.enigma.translation.mapping.tree.EntryTree; 8import cuchaz.enigma.translation.mapping.tree.EntryTree;
10 9
11import java.nio.file.Path; 10import java.nio.file.Path;
diff --git a/src/test/resources/comments/test.mapping b/enigma/src/test/resources/comments/test.mapping
index d134558..d134558 100644
--- a/src/test/resources/comments/test.mapping
+++ b/enigma/src/test/resources/comments/test.mapping
diff --git a/src/test/resources/proguard-build.conf b/enigma/src/test/resources/proguard-build.conf
index ba3575a..691d8a2 100644
--- a/src/test/resources/proguard-build.conf
+++ b/enigma/src/test/resources/proguard-build.conf
@@ -2,5 +2,5 @@
2-dontobfuscate 2-dontobfuscate
3-dontwarn 3-dontwarn
4-keep class cuchaz.enigma.Main { static void main(java.lang.String[]); } 4-keep class cuchaz.enigma.Main { static void main(java.lang.String[]); }
5-keep class cuchaz.enigma.CommandMain { static void main(java.lang.String[]); } 5-keep class cuchaz.enigma.command.Main { static void main(java.lang.String[]); }
6-keep class de.sciss.syntaxpane.** { *; } 6-keep class de.sciss.syntaxpane.** { *; }
diff --git a/src/test/resources/proguard-test.conf b/enigma/src/test/resources/proguard-test.conf
index 9411d26..9411d26 100644
--- a/src/test/resources/proguard-test.conf
+++ b/enigma/src/test/resources/proguard-test.conf
diff --git a/src/test/resources/tinyV2InnerClasses/c.mapping b/enigma/src/test/resources/tinyV2InnerClasses/c.mapping
index f9b0442..f9b0442 100644
--- a/src/test/resources/tinyV2InnerClasses/c.mapping
+++ b/enigma/src/test/resources/tinyV2InnerClasses/c.mapping
diff --git a/src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping b/enigma/src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping
index 8d43ba9..8d43ba9 100644
--- a/src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping
+++ b/enigma/src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping
diff --git a/src/test/java/cuchaz/enigma/resources/translation.mappings b/enigma/src/test/resources/translation.mappings
index c08765c..c08765c 100644
--- a/src/test/java/cuchaz/enigma/resources/translation.mappings
+++ b/enigma/src/test/resources/translation.mappings
diff --git a/settings.gradle b/settings.gradle
index 8fa1712..8754027 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1,4 @@
1rootProject.name = 'enigma' \ No newline at end of file 1include 'enigma'
2include 'enigma-swing'
3include 'enigma-server'
4include 'enigma-cli'
diff --git a/src/main/java/cuchaz/enigma/Constants.java b/src/main/java/cuchaz/enigma/Constants.java
deleted file mode 100644
index 577315f..0000000
--- a/src/main/java/cuchaz/enigma/Constants.java
+++ /dev/null
@@ -1,20 +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 ******************************************************************************/
11
12package cuchaz.enigma;
13
14public class Constants {
15 public static final String NAME = "Enigma";
16 public static final String VERSION = "@VERSION@/Fabric";
17 public static final String URL = "https://fabricmc.net";
18 public static final int MiB = 1024 * 1024; // 1 mebibyte
19 public static final int KiB = 1024; // 1 kebibyte
20}
diff --git a/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java b/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java
deleted file mode 100644
index fc7afbc..0000000
--- a/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java
+++ /dev/null
@@ -1,148 +0,0 @@
1package cuchaz.enigma.command;
2
3import cuchaz.enigma.ProgressListener;
4import cuchaz.enigma.throwables.MappingParseException;
5import cuchaz.enigma.translation.MappingTranslator;
6import cuchaz.enigma.translation.Translator;
7import cuchaz.enigma.translation.mapping.EntryMapping;
8import cuchaz.enigma.translation.mapping.MappingSaveParameters;
9import cuchaz.enigma.translation.mapping.VoidEntryResolver;
10import cuchaz.enigma.translation.mapping.serde.*;
11import cuchaz.enigma.translation.mapping.tree.EntryTree;
12import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
13import cuchaz.enigma.translation.mapping.tree.HashEntryTree;
14import cuchaz.enigma.translation.representation.entry.ClassEntry;
15import cuchaz.enigma.translation.representation.entry.Entry;
16import cuchaz.enigma.translation.representation.entry.FieldEntry;
17import cuchaz.enigma.translation.representation.entry.MethodEntry;
18
19import java.io.IOException;
20import java.nio.file.Files;
21import java.nio.file.Path;
22import java.util.HashSet;
23import java.util.Set;
24
25public final class MappingCommandsUtil {
26 private MappingCommandsUtil() {}
27
28 public static EntryTree<EntryMapping> invert(EntryTree<EntryMapping> mappings) {
29 Translator translator = new MappingTranslator(mappings, VoidEntryResolver.INSTANCE);
30 EntryTree<EntryMapping> result = new HashEntryTree<>();
31
32 for (EntryTreeNode<EntryMapping> node : mappings) {
33 Entry<?> leftEntry = node.getEntry();
34 EntryMapping leftMapping = node.getValue();
35
36 if (!(leftEntry instanceof ClassEntry || leftEntry instanceof MethodEntry || leftEntry instanceof FieldEntry)) {
37 result.insert(translator.translate(leftEntry), leftMapping);
38 continue;
39 }
40
41 Entry<?> rightEntry = translator.translate(leftEntry);
42
43 result.insert(rightEntry, leftMapping == null ? null : new EntryMapping(leftEntry.getName())); // TODO: leftMapping.withName once javadoc PR is merged
44 }
45
46 return result;
47 }
48
49 public static EntryTree<EntryMapping> compose(EntryTree<EntryMapping> left, EntryTree<EntryMapping> right, boolean keepLeftOnly, boolean keepRightOnly) {
50 Translator leftTranslator = new MappingTranslator(left, VoidEntryResolver.INSTANCE);
51 EntryTree<EntryMapping> result = new HashEntryTree<>();
52 Set<Entry<?>> addedMappings = new HashSet<>();
53
54 for (EntryTreeNode<EntryMapping> node : left) {
55 Entry<?> leftEntry = node.getEntry();
56 EntryMapping leftMapping = node.getValue();
57
58 Entry<?> rightEntry = leftTranslator.translate(leftEntry);
59
60 EntryMapping rightMapping = right.get(rightEntry);
61 if (rightMapping != null) {
62 result.insert(leftEntry, rightMapping);
63 addedMappings.add(rightEntry);
64 } else if (keepLeftOnly) {
65 result.insert(leftEntry, leftMapping);
66 }
67 }
68
69 if (keepRightOnly) {
70 Translator leftInverseTranslator = new MappingTranslator(invert(left), VoidEntryResolver.INSTANCE);
71 for (EntryTreeNode<EntryMapping> node : right) {
72 Entry<?> rightEntry = node.getEntry();
73 EntryMapping rightMapping = node.getValue();
74
75 if (!addedMappings.contains(rightEntry)) {
76 result.insert(leftInverseTranslator.translate(rightEntry), rightMapping);
77 }
78 }
79 }
80 return result;
81 }
82
83 public static EntryTree<EntryMapping> read(String type, Path path, MappingSaveParameters saveParameters) throws MappingParseException, IOException {
84 if (type.equals("enigma")) {
85 return (Files.isDirectory(path) ? EnigmaMappingsReader.DIRECTORY : EnigmaMappingsReader.ZIP).read(path, ProgressListener.none(), saveParameters);
86 }
87
88 if (type.equals("tiny")) {
89 return TinyMappingsReader.INSTANCE.read(path, ProgressListener.none(), saveParameters);
90 }
91
92 MappingFormat format = null;
93 try {
94 format = MappingFormat.valueOf(type.toUpperCase());
95 } catch (IllegalArgumentException ignored) {
96 if (type.equals("tinyv2")) {
97 format = MappingFormat.TINY_V2;
98 }
99 }
100
101 if (format != null) {
102 return format.getReader().read(path, ProgressListener.none(), saveParameters);
103 }
104
105 throw new IllegalArgumentException("no reader for " + type);
106 }
107
108 public static void write(EntryTree<EntryMapping> mappings, String type, Path path, MappingSaveParameters saveParameters) {
109 if (type.equals("enigma")) {
110 EnigmaMappingsWriter.DIRECTORY.write(mappings, path, ProgressListener.none(), saveParameters);
111 return;
112 }
113
114 if (type.startsWith("tinyv2:") || type.startsWith("tiny_v2:")) {
115 String[] split = type.split(":");
116
117 if (split.length != 3) {
118 throw new IllegalArgumentException("specify column names as 'tinyv2:from_namespace:to_namespace'");
119 }
120
121 new TinyV2Writer(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters);
122 return;
123 }
124
125 if (type.startsWith("tiny:")) {
126 String[] split = type.split(":");
127
128 if (split.length != 3) {
129 throw new IllegalArgumentException("specify column names as 'tiny:from_column:to_column'");
130 }
131
132 new TinyMappingsWriter(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters);
133 return;
134 }
135
136 MappingFormat format = null;
137 try {
138 format = MappingFormat.valueOf(type.toUpperCase());
139 } catch (IllegalArgumentException ignored) {}
140
141 if (format != null) {
142 format.getWriter().write(mappings, path, ProgressListener.none(), saveParameters);
143 return;
144 }
145
146 throw new IllegalArgumentException("no writer for " + type);
147 }
148}
diff --git a/src/main/java/cuchaz/enigma/throwables/MappingConflict.java b/src/main/java/cuchaz/enigma/throwables/MappingConflict.java
deleted file mode 100644
index 95cd449..0000000
--- a/src/main/java/cuchaz/enigma/throwables/MappingConflict.java
+++ /dev/null
@@ -1,7 +0,0 @@
1package cuchaz.enigma.throwables;
2
3public class MappingConflict extends Exception {
4 public MappingConflict(String clazz, String name, String nameExisting) {
5 super(String.format("Conflicting mappings found for %s. The mapping file is %s and the second is %s", clazz, name, nameExisting));
6 }
7}
diff --git a/src/main/java/cuchaz/enigma/utils/LFPrintWriter.java b/src/main/java/cuchaz/enigma/utils/LFPrintWriter.java
deleted file mode 100644
index c12e913..0000000
--- a/src/main/java/cuchaz/enigma/utils/LFPrintWriter.java
+++ /dev/null
@@ -1,16 +0,0 @@
1package cuchaz.enigma.utils;
2
3import java.io.PrintWriter;
4import java.io.Writer;
5
6public class LFPrintWriter extends PrintWriter {
7 public LFPrintWriter(Writer out) {
8 super(out);
9 }
10
11 @Override
12 public void println() {
13 // https://stackoverflow.com/a/14749004
14 write('\n');
15 }
16}
diff --git a/src/main/java/cuchaz/enigma/utils/Utils.java b/src/main/java/cuchaz/enigma/utils/Utils.java
deleted file mode 100644
index b45b00d..0000000
--- a/src/main/java/cuchaz/enigma/utils/Utils.java
+++ /dev/null
@@ -1,179 +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 ******************************************************************************/
11
12package cuchaz.enigma.utils;
13
14import com.google.common.io.CharStreams;
15import org.objectweb.asm.Opcodes;
16
17import javax.swing.*;
18import javax.swing.text.BadLocationException;
19import javax.swing.text.JTextComponent;
20import java.awt.*;
21import java.awt.event.MouseEvent;
22import java.io.IOException;
23import java.io.InputStream;
24import java.io.InputStreamReader;
25import java.net.URI;
26import java.net.URISyntaxException;
27import java.nio.charset.StandardCharsets;
28import java.nio.file.Files;
29import java.nio.file.Path;
30import java.security.MessageDigest;
31import java.security.NoSuchAlgorithmException;
32import java.util.*;
33import java.util.List;
34import java.util.stream.Collectors;
35import java.util.zip.ZipEntry;
36import java.util.zip.ZipFile;
37
38public class Utils {
39
40 public static final int ASM_VERSION = Opcodes.ASM8;
41
42 public static int combineHashesOrdered(Object... objs) {
43 final int prime = 67;
44 int result = 1;
45 for (Object obj : objs) {
46 result *= prime;
47 if (obj != null) {
48 result += obj.hashCode();
49 }
50 }
51 return result;
52 }
53
54 public static int combineHashesOrdered(List<Object> objs) {
55 final int prime = 67;
56 int result = 1;
57 for (Object obj : objs) {
58 result *= prime;
59 if (obj != null) {
60 result += obj.hashCode();
61 }
62 }
63 return result;
64 }
65
66 public static String readStreamToString(InputStream in) throws IOException {
67 return CharStreams.toString(new InputStreamReader(in, "UTF-8"));
68 }
69
70 public static String readResourceToString(String path) throws IOException {
71 InputStream in = Utils.class.getResourceAsStream(path);
72 if (in == null) {
73 throw new IllegalArgumentException("Resource not found! " + path);
74 }
75 return readStreamToString(in);
76 }
77
78 public static void openUrl(String url) {
79 if (Desktop.isDesktopSupported()) {
80 Desktop desktop = Desktop.getDesktop();
81 try {
82 desktop.browse(new URI(url));
83 } catch (IOException ex) {
84 throw new Error(ex);
85 } catch (URISyntaxException ex) {
86 throw new IllegalArgumentException(ex);
87 }
88 }
89 }
90
91 public static JLabel unboldLabel(JLabel label) {
92 Font font = label.getFont();
93 label.setFont(font.deriveFont(font.getStyle() & ~Font.BOLD));
94 return label;
95 }
96
97 public static void showToolTipNow(JComponent component) {
98 // HACKHACK: trick the tooltip manager into showing the tooltip right now
99 ToolTipManager manager = ToolTipManager.sharedInstance();
100 int oldDelay = manager.getInitialDelay();
101 manager.setInitialDelay(0);
102 manager.mouseMoved(new MouseEvent(component, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, 0, 0, 0, false));
103 manager.setInitialDelay(oldDelay);
104 }
105
106 public static Rectangle safeModelToView(JTextComponent component, int modelPos) {
107 if (modelPos < 0) {
108 modelPos = 0;
109 } else if (modelPos >= component.getText().length()) {
110 modelPos = component.getText().length();
111 }
112 try {
113 return component.modelToView(modelPos);
114 } catch (BadLocationException e) {
115 throw new RuntimeException(e);
116 }
117 }
118
119 public static boolean getSystemPropertyAsBoolean(String property, boolean defValue) {
120 String value = System.getProperty(property);
121 return value == null ? defValue : Boolean.parseBoolean(value);
122 }
123
124 public static void delete(Path path) throws IOException {
125 if (Files.exists(path)) {
126 for (Path p : Files.walk(path).sorted(Comparator.reverseOrder()).collect(Collectors.toList())) {
127 Files.delete(p);
128 }
129 }
130 }
131
132 public static byte[] zipSha1(Path path) throws IOException {
133 MessageDigest digest;
134 try {
135 digest = MessageDigest.getInstance("SHA-1");
136 } catch (NoSuchAlgorithmException e) {
137 // Algorithm guaranteed to be supported
138 throw new RuntimeException(e);
139 }
140 try (ZipFile zip = new ZipFile(path.toFile())) {
141 List<? extends ZipEntry> entries = Collections.list(zip.entries());
142 // only compare classes (some implementations may not generate directory entries)
143 entries.removeIf(entry -> !entry.getName().toLowerCase(Locale.ROOT).endsWith(".class"));
144 // different implementations may add zip entries in a different order
145 entries.sort(Comparator.comparing(ZipEntry::getName));
146 byte[] buffer = new byte[8192];
147 for (ZipEntry entry : entries) {
148 digest.update(entry.getName().getBytes(StandardCharsets.UTF_8));
149 try (InputStream in = zip.getInputStream(entry)) {
150 int n;
151 while ((n = in.read(buffer)) != -1) {
152 digest.update(buffer, 0, n);
153 }
154 }
155 }
156 }
157 return digest.digest();
158 }
159
160 public static String caplisiseCamelCase(String input){
161 StringJoiner stringJoiner = new StringJoiner(" ");
162 for (String word : input.toLowerCase(Locale.ROOT).split("_")) {
163 stringJoiner.add(word.substring(0, 1).toUpperCase(Locale.ROOT) + word.substring(1));
164 }
165 return stringJoiner.toString();
166 }
167
168 public static boolean isBlank(String input) {
169 if (input == null) {
170 return true;
171 }
172 for (int i = 0; i < input.length(); i++) {
173 if (!Character.isWhitespace(input.charAt(i))) {
174 return false;
175 }
176 }
177 return true;
178 }
179}
diff --git a/src/test/java/cuchaz/enigma/TestSourceIndex.java b/src/test/java/cuchaz/enigma/TestSourceIndex.java
deleted file mode 100644
index b201608..0000000
--- a/src/test/java/cuchaz/enigma/TestSourceIndex.java
+++ /dev/null
@@ -1,74 +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 *
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11
12package cuchaz.enigma;
13
14import com.google.common.collect.Sets;
15import cuchaz.enigma.analysis.ClassCache;
16import cuchaz.enigma.source.*;
17import cuchaz.enigma.analysis.index.JarIndex;
18import cuchaz.enigma.translation.representation.entry.ClassEntry;
19import org.junit.Test;
20
21import java.nio.file.Path;
22import java.nio.file.Paths;
23import java.util.Set;
24
25public class TestSourceIndex {
26 @Test
27 public void indexEverything()
28 throws Exception {
29 // Figure out where Minecraft is...
30 final String mcDir = System.getProperty("enigma.test.minecraftdir");
31 Path mcJar = null;
32 if (mcDir == null) {
33 String osname = System.getProperty("os.name").toLowerCase();
34 if (osname.contains("nix") || osname.contains("nux") || osname.contains("solaris")) {
35 mcJar = Paths.get(System.getProperty("user.home"), ".minecraft/versions/1.8.3/1.8.3.jar");
36 } else if (osname.contains("mac") || osname.contains("darwin")) {
37 mcJar = Paths.get(System.getProperty("user.home"), "Library/Application Support/minecraft/versions/1.8.3/1.8.3.jar");
38 } else if (osname.contains("win")) {
39 mcJar = Paths.get(System.getenv("AppData"), ".minecraft/versions/1.8.3/1.8.3.jar");
40 }
41 } else {
42 mcJar = Paths.get(mcDir, "versions/1.8.3/1.8.3.jar");
43 }
44
45 if (mcJar == null) {
46 throw new NullPointerException("Couldn't find jar");
47 }
48
49 Enigma enigma = Enigma.create();
50 EnigmaProject project = enigma.openJar(mcJar, ProgressListener.none());
51
52 ClassCache classCache = project.getClassCache();
53 JarIndex index = project.getJarIndex();
54
55 Decompiler decompiler = Decompilers.PROCYON.create(classCache, new SourceSettings(false, false));
56
57 // get all classes that aren't inner classes
58 Set<ClassEntry> classEntries = Sets.newHashSet();
59 for (ClassEntry obfClassEntry : index.getEntryIndex().getClasses()) {
60 if (!obfClassEntry.isInnerClass()) {
61 classEntries.add(obfClassEntry);
62 }
63 }
64
65 for (ClassEntry obfClassEntry : classEntries) {
66 try {
67 Source source = decompiler.getSource(obfClassEntry.getName());
68 source.index();
69 } catch (Throwable t) {
70 throw new Error("Unable to index " + obfClassEntry, t);
71 }
72 }
73 }
74}