From 0f47403d0220757fed189b76e2071e25b1025cb8 Mon Sep 17 00:00:00 2001 From: Runemoro Date: Wed, 3 Jun 2020 13:39:42 -0400 Subject: [PATCH] Split GUI code to separate module (#242) * Split into modules * Post merge compile fixes Co-authored-by: modmuss50 --- .gitignore | 246 ++------------- README.md | 4 +- build.gradle | 174 ++--------- enigma-cli/build.gradle | 5 + .../enigma/command/CheckMappingsCommand.java | 2 +- .../java/cuchaz/enigma/command/Command.java | 2 +- .../command/ComposeMappingsCommand.java | 9 +- .../command/ConvertMappingsCommand.java | 6 +- .../enigma/command/DecompileCommand.java | 0 .../enigma/command/DeobfuscateCommand.java | 0 .../enigma/command/InvertMappingsCommand.java | 9 +- .../main/java/cuchaz/enigma/command/Main.java | 12 +- .../command/MapSpecializedMethodsCommand.java | 4 +- .../enigma/command/MappingCommandsUtil.java | 87 ++++++ .../command/CheckMappingsCommandTest.java | 5 +- .../correctMappings/base/Base.mapping | 0 .../correctMappings/base/One.mapping | 0 .../correctMappings/two/Two.mapping | 0 .../wrongMappings/base/Base.mapping | 0 .../wrongMappings/one/One.mapping | 0 .../wrongMappings/two/Two.mapping | 0 enigma-server/build.gradle | 6 + {docs => enigma-server/docs}/protocol.md | 0 .../enigma/network/ClientPacketHandler.java | 29 ++ .../enigma/network/DedicatedEnigmaServer.java | 46 ++- .../cuchaz/enigma/network/EnigmaClient.java | 17 +- .../cuchaz/enigma/network/EnigmaServer.java | 8 +- .../network/IntegratedEnigmaServer.java | 0 .../java/cuchaz/enigma/network}/Message.java | 3 +- .../enigma/network/ServerPacketHandler.java | 0 .../network/packet/ChangeDocsC2SPacket.java | 4 +- .../network/packet/ChangeDocsS2CPacket.java | 6 +- .../packet/ConfirmChangeC2SPacket.java | 0 .../enigma/network/packet/KickS2CPacket.java | 6 +- .../enigma/network/packet/LoginC2SPacket.java | 2 +- .../packet/MarkDeobfuscatedC2SPacket.java | 2 +- .../packet/MarkDeobfuscatedS2CPacket.java | 6 +- .../network/packet/MessageC2SPacket.java | 2 +- .../network/packet/MessageS2CPacket.java | 8 +- .../cuchaz/enigma/network/packet/Packet.java | 0 .../enigma/network/packet/PacketHelper.java | 0 .../enigma/network/packet/PacketRegistry.java | 14 +- .../packet/RemoveMappingC2SPacket.java | 4 +- .../packet/RemoveMappingS2CPacket.java | 6 +- .../network/packet/RenameC2SPacket.java | 4 +- .../network/packet/RenameS2CPacket.java | 6 +- .../network/packet/SyncMappingsS2CPacket.java | 8 +- .../network/packet/UserListS2CPacket.java | 8 +- enigma-swing/build.gradle | 23 ++ .../java/cuchaz/enigma/gui/BrowserCaret.java | 0 .../java/cuchaz/enigma/gui/ClassSelector.java | 2 +- .../java/cuchaz/enigma/gui/CodeReader.java | 2 +- .../cuchaz/enigma/gui/ConnectionState.java | 0 .../enigma/gui/DecompiledClassSource.java | 3 +- .../enigma/gui/EnigmaQuickFindDialog.java | 0 .../cuchaz/enigma/gui/EnigmaSyntaxKit.java | 2 +- .../cuchaz/enigma/gui}/ExceptionIgnorer.java | 2 +- .../src}/main/java/cuchaz/enigma/gui/Gui.java | 28 +- .../java/cuchaz/enigma/gui/GuiController.java | 50 ++- .../main/java/cuchaz/enigma/gui}/Main.java | 8 +- .../enigma/gui/MessageListCellRenderer.java | 2 +- .../enigma/gui/MethodTreeCellRenderer.java | 2 +- .../cuchaz/enigma/gui/QuickFindAction.java | 0 .../cuchaz/enigma/gui}/ReadableToken.java | 2 +- .../java/cuchaz/enigma/gui/RefreshMode.java | 0 .../enigma/gui/TokenListCellRenderer.java | 2 +- .../cuchaz/enigma/gui}/config/Config.java | 2 +- .../cuchaz/enigma/gui}/config/Themes.java | 5 +- .../cuchaz/enigma/gui/dialog/AboutDialog.java | 11 +- .../enigma/gui/dialog/ChangeDialog.java | 0 .../gui/dialog/ConnectToServerDialog.java | 0 .../cuchaz/enigma/gui/dialog/CrashDialog.java | 10 +- .../enigma/gui/dialog/CreateServerDialog.java | 0 .../enigma/gui/dialog/JavadocDialog.java | 4 +- .../enigma/gui/dialog/ProgressDialog.java | 8 +- .../enigma/gui/dialog/SearchDialog.java | 4 +- .../cuchaz/enigma/gui/dialog/StatsDialog.java | 0 .../gui/elements/CollapsibleTabbedPane.java | 0 .../cuchaz/enigma/gui/elements/MenuBar.java | 4 +- .../enigma/gui/elements/PopupMenuBar.java | 0 .../gui/filechooser/FileChooserAny.java | 0 .../gui/filechooser/FileChooserFile.java | 0 .../gui/filechooser/FileChooserFolder.java | 0 .../gui/highlight/BoxHighlightPainter.java | 2 +- .../highlight/SelectionHighlightPainter.java | 2 +- .../gui/highlight/TokenHighlightType.java | 0 .../gui/node/ClassSelectorClassNode.java | 0 .../gui/node/ClassSelectorPackageNode.java | 0 .../cuchaz/enigma/gui/panels/PanelDeobf.java | 0 .../cuchaz/enigma/gui/panels/PanelEditor.java | 2 +- .../enigma/gui/panels/PanelIdentifier.java | 4 +- .../cuchaz/enigma/gui/panels/PanelObf.java | 0 .../enigma/gui}/search/SearchEntry.java | 2 +- .../cuchaz/enigma/gui}/search/SearchUtil.java | 2 +- .../enigma/gui/stats/StatsGenerator.java | 2 +- .../cuchaz/enigma/gui/stats/StatsMember.java | 0 .../gui/util/AbstractListCellRenderer.java | 0 .../java/cuchaz/enigma/gui/util/GuiUtil.java | 56 ++++ .../java/cuchaz/enigma/gui/util/History.java | 98 +++--- .../enigma/gui/util/ScaleChangeListener.java | 0 .../cuchaz/enigma/gui/util/ScaleUtil.java | 2 +- .../src}/main/resources/about.html | 0 .../src}/main/resources/stats.html | 0 enigma/build.gradle | 63 ++++ .../java/cuchaz/enigma/ClassProvider.java | 0 .../src}/main/java/cuchaz/enigma/Enigma.java | 20 +- .../java/cuchaz/enigma/EnigmaProfile.java | 6 +- .../java/cuchaz/enigma/EnigmaProject.java | 22 +- .../java/cuchaz/enigma/EnigmaServices.java | 0 .../java/cuchaz/enigma/ProgressListener.java | 0 .../java/cuchaz/enigma/analysis/Access.java | 0 .../cuchaz/enigma/analysis/BuiltinPlugin.java | 5 +- .../cuchaz/enigma/analysis/ClassCache.java | 5 +- .../ClassImplementationsTreeNode.java | 0 .../analysis/ClassInheritanceTreeNode.java | 0 .../analysis/ClassReferenceTreeNode.java | 0 .../enigma/analysis/EntryReference.java | 4 +- .../analysis/FieldReferenceTreeNode.java | 0 .../enigma/analysis/IndexSimpleVerifier.java | 4 +- .../enigma/analysis/IndexTreeBuilder.java | 0 .../enigma/analysis/InterpreterPair.java | 5 +- .../MethodImplementationsTreeNode.java | 0 .../analysis/MethodInheritanceTreeNode.java | 0 .../enigma/analysis/MethodNodeWithAction.java | 0 .../analysis/MethodReferenceTreeNode.java | 0 .../enigma/analysis/ReferenceTargetType.java | 0 .../enigma/analysis/ReferenceTreeNode.java | 0 .../analysis/index/BridgeMethodIndex.java | 0 .../enigma/analysis/index/EntryIndex.java | 0 .../analysis/index/IndexClassVisitor.java | 0 .../analysis/index/IndexReferenceVisitor.java | 0 .../analysis/index/InheritanceIndex.java | 0 .../enigma/analysis/index/JarIndex.java | 7 +- .../enigma/analysis/index/JarIndexer.java | 0 .../index/PackageVisibilityIndex.java | 294 +++++++++--------- .../enigma/analysis/index/ReferenceIndex.java | 0 .../java/cuchaz/enigma/api/EnigmaPlugin.java | 0 .../enigma/api/EnigmaPluginContext.java | 0 .../enigma/api/service/EnigmaService.java | 0 .../api/service/EnigmaServiceContext.java | 0 .../api/service/EnigmaServiceFactory.java | 0 .../enigma/api/service/EnigmaServiceType.java | 0 .../enigma/api/service/JarIndexerService.java | 0 .../api/service/NameProposalService.java | 0 .../api/service/ObfuscationTestService.java | 0 .../translators/AsmObjectTranslator.java | 0 .../translators/LocalVariableFixVisitor.java | 0 .../translators/SourceFixVisitor.java | 0 .../TranslationAnnotationVisitor.java | 0 .../translators/TranslationClassVisitor.java | 0 .../translators/TranslationFieldVisitor.java | 0 .../translators/TranslationMethodVisitor.java | 0 .../TranslationSignatureVisitor.java | 4 +- .../java/cuchaz/enigma/source/Decompiler.java | 0 .../enigma/source/DecompilerService.java | 0 .../cuchaz/enigma/source/Decompilers.java | 0 .../java/cuchaz/enigma/source/Source.java | 0 .../cuchaz/enigma/source/SourceIndex.java | 2 - .../cuchaz/enigma/source}/SourceRemapper.java | 4 +- .../cuchaz/enigma/source/SourceSettings.java | 0 .../java/cuchaz/enigma/source}/Token.java | 2 +- .../enigma/source/cfr/CfrDecompiler.java | 0 .../cuchaz/enigma/source/cfr/CfrSource.java | 0 .../enigma/source/cfr/EnigmaDumper.java | 2 +- .../enigma/source/procyon/EntryParser.java | 0 .../source/procyon/ProcyonDecompiler.java | 17 +- .../enigma/source/procyon/ProcyonSource.java | 0 .../index/SourceIndexClassVisitor.java | 0 .../index/SourceIndexMethodVisitor.java | 0 .../procyon/index/SourceIndexVisitor.java | 0 .../source/procyon/index/TokenFactory.java | 2 +- .../transformers/AddJavadocsAstTransform.java | 0 .../transformers/DropImportAstTransform.java | 0 .../DropVarModifiersAstTransform.java | 0 .../transformers/InvalidIdentifierFix.java | 0 .../procyon/transformers/Java8Generics.java | 0 ...ObfuscatedEnumSwitchRewriterTransform.java | 0 .../transformers/RemoveObjectCasts.java | 0 .../procyon/transformers/VarargsFixer.java | 0 .../CachingClasspathTypeLoader.java | 0 .../procyon/typeloader/CachingTypeLoader.java | 0 .../typeloader/CompiledSourceTypeLoader.java | 0 .../typeloader/NoRetryMetadataSystem.java | 0 .../typeloader/SynchronizedTypeLoader.java | 0 .../translation/LocalNameGenerator.java | 0 .../enigma/translation/MappingTranslator.java | 0 .../translation}/ProposingTranslator.java | 4 +- .../enigma/translation/SignatureUpdater.java | 0 .../enigma/translation/Translatable.java | 0 .../translation/TranslationDirection.java | 0 .../cuchaz/enigma/translation/Translator.java | 0 .../enigma/translation/VoidTranslator.java | 0 .../translation/mapping/AccessModifier.java | 0 .../enigma/translation/mapping/EntryMap.java | 0 .../translation/mapping/EntryMapping.java | 0 .../translation/mapping/EntryRemapper.java | 1 - .../translation/mapping/EntryResolver.java | 0 .../mapping}/IllegalNameException.java | 2 +- .../mapping/IndexEntryResolver.java | 0 .../translation/mapping/MappingDelta.java | 0 .../mapping/MappingOperations.java | 71 +++++ .../translation/mapping/MappingPair.java | 0 .../translation/mapping/MappingValidator.java | 1 - .../translation/mapping/MappingsChecker.java | 0 .../translation/mapping/NameValidator.java | 3 - .../mapping/ResolutionStrategy.java | 0 .../mapping/VoidEntryResolver.java | 0 .../mapping/serde/LfPrintWriter.java | 16 + .../mapping/serde}/MappingFileNameFormat.java | 2 +- .../mapping/serde/MappingFormat.java | 10 +- .../mapping/serde/MappingHelper.java | 0 .../mapping/serde}/MappingParseException.java | 2 +- .../mapping/serde}/MappingSaveParameters.java | 2 +- .../mapping/serde/MappingsReader.java | 2 - .../mapping/serde/MappingsWriter.java | 1 - .../mapping/serde/RawEntryMapping.java | 10 +- .../mapping/serde/enigma}/EnigmaFormat.java | 2 +- .../serde/enigma}/EnigmaMappingsReader.java | 9 +- .../serde/enigma}/EnigmaMappingsWriter.java | 14 +- .../proguard}/ProguardMappingsReader.java | 11 +- .../mapping/serde/srg}/SrgMappingsWriter.java | 9 +- .../serde/tiny}/TinyMappingsReader.java | 7 +- .../serde/tiny}/TinyMappingsWriter.java | 5 +- .../mapping/serde/tinyv2}/TinyV2Reader.java | 13 +- .../mapping/serde/tinyv2}/TinyV2Writer.java | 11 +- .../mapping/tree/DeltaTrackingTree.java | 0 .../translation/mapping/tree/EntryTree.java | 0 .../mapping/tree/EntryTreeNode.java | 0 .../mapping/tree/HashEntryTree.java | 0 .../mapping/tree/HashTreeNode.java | 0 .../representation/AccessFlags.java | 0 .../translation/representation/Lambda.java | 210 ++++++------- .../representation/MethodDescriptor.java | 4 +- .../translation/representation/Signature.java | 0 .../representation/TypeDescriptor.java | 0 .../representation/entry/ClassDefEntry.java | 0 .../representation/entry/ClassEntry.java | 2 +- .../representation/entry/DefEntry.java | 0 .../representation/entry/Entry.java | 2 +- .../representation/entry/FieldDefEntry.java | 0 .../representation/entry/FieldEntry.java | 4 +- .../entry/LocalVariableDefEntry.java | 0 .../entry/LocalVariableEntry.java | 4 +- .../representation/entry/MethodDefEntry.java | 0 .../representation/entry/MethodEntry.java | 4 +- .../representation/entry/ParentedEntry.java | 1 - .../main/java/cuchaz/enigma/utils/I18n.java | 11 +- .../main/java/cuchaz/enigma/utils/Pair.java | 0 .../main/java/cuchaz/enigma/utils/Utils.java | 92 ++++++ .../services/cuchaz.enigma.api.EnigmaPlugin | 0 .../src}/main/resources/lang/en_us.json | 0 .../src}/main/resources/lang/fr_fr.json | 0 .../src}/main/resources/lang/zh_cn.json | 0 .../src}/main/resources/profile.json | 0 .../enigma/PackageVisibilityIndexTest.java | 0 .../test/java/cuchaz/enigma/TestDeobfed.java | 14 +- .../java/cuchaz/enigma/TestDeobfuscator.java | 0 .../java/cuchaz/enigma/TestEntryFactory.java | 0 .../java/cuchaz/enigma/TestInnerClasses.java | 0 .../TestJarIndexConstructorReferences.java | 0 .../enigma/TestJarIndexInheritanceTree.java | 0 .../cuchaz/enigma/TestJarIndexLoneClass.java | 0 .../cuchaz/enigma/TestMethodDescriptor.java | 0 .../cuchaz/enigma/TestTokensConstructors.java | 0 .../java/cuchaz/enigma/TestTranslator.java | 0 .../cuchaz/enigma/TestTypeDescriptor.java | 0 .../test/java/cuchaz/enigma/TokenChecker.java | 2 +- .../test/java/cuchaz/enigma/inputs/Keep.java | 0 .../enigma/inputs/constructors/BaseClass.java | 0 .../enigma/inputs/constructors/Caller.java | 0 .../constructors/DefaultConstructable.java | 0 .../enigma/inputs/constructors/SubClass.java | 0 .../inputs/constructors/SubSubClass.java | 0 .../inputs/inheritanceTree/BaseClass.java | 0 .../inputs/inheritanceTree/SubclassA.java | 0 .../inputs/inheritanceTree/SubclassB.java | 0 .../inputs/inheritanceTree/SubsubclassAA.java | 0 .../inputs/innerClasses/A_Anonymous.java | 0 .../B_AnonymousWithScopeArgs.java | 0 .../innerClasses/C_ConstructorArgs.java | 0 .../enigma/inputs/innerClasses/D_Simple.java | 0 .../E_AnonymousWithOuterAccess.java | 0 .../inputs/innerClasses/F_ClassTree.java | 0 .../enigma/inputs/loneClass/LoneClass.java | 0 .../enigma/inputs/packageAccess/Base.java | 0 .../packageAccess/SamePackageChild.java | 0 .../packageAccess/sub/OtherPackageChild.java | 0 .../enigma/inputs/translation/A_Basic.java | 0 .../inputs/translation/B_BaseClass.java | 0 .../enigma/inputs/translation/C_SubClass.java | 0 .../translation/D_AnonymousTesting.java | 0 .../enigma/inputs/translation/E_Bridges.java | 0 .../inputs/translation/F_ObjectMethods.java | 0 .../inputs/translation/G_OuterClass.java | 0 .../inputs/translation/H_NamelessClass.java | 0 .../enigma/inputs/translation/I_Generics.java | 0 .../translation}/mapping/TestComments.java | 13 +- .../mapping/TestTinyV2InnerClasses.java | 8 +- .../translation}/mapping/TestV2Main.java | 11 +- .../src}/test/resources/comments/test.mapping | 0 .../src}/test/resources/proguard-build.conf | 2 +- .../src}/test/resources/proguard-test.conf | 0 .../resources/tinyV2InnerClasses/c.mapping | 0 .../cuchaz/enigma/Dad.mapping | 0 .../src/test}/resources/translation.mappings | 0 settings.gradle | 5 +- src/main/java/cuchaz/enigma/Constants.java | 20 -- .../enigma/command/MappingCommandsUtil.java | 148 --------- .../enigma/throwables/MappingConflict.java | 7 - .../cuchaz/enigma/utils/LFPrintWriter.java | 16 - src/main/java/cuchaz/enigma/utils/Utils.java | 179 ----------- .../java/cuchaz/enigma/TestSourceIndex.java | 74 ----- 312 files changed, 1186 insertions(+), 1431 deletions(-) create mode 100644 enigma-cli/build.gradle rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/CheckMappingsCommand.java (96%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/Command.java (98%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java (73%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java (83%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/DecompileCommand.java (100%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/DeobfuscateCommand.java (100%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/InvertMappingsCommand.java (75%) rename src/main/java/cuchaz/enigma/CommandMain.java => enigma-cli/src/main/java/cuchaz/enigma/command/Main.java (89%) rename {src => enigma-cli/src}/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java (93%) create mode 100644 enigma-cli/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java rename {src => enigma-cli/src}/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java (55%) rename {src => enigma-cli/src}/test/resources/packageAccess/correctMappings/base/Base.mapping (100%) rename {src => enigma-cli/src}/test/resources/packageAccess/correctMappings/base/One.mapping (100%) rename {src => enigma-cli/src}/test/resources/packageAccess/correctMappings/two/Two.mapping (100%) rename {src => enigma-cli/src}/test/resources/packageAccess/wrongMappings/base/Base.mapping (100%) rename {src => enigma-cli/src}/test/resources/packageAccess/wrongMappings/one/One.mapping (100%) rename {src => enigma-cli/src}/test/resources/packageAccess/wrongMappings/two/Two.mapping (100%) create mode 100644 enigma-server/build.gradle rename {docs => enigma-server/docs}/protocol.md (100%) create mode 100644 enigma-server/src/main/java/cuchaz/enigma/network/ClientPacketHandler.java rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java (82%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/EnigmaClient.java (77%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/EnigmaServer.java (96%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java (100%) rename {src/main/java/cuchaz/enigma/utils => enigma-server/src/main/java/cuchaz/enigma/network}/Message.java (99%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/ServerPacketHandler.java (100%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java (98%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java (85%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java (100%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java (75%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java (98%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java (97%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java (82%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java (95%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java (70%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/Packet.java (100%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/PacketHelper.java (100%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/PacketRegistry.java (77%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java (93%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java (82%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java (95%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java (87%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java (93%) rename {src => enigma-server/src}/main/java/cuchaz/enigma/network/packet/UserListS2CPacket.java (81%) create mode 100644 enigma-swing/build.gradle rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/BrowserCaret.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/ClassSelector.java (99%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/CodeReader.java (98%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/ConnectionState.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/DecompiledClassSource.java (98%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java (98%) rename {src/main/java/cuchaz/enigma => enigma-swing/src/main/java/cuchaz/enigma/gui}/ExceptionIgnorer.java (97%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/Gui.java (98%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/GuiController.java (95%) rename {src/main/java/cuchaz/enigma => enigma-swing/src/main/java/cuchaz/enigma/gui}/Main.java (94%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java (94%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java (97%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/QuickFindAction.java (100%) rename {src/main/java/cuchaz/enigma/utils => enigma-swing/src/main/java/cuchaz/enigma/gui}/ReadableToken.java (96%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/RefreshMode.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java (97%) rename {src/main/java/cuchaz/enigma => enigma-swing/src/main/java/cuchaz/enigma/gui}/config/Config.java (99%) rename {src/main/java/cuchaz/enigma => enigma-swing/src/main/java/cuchaz/enigma/gui}/config/Themes.java (92%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java (87%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java (93%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java (97%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java (95%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java (98%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/elements/MenuBar.java (99%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java (98%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java (96%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/panels/PanelEditor.java (99%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java (91%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/panels/PanelObf.java (100%) rename {src/main/java/cuchaz/enigma/utils => enigma-swing/src/main/java/cuchaz/enigma/gui}/search/SearchEntry.java (90%) rename {src/main/java/cuchaz/enigma/utils => enigma-swing/src/main/java/cuchaz/enigma/gui}/search/SearchUtil.java (99%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java (99%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/stats/StatsMember.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java (100%) create mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/util/History.java (94%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java (100%) rename {src => enigma-swing/src}/main/java/cuchaz/enigma/gui/util/ScaleUtil.java (98%) rename {src => enigma-swing/src}/main/resources/about.html (100%) rename {src => enigma-swing/src}/main/resources/stats.html (100%) create mode 100644 enigma/build.gradle rename {src => enigma/src}/main/java/cuchaz/enigma/ClassProvider.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/Enigma.java (88%) rename {src => enigma/src}/main/java/cuchaz/enigma/EnigmaProfile.java (94%) rename {src => enigma/src}/main/java/cuchaz/enigma/EnigmaProject.java (93%) rename {src => enigma/src}/main/java/cuchaz/enigma/EnigmaServices.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/ProgressListener.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/Access.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/ClassCache.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/EntryReference.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/InterpreterPair.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/EntryIndex.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/JarIndex.java (96%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/JarIndexer.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/EnigmaPlugin.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/EnigmaPluginContext.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/EnigmaService.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/JarIndexerService.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/NameProposalService.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/Decompiler.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/DecompilerService.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/Decompilers.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/Source.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/SourceIndex.java (98%) rename {src/main/java/cuchaz/enigma/gui => enigma/src/main/java/cuchaz/enigma/source}/SourceRemapper.java (95%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/SourceSettings.java (100%) rename {src/main/java/cuchaz/enigma/analysis => enigma/src/main/java/cuchaz/enigma/source}/Token.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/cfr/CfrSource.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java (99%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/EntryParser.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java (80%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/LocalNameGenerator.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/MappingTranslator.java (100%) rename {src/main/java/cuchaz/enigma => enigma/src/main/java/cuchaz/enigma/translation}/ProposingTranslator.java (93%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/SignatureUpdater.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/Translatable.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/TranslationDirection.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/Translator.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/VoidTranslator.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/EntryMap.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java (100%) rename {src/main/java/cuchaz/enigma/throwables => enigma/src/main/java/cuchaz/enigma/translation/mapping}/IllegalNameException.java (96%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java (100%) create mode 100644 enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingOperations.java rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/MappingPair.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/NameValidator.java (94%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java (100%) create mode 100644 enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/LfPrintWriter.java rename {src/main/java/cuchaz/enigma/translation/mapping => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde}/MappingFileNameFormat.java (77%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java (78%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java (100%) rename {src/main/java/cuchaz/enigma/throwables => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde}/MappingParseException.java (95%) rename {src/main/java/cuchaz/enigma/translation/mapping => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde}/MappingSaveParameters.java (88%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java (78%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java (91%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java (71%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma}/EnigmaFormat.java (82%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma}/EnigmaMappingsReader.java (96%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma}/EnigmaMappingsWriter.java (95%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard}/ProguardMappingsReader.java (93%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg}/SrgMappingsWriter.java (93%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny}/TinyMappingsReader.java (94%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny}/TinyMappingsWriter.java (96%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2}/TinyV2Reader.java (95%) rename {src/main/java/cuchaz/enigma/translation/mapping/serde => enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2}/TinyV2Writer.java (93%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/AccessFlags.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/Lambda.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java (96%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/Signature.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/Entry.java (97%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java (96%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java (96%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java (100%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java (96%) rename {src => enigma/src}/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java (98%) rename {src => enigma/src}/main/java/cuchaz/enigma/utils/I18n.java (92%) rename {src => enigma/src}/main/java/cuchaz/enigma/utils/Pair.java (100%) create mode 100644 enigma/src/main/java/cuchaz/enigma/utils/Utils.java rename {src => enigma/src}/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin (100%) rename {src => enigma/src}/main/resources/lang/en_us.json (100%) rename {src => enigma/src}/main/resources/lang/fr_fr.json (100%) rename {src => enigma/src}/main/resources/lang/zh_cn.json (100%) rename {src => enigma/src}/main/resources/profile.json (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestDeobfed.java (86%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestDeobfuscator.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestEntryFactory.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestInnerClasses.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestJarIndexLoneClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestMethodDescriptor.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestTokensConstructors.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestTranslator.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TestTypeDescriptor.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/TokenChecker.java (98%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/Keep.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/constructors/Caller.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/constructors/SubClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/packageAccess/Base.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/A_Basic.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java (100%) rename {src => enigma/src}/test/java/cuchaz/enigma/inputs/translation/I_Generics.java (100%) rename {src/test/java/cuchaz/enigma => enigma/src/test/java/cuchaz/enigma/translation}/mapping/TestComments.java (73%) rename {src/test/java/cuchaz/enigma => enigma/src/test/java/cuchaz/enigma/translation}/mapping/TestTinyV2InnerClasses.java (83%) rename {src/test/java/cuchaz/enigma => enigma/src/test/java/cuchaz/enigma/translation}/mapping/TestV2Main.java (65%) rename {src => enigma/src}/test/resources/comments/test.mapping (100%) rename {src => enigma/src}/test/resources/proguard-build.conf (65%) rename {src => enigma/src}/test/resources/proguard-test.conf (100%) rename {src => enigma/src}/test/resources/tinyV2InnerClasses/c.mapping (100%) rename {src => enigma/src}/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping (100%) rename {src/test/java/cuchaz/enigma => enigma/src/test}/resources/translation.mappings (100%) delete mode 100644 src/main/java/cuchaz/enigma/Constants.java delete mode 100644 src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java delete mode 100644 src/main/java/cuchaz/enigma/throwables/MappingConflict.java delete mode 100644 src/main/java/cuchaz/enigma/utils/LFPrintWriter.java delete mode 100644 src/main/java/cuchaz/enigma/utils/Utils.java delete mode 100644 src/test/java/cuchaz/enigma/TestSourceIndex.java diff --git a/.gitignore b/.gitignore index 662e408bf..89623a315 100644 --- a/.gitignore +++ b/.gitignore @@ -1,231 +1,35 @@ -### Windows ### -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk - - -### OSX ### -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - - -### Vim ### -# swap -[._]*.s[a-w][a-z] -[._]s[a-w][a-z] -# session -Session.vim -# temporary -.netrwhist -*~ -# auto-generated tag files -tags - - -### Emacs ### -# -*- mode: gitignore; -*- -*~ -\#*\# -/.emacs.desktop -/.emacs.desktop.lock -*.elc -auto-save-list -tramp -.\#* - -# Org-mode -.org-id-locations -*_archive - -# flymake-mode -*_flymake.* - -# eshell files -/eshell/history -/eshell/lastdir - -# elpa packages -/elpa/ - -# reftex files -*.rel - -# AUCTeX auto folder -/auto/ - -# cask packages -.cask/ -dist/ - -# Flycheck -flycheck_*.el - -# server auth directory -/server/ - -# projectiles files -.projectile - -### Intellij ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/workspace.xml -.idea/tasks.xml -.idea/dictionaries -.idea/vcs.xml -.idea/jsLibraryMappings.xml - -# Sensitive or high-churn files: -.idea/dataSources.ids -.idea/dataSources.xml -.idea/dataSources.local.xml -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml - -# Gradle: -.idea/gradle.xml -.idea/libraries - -## File-based project format: -*.iws -*.iml -*.ipr - -## Plugin-specific files: - -# IntelliJ -/out/ -.idea - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -### Eclipse ### +# Gradle +.gradle +# Eclipse +.checkstyle +.classpath .metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# Eclipse Core +.settings .project - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" *.launch -# CDT-specific (C/C++ Development Tooling) -.cproject - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# Java annotation processor (APT) +# Intellij/Idea .factorypath +.idea +*.iml +*.ipr +*.iws -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - - -### Java ### -*.class - -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### Gradle ### -.gradle -/build/ +# Build artifacts +bin/ +build/ +jars/ +out/ +classes/ -# Ignore Gradle GUI config -gradle-app.setting +# Debug artifacts +run +*.log -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar +# Windows +*.db +$RECYCLE.BIN/ -# Cache of project -.gradletasknamecache \ No newline at end of file +# Mac +.DS_Store diff --git a/README.md b/README.md index 7d01dacf0..fac036f4a 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Enigma includes the following open-source libraries: ## Usage -Pre-compiled jars can be found on the [fabric maven](https://maven.fabricmc.net/cuchaz/enigma/). +Pre-compiled jars can be found on the [fabric maven](https://maven.fabricmc.net/cuchaz/enigma-swing/). ### Launching the GUI @@ -25,4 +25,4 @@ Pre-compiled jars can be found on the [fabric maven](https://maven.fabricmc.net/ ### On the command line -`java -cp enigma.jar cuchaz.enigma.CommandMain` +`java -cp enigma.jar cuchaz.enigma.command.Main` diff --git a/build.gradle b/build.gradle index ba2d86c4d..bd2d99f44 100644 --- a/build.gradle +++ b/build.gradle @@ -1,165 +1,59 @@ plugins { - id 'java' - id 'com.github.johnrengelman.shadow' version '5.2.0' id 'maven-publish' } -group = 'cuchaz' -version = '0.16.1' +subprojects { + apply plugin: 'java' + apply plugin: 'maven-publish' -def generatedSourcesDir = "$buildDir/generated-src" + sourceCompatibility = 1.8 + targetCompatibility = 1.8 -def buildNumber = System.getenv("BUILD_NUMBER") -version = version + "+" + (buildNumber ? "build.$buildNumber" : "local") - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -task generateSources(type: Copy) { - from sourceSets.main.java - into generatedSourcesDir - - filter { String line -> - ("$line".replaceAll('@VERSION@', version)) + repositories { + mavenLocal() + mavenCentral() + maven { url 'https://maven.fabricmc.net/' } } -} -compileJava.source = generatedSourcesDir -compileJava.dependsOn generateSources + dependencies { + implementation 'com.google.guava:guava:28.0-jre' + implementation 'com.google.code.gson:gson:2.8.5' -repositories { - mavenLocal() - mavenCentral() - - maven { - name "Modmuss Repository" - url 'https://maven.modmuss50.me/' + testImplementation 'junit:junit:4.+' + testImplementation 'org.hamcrest:hamcrest-all:1.+' } -} - -configurations { - proGuard -} - -dependencies { - implementation 'com.google.guava:guava:28.0-jre' - implementation 'com.google.code.gson:gson:2.8.5' - implementation 'org.ow2.asm:asm:8.0' - implementation 'org.ow2.asm:asm-commons:8.0' - implementation 'org.ow2.asm:asm-tree:8.0' - implementation 'org.ow2.asm:asm-util:8.0' - implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3' - implementation 'net.fabricmc:procyon-fabric-compilertools:0.5.35.13' - implementation 'net.fabricmc:cfr:0.0.1' - implementation 'com.bulenkov:darcula:1.0.0-bobbylight' - implementation 'de.sciss:syntaxpane:1.2.0' - implementation 'com.github.lukeu:swing-dpi:0.6' - testImplementation 'junit:junit:4.+' - testImplementation 'org.hamcrest:hamcrest-all:1.+' + group = 'cuchaz' + version = '0.17' - proGuard 'net.sf.proguard:proguard-base:6.+' -} - -def libraryJarsArg = JavaVersion.current().java9Compatible ? "/jmods": "/lib/rt.jar" - -// For each set of test inputs, create an output jar and obfuscate it. -file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile -> - if (theFile.directory) { - task("${theFile.name}TestJar", type: Jar) { - from(sourceSets.test.output) { - include "cuchaz/enigma/inputs/$theFile.name/**/*.class" - include 'cuchaz/enigma/inputs/Keep.class' - } - - archiveFileName = theFile.name + '.jar' - destinationDirectory = file('build/test-inputs') - } - - task("${theFile.name}TestObf", type: JavaExec, - dependsOn: "${theFile.name}TestJar") { - main 'proguard.ProGuard' - classpath configurations.proGuard - - args '@src/test/resources/proguard-test.conf', '-injars', file('build/test-inputs/' + - "${theFile.name}.jar"), '-libraryjars', libraryJarsArg, - '-outjars', file('build/test-obf/' + "${theFile.name}.jar") - } + def buildNumber = System.getenv("BUILD_NUMBER") + version = version + "+" + (buildNumber ? "build.$buildNumber" : "local") - test.dependsOn "${theFile.name}TestObf" + task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource } -} - -// We also semi-deobfuscate translation.jar to then test it... yeah... oh well. -task('deobfTranslationInput', type: JavaExec, dependsOn: 'translationTestObf') - { - classpath sourceSets.main.runtimeClasspath - main 'cuchaz.enigma.CommandMain' - args 'deobfuscate', file('build/test-obf/translation.jar'), - file('build/test-deobf/translation.jar') - } -test.dependsOn 'deobfTranslationInput' -test { - // Since the Minecraft test is really long (like 10 minutes D:) we turn it - // off by default. - if (!System.getProperty('enableExtremelySlowMinecraftTest', '') - .equalsIgnoreCase('true')) { - exclude 'cuchaz/enigma/TestSourceIndex.class' + java { + withSourcesJar() } - // Allow people to specify a custom path to their Minecraft directory. - // (Example: `gradle build -Denigma.test.minecraftdir=./`) - systemProperties = [ - 'enigma.test.minecraftdir': System.getProperty('test.minecraftdir') - ] -} - -// Set the main class. -jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.Main' - -// Make the "fat" application jar. This is useful to just throw in a classpath -// for tests, though it includes some slightly useless stuff. -shadowJar { - append 'LICENSE' - append 'README.md' -} - -// Create a library jar, containing only the deobfuscation code, for use at -// runtime. This will be deployed to Maven Local with a POM, and can be uploaded -// to a remote server manually (for now anyway). -task libJar (type: Jar) { - classifier = 'lib' - - from(sourceSets.main.output) { - exclude 'cuchaz/enigma/gui/**' - exclude 'cuchaz/enigma/convert/**' - - // Main classes + inner classes (keep CommandMain) - exclude 'cuchaz/enigma/Main.class' - exclude 'cuchaz/enigma/Main.class' + publishing { + publications { + "$project.name"(MavenPublication) { + groupId project.group + artifactId project.name + version project.version + from components.java + } + } } } -task sourcesJar(type: Jar, dependsOn: generateSources) { - classifier = 'sources' - from generatedSourcesDir - from sourceSets.main.resources -} - publishing { - publications { - mavenJava(MavenPublication) { - from components.java - - artifact shadowJar - artifact libJar - artifact sourcesJar - } - } - - // select the repositories you want to publish to repositories { + mavenLocal() + if (project.hasProperty('mavenPass')) { maven { url = "http://mavenupload.modmuss50.me/" diff --git a/enigma-cli/build.gradle b/enigma-cli/build.gradle new file mode 100644 index 000000000..3ee123962 --- /dev/null +++ b/enigma-cli/build.gradle @@ -0,0 +1,5 @@ +dependencies { + implementation project(':enigma') +} + +jar.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 similarity index 96% rename from src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java index 9d238e3ad..e4deef8b0 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.ProgressListener; import cuchaz.enigma.analysis.index.JarIndex; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.serde.MappingFormat; import cuchaz.enigma.translation.mapping.tree.EntryTree; import 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 similarity index 98% rename from src/main/java/cuchaz/enigma/command/Command.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/Command.java index 09dd3216f..0640e3e71 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.EnigmaProject; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.serde.MappingFormat; import cuchaz.enigma.translation.mapping.tree.EntryTree; diff --git a/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java similarity index 73% rename from src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java index f57f1fa6b..e10fd47e6 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 @@ package cuchaz.enigma.command; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.MappingOperations; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.utils.Utils; @@ -32,7 +33,7 @@ public void run(String... args) throws IOException, MappingParseException { EntryTree left = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); EntryTree right = MappingCommandsUtil.read(args[2], Paths.get(args[3]), saveParameters); - EntryTree result = MappingCommandsUtil.compose(left, right, args[6].equals("left") || args[6].equals("both"), args[6].equals("right") || args[6].equals("both")); + EntryTree result = MappingOperations.compose(left, right, args[6].equals("left") || args[6].equals("both"), args[6].equals("right") || args[6].equals("both")); Path output = Paths.get(args[5]); 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 similarity index 83% rename from src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java index 689df02d4..144d89c52 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 @@ package cuchaz.enigma.command; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.utils.Utils; diff --git a/src/main/java/cuchaz/enigma/command/DecompileCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java similarity index 100% rename from src/main/java/cuchaz/enigma/command/DecompileCommand.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java rename to 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 similarity index 75% rename from src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java index cd11e2e6a..0780a965e 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 @@ package cuchaz.enigma.command; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.MappingOperations; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.utils.Utils; @@ -31,7 +32,7 @@ public void run(String... args) throws IOException, MappingParseException { MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); EntryTree source = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); - EntryTree result = MappingCommandsUtil.invert(source); + EntryTree result = MappingOperations.invert(source); Path output = Paths.get(args[3]); Utils.delete(output); diff --git a/src/main/java/cuchaz/enigma/CommandMain.java b/enigma-cli/src/main/java/cuchaz/enigma/command/Main.java similarity index 89% rename from src/main/java/cuchaz/enigma/CommandMain.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/Main.java index 93b013d5d..0a4c1b9bf 100644 --- a/src/main/java/cuchaz/enigma/CommandMain.java +++ b/enigma-cli/src/main/java/cuchaz/enigma/command/Main.java @@ -9,15 +9,15 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma; +package cuchaz.enigma.command; -import cuchaz.enigma.command.*; +import cuchaz.enigma.Enigma; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; -public class CommandMain { +public class Main { private static final Map COMMANDS = new LinkedHashMap<>(); @@ -46,7 +46,7 @@ public static void main(String... args) throws Exception { } } catch (CommandHelpException ex) { System.err.println(ex.getMessage()); - System.out.println(String.format("%s - %s", Constants.NAME, Constants.VERSION)); + System.out.println(String.format("%s - %s", Enigma.NAME, Enigma.VERSION)); System.out.println("Command " + ex.command.name + " has encountered an error! Usage:"); printHelp(ex.command); System.exit(1); @@ -58,9 +58,9 @@ public static void main(String... args) throws Exception { } private static void printHelp() { - System.out.println(String.format("%s - %s", Constants.NAME, Constants.VERSION)); + System.out.println(String.format("%s - %s", Enigma.NAME, Enigma.VERSION)); System.out.println("Usage:"); - System.out.println("\tjava -cp enigma.jar cuchaz.enigma.CommandMain "); + System.out.println("\tjava -cp enigma.jar cuchaz.enigma.command.CommandMain "); System.out.println("\twhere is one of:"); 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 similarity index 93% rename from src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java rename to enigma-cli/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java index eb8d5dccb..292de192e 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.analysis.ClassCache; import cuchaz.enigma.analysis.index.BridgeMethodIndex; import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.MappingTranslator; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.*; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; import 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 000000000..d365129b5 --- /dev/null +++ b/enigma-cli/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java @@ -0,0 +1,87 @@ +package cuchaz.enigma.command; + +import cuchaz.enigma.ProgressListener; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; +import cuchaz.enigma.translation.mapping.EntryMapping; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.*; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsWriter; +import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsReader; +import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsWriter; +import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer; +import cuchaz.enigma.translation.mapping.tree.EntryTree; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public final class MappingCommandsUtil { + private MappingCommandsUtil() {} + + public static EntryTree read(String type, Path path, MappingSaveParameters saveParameters) throws MappingParseException, IOException { + if (type.equals("enigma")) { + return (Files.isDirectory(path) ? EnigmaMappingsReader.DIRECTORY : EnigmaMappingsReader.ZIP).read(path, ProgressListener.none(), saveParameters); + } + + if (type.equals("tiny")) { + return TinyMappingsReader.INSTANCE.read(path, ProgressListener.none(), saveParameters); + } + + MappingFormat format = null; + try { + format = MappingFormat.valueOf(type.toUpperCase()); + } catch (IllegalArgumentException ignored) { + if (type.equals("tinyv2")) { + format = MappingFormat.TINY_V2; + } + } + + if (format != null) { + return format.getReader().read(path, ProgressListener.none(), saveParameters); + } + + throw new IllegalArgumentException("no reader for " + type); + } + + public static void write(EntryTree mappings, String type, Path path, MappingSaveParameters saveParameters) { + if (type.equals("enigma")) { + EnigmaMappingsWriter.DIRECTORY.write(mappings, path, ProgressListener.none(), saveParameters); + return; + } + + if (type.startsWith("tinyv2:") || type.startsWith("tiny_v2:")) { + String[] split = type.split(":"); + + if (split.length != 3) { + throw new IllegalArgumentException("specify column names as 'tinyv2:from_namespace:to_namespace'"); + } + + new TinyV2Writer(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters); + return; + } + + if (type.startsWith("tiny:")) { + String[] split = type.split(":"); + + if (split.length != 3) { + throw new IllegalArgumentException("specify column names as 'tiny:from_column:to_column'"); + } + + new TinyMappingsWriter(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters); + return; + } + + MappingFormat format = null; + try { + format = MappingFormat.valueOf(type.toUpperCase()); + } catch (IllegalArgumentException ignored) {} + + if (format != null) { + format.getWriter().write(mappings, path, ProgressListener.none(), saveParameters); + return; + } + + throw new IllegalArgumentException("no writer for " + type); + } +} diff --git a/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java b/enigma-cli/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java similarity index 55% rename from src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java rename to enigma-cli/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java index f3b9f85e3..a29bba401 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 java.io.File; public class CheckMappingsCommandTest { + private static final String PACKAGE_ACCESS = "../enigma/build/test-obf/packageAccess.jar"; @Test(expected = IllegalStateException.class) public void testWrong() throws Exception { - new CheckMappingsCommand().run(new File("build/test-obf/packageAccess.jar").getAbsolutePath(), new File("src/test/resources" + + new CheckMappingsCommand().run(new File(PACKAGE_ACCESS).getAbsolutePath(), new File("src/test/resources" + "/packageAccess/wrongMappings").getAbsolutePath()); } @Test public void testRight() throws Exception { - new CheckMappingsCommand().run(new File("build/test-obf/packageAccess.jar").getAbsolutePath(), new File("src/test/resources" + + new CheckMappingsCommand().run(new File(PACKAGE_ACCESS).getAbsolutePath(), new File("src/test/resources" + "/packageAccess/correctMappings").getAbsolutePath()); } } diff --git a/src/test/resources/packageAccess/correctMappings/base/Base.mapping b/enigma-cli/src/test/resources/packageAccess/correctMappings/base/Base.mapping similarity index 100% rename from src/test/resources/packageAccess/correctMappings/base/Base.mapping rename to 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 similarity index 100% rename from src/test/resources/packageAccess/correctMappings/base/One.mapping rename to 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 similarity index 100% rename from src/test/resources/packageAccess/correctMappings/two/Two.mapping rename to 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 similarity index 100% rename from src/test/resources/packageAccess/wrongMappings/base/Base.mapping rename to 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 similarity index 100% rename from src/test/resources/packageAccess/wrongMappings/one/One.mapping rename to 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 similarity index 100% rename from src/test/resources/packageAccess/wrongMappings/two/Two.mapping rename to 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 000000000..bf72b1842 --- /dev/null +++ b/enigma-server/build.gradle @@ -0,0 +1,6 @@ +dependencies { + implementation project(':enigma') + implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3' +} + +jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.network.DedicatedEnigmaServer' diff --git a/docs/protocol.md b/enigma-server/docs/protocol.md similarity index 100% rename from docs/protocol.md rename to 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 000000000..720744bf5 --- /dev/null +++ b/enigma-server/src/main/java/cuchaz/enigma/network/ClientPacketHandler.java @@ -0,0 +1,29 @@ +package cuchaz.enigma.network; + +import cuchaz.enigma.analysis.EntryReference; +import cuchaz.enigma.translation.mapping.EntryMapping; +import cuchaz.enigma.translation.mapping.tree.EntryTree; +import cuchaz.enigma.network.packet.Packet; +import cuchaz.enigma.translation.representation.entry.Entry; + +import java.util.List; + +public interface ClientPacketHandler { + void openMappings(EntryTree mappings); + + void rename(EntryReference, Entry> reference, String newName, boolean refreshClassTree, boolean jumpToReference); + + void removeMapping(EntryReference, Entry> reference, boolean jumpToReference); + + void changeDocs(EntryReference, Entry> reference, String updatedDocs, boolean jumpToReference); + + void markAsDeobfuscated(EntryReference, Entry> reference, boolean jumpToReference); + + void disconnectIfConnected(String reason); + + void sendPacket(Packet packet); + + void addMessage(Message message); + + void updateUserList(List users); +} diff --git a/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java b/enigma-server/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java similarity index 82% rename from src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java rename to enigma-server/src/main/java/cuchaz/enigma/network/DedicatedEnigmaServer.java index 2cfe8233a..924302f3d 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 @@ import com.google.common.io.MoreFiles; import cuchaz.enigma.*; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryRemapper; import cuchaz.enigma.translation.mapping.serde.MappingFormat; import cuchaz.enigma.utils.Utils; import joptsimple.OptionParser; import joptsimple.OptionSet; import joptsimple.OptionSpec; +import joptsimple.ValueConverter; import java.io.IOException; import java.io.PrintWriter; @@ -62,16 +63,16 @@ public static void main(String[] args) { OptionSpec jarOpt = parser.accepts("jar", "Jar file to open at startup") .withRequiredArg() .required() - .withValuesConvertedBy(Main.PathConverter.INSTANCE); + .withValuesConvertedBy(PathConverter.INSTANCE); OptionSpec mappingsOpt = parser.accepts("mappings", "Mappings file to open at startup") .withRequiredArg() .required() - .withValuesConvertedBy(Main.PathConverter.INSTANCE); + .withValuesConvertedBy(PathConverter.INSTANCE); OptionSpec profileOpt = parser.accepts("profile", "Profile json to apply at startup") .withRequiredArg() - .withValuesConvertedBy(Main.PathConverter.INSTANCE); + .withValuesConvertedBy(PathConverter.INSTANCE); OptionSpec portOpt = parser.accepts("port", "Port to run the server on") .withOptionalArg() @@ -84,7 +85,7 @@ public static void main(String[] args) { OptionSpec logFileOpt = parser.accepts("log", "The log file to write to") .withRequiredArg() - .withValuesConvertedBy(Main.PathConverter.INSTANCE) + .withValuesConvertedBy(PathConverter.INSTANCE) .defaultsTo(Paths.get("log.txt")); OptionSet parsedArgs = parser.parse(args); @@ -161,4 +162,39 @@ private void saveMappings() { mappingFormat.write(getMappings().getObfToDeobf(), getMappings().takeMappingDelta(), mappingsFile, ProgressListener.none(), profile.getMappingSaveParameters()); log.flush(); } + + public static class PathConverter implements ValueConverter { + public static final ValueConverter INSTANCE = new PathConverter(); + + PathConverter() { + } + + @Override + public Path convert(String path) { + // expand ~ to the home dir + if (path.startsWith("~")) { + // get the home dir + Path dirHome = Paths.get(System.getProperty("user.home")); + + // is the path just ~/ or is it ~user/ ? + if (path.startsWith("~/")) { + return dirHome.resolve(path.substring(2)); + } else { + return dirHome.getParent().resolve(path.substring(1)); + } + } + + return Paths.get(path); + } + + @Override + public Class valueType() { + return Path.class; + } + + @Override + public String valuePattern() { + return "path"; + } + } } diff --git a/src/main/java/cuchaz/enigma/network/EnigmaClient.java b/enigma-server/src/main/java/cuchaz/enigma/network/EnigmaClient.java similarity index 77% rename from src/main/java/cuchaz/enigma/network/EnigmaClient.java rename to enigma-server/src/main/java/cuchaz/enigma/network/EnigmaClient.java index bfa53d734..71bd011c3 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 @@ package cuchaz.enigma.network; -import cuchaz.enigma.gui.GuiController; -import cuchaz.enigma.network.packet.LoginC2SPacket; import cuchaz.enigma.network.packet.Packet; import cuchaz.enigma.network.packet.PacketRegistry; -import javax.swing.SwingUtilities; -import java.io.DataInput; -import java.io.DataInputStream; -import java.io.DataOutput; -import java.io.DataOutputStream; -import java.io.EOFException; -import java.io.IOException; +import javax.swing.*; +import java.io.*; import java.net.Socket; import java.net.SocketException; public class EnigmaClient { - private final GuiController controller; + private final ClientPacketHandler controller; private final String ip; private final int port; private Socket socket; private DataOutput output; - public EnigmaClient(GuiController controller, String ip, int port) { + public EnigmaClient(ClientPacketHandler controller, String ip, int port) { this.controller = controller; this.ip = ip; this.port = port; @@ -43,7 +36,7 @@ public void connect() throws IOException { } catch (EOFException | SocketException e) { break; } - Packet packet = PacketRegistry.createS2CPacket(packetId); + Packet packet = PacketRegistry.createS2CPacket(packetId); if (packet == null) { throw new IOException("Received invalid packet id " + packetId); } diff --git a/src/main/java/cuchaz/enigma/network/EnigmaServer.java b/enigma-server/src/main/java/cuchaz/enigma/network/EnigmaServer.java similarity index 96% rename from src/main/java/cuchaz/enigma/network/EnigmaServer.java rename to enigma-server/src/main/java/cuchaz/enigma/network/EnigmaServer.java index b0e15a3c0..6027a6bdd 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 @@ package cuchaz.enigma.network; -import cuchaz.enigma.gui.GuiController; import cuchaz.enigma.network.packet.KickS2CPacket; import cuchaz.enigma.network.packet.MessageS2CPacket; import cuchaz.enigma.network.packet.Packet; @@ -11,7 +10,6 @@ import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.EntryRemapper; import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.utils.Message; import java.io.DataInput; import java.io.DataInputStream; @@ -175,7 +173,7 @@ public String getUsername(Socket client) { return usernames.get(client); } - public void sendPacket(Socket client, Packet packet) { + public void sendPacket(Socket client, Packet packet) { if (!client.isClosed()) { int packetId = PacketRegistry.getS2CId(packet); try { @@ -191,13 +189,13 @@ public void sendPacket(Socket client, Packet packet) { } } - public void sendToAll(Packet packet) { + public void sendToAll(Packet packet) { for (Socket client : clients) { sendPacket(client, packet); } } - public void sendToAllExcept(Socket excluded, Packet packet) { + public void sendToAllExcept(Socket excluded, Packet packet) { for (Socket client : clients) { if (client != excluded) { 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 similarity index 100% rename from src/main/java/cuchaz/enigma/network/IntegratedEnigmaServer.java rename to 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 similarity index 99% rename from src/main/java/cuchaz/enigma/utils/Message.java rename to enigma-server/src/main/java/cuchaz/enigma/network/Message.java index d7c5f23ef..c15783876 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 @@ -package cuchaz.enigma.utils; +package cuchaz.enigma.network; import java.io.DataInput; import java.io.DataOutput; @@ -7,6 +7,7 @@ import cuchaz.enigma.network.packet.PacketHelper; import cuchaz.enigma.translation.representation.entry.Entry; +import cuchaz.enigma.utils.I18n; public abstract class Message { diff --git a/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java b/enigma-server/src/main/java/cuchaz/enigma/network/ServerPacketHandler.java similarity index 100% rename from src/main/java/cuchaz/enigma/network/ServerPacketHandler.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsC2SPacket.java index 4d5d86f38..1b52cf145 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 @@ package cuchaz.enigma.network.packet; +import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.network.EnigmaServer; +import cuchaz.enigma.network.Message; import cuchaz.enigma.network.ServerPacketHandler; -import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.utils.Message; import cuchaz.enigma.utils.Utils; import 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 similarity index 85% rename from src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/ChangeDocsS2CPacket.java index bf5b7cb88..12a30253d 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 @@ package cuchaz.enigma.network.packet; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.network.ClientPacketHandler; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -public class ChangeDocsS2CPacket implements Packet { +public class ChangeDocsS2CPacket implements Packet { private int syncId; private Entry entry; private String newDocs; @@ -37,7 +37,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController controller) { + public void handle(ClientPacketHandler controller) { controller.changeDocs(new EntryReference<>(entry, entry.getName()), newDocs, false); controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); } diff --git a/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java similarity index 100% rename from src/main/java/cuchaz/enigma/network/packet/ConfirmChangeC2SPacket.java rename to 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 similarity index 75% rename from src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/KickS2CPacket.java index bd007d316..9a112a80b 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 @@ package cuchaz.enigma.network.packet; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.network.ClientPacketHandler; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -public class KickS2CPacket implements Packet { +public class KickS2CPacket implements Packet { private String reason; KickS2CPacket() { @@ -27,7 +27,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController controller) { + public void handle(ClientPacketHandler controller) { controller.disconnectIfConnected(reason); } } diff --git a/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java similarity index 98% rename from src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/LoginC2SPacket.java index 722cbbf33..da0f44a5f 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 @@ import cuchaz.enigma.network.EnigmaServer; import cuchaz.enigma.network.ServerPacketHandler; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; import java.io.DataInput; import 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 similarity index 97% rename from src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedC2SPacket.java index 98d20d96b..a41c620ff 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 @@ import cuchaz.enigma.network.ServerPacketHandler; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; import java.io.DataInput; import 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 similarity index 82% rename from src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/MarkDeobfuscatedS2CPacket.java index b7d6eda31..7504430dd 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 @@ package cuchaz.enigma.network.packet; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.network.ClientPacketHandler; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -public class MarkDeobfuscatedS2CPacket implements Packet { +public class MarkDeobfuscatedS2CPacket implements Packet { private int syncId; private Entry entry; @@ -33,7 +33,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController controller) { + public void handle(ClientPacketHandler controller) { controller.markAsDeobfuscated(new EntryReference<>(entry, entry.getName()), false); controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); } diff --git a/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java similarity index 95% rename from src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageC2SPacket.java index b8e0f14f2..3bc09e79d 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.IOException; import cuchaz.enigma.network.ServerPacketHandler; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; public class MessageC2SPacket implements Packet { diff --git a/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java similarity index 70% rename from src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/MessageS2CPacket.java index edeaae0bf..2b07968dc 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.DataOutput; import java.io.IOException; -import cuchaz.enigma.gui.GuiController; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.ClientPacketHandler; +import cuchaz.enigma.network.Message; -public class MessageS2CPacket implements Packet { +public class MessageS2CPacket implements Packet { private Message message; @@ -29,7 +29,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController handler) { + public void handle(ClientPacketHandler handler) { handler.addMessage(message); } diff --git a/src/main/java/cuchaz/enigma/network/packet/Packet.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/Packet.java similarity index 100% rename from src/main/java/cuchaz/enigma/network/packet/Packet.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/network/packet/PacketHelper.java rename to 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 similarity index 77% rename from src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/PacketRegistry.java index ba5d9dec5..3b8af81c6 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 @@ package cuchaz.enigma.network.packet; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.network.ClientPacketHandler; import cuchaz.enigma.network.ServerPacketHandler; import java.util.HashMap; @@ -11,15 +11,15 @@ public class PacketRegistry { private static final Map>, Integer> c2sPacketIds = new HashMap<>(); private static final Map>> c2sPacketCreators = new HashMap<>(); - private static final Map>, Integer> s2cPacketIds = new HashMap<>(); - private static final Map>> s2cPacketCreators = new HashMap<>(); + private static final Map>, Integer> s2cPacketIds = new HashMap<>(); + private static final Map>> s2cPacketCreators = new HashMap<>(); private static > void registerC2S(int id, Class clazz, Supplier creator) { c2sPacketIds.put(clazz, id); c2sPacketCreators.put(id, creator); } - private static > void registerS2C(int id, Class clazz, Supplier creator) { + private static > void registerS2C(int id, Class clazz, Supplier creator) { s2cPacketIds.put(clazz, id); s2cPacketCreators.put(id, creator); } @@ -52,12 +52,12 @@ public static Packet createC2SPacket(int id) { return creator == null ? null : creator.get(); } - public static int getS2CId(Packet packet) { + public static int getS2CId(Packet packet) { return s2cPacketIds.get(packet.getClass()); } - public static Packet createS2CPacket(int id) { - Supplier> creator = s2cPacketCreators.get(id); + public static Packet createS2CPacket(int id) { + Supplier> creator = s2cPacketCreators.get(id); return creator == null ? null : creator.get(); } diff --git a/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java similarity index 93% rename from src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingC2SPacket.java index a3f3d91d8..3f852285e 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 @@ package cuchaz.enigma.network.packet; import cuchaz.enigma.network.ServerPacketHandler; -import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.translation.mapping.IllegalNameException; import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; import java.io.DataInput; import 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 similarity index 82% rename from src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/RemoveMappingS2CPacket.java index 7bb1b00d0..70d803c10 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 @@ package cuchaz.enigma.network.packet; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.network.ClientPacketHandler; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -public class RemoveMappingS2CPacket implements Packet { +public class RemoveMappingS2CPacket implements Packet { private int syncId; private Entry entry; @@ -33,7 +33,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController controller) { + public void handle(ClientPacketHandler controller) { controller.removeMapping(new EntryReference<>(entry, entry.getName()), false); controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); } diff --git a/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java similarity index 95% rename from src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameC2SPacket.java index 03e95d6fd..e3e7e379d 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 @@ package cuchaz.enigma.network.packet; import cuchaz.enigma.network.ServerPacketHandler; -import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.translation.mapping.IllegalNameException; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; import java.io.DataInput; import 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 similarity index 87% rename from src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/RenameS2CPacket.java index 058f0e582..787e89e68 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 @@ package cuchaz.enigma.network.packet; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.network.ClientPacketHandler; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -public class RenameS2CPacket implements Packet { +public class RenameS2CPacket implements Packet { private int syncId; private Entry entry; private String newName; @@ -41,7 +41,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController controller) { + public void handle(ClientPacketHandler controller) { controller.rename(new EntryReference<>(entry, entry.getName()), newName, refreshClassTree, false); controller.sendPacket(new ConfirmChangeC2SPacket(syncId)); } diff --git a/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java b/enigma-server/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java similarity index 93% rename from src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java rename to enigma-server/src/main/java/cuchaz/enigma/network/packet/SyncMappingsS2CPacket.java index e6378d1dd..76ecbc7d9 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 @@ package cuchaz.enigma.network.packet; -import cuchaz.enigma.gui.GuiController; -import cuchaz.enigma.network.EnigmaServer; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; +import cuchaz.enigma.network.ClientPacketHandler; +import cuchaz.enigma.network.EnigmaServer; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.DataInput; @@ -15,7 +15,7 @@ import java.util.List; import java.util.stream.Collectors; -public class SyncMappingsS2CPacket implements Packet { +public class SyncMappingsS2CPacket implements Packet { private EntryTree mappings; SyncMappingsS2CPacket() { @@ -81,7 +81,7 @@ private static void writeEntryTreeNode(DataOutput output, EntryTreeNode { +public class UserListS2CPacket implements Packet { private List users; @@ -37,7 +37,7 @@ public void write(DataOutput output) throws IOException { } @Override - public void handle(GuiController handler) { + public void handle(ClientPacketHandler handler) { handler.updateUserList(users); } diff --git a/enigma-swing/build.gradle b/enigma-swing/build.gradle new file mode 100644 index 000000000..a1bcafc57 --- /dev/null +++ b/enigma-swing/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'com.github.johnrengelman.shadow' version '5.2.0' +} + +dependencies { + implementation project(':enigma') + implementation project(':enigma-server') + + implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3' + implementation 'com.bulenkov:darcula:1.0.0-bobbylight' + implementation 'de.sciss:syntaxpane:1.2.0' + implementation 'com.github.lukeu:swing-dpi:0.6' +} + +jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.gui.Main' + +publishing { + publications { + shadow(MavenPublication) { publication -> + project.shadow.component(publication) + } + } +} \ 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/BrowserCaret.java rename to 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 similarity index 99% rename from src/main/java/cuchaz/enigma/gui/ClassSelector.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/ClassSelector.java index a23e24c23..3d0e04c91 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.Multimap; import cuchaz.enigma.gui.node.ClassSelectorClassNode; import cuchaz.enigma.gui.node.ClassSelectorPackageNode; -import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.translation.mapping.IllegalNameException; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.representation.entry.ClassEntry; diff --git a/src/main/java/cuchaz/enigma/gui/CodeReader.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/CodeReader.java similarity index 98% rename from src/main/java/cuchaz/enigma/gui/CodeReader.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/CodeReader.java index e119640aa..356656b9e 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 @@ package cuchaz.enigma.gui; -import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.source.Token; import javax.swing.*; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/ConnectionState.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/DecompiledClassSource.java index 08df3e75d..aca5d724e 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 @@ import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.EnigmaServices; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.source.Token; import cuchaz.enigma.api.service.NameProposalService; import cuchaz.enigma.gui.highlight.TokenHighlightType; import cuchaz.enigma.source.SourceIndex; +import cuchaz.enigma.source.SourceRemapper; import cuchaz.enigma.translation.LocalNameGenerator; import cuchaz.enigma.translation.Translator; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/EnigmaQuickFindDialog.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java index 42eaa6052..2f08a2695 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 @@ package cuchaz.enigma.gui; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import de.sciss.syntaxpane.components.LineNumbersRuler; import de.sciss.syntaxpane.syntaxkits.JavaSyntaxKit; import 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 similarity index 97% rename from src/main/java/cuchaz/enigma/ExceptionIgnorer.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/ExceptionIgnorer.java index 84331cc15..6246192cf 100644 --- a/src/main/java/cuchaz/enigma/ExceptionIgnorer.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/ExceptionIgnorer.java @@ -9,7 +9,7 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma; +package cuchaz.enigma.gui; public class ExceptionIgnorer { diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java similarity index 98% rename from src/main/java/cuchaz/enigma/gui/Gui.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java index ed32469e3..2ed1010fc 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 com.google.common.base.Strings; import com.google.common.collect.Lists; -import cuchaz.enigma.Constants; +import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProfile; -import cuchaz.enigma.ExceptionIgnorer; import cuchaz.enigma.analysis.*; -import cuchaz.enigma.config.Config; -import cuchaz.enigma.config.Themes; +import cuchaz.enigma.gui.config.Config; +import cuchaz.enigma.gui.config.Themes; import cuchaz.enigma.gui.dialog.CrashDialog; import cuchaz.enigma.gui.dialog.JavadocDialog; import cuchaz.enigma.gui.dialog.SearchDialog; @@ -46,15 +45,16 @@ import cuchaz.enigma.gui.panels.PanelEditor; import cuchaz.enigma.gui.panels.PanelIdentifier; import cuchaz.enigma.gui.panels.PanelObf; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.gui.util.History; import cuchaz.enigma.network.packet.*; -import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.source.Token; +import cuchaz.enigma.translation.mapping.IllegalNameException; import cuchaz.enigma.translation.mapping.*; import cuchaz.enigma.translation.representation.entry.*; -import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.utils.Utils; +import cuchaz.enigma.utils.I18n; import de.sciss.syntaxpane.DefaultSyntaxKit; public class Gui { @@ -127,7 +127,7 @@ public Gui(EnigmaProfile profile) { Config.getInstance().lookAndFeel.setGlobalLAF(); // init frame - this.frame = new JFrame(Constants.NAME); + this.frame = new JFrame(Enigma.NAME); final Container pane = this.frame.getContentPane(); pane.setLayout(new BorderLayout()); @@ -386,7 +386,7 @@ public void onStartOpenJar() { public void onFinishOpenJar(String jarName) { // update gui - this.frame.setTitle(Constants.NAME + " - " + jarName); + this.frame.setTitle(Enigma.NAME + " - " + jarName); this.classesPanel.removeAll(); this.classesPanel.add(splitClasses); setEditorText(null); @@ -401,7 +401,7 @@ public void onFinishOpenJar(String jarName) { public void onCloseJar() { // update gui - this.frame.setTitle(Constants.NAME); + this.frame.setTitle(Enigma.NAME); setObfClasses(null); setDeobfClasses(null); setEditorText(null); @@ -551,7 +551,7 @@ private void addNameValue(JPanel container, String name, String value) { label.setPreferredSize(ScaleUtil.getDimension(100, ScaleUtil.invert(label.getPreferredSize().height))); panel.add(label); - panel.add(Utils.unboldLabel(new JLabel(value, JLabel.LEFT))); + panel.add(GuiUtil.unboldLabel(new JLabel(value, JLabel.LEFT))); container.add(panel); } @@ -665,7 +665,7 @@ private void finishDocChange(JFrame ui, boolean saveName) { } catch (IllegalNameException ex) { javadocTextArea.setBorder(BorderFactory.createLineBorder(Color.red, 1)); javadocTextArea.setToolTipText(ex.getReason()); - Utils.showToolTipNow(javadocTextArea); + GuiUtil.showToolTipNow(javadocTextArea); return; } @@ -739,7 +739,7 @@ private void finishRename(boolean saveName) { } catch (IllegalNameException ex) { renameTextField.setBorder(BorderFactory.createLineBorder(Color.red, 1)); renameTextField.setToolTipText(ex.getReason()); - Utils.showToolTipNow(renameTextField); + GuiUtil.showToolTipNow(renameTextField); } return; } diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java similarity index 95% rename from src/main/java/cuchaz/enigma/gui/GuiController.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java index cccc9e8a4..94979e77d 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.EnigmaProject; import cuchaz.enigma.analysis.*; import cuchaz.enigma.api.service.ObfuscationTestService; -import cuchaz.enigma.bytecode.translators.SourceFixVisitor; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import cuchaz.enigma.gui.dialog.ProgressDialog; import cuchaz.enigma.gui.stats.StatsGenerator; import cuchaz.enigma.gui.stats.StatsMember; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.gui.util.History; -import cuchaz.enigma.network.EnigmaClient; -import cuchaz.enigma.network.EnigmaServer; -import cuchaz.enigma.network.IntegratedEnigmaServer; -import cuchaz.enigma.network.ServerPacketHandler; +import cuchaz.enigma.network.*; import cuchaz.enigma.network.packet.LoginC2SPacket; import cuchaz.enigma.network.packet.Packet; import cuchaz.enigma.source.*; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.*; import cuchaz.enigma.translation.mapping.serde.MappingFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import cuchaz.enigma.translation.representation.entry.ClassEntry; @@ -42,10 +40,7 @@ import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.Message; -import cuchaz.enigma.utils.ReadableToken; import cuchaz.enigma.utils.Utils; -import org.objectweb.asm.tree.ClassNode; import javax.annotation.Nullable; import javax.swing.JOptionPane; @@ -63,7 +58,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -public class GuiController { +public class GuiController implements ClientPacketHandler { private static final ExecutorService DECOMPILER_SERVICE = Executors.newSingleThreadExecutor( new ThreadFactoryBuilder() .setDaemon(true) @@ -107,26 +102,12 @@ public CompletableFuture openJar(final Path jarPath) { return ProgressDialog.runOffThread(gui.getFrame(), progress -> { project = enigma.openJar(jarPath, progress); indexTreeBuilder = new IndexTreeBuilder(project.getJarIndex()); - decompiler = createDecompiler(); + decompiler = project.createDecompiler(decompilerService); gui.onFinishOpenJar(jarPath.getFileName().toString()); refreshClasses(); }); } - private Decompiler createDecompiler() { - return decompilerService.create(name -> { - ClassNode node = project.getClassCache().getClassNode(name); - - if (node == null) { - return null; - } - - ClassNode fixedNode = new ClassNode(); - node.accept(new SourceFixVisitor(Utils.ASM_VERSION, fixedNode, project.getJarIndex())); - return fixedNode; - }, new SourceSettings(true, true)); - } - public void closeJar() { this.project = null; this.gui.onCloseJar(); @@ -155,6 +136,7 @@ public CompletableFuture openMappings(MappingFormat format, Path path) { }); } + @Override public void openMappings(EntryTree mappings) { if (project == null) return; @@ -415,10 +397,10 @@ private void refreshCurrentClass(EntryReference, Entry> reference, R Rectangle viewportBounds = gui.sourceScroller.getViewport().getViewRect(); // 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 int anchorModelPos = gui.editor.getSelectionStart(); - Rectangle anchorViewPos = Utils.safeModelToView(gui.editor, anchorModelPos); + Rectangle anchorViewPos = GuiUtil.safeModelToView(gui.editor, anchorModelPos); if (anchorViewPos.y < viewportBounds.y || anchorViewPos.y >= viewportBounds.y + viewportBounds.height) { anchorModelPos = gui.editor.viewToModel(new Point(0, viewportBounds.y)); - anchorViewPos = Utils.safeModelToView(gui.editor, anchorModelPos); + anchorViewPos = GuiUtil.safeModelToView(gui.editor, anchorModelPos); } int obfAnchorPos = currentSource.getObfuscatedOffset(anchorModelPos); Rectangle anchorViewPos_f = anchorViewPos; @@ -426,7 +408,7 @@ private void refreshCurrentClass(EntryReference, Entry> reference, R loadClass(currentSource.getEntry(), () -> SwingUtilities.invokeLater(() -> { int newAnchorModelPos = currentSource.getDeobfuscatedOffset(obfAnchorPos); - Rectangle newAnchorViewPos = Utils.safeModelToView(gui.editor, newAnchorModelPos); + Rectangle newAnchorViewPos = GuiUtil.safeModelToView(gui.editor, newAnchorModelPos); int newScrollY = newAnchorViewPos.y - (anchorViewPos_f.y - viewportBounds.y); gui.editor.select(currentSource.getDeobfuscatedOffset(obfSelectionStart), currentSource.getDeobfuscatedOffset(obfSelectionEnd)); @@ -579,6 +561,7 @@ public void rename(EntryReference, Entry> reference, String newName, rename(reference, newName, refreshClassTree, true); } + @Override public void rename(EntryReference, Entry> reference, String newName, boolean refreshClassTree, boolean jumpToReference) { Entry entry = reference.getNameableEntry(); project.getMapper().mapFromObf(entry, new EntryMapping(newName)); @@ -593,6 +576,7 @@ public void removeMapping(EntryReference, Entry> reference) { removeMapping(reference, true); } + @Override public void removeMapping(EntryReference, Entry> reference, boolean jumpToReference) { project.getMapper().removeByObf(reference.getNameableEntry()); @@ -605,6 +589,7 @@ public void changeDocs(EntryReference, Entry> reference, String upda changeDocs(reference, updatedDocs, true); } + @Override public void changeDocs(EntryReference, Entry> reference, String updatedDocs, boolean jumpToReference) { changeDoc(reference.entry, Utils.isBlank(updatedDocs) ? null : updatedDocs); @@ -628,6 +613,7 @@ public void markAsDeobfuscated(EntryReference, Entry> reference) { markAsDeobfuscated(reference, true); } + @Override public void markAsDeobfuscated(EntryReference, Entry> reference, boolean jumpToReference) { EntryRemapper mapper = project.getMapper(); Entry entry = reference.getNameableEntry(); @@ -663,7 +649,7 @@ public void openStats(Set includedMembers) { public void setDecompiler(DecompilerService service) { uncommentedSource = null; decompilerService = service; - decompiler = createDecompiler(); + decompiler = project.createDecompiler(decompilerService); refreshCurrentClass(null, RefreshMode.FULL); } @@ -691,6 +677,7 @@ public void createServer(int port, char[] password) throws IOException { gui.setConnectionState(ConnectionState.HOSTING); } + @Override public synchronized void disconnectIfConnected(String reason) { if (client == null && server == null) { return; @@ -712,16 +699,19 @@ public synchronized void disconnectIfConnected(String reason) { }); } + @Override public void sendPacket(Packet packet) { if (client != null) { client.sendPacket(packet); } } + @Override public void addMessage(Message message) { gui.addMessage(message); } + @Override public void updateUserList(List users) { gui.setUserList(users); } diff --git a/src/main/java/cuchaz/enigma/Main.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java similarity index 94% rename from src/main/java/cuchaz/enigma/Main.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java index 7c87669f8..1f3aa2cb8 100644 --- a/src/main/java/cuchaz/enigma/Main.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java @@ -9,12 +9,13 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma; +package cuchaz.enigma.gui; -import cuchaz.enigma.gui.Gui; -import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.EnigmaProfile; +import cuchaz.enigma.gui.config.Config; import cuchaz.enigma.translation.mapping.serde.MappingFormat; +import cuchaz.enigma.utils.I18n; import joptsimple.*; import java.io.IOException; @@ -53,6 +54,7 @@ public static void main(String[] args) throws IOException { EnigmaProfile parsedProfile = EnigmaProfile.read(options.valueOf(profile)); + I18n.setLanguage(Config.getInstance().language); Gui gui = new Gui(parsedProfile); GuiController controller = gui.getController(); diff --git a/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java similarity index 94% rename from src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java index c9e38cbf7..1d6034091 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 javax.swing.DefaultListCellRenderer; import javax.swing.JList; -import cuchaz.enigma.utils.Message; +import cuchaz.enigma.network.Message; // For now, just render the translated text. // 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 similarity index 97% rename from src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java index 05d90a97c..1eead6ebe 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 @@ package cuchaz.enigma.gui; import cuchaz.enigma.analysis.MethodInheritanceTreeNode; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import javax.swing.*; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/QuickFindAction.java rename to 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 similarity index 96% rename from src/main/java/cuchaz/enigma/utils/ReadableToken.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/ReadableToken.java index de152fe3f..3e4b30cd3 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 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma.utils; +package cuchaz.enigma.gui; public class ReadableToken { diff --git a/src/main/java/cuchaz/enigma/gui/RefreshMode.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/RefreshMode.java similarity index 100% rename from src/main/java/cuchaz/enigma/gui/RefreshMode.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/TokenListCellRenderer.java index 7375111e4..10c418c26 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 @@ package cuchaz.enigma.gui; -import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.source.Token; import javax.swing.*; import 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 similarity index 99% rename from src/main/java/cuchaz/enigma/config/Config.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/config/Config.java index e116fce98..373dcf04b 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 @@ -package cuchaz.enigma.config; +package cuchaz.enigma.gui.config; import com.bulenkov.darcula.DarculaLaf; import 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 similarity index 92% rename from src/main/java/cuchaz/enigma/config/Themes.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/config/Themes.java index 547a42023..035b2381f 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 @@ -package cuchaz.enigma.config; +package cuchaz.enigma.gui.config; -import java.awt.Font; import java.io.IOException; -import java.lang.reflect.Field; import javax.swing.SwingUtilities; -import com.github.swingdpi.UiDefaultsScaler; import com.google.common.collect.ImmutableMap; import cuchaz.enigma.gui.EnigmaSyntaxKit; import 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 similarity index 87% rename from src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java index 43b826516..fff755d3a 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 @@ package cuchaz.enigma.gui.dialog; -import cuchaz.enigma.Constants; +import cuchaz.enigma.Enigma; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.utils.I18n; import cuchaz.enigma.gui.util.ScaleUtil; import cuchaz.enigma.utils.Utils; @@ -24,14 +25,14 @@ public class AboutDialog { public static void show(JFrame parent) { // init frame - final JFrame frame = new JFrame(String.format(I18n.translate("menu.help.about.title"), Constants.NAME)); + final JFrame frame = new JFrame(String.format(I18n.translate("menu.help.about.title"), Enigma.NAME)); final Container pane = frame.getContentPane(); pane.setLayout(new FlowLayout()); // load the content try { String html = Utils.readResourceToString("/about.html"); - html = String.format(html, Constants.NAME, Constants.VERSION); + html = String.format(html, Enigma.NAME, Enigma.VERSION); JLabel label = new JLabel(html); label.setHorizontalAlignment(JLabel.CENTER); pane.add(label); @@ -41,9 +42,9 @@ public static void show(JFrame parent) { // show the link String html = "%s"; - html = String.format(html, Constants.URL, Constants.URL); + html = String.format(html, Enigma.URL, Enigma.URL); JButton link = new JButton(html); - link.addActionListener(event -> Utils.openUrl(Constants.URL)); + link.addActionListener(event -> GuiUtil.openUrl(Enigma.URL)); link.setBorderPainted(false); link.setOpaque(false); 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/dialog/ChangeDialog.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java rename to 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 similarity index 93% rename from src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CrashDialog.java index 908b42e9c..c2a93fa56 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 @@ package cuchaz.enigma.gui.dialog; -import cuchaz.enigma.Constants; +import cuchaz.enigma.Enigma; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.utils.I18n; import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.utils.Utils; import javax.swing.*; import java.awt.*; @@ -33,11 +33,11 @@ public class CrashDialog { private CrashDialog(JFrame parent) { // init frame - frame = new JFrame(String.format(I18n.translate("crash.title"), Constants.NAME)); + frame = new JFrame(String.format(I18n.translate("crash.title"), Enigma.NAME)); final Container pane = frame.getContentPane(); pane.setLayout(new BorderLayout()); - JLabel label = new JLabel(String.format(I18n.translate("crash.summary"), Constants.NAME)); + JLabel label = new JLabel(String.format(I18n.translate("crash.summary"), Enigma.NAME)); label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); pane.add(label, BorderLayout.NORTH); @@ -66,7 +66,7 @@ private CrashDialog(JFrame parent) { }); buttonsPanel.add(exportButton); buttonsPanel.add(Box.createHorizontalGlue()); - buttonsPanel.add(Utils.unboldLabel(new JLabel(I18n.translate("crash.exit.warning")))); + buttonsPanel.add(GuiUtil.unboldLabel(new JLabel(I18n.translate("crash.exit.warning")))); JButton ignoreButton = new JButton(I18n.translate("crash.ignore")); ignoreButton.addActionListener(event -> { // 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java index 7e4144194..d81460ab9 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 @@ package cuchaz.enigma.gui.dialog; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.utils.I18n; import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.utils.Utils; import javax.swing.*; import javax.swing.text.html.HTML; @@ -59,7 +59,7 @@ public void keyPressed(KeyEvent event) { FlowLayout buttonsLayout = new FlowLayout(); buttonsLayout.setAlignment(FlowLayout.RIGHT); buttonsPanel.setLayout(buttonsLayout); - buttonsPanel.add(Utils.unboldLabel(new JLabel(I18n.translate("javadocs.instruction")))); + buttonsPanel.add(GuiUtil.unboldLabel(new JLabel(I18n.translate("javadocs.instruction")))); JButton cancelButton = new JButton(I18n.translate("javadocs.cancel")); cancelButton.addActionListener(event -> { // 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 similarity index 95% rename from src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java index e33ae8212..fa40af75c 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 @@ package cuchaz.enigma.gui.dialog; -import cuchaz.enigma.Constants; +import cuchaz.enigma.Enigma; import cuchaz.enigma.ProgressListener; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.utils.I18n; import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.utils.Utils; import javax.swing.*; import java.awt.*; @@ -31,7 +31,7 @@ public class ProgressDialog implements ProgressListener, AutoCloseable { public ProgressDialog(JFrame parent) { // init frame - this.frame = new JFrame(String.format(I18n.translate("progress.operation"), Constants.NAME)); + this.frame = new JFrame(String.format(I18n.translate("progress.operation"), Enigma.NAME)); final Container pane = this.frame.getContentPane(); FlowLayout layout = new FlowLayout(); layout.setAlignment(FlowLayout.LEFT); @@ -44,7 +44,7 @@ public ProgressDialog(JFrame parent) { JPanel panel = new JPanel(); pane.add(panel); panel.setLayout(new BorderLayout()); - this.labelText = Utils.unboldLabel(new JLabel()); + this.labelText = GuiUtil.unboldLabel(new JLabel()); this.progress = new JProgressBar(); this.labelText.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); 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 similarity index 98% rename from src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/SearchDialog.java index b283a377b..2d396c360 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.ScaleUtil; import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.search.SearchEntry; -import cuchaz.enigma.utils.search.SearchUtil; +import cuchaz.enigma.gui.search.SearchEntry; +import cuchaz.enigma.gui.search.SearchUtil; public class SearchDialog { diff --git a/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java similarity index 100% rename from src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java rename to 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 similarity index 99% rename from src/main/java/cuchaz/enigma/gui/elements/MenuBar.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java index dc2cf8fd8..24f42ff03 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 @@ package cuchaz.enigma.gui.elements; -import cuchaz.enigma.config.Config; -import cuchaz.enigma.config.Themes; +import cuchaz.enigma.gui.config.Config; +import cuchaz.enigma.gui.config.Themes; import cuchaz.enigma.gui.Gui; import cuchaz.enigma.gui.dialog.AboutDialog; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/filechooser/FileChooserAny.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFile.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/filechooser/FileChooserFolder.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/BoxHighlightPainter.java index cef649439..3ae4380ff 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 @@ package cuchaz.enigma.gui.highlight; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import javax.swing.text.BadLocationException; import 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 similarity index 96% rename from src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/highlight/SelectionHighlightPainter.java index 81a70a92f..2e4e462a8 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 @@ package cuchaz.enigma.gui.highlight; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import javax.swing.text.Highlighter; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/highlight/TokenHighlightType.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java rename to 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 similarity index 99% rename from src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java index 8637afd91..346d6655e 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 @@ import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import cuchaz.enigma.gui.BrowserCaret; import cuchaz.enigma.gui.Gui; import 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 similarity index 91% rename from src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelIdentifier.java index de069bc67..8c19efb5c 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 @@ package cuchaz.enigma.gui.panels; import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.utils.I18n; import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.utils.Utils; import javax.swing.*; import java.awt.*; @@ -23,7 +23,7 @@ public PanelIdentifier(Gui gui) { public void clearReference() { this.removeAll(); JLabel label = new JLabel(I18n.translate("info_panel.identifier.none")); - Utils.unboldLabel(label); + GuiUtil.unboldLabel(label); label.setHorizontalAlignment(JLabel.CENTER); this.add(label); diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java similarity index 100% rename from src/main/java/cuchaz/enigma/gui/panels/PanelObf.java rename to 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 similarity index 90% rename from src/main/java/cuchaz/enigma/utils/search/SearchEntry.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchEntry.java index 48b255f85..91727c385 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 @@ -package cuchaz.enigma.utils.search; +package cuchaz.enigma.gui.search; import java.util.List; diff --git a/src/main/java/cuchaz/enigma/utils/search/SearchUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchUtil.java similarity index 99% rename from src/main/java/cuchaz/enigma/utils/search/SearchUtil.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/search/SearchUtil.java index a51afbb00..a3b35faa1 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 @@ -package cuchaz.enigma.utils.search; +package cuchaz.enigma.gui.search; import java.util.*; import 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 similarity index 99% rename from src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java index e7835304d..d7f7ec0a1 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 String generate(ProgressListener progress, Set includedMembe totalWork += entryIndex.getClasses().size(); } - progress.init(totalWork, I18n.translate("progress.stats")); + progress.init(totalWork, "progress.stats"); Map counts = new HashMap<>(); diff --git a/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsMember.java similarity index 100% rename from src/main/java/cuchaz/enigma/gui/stats/StatsMember.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java rename to 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 000000000..70172fe75 --- /dev/null +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java @@ -0,0 +1,56 @@ +package cuchaz.enigma.gui.util; + +import javax.swing.*; +import javax.swing.text.BadLocationException; +import javax.swing.text.JTextComponent; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Locale; +import java.util.StringJoiner; + +public class GuiUtil { + public static void openUrl(String url) { + if (Desktop.isDesktopSupported()) { + Desktop desktop = Desktop.getDesktop(); + try { + desktop.browse(new URI(url)); + } catch (IOException ex) { + throw new Error(ex); + } catch (URISyntaxException ex) { + throw new IllegalArgumentException(ex); + } + } + } + + public static JLabel unboldLabel(JLabel label) { + Font font = label.getFont(); + label.setFont(font.deriveFont(font.getStyle() & ~Font.BOLD)); + return label; + } + + public static void showToolTipNow(JComponent component) { + // HACKHACK: trick the tooltip manager into showing the tooltip right now + ToolTipManager manager = ToolTipManager.sharedInstance(); + int oldDelay = manager.getInitialDelay(); + manager.setInitialDelay(0); + manager.mouseMoved(new MouseEvent(component, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, 0, 0, 0, false)); + manager.setInitialDelay(oldDelay); + } + + public static Rectangle safeModelToView(JTextComponent component, int modelPos) { + if (modelPos < 0) { + modelPos = 0; + } else if (modelPos >= component.getText().length()) { + modelPos = component.getText().length(); + } + try { + return component.modelToView(modelPos); + } catch (BadLocationException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/cuchaz/enigma/gui/util/History.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/History.java similarity index 94% rename from src/main/java/cuchaz/enigma/gui/util/History.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/util/History.java index 94f310518..b12869987 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 @@ -package cuchaz.enigma.gui.util; - -import com.google.common.collect.Queues; - -import java.util.Deque; - -public class History { - private final Deque previous = Queues.newArrayDeque(); - private final Deque next = Queues.newArrayDeque(); - private T current; - - public History(T initial) { - current = initial; - } - - public T getCurrent() { - return current; - } - - public void push(T value) { - previous.addLast(current); - current = value; - next.clear(); - } - - public void replace(T value) { - current = value; - } - - public boolean canGoBack() { - return !previous.isEmpty(); - } - - public T goBack() { - next.addFirst(current); - current = previous.removeLast(); - return current; - } - - public boolean canGoForward() { - return !next.isEmpty(); - } - - public T goForward() { - previous.addLast(current); - current = next.removeFirst(); - return current; - } -} +package cuchaz.enigma.gui.util; + +import com.google.common.collect.Queues; + +import java.util.Deque; + +public class History { + private final Deque previous = Queues.newArrayDeque(); + private final Deque next = Queues.newArrayDeque(); + private T current; + + public History(T initial) { + current = initial; + } + + public T getCurrent() { + return current; + } + + public void push(T value) { + previous.addLast(current); + current = value; + next.clear(); + } + + public void replace(T value) { + current = value; + } + + public boolean canGoBack() { + return !previous.isEmpty(); + } + + public T goBack() { + next.addFirst(current); + current = previous.removeLast(); + return current; + } + + public boolean canGoForward() { + return !next.isEmpty(); + } + + public T goForward() { + previous.addLast(current); + current = next.removeFirst(); + return current; + } +} diff --git a/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java similarity index 100% rename from src/main/java/cuchaz/enigma/gui/util/ScaleChangeListener.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java rename to enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java index 9f722e9f5..e7ee5657c 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.MetalTweaker; import com.github.swingdpi.plaf.NimbusTweaker; import com.github.swingdpi.plaf.WindowsTweaker; -import cuchaz.enigma.config.Config; +import cuchaz.enigma.gui.config.Config; import de.sciss.syntaxpane.DefaultSyntaxKit; public class ScaleUtil { diff --git a/src/main/resources/about.html b/enigma-swing/src/main/resources/about.html similarity index 100% rename from src/main/resources/about.html rename to enigma-swing/src/main/resources/about.html diff --git a/src/main/resources/stats.html b/enigma-swing/src/main/resources/stats.html similarity index 100% rename from src/main/resources/stats.html rename to enigma-swing/src/main/resources/stats.html diff --git a/enigma/build.gradle b/enigma/build.gradle new file mode 100644 index 000000000..7cebcd167 --- /dev/null +++ b/enigma/build.gradle @@ -0,0 +1,63 @@ +configurations { + proGuard +} + +dependencies { + implementation 'org.ow2.asm:asm:8.0' + implementation 'org.ow2.asm:asm-commons:8.0' + implementation 'org.ow2.asm:asm-tree:8.0' + implementation 'org.ow2.asm:asm-util:8.0' + + implementation 'net.fabricmc:procyon-fabric-compilertools:0.5.35.13' + implementation 'net.fabricmc:cfr:0.0.1' + + testImplementation 'junit:junit:4.+' + testImplementation 'org.hamcrest:hamcrest-all:1.+' + proGuard 'net.sf.proguard:proguard-base:6.+' +} + +// Generate "version.txt" file + +ext.genOutputDir = file("$buildDir/generated-resources") + +task generateVersionFile { + ext.outputFile = file("$genOutputDir/version.txt") + outputs.file(outputFile) + doLast { + outputFile.text = "${project.version}" + } +} + +sourceSets.main.output.dir genOutputDir, builtBy: generateVersionFile + +// Generate obfuscated JARs for tests + +def libraryJarsArg = JavaVersion.current().java9Compatible ? "/jmods" : "/lib/rt.jar" + +file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile -> + if (theFile.directory) { + task("${theFile.name}TestJar", type: Jar) { + from(sourceSets.test.output) { + include "cuchaz/enigma/inputs/$theFile.name/**/*.class" + include 'cuchaz/enigma/inputs/Keep.class' + } + + archiveFileName = theFile.name + '.jar' + destinationDirectory = file('build/test-inputs') + } + + task("${theFile.name}TestObf", type: JavaExec, + dependsOn: "${theFile.name}TestJar") { + main 'proguard.ProGuard' + classpath configurations.proGuard + + args '@src/test/resources/proguard-test.conf', '-injars', file('build/test-inputs/' + + "${theFile.name}.jar"), '-libraryjars', libraryJarsArg, + '-outjars', file('build/test-obf/' + "${theFile.name}.jar") + } + + test.dependsOn "${theFile.name}TestObf" + } +} + +test.dependsOn 'translationTestObf' diff --git a/src/main/java/cuchaz/enigma/ClassProvider.java b/enigma/src/main/java/cuchaz/enigma/ClassProvider.java similarity index 100% rename from src/main/java/cuchaz/enigma/ClassProvider.java rename to 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 similarity index 88% rename from src/main/java/cuchaz/enigma/Enigma.java rename to enigma/src/main/java/cuchaz/enigma/Enigma.java index f5f064916..73c9a0908 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.EnigmaServiceType; import cuchaz.enigma.api.service.JarIndexerService; import cuchaz.enigma.utils.Utils; +import org.objectweb.asm.Opcodes; import java.io.IOException; import java.nio.file.Path; @@ -29,7 +30,12 @@ import java.util.ServiceLoader; public class Enigma { - private final EnigmaProfile profile; + public static final String NAME = "Enigma"; + public static final String VERSION; + public static final String URL = "https://fabricmc.net"; + public static final int ASM_VERSION = Opcodes.ASM8; + + private final EnigmaProfile profile; private final EnigmaServices services; private Enigma(EnigmaProfile profile, EnigmaServices services) { @@ -118,4 +124,16 @@ EnigmaServices buildServices() { return new EnigmaServices(services.build()); } } + + static { + String version = null; + + try { + version = Utils.readResourceToString("/version.txt"); + } catch (Throwable t) { + version = "Unknown Version"; + } + + VERSION = version; + } } diff --git a/src/main/java/cuchaz/enigma/EnigmaProfile.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProfile.java similarity index 94% rename from src/main/java/cuchaz/enigma/EnigmaProfile.java rename to enigma/src/main/java/cuchaz/enigma/EnigmaProfile.java index 09b90f5fe..daf272743 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.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import cuchaz.enigma.api.service.EnigmaServiceType; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import javax.annotation.Nullable; import java.io.BufferedReader; @@ -54,7 +54,7 @@ public static EnigmaProfile read(@Nullable Path file) throws IOException { return EnigmaProfile.parse(reader); } } else { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(Main.class.getResourceAsStream("/profile.json"), StandardCharsets.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(EnigmaProfile.class.getResourceAsStream("/profile.json"), StandardCharsets.UTF_8))) { return EnigmaProfile.parse(reader); } catch (IOException ex) { 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 similarity index 93% rename from src/main/java/cuchaz/enigma/EnigmaProject.java rename to enigma/src/main/java/cuchaz/enigma/EnigmaProject.java index b345fb391..43ea14ed5 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.api.service.NameProposalService; import cuchaz.enigma.bytecode.translators.SourceFixVisitor; import cuchaz.enigma.bytecode.translators.TranslationClassVisitor; -import cuchaz.enigma.network.EnigmaServer; import cuchaz.enigma.source.*; +import cuchaz.enigma.translation.ProposingTranslator; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.*; import cuchaz.enigma.translation.mapping.tree.DeltaTrackingTree; @@ -20,9 +20,7 @@ import cuchaz.enigma.translation.representation.entry.MethodEntry; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; import java.io.*; @@ -46,7 +44,7 @@ public class EnigmaProject { private EntryRemapper mapper; public EnigmaProject(Enigma enigma, ClassCache classCache, JarIndex jarIndex, byte[] jarChecksum) { - Preconditions.checkArgument(jarChecksum.length == EnigmaServer.CHECKSUM_SIZE); + Preconditions.checkArgument(jarChecksum.length == 20); this.enigma = enigma; this.classCache = classCache; this.jarIndex = jarIndex; @@ -105,6 +103,20 @@ private Collection> dropMappings(EntryTree mappings, Prog return droppedMappings.keySet(); } + public Decompiler createDecompiler(DecompilerService decompilerService) { + return decompilerService.create(name -> { + ClassNode node = this.getClassCache().getClassNode(name); + + if (node == null) { + return null; + } + + ClassNode fixedNode = new ClassNode(); + node.accept(new SourceFixVisitor(Enigma.ASM_VERSION, fixedNode, getJarIndex())); + return fixedNode; + }, new SourceSettings(true, true)); + } + public boolean isRenamable(Entry obfEntry) { if (obfEntry instanceof MethodEntry) { // HACKHACK: Object methods are not obfuscated identifiers @@ -162,7 +174,7 @@ public JarExport exportRemappedJar(ProgressListener progress) { ClassNode node = classCache.getClassNode(entry.getFullName()); if (node != null) { ClassNode translatedNode = new ClassNode(); - node.accept(new TranslationClassVisitor(deobfuscator, Utils.ASM_VERSION, new SourceFixVisitor(Utils.ASM_VERSION, translatedNode, jarIndex))); + node.accept(new TranslationClassVisitor(deobfuscator, Enigma.ASM_VERSION, new SourceFixVisitor(Enigma.ASM_VERSION, translatedNode, jarIndex))); return translatedNode; } diff --git a/src/main/java/cuchaz/enigma/EnigmaServices.java b/enigma/src/main/java/cuchaz/enigma/EnigmaServices.java similarity index 100% rename from src/main/java/cuchaz/enigma/EnigmaServices.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/ProgressListener.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/Access.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java rename to enigma/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java index dc3f5535a..4685b390f 100644 --- a/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java +++ b/enigma/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java @@ -1,18 +1,17 @@ package cuchaz.enigma.analysis; +import cuchaz.enigma.Enigma; import cuchaz.enigma.api.EnigmaPlugin; import cuchaz.enigma.api.EnigmaPluginContext; import cuchaz.enigma.api.service.JarIndexerService; import cuchaz.enigma.api.service.NameProposalService; import cuchaz.enigma.source.DecompilerService; import cuchaz.enigma.source.Decompilers; -import cuchaz.enigma.source.procyon.ProcyonDecompiler; import cuchaz.enigma.translation.representation.TypeDescriptor; import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.translation.representation.entry.Entry; import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.utils.Pair; -import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; @@ -70,7 +69,7 @@ private static final class EnumFieldNameFindingVisitor extends ClassVisitor { private final List classInits = new ArrayList<>(); EnumFieldNameFindingVisitor(Map, String> mappings) { - super(Utils.ASM_VERSION); + super(Enigma.ASM_VERSION); this.mappings = mappings; } diff --git a/src/main/java/cuchaz/enigma/analysis/ClassCache.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassCache.java similarity index 97% rename from src/main/java/cuchaz/enigma/analysis/ClassCache.java rename to enigma/src/main/java/cuchaz/enigma/analysis/ClassCache.java index f694bf351..a3d24e327 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.CacheBuilder; import com.google.common.collect.ImmutableSet; import cuchaz.enigma.ClassProvider; +import cuchaz.enigma.Enigma; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.analysis.index.JarIndex; import cuchaz.enigma.bytecode.translators.LocalVariableFixVisitor; -import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; import javax.annotation.Nullable; @@ -78,7 +77,7 @@ private ClassNode parseNode(String name) throws IOException { ClassNode node = new ClassNode(); - LocalVariableFixVisitor visitor = new LocalVariableFixVisitor(Utils.ASM_VERSION, node); + LocalVariableFixVisitor visitor = new LocalVariableFixVisitor(Enigma.ASM_VERSION, node); reader.accept(visitor, 0); return node; diff --git a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/analysis/EntryReference.java rename to enigma/src/main/java/cuchaz/enigma/analysis/EntryReference.java index 2e738c01d..320f94500 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.representation.entry.ClassEntry; import cuchaz.enigma.translation.representation.entry.Entry; import cuchaz.enigma.translation.representation.entry.MethodEntry; -import cuchaz.enigma.utils.Utils; import java.util.Arrays; import java.util.List; +import java.util.Objects; public class EntryReference, C extends Entry> implements Translatable { @@ -89,7 +89,7 @@ public String getNameableName() { @Override public int hashCode() { if (context != null) { - return Utils.combineHashesOrdered(entry.hashCode(), context.hashCode()); + return Objects.hash(entry.hashCode(), context.hashCode()); } return entry.hashCode(); } diff --git a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java rename to enigma/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java index 80a71546d..ec8f32379 100644 --- a/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java +++ b/enigma/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java @@ -1,11 +1,11 @@ package cuchaz.enigma.analysis; +import cuchaz.enigma.Enigma; import cuchaz.enigma.analysis.index.EntryIndex; import cuchaz.enigma.analysis.index.InheritanceIndex; import cuchaz.enigma.translation.representation.AccessFlags; import cuchaz.enigma.translation.representation.entry.ClassDefEntry; import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.utils.Utils; import org.objectweb.asm.Type; import org.objectweb.asm.tree.analysis.BasicValue; import org.objectweb.asm.tree.analysis.SimpleVerifier; @@ -18,7 +18,7 @@ public class IndexSimpleVerifier extends SimpleVerifier { private final InheritanceIndex inheritanceIndex; public IndexSimpleVerifier(EntryIndex entryIndex, InheritanceIndex inheritanceIndex) { - super(Utils.ASM_VERSION, null, null, null, false); + super(Enigma.ASM_VERSION, null, null, null, false); this.entryIndex = entryIndex; this.inheritanceIndex = inheritanceIndex; } diff --git a/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java b/enigma/src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/IndexTreeBuilder.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/analysis/InterpreterPair.java rename to enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java index 8a1c23886..fad10bf7b 100644 --- a/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java +++ b/enigma/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java @@ -1,7 +1,6 @@ package cuchaz.enigma.analysis; -import cuchaz.enigma.utils.Utils; -import org.objectweb.asm.Opcodes; +import cuchaz.enigma.Enigma; import org.objectweb.asm.Type; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.analysis.AnalyzerException; @@ -17,7 +16,7 @@ public class InterpreterPair extends Interpret private final Interpreter right; public InterpreterPair(Interpreter left, Interpreter right) { - super(Utils.ASM_VERSION); + super(Enigma.ASM_VERSION); this.left = left; this.right = right; } diff --git a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/MethodNodeWithAction.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/ReferenceTargetType.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/IndexClassVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java rename to 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 similarity index 96% rename from src/main/java/cuchaz/enigma/analysis/index/JarIndex.java rename to enigma/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java index e401c2f7f..de3f5f574 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 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import cuchaz.enigma.Enigma; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.ReferenceTargetType; @@ -22,9 +23,7 @@ import cuchaz.enigma.translation.representation.entry.*; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassReader; -import org.objectweb.asm.Opcodes; import java.util.Arrays; import java.util.Collection; @@ -64,10 +63,10 @@ public void indexJar(ClassCache classCache, ProgressListener progress) { progress.init(4, I18n.translate("progress.jar.indexing")); progress.step(1, I18n.translate("progress.jar.indexing.entries")); - classCache.visit(() -> new IndexClassVisitor(this, Utils.ASM_VERSION), ClassReader.SKIP_CODE); + classCache.visit(() -> new IndexClassVisitor(this, Enigma.ASM_VERSION), ClassReader.SKIP_CODE); progress.step(2, I18n.translate("progress.jar.indexing.references")); - classCache.visit(() -> new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Utils.ASM_VERSION), 0); + classCache.visit(() -> new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Enigma.ASM_VERSION), 0); progress.step(3, I18n.translate("progress.jar.indexing.methods")); 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 similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/JarIndexer.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java rename to enigma/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java index 63eb73000..64de5f371 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 @@ -package cuchaz.enigma.analysis.index; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.analysis.ReferenceTargetType; -import cuchaz.enigma.translation.representation.AccessFlags; -import cuchaz.enigma.translation.representation.entry.*; - -import java.util.*; - -public class PackageVisibilityIndex implements JarIndexer { - private static boolean requiresSamePackage(AccessFlags entryAcc, EntryReference ref, InheritanceIndex inheritanceIndex) { - if (entryAcc.isPublic()) { - return false; - } - - if (entryAcc.isProtected()) { - ClassEntry contextClass = ref.context.getContainingClass(); - ClassEntry referencedClass = ref.entry.getContainingClass(); - - if (!inheritanceIndex.getAncestors(contextClass).contains(referencedClass)) { - return true; // access to protected member not in superclass - } - - if (ref.targetType.getKind() == ReferenceTargetType.Kind.NONE) { - return false; // access to superclass or static superclass member - } - - // access to instance member only valid if target's class assignable to context class - return !(ref.targetType.getKind() == ReferenceTargetType.Kind.UNINITIALIZED || - ((ReferenceTargetType.ClassType) ref.targetType).getEntry().equals(contextClass) || - inheritanceIndex.getAncestors(((ReferenceTargetType.ClassType) ref.targetType).getEntry()).contains(contextClass)); - } - - return true; - } - - private final HashMultimap connections = HashMultimap.create(); - private final List> partitions = Lists.newArrayList(); - private final Map> classPartitions = Maps.newHashMap(); - - private void addConnection(ClassEntry classA, ClassEntry classB) { - if (classA != classB) { - connections.put(classA, classB); - connections.put(classB, classA); - } - } - - private void buildPartition(Set unassignedClasses, Set partition, ClassEntry member) { - for (ClassEntry connected : connections.get(member)) { - if (unassignedClasses.remove(connected)) { - partition.add(connected); - buildPartition(unassignedClasses, partition, connected); - } - } - } - - private void addConnections(EntryIndex entryIndex, ReferenceIndex referenceIndex, InheritanceIndex inheritanceIndex) { - for (FieldEntry entry : entryIndex.getFields()) { - AccessFlags entryAcc = entryIndex.getFieldAccess(entry); - if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { - for (EntryReference ref : referenceIndex.getReferencesToField(entry)) { - if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { - addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); - } - } - } - } - - for (MethodEntry entry : entryIndex.getMethods()) { - AccessFlags entryAcc = entryIndex.getMethodAccess(entry); - if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { - for (EntryReference ref : referenceIndex.getReferencesToMethod(entry)) { - if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { - addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); - } - } - } - } - - for (ClassEntry entry : entryIndex.getClasses()) { - AccessFlags entryAcc = entryIndex.getClassAccess(entry); - if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { - for (EntryReference ref : referenceIndex.getFieldTypeReferencesToClass(entry)) { - if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { - addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); - } - } - - for (EntryReference ref : referenceIndex.getMethodTypeReferencesToClass(entry)) { - if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { - addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); - } - } - } - - for (ClassEntry parent : inheritanceIndex.getParents(entry)) { - AccessFlags parentAcc = entryIndex.getClassAccess(parent); - if (parentAcc != null && !parentAcc.isPublic() && !parentAcc.isPrivate()) { - addConnection(entry, parent); - } - } - - ClassEntry outerClass = entry.getOuterClass(); - if (outerClass != null) { - addConnection(entry, outerClass); - } - } - } - - private void addPartitions(EntryIndex entryIndex) { - Set unassignedClasses = Sets.newHashSet(entryIndex.getClasses()); - while (!unassignedClasses.isEmpty()) { - Iterator iterator = unassignedClasses.iterator(); - ClassEntry initialEntry = iterator.next(); - iterator.remove(); - - HashSet partition = Sets.newHashSet(); - partition.add(initialEntry); - buildPartition(unassignedClasses, partition, initialEntry); - partitions.add(partition); - for (ClassEntry entry : partition) { - classPartitions.put(entry, partition); - } - } - } - - public Collection> getPartitions() { - return partitions; - } - - public Set getPartition(ClassEntry classEntry) { - return classPartitions.get(classEntry); - } - - @Override - public void processIndex(JarIndex index) { - EntryIndex entryIndex = index.getEntryIndex(); - ReferenceIndex referenceIndex = index.getReferenceIndex(); - InheritanceIndex inheritanceIndex = index.getInheritanceIndex(); - addConnections(entryIndex, referenceIndex, inheritanceIndex); - addPartitions(entryIndex); - } -} +package cuchaz.enigma.analysis.index; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import cuchaz.enigma.analysis.EntryReference; +import cuchaz.enigma.analysis.ReferenceTargetType; +import cuchaz.enigma.translation.representation.AccessFlags; +import cuchaz.enigma.translation.representation.entry.*; + +import java.util.*; + +public class PackageVisibilityIndex implements JarIndexer { + private static boolean requiresSamePackage(AccessFlags entryAcc, EntryReference ref, InheritanceIndex inheritanceIndex) { + if (entryAcc.isPublic()) { + return false; + } + + if (entryAcc.isProtected()) { + ClassEntry contextClass = ref.context.getContainingClass(); + ClassEntry referencedClass = ref.entry.getContainingClass(); + + if (!inheritanceIndex.getAncestors(contextClass).contains(referencedClass)) { + return true; // access to protected member not in superclass + } + + if (ref.targetType.getKind() == ReferenceTargetType.Kind.NONE) { + return false; // access to superclass or static superclass member + } + + // access to instance member only valid if target's class assignable to context class + return !(ref.targetType.getKind() == ReferenceTargetType.Kind.UNINITIALIZED || + ((ReferenceTargetType.ClassType) ref.targetType).getEntry().equals(contextClass) || + inheritanceIndex.getAncestors(((ReferenceTargetType.ClassType) ref.targetType).getEntry()).contains(contextClass)); + } + + return true; + } + + private final HashMultimap connections = HashMultimap.create(); + private final List> partitions = Lists.newArrayList(); + private final Map> classPartitions = Maps.newHashMap(); + + private void addConnection(ClassEntry classA, ClassEntry classB) { + if (classA != classB) { + connections.put(classA, classB); + connections.put(classB, classA); + } + } + + private void buildPartition(Set unassignedClasses, Set partition, ClassEntry member) { + for (ClassEntry connected : connections.get(member)) { + if (unassignedClasses.remove(connected)) { + partition.add(connected); + buildPartition(unassignedClasses, partition, connected); + } + } + } + + private void addConnections(EntryIndex entryIndex, ReferenceIndex referenceIndex, InheritanceIndex inheritanceIndex) { + for (FieldEntry entry : entryIndex.getFields()) { + AccessFlags entryAcc = entryIndex.getFieldAccess(entry); + if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { + for (EntryReference ref : referenceIndex.getReferencesToField(entry)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { + addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); + } + } + } + } + + for (MethodEntry entry : entryIndex.getMethods()) { + AccessFlags entryAcc = entryIndex.getMethodAccess(entry); + if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { + for (EntryReference ref : referenceIndex.getReferencesToMethod(entry)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { + addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); + } + } + } + } + + for (ClassEntry entry : entryIndex.getClasses()) { + AccessFlags entryAcc = entryIndex.getClassAccess(entry); + if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { + for (EntryReference ref : referenceIndex.getFieldTypeReferencesToClass(entry)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { + addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); + } + } + + for (EntryReference ref : referenceIndex.getMethodTypeReferencesToClass(entry)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { + addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); + } + } + } + + for (ClassEntry parent : inheritanceIndex.getParents(entry)) { + AccessFlags parentAcc = entryIndex.getClassAccess(parent); + if (parentAcc != null && !parentAcc.isPublic() && !parentAcc.isPrivate()) { + addConnection(entry, parent); + } + } + + ClassEntry outerClass = entry.getOuterClass(); + if (outerClass != null) { + addConnection(entry, outerClass); + } + } + } + + private void addPartitions(EntryIndex entryIndex) { + Set unassignedClasses = Sets.newHashSet(entryIndex.getClasses()); + while (!unassignedClasses.isEmpty()) { + Iterator iterator = unassignedClasses.iterator(); + ClassEntry initialEntry = iterator.next(); + iterator.remove(); + + HashSet partition = Sets.newHashSet(); + partition.add(initialEntry); + buildPartition(unassignedClasses, partition, initialEntry); + partitions.add(partition); + for (ClassEntry entry : partition) { + classPartitions.put(entry, partition); + } + } + } + + public Collection> getPartitions() { + return partitions; + } + + public Set getPartition(ClassEntry classEntry) { + return classPartitions.get(classEntry); + } + + @Override + public void processIndex(JarIndex index) { + EntryIndex entryIndex = index.getEntryIndex(); + ReferenceIndex referenceIndex = index.getReferenceIndex(); + InheritanceIndex inheritanceIndex = index.getInheritanceIndex(); + addConnections(entryIndex, referenceIndex, inheritanceIndex); + addPartitions(entryIndex); + } +} diff --git a/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java similarity index 100% rename from src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/EnigmaPlugin.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/EnigmaPluginContext.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/EnigmaService.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/EnigmaServiceContext.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/EnigmaServiceFactory.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/EnigmaServiceType.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/JarIndexerService.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/NameProposalService.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/api/service/ObfuscationTestService.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java rename to enigma/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java index eebd65096..bc4a2f00d 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 @@ package cuchaz.enigma.bytecode.translators; -import cuchaz.enigma.utils.Utils; +import cuchaz.enigma.Enigma; import org.objectweb.asm.signature.SignatureVisitor; import java.util.Stack; @@ -13,7 +13,7 @@ public class TranslationSignatureVisitor extends SignatureVisitor { private final Stack classStack = new Stack<>(); public TranslationSignatureVisitor(Function remapper, SignatureVisitor sv) { - super(Utils.ASM_VERSION); + super(Enigma.ASM_VERSION); this.remapper = remapper; this.sv = sv; } diff --git a/src/main/java/cuchaz/enigma/source/Decompiler.java b/enigma/src/main/java/cuchaz/enigma/source/Decompiler.java similarity index 100% rename from src/main/java/cuchaz/enigma/source/Decompiler.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/DecompilerService.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/Decompilers.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/Source.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/source/SourceIndex.java rename to enigma/src/main/java/cuchaz/enigma/source/SourceIndex.java index 6a335ec97..178ce20e1 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.Maps; import com.google.common.collect.Multimap; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.analysis.Token; -import cuchaz.enigma.gui.SourceRemapper; import cuchaz.enigma.translation.mapping.EntryResolver; import cuchaz.enigma.translation.mapping.ResolutionStrategy; import 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 similarity index 95% rename from src/main/java/cuchaz/enigma/gui/SourceRemapper.java rename to enigma/src/main/java/cuchaz/enigma/source/SourceRemapper.java index f38f44eac..b5f800630 100644 --- a/src/main/java/cuchaz/enigma/gui/SourceRemapper.java +++ b/enigma/src/main/java/cuchaz/enigma/source/SourceRemapper.java @@ -1,6 +1,4 @@ -package cuchaz.enigma.gui; - -import cuchaz.enigma.analysis.Token; +package cuchaz.enigma.source; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/cuchaz/enigma/source/SourceSettings.java b/enigma/src/main/java/cuchaz/enigma/source/SourceSettings.java similarity index 100% rename from src/main/java/cuchaz/enigma/source/SourceSettings.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/analysis/Token.java rename to enigma/src/main/java/cuchaz/enigma/source/Token.java index f0155e563..fad733fa3 100644 --- a/src/main/java/cuchaz/enigma/analysis/Token.java +++ b/enigma/src/main/java/cuchaz/enigma/source/Token.java @@ -9,7 +9,7 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma.analysis; +package cuchaz.enigma.source; public class Token implements Comparable { diff --git a/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java b/enigma/src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java similarity index 100% rename from src/main/java/cuchaz/enigma/source/cfr/CfrDecompiler.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/cfr/CfrSource.java rename to 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 similarity index 99% rename from src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java rename to enigma/src/main/java/cuchaz/enigma/source/cfr/EnigmaDumper.java index 09e0a9b29..e05a6ffa6 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 @@ package cuchaz.enigma.source.cfr; -import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.source.Token; import cuchaz.enigma.source.SourceIndex; import cuchaz.enigma.translation.representation.MethodDescriptor; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/EntryParser.java rename to 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 similarity index 80% rename from src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java rename to enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonDecompiler.java index 37bc0c860..3cbd680c9 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.CompilationUnit; import com.strobel.decompiler.languages.java.ast.InsertParenthesesVisitor; import cuchaz.enigma.ClassProvider; -import cuchaz.enigma.api.EnigmaPluginContext; import cuchaz.enigma.source.Source; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.SourceSettings; @@ -20,7 +19,6 @@ import cuchaz.enigma.source.procyon.typeloader.CompiledSourceTypeLoader; import cuchaz.enigma.source.procyon.typeloader.NoRetryMetadataSystem; import cuchaz.enigma.source.procyon.typeloader.SynchronizedTypeLoader; -import cuchaz.enigma.utils.Utils; public class ProcyonDecompiler implements Decompiler { private final SourceSettings settings; @@ -34,11 +32,11 @@ public ProcyonDecompiler(ClassProvider classProvider, SourceSettings settings) { metadataSystem.setEagerMethodLoadingEnabled(true); decompilerSettings = DecompilerSettings.javaDefaults(); - decompilerSettings.setMergeVariables(Utils.getSystemPropertyAsBoolean("enigma.mergeVariables", true)); - decompilerSettings.setForceExplicitImports(Utils.getSystemPropertyAsBoolean("enigma.forceExplicitImports", true)); - decompilerSettings.setForceExplicitTypeArguments(Utils.getSystemPropertyAsBoolean("enigma.forceExplicitTypeArguments", true)); - decompilerSettings.setShowDebugLineNumbers(Utils.getSystemPropertyAsBoolean("enigma.showDebugLineNumbers", false)); - decompilerSettings.setShowSyntheticMembers(Utils.getSystemPropertyAsBoolean("enigma.showSyntheticMembers", false)); + decompilerSettings.setMergeVariables(getSystemPropertyAsBoolean("enigma.mergeVariables", true)); + decompilerSettings.setForceExplicitImports(getSystemPropertyAsBoolean("enigma.forceExplicitImports", true)); + decompilerSettings.setForceExplicitTypeArguments(getSystemPropertyAsBoolean("enigma.forceExplicitTypeArguments", true)); + decompilerSettings.setShowDebugLineNumbers(getSystemPropertyAsBoolean("enigma.showDebugLineNumbers", false)); + decompilerSettings.setShowSyntheticMembers(getSystemPropertyAsBoolean("enigma.showSyntheticMembers", false)); decompilerSettings.setTypeLoader(typeLoader); JavaFormattingOptions formattingOptions = decompilerSettings.getJavaFormattingOptions(); @@ -78,4 +76,9 @@ public Source getSource(String className) { return new ProcyonSource(source, decompilerSettings); } + + private static boolean getSystemPropertyAsBoolean(String property, boolean defValue) { + String value = System.getProperty(property); + return value == null ? defValue : Boolean.parseBoolean(value); + } } diff --git a/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java b/enigma/src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/ProcyonSource.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexClassVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexMethodVisitor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/index/SourceIndexVisitor.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java rename to enigma/src/main/java/cuchaz/enigma/source/procyon/index/TokenFactory.java index 62e7c102e..dc36865a5 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.ConstructorDeclaration; import com.strobel.decompiler.languages.java.ast.Identifier; import com.strobel.decompiler.languages.java.ast.TypeDeclaration; -import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.source.Token; import cuchaz.enigma.source.SourceIndex; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/AddJavadocsAstTransform.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/DropImportAstTransform.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/DropVarModifiersAstTransform.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/InvalidIdentifierFix.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/Java8Generics.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/ObfuscatedEnumSwitchRewriterTransform.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/RemoveObjectCasts.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/transformers/VarargsFixer.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingClasspathTypeLoader.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/typeloader/CachingTypeLoader.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/typeloader/CompiledSourceTypeLoader.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/typeloader/NoRetryMetadataSystem.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/source/procyon/typeloader/SynchronizedTypeLoader.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/LocalNameGenerator.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/MappingTranslator.java rename to 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 similarity index 93% rename from src/main/java/cuchaz/enigma/ProposingTranslator.java rename to enigma/src/main/java/cuchaz/enigma/translation/ProposingTranslator.java index 018fbfdab..97866e92a 100644 --- a/src/main/java/cuchaz/enigma/ProposingTranslator.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/ProposingTranslator.java @@ -1,8 +1,6 @@ -package cuchaz.enigma; +package cuchaz.enigma.translation; import cuchaz.enigma.api.service.NameProposalService; -import cuchaz.enigma.translation.Translatable; -import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryRemapper; import cuchaz.enigma.translation.mapping.ResolutionStrategy; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/SignatureUpdater.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/Translatable.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/TranslationDirection.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/Translator.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/VoidTranslator.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/AccessModifier.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/EntryMap.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/EntryMapping.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/EntryRemapper.java index ad36c97f6..1dd7eacc9 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 javax.annotation.Nullable; import java.util.Collection; -import java.util.function.UnaryOperator; import java.util.stream.Stream; public 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/EntryResolver.java rename to 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 similarity index 96% rename from src/main/java/cuchaz/enigma/throwables/IllegalNameException.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/IllegalNameException.java index 0155ad276..a7f83cd72 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 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma.throwables; +package cuchaz.enigma.translation.mapping; public class IllegalNameException extends RuntimeException { diff --git a/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/IndexEntryResolver.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/MappingDelta.java rename to 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 000000000..2c037484e --- /dev/null +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingOperations.java @@ -0,0 +1,71 @@ +package cuchaz.enigma.translation.mapping; + +import cuchaz.enigma.translation.mapping.tree.EntryTree; +import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; +import cuchaz.enigma.translation.mapping.tree.HashEntryTree; +import cuchaz.enigma.translation.MappingTranslator; +import cuchaz.enigma.translation.Translator; +import cuchaz.enigma.translation.representation.entry.ClassEntry; +import cuchaz.enigma.translation.representation.entry.Entry; +import cuchaz.enigma.translation.representation.entry.FieldEntry; +import cuchaz.enigma.translation.representation.entry.MethodEntry; + +import java.util.HashSet; +import java.util.Set; + +public class MappingOperations { + public static EntryTree invert(EntryTree mappings) { + Translator translator = new MappingTranslator(mappings, VoidEntryResolver.INSTANCE); + EntryTree result = new HashEntryTree<>(); + + for (EntryTreeNode node : mappings) { + Entry leftEntry = node.getEntry(); + EntryMapping leftMapping = node.getValue(); + + if (!(leftEntry instanceof ClassEntry || leftEntry instanceof MethodEntry || leftEntry instanceof FieldEntry)) { + result.insert(translator.translate(leftEntry), leftMapping); + continue; + } + + Entry rightEntry = translator.translate(leftEntry); + + result.insert(rightEntry, leftMapping == null ? null : leftMapping.withName(leftEntry.getName())); + } + + return result; + } + + public static EntryTree compose(EntryTree left, EntryTree right, boolean keepLeftOnly, boolean keepRightOnly) { + Translator leftTranslator = new MappingTranslator(left, VoidEntryResolver.INSTANCE); + EntryTree result = new HashEntryTree<>(); + Set> addedMappings = new HashSet<>(); + + for (EntryTreeNode node : left) { + Entry leftEntry = node.getEntry(); + EntryMapping leftMapping = node.getValue(); + + Entry rightEntry = leftTranslator.translate(leftEntry); + + EntryMapping rightMapping = right.get(rightEntry); + if (rightMapping != null) { + result.insert(leftEntry, rightMapping); + addedMappings.add(rightEntry); + } else if (keepLeftOnly) { + result.insert(leftEntry, leftMapping); + } + } + + if (keepRightOnly) { + Translator leftInverseTranslator = new MappingTranslator(invert(left), VoidEntryResolver.INSTANCE); + for (EntryTreeNode node : right) { + Entry rightEntry = node.getEntry(); + EntryMapping rightMapping = node.getValue(); + + if (!addedMappings.contains(rightEntry)) { + result.insert(leftInverseTranslator.translate(rightEntry), rightMapping); + } + } + } + return result; + } +} diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/MappingPair.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java index dffcb0c6d..ae615da4f 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 @@ import cuchaz.enigma.analysis.index.InheritanceIndex; import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.throwables.IllegalNameException; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.tree.EntryTree; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java rename to 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 similarity index 94% rename from src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/NameValidator.java index 5bc2f67ad..74ba633d1 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 @@ package cuchaz.enigma.translation.mapping; -import cuchaz.enigma.throwables.IllegalNameException; -import cuchaz.enigma.translation.representation.entry.ClassEntry; - import java.util.Arrays; import java.util.List; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/ResolutionStrategy.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/VoidEntryResolver.java rename to 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 000000000..441949c61 --- /dev/null +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/LfPrintWriter.java @@ -0,0 +1,16 @@ +package cuchaz.enigma.translation.mapping.serde; + +import java.io.PrintWriter; +import java.io.Writer; + +public class LfPrintWriter extends PrintWriter { + public LfPrintWriter(Writer out) { + super(out); + } + + @Override + public void println() { + // https://stackoverflow.com/a/14749004 + write('\n'); + } +} diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFileNameFormat.java similarity index 77% rename from src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFileNameFormat.java index e40bfe75a..9bc013c4e 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 @@ -package cuchaz.enigma.translation.mapping; +package cuchaz.enigma.translation.mapping.serde; import com.google.gson.annotations.SerializedName; 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 similarity index 78% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java index 6c8c3430c..ca275ebdd 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 @@ package cuchaz.enigma.translation.mapping.serde; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsWriter; +import cuchaz.enigma.translation.mapping.serde.proguard.ProguardMappingsReader; +import cuchaz.enigma.translation.mapping.serde.srg.SrgMappingsWriter; +import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsReader; +import cuchaz.enigma.translation.mapping.serde.tiny.TinyMappingsWriter; +import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Reader; +import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer; import cuchaz.enigma.translation.mapping.tree.EntryTree; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingHelper.java rename to 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 similarity index 95% rename from src/main/java/cuchaz/enigma/throwables/MappingParseException.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingParseException.java index b7e6d426c..9d04b976b 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 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma.throwables; +package cuchaz.enigma.translation.mapping.serde; import java.io.File; import 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 similarity index 88% rename from src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingSaveParameters.java index 07065d6a0..e78fd9565 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 @@ -package cuchaz.enigma.translation.mapping; +package cuchaz.enigma.translation.mapping.serde; import com.google.gson.annotations.SerializedName; 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 similarity index 78% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java index 4c60787da..2f01375a9 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 @@ package cuchaz.enigma.translation.mapping.serde; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import 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 similarity index 91% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java index 88159867a..68a8dbb2e 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 @@ import cuchaz.enigma.ProgressListener; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import 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 similarity index 71% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/RawEntryMapping.java index afb40e9a8..79587a0b7 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 java.util.ArrayList; import java.util.List; -final class RawEntryMapping { +public final class RawEntryMapping { private final String targetName; private final AccessModifier access; private List javadocs = new ArrayList<>(); - RawEntryMapping(String targetName) { + public RawEntryMapping(String targetName) { this(targetName, null); } - RawEntryMapping(String targetName, AccessModifier access) { + public RawEntryMapping(String targetName, AccessModifier access) { this.access = access; this.targetName = targetName; } - void addJavadocLine(String line) { + public void addJavadocLine(String line) { javadocs.add(line); } - EntryMapping bake() { + public EntryMapping bake() { return new EntryMapping(targetName, access, javadocs.isEmpty() ? null : String.join("\n", javadocs)); } } 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 similarity index 82% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaFormat.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaFormat.java index af92ffbec..210d328e8 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.enigma; public class EnigmaFormat { 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 similarity index 96% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java index 53bbaa3b3..30de85f05 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.enigma; import com.google.common.base.Charsets; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.AccessModifier; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingPair; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingHelper; +import cuchaz.enigma.translation.mapping.serde.MappingsReader; +import cuchaz.enigma.translation.mapping.serde.RawEntryMapping; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import 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 similarity index 95% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java index be0fceb55..7570d4b60 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 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.enigma; import java.io.IOException; import java.io.PrintWriter; @@ -35,9 +35,12 @@ import cuchaz.enigma.translation.mapping.AccessModifier; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.VoidEntryResolver; +import cuchaz.enigma.translation.mapping.serde.LfPrintWriter; +import cuchaz.enigma.translation.mapping.serde.MappingHelper; +import cuchaz.enigma.translation.mapping.serde.MappingsWriter; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; import cuchaz.enigma.translation.representation.entry.ClassEntry; @@ -46,7 +49,6 @@ import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.LFPrintWriter; public enum EnigmaMappingsWriter implements MappingsWriter { FILE { @@ -60,7 +62,7 @@ public void write(EntryTree mappings, MappingDelta d progress.init(classes.size(), I18n.translate("progress.mappings.enigma_file.writing")); int steps = 0; - try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(path))) { + try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) { for (ClassEntry classEntry : classes) { progress.step(steps++, classEntry.getFullName()); writeRoot(writer, mappings, classEntry); @@ -98,7 +100,7 @@ public void write(EntryTree mappings, MappingDelta d Files.createDirectories(classPath.getParent()); Files.deleteIfExists(classPath); - try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(classPath))) { + try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(classPath))) { writeRoot(writer, mappings, classEntry); } } 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 similarity index 93% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/ProguardMappingsReader.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/proguard/ProguardMappingsReader.java index b5ede3947..034fb4165 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.proguard; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.command.MappingCommandsUtil; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.MappingOperations; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingsReader; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import cuchaz.enigma.translation.representation.MethodDescriptor; @@ -79,7 +80,7 @@ public EntryTree read(Path path, ProgressListener progress, Mappin } } - return MappingCommandsUtil.invert(mappings); + return MappingOperations.invert(mappings); } 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 similarity index 93% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java index f67f8fcdd..9c9f103d8 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.srg; import com.google.common.collect.Lists; import cuchaz.enigma.ProgressListener; @@ -6,8 +6,10 @@ import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.VoidEntryResolver; +import cuchaz.enigma.translation.mapping.serde.LfPrintWriter; +import cuchaz.enigma.translation.mapping.serde.MappingsWriter; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; import cuchaz.enigma.translation.representation.entry.ClassEntry; @@ -15,7 +17,6 @@ import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.LFPrintWriter; import java.io.IOException; import java.io.PrintWriter; @@ -55,7 +56,7 @@ public void write(EntryTree mappings, MappingDelta d } progress.init(3, I18n.translate("progress.mappings.srg_file.writing")); - try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(path))) { + try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) { progress.step(0, I18n.translate("type.classes")); classLines.forEach(writer::println); 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 similarity index 94% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java index 773c95eb7..f3c66dfb2 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.tiny; import com.google.common.base.Charsets; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingPair; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingsReader; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import 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 similarity index 96% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsWriter.java index c82f26233..4f78e6f35 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.tiny; import com.google.common.base.Joiner; import com.google.common.collect.Lists; @@ -7,8 +7,9 @@ import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.VoidEntryResolver; +import cuchaz.enigma.translation.mapping.serde.MappingsWriter; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; import 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 similarity index 95% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Reader.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java index d81cbdb98..dc2556935 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.tinyv2; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingPair; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingsReader; +import cuchaz.enigma.translation.mapping.serde.RawEntryMapping; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import cuchaz.enigma.translation.representation.MethodDescriptor; @@ -14,7 +16,6 @@ import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; -import cuchaz.enigma.utils.I18n; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -23,7 +24,7 @@ import java.util.BitSet; import java.util.List; -final class TinyV2Reader implements MappingsReader { +public final class TinyV2Reader implements MappingsReader { private static final String MINOR_VERSION = "0"; // 0 indent @@ -46,7 +47,7 @@ public EntryTree read(Path path, ProgressListener progress, Mappin private EntryTree read(Path path, List lines, ProgressListener progress) throws MappingParseException { EntryTree mappings = new HashEntryTree<>(); - progress.init(lines.size(), I18n.translate("progress.mappings.tiny_v2.loading")); + progress.init(lines.size(), "progress.mappings.tiny_v2.loading"); BitSet state = new BitSet(STATE_SIZE); @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 similarity index 93% rename from src/main/java/cuchaz/enigma/translation/mapping/serde/TinyV2Writer.java rename to enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Writer.java index 95e04c340..5546b2fea 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 @@ -package cuchaz.enigma.translation.mapping.serde; +package cuchaz.enigma.translation.mapping.serde.tinyv2; import com.google.common.base.Strings; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.translation.mapping.EntryMap; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.LfPrintWriter; +import cuchaz.enigma.translation.mapping.serde.MappingHelper; +import cuchaz.enigma.translation.mapping.serde.MappingsWriter; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; import cuchaz.enigma.translation.representation.entry.ClassEntry; @@ -13,7 +16,6 @@ import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; -import cuchaz.enigma.utils.LFPrintWriter; import java.io.IOException; import java.io.PrintWriter; @@ -40,7 +42,7 @@ public TinyV2Writer(String obfHeader, String deobfHeader) { public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters parameters) { List> classes = StreamSupport.stream(mappings.spliterator(), false).filter(node -> node.getEntry() instanceof ClassEntry).collect(Collectors.toList()); - try (PrintWriter writer = new LFPrintWriter(Files.newBufferedWriter(path))) { + try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) { writer.println("tiny\t2\t" + MINOR_VERSION + "\t" + obfHeader + "\t" + deobfHeader); // no escape names @@ -166,4 +168,5 @@ private void writeComment(PrintWriter writer, EntryMapping mapping, int indent) private String indent(int level) { return Strings.repeat("\t", level); } + } 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/mapping/tree/HashTreeNode.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/translation/representation/Lambda.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/Lambda.java index 63eb5630a..ad9389c1d 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 @@ -package cuchaz.enigma.translation.representation; - -import cuchaz.enigma.translation.Translatable; -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.mapping.EntryMap; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.EntryResolver; -import cuchaz.enigma.translation.mapping.ResolutionStrategy; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.translation.representation.entry.MethodEntry; -import cuchaz.enigma.translation.representation.entry.ParentedEntry; - -import java.util.Objects; - -public class Lambda implements Translatable { - private final String invokedName; - private final MethodDescriptor invokedType; - private final MethodDescriptor samMethodType; - private final ParentedEntry implMethod; - private final MethodDescriptor instantiatedMethodType; - - public Lambda(String invokedName, MethodDescriptor invokedType, MethodDescriptor samMethodType, ParentedEntry implMethod, MethodDescriptor instantiatedMethodType) { - this.invokedName = invokedName; - this.invokedType = invokedType; - this.samMethodType = samMethodType; - this.implMethod = implMethod; - this.instantiatedMethodType = instantiatedMethodType; - } - - @Override - public Lambda translate(Translator translator, EntryResolver resolver, EntryMap mappings) { - MethodEntry samMethod = new MethodEntry(getInterface(), invokedName, samMethodType); - EntryMapping samMethodMapping = resolveMapping(resolver, mappings, samMethod); - - return new Lambda( - samMethodMapping != null ? samMethodMapping.getTargetName() : invokedName, - invokedType.translate(translator, resolver, mappings), - samMethodType.translate(translator, resolver, mappings), - implMethod.translate(translator, resolver, mappings), - instantiatedMethodType.translate(translator, resolver, mappings) - ); - } - - private EntryMapping resolveMapping(EntryResolver resolver, EntryMap mappings, MethodEntry methodEntry) { - for (MethodEntry entry : resolver.resolveEntry(methodEntry, ResolutionStrategy.RESOLVE_ROOT)) { - EntryMapping mapping = mappings.get(entry); - if (mapping != null) { - return mapping; - } - } - return null; - } - - public ClassEntry getInterface() { - return invokedType.getReturnDesc().getTypeEntry(); - } - - public String getInvokedName() { - return invokedName; - } - - public MethodDescriptor getInvokedType() { - return invokedType; - } - - public MethodDescriptor getSamMethodType() { - return samMethodType; - } - - public ParentedEntry getImplMethod() { - return implMethod; - } - - public MethodDescriptor getInstantiatedMethodType() { - return instantiatedMethodType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Lambda lambda = (Lambda) o; - return Objects.equals(invokedName, lambda.invokedName) && - Objects.equals(invokedType, lambda.invokedType) && - Objects.equals(samMethodType, lambda.samMethodType) && - Objects.equals(implMethod, lambda.implMethod) && - Objects.equals(instantiatedMethodType, lambda.instantiatedMethodType); - } - - @Override - public int hashCode() { - return Objects.hash(invokedName, invokedType, samMethodType, implMethod, instantiatedMethodType); - } - - @Override - public String toString() { - return "Lambda{" + - "invokedName='" + invokedName + '\'' + - ", invokedType=" + invokedType + - ", samMethodType=" + samMethodType + - ", implMethod=" + implMethod + - ", instantiatedMethodType=" + instantiatedMethodType + - '}'; - } -} +package cuchaz.enigma.translation.representation; + +import cuchaz.enigma.translation.Translatable; +import cuchaz.enigma.translation.Translator; +import cuchaz.enigma.translation.mapping.EntryMap; +import cuchaz.enigma.translation.mapping.EntryMapping; +import cuchaz.enigma.translation.mapping.EntryResolver; +import cuchaz.enigma.translation.mapping.ResolutionStrategy; +import cuchaz.enigma.translation.representation.entry.ClassEntry; +import cuchaz.enigma.translation.representation.entry.MethodEntry; +import cuchaz.enigma.translation.representation.entry.ParentedEntry; + +import java.util.Objects; + +public class Lambda implements Translatable { + private final String invokedName; + private final MethodDescriptor invokedType; + private final MethodDescriptor samMethodType; + private final ParentedEntry implMethod; + private final MethodDescriptor instantiatedMethodType; + + public Lambda(String invokedName, MethodDescriptor invokedType, MethodDescriptor samMethodType, ParentedEntry implMethod, MethodDescriptor instantiatedMethodType) { + this.invokedName = invokedName; + this.invokedType = invokedType; + this.samMethodType = samMethodType; + this.implMethod = implMethod; + this.instantiatedMethodType = instantiatedMethodType; + } + + @Override + public Lambda translate(Translator translator, EntryResolver resolver, EntryMap mappings) { + MethodEntry samMethod = new MethodEntry(getInterface(), invokedName, samMethodType); + EntryMapping samMethodMapping = resolveMapping(resolver, mappings, samMethod); + + return new Lambda( + samMethodMapping != null ? samMethodMapping.getTargetName() : invokedName, + invokedType.translate(translator, resolver, mappings), + samMethodType.translate(translator, resolver, mappings), + implMethod.translate(translator, resolver, mappings), + instantiatedMethodType.translate(translator, resolver, mappings) + ); + } + + private EntryMapping resolveMapping(EntryResolver resolver, EntryMap mappings, MethodEntry methodEntry) { + for (MethodEntry entry : resolver.resolveEntry(methodEntry, ResolutionStrategy.RESOLVE_ROOT)) { + EntryMapping mapping = mappings.get(entry); + if (mapping != null) { + return mapping; + } + } + return null; + } + + public ClassEntry getInterface() { + return invokedType.getReturnDesc().getTypeEntry(); + } + + public String getInvokedName() { + return invokedName; + } + + public MethodDescriptor getInvokedType() { + return invokedType; + } + + public MethodDescriptor getSamMethodType() { + return samMethodType; + } + + public ParentedEntry getImplMethod() { + return implMethod; + } + + public MethodDescriptor getInstantiatedMethodType() { + return instantiatedMethodType; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Lambda lambda = (Lambda) o; + return Objects.equals(invokedName, lambda.invokedName) && + Objects.equals(invokedType, lambda.invokedType) && + Objects.equals(samMethodType, lambda.samMethodType) && + Objects.equals(implMethod, lambda.implMethod) && + Objects.equals(instantiatedMethodType, lambda.instantiatedMethodType); + } + + @Override + public int hashCode() { + return Objects.hash(invokedName, invokedType, samMethodType, implMethod, instantiatedMethodType); + } + + @Override + public String toString() { + return "Lambda{" + + "invokedName='" + invokedName + '\'' + + ", invokedType=" + invokedType + + ", samMethodType=" + samMethodType + + ", implMethod=" + implMethod + + ", instantiatedMethodType=" + instantiatedMethodType + + '}'; + } +} diff --git a/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java similarity index 96% rename from src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/MethodDescriptor.java index 37a701484..03c8686a3 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.EntryResolver; import cuchaz.enigma.translation.mapping.EntryMap; import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.utils.Utils; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.function.Function; public class MethodDescriptor implements Translatable { @@ -97,7 +97,7 @@ public boolean equals(MethodDescriptor other) { @Override public int hashCode() { - return Utils.combineHashesOrdered(this.argumentDescs.hashCode(), this.returnDesc.hashCode()); + return Objects.hash(this.argumentDescs.hashCode(), this.returnDesc.hashCode()); } 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/Signature.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/TypeDescriptor.java rename to 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java rename to 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 similarity index 98% rename from src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java index d6171f111..7d4b2ba47 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 @@ package cuchaz.enigma.translation.representation.entry; -import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.translation.mapping.IllegalNameException; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/entry/DefEntry.java rename to 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 similarity index 97% rename from src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java index 72b03913c..40bff31da 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 @@ package cuchaz.enigma.translation.representation.entry; -import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.translation.mapping.IllegalNameException; import cuchaz.enigma.translation.Translatable; import cuchaz.enigma.translation.mapping.NameValidator; 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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java rename to 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 similarity index 96% rename from src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java index bef0edf44..0e478783f 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 cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.utils.Utils; import javax.annotation.Nullable; +import java.util.Objects; public class FieldEntry extends ParentedEntry implements Comparable { protected final TypeDescriptor desc; @@ -67,7 +67,7 @@ protected FieldEntry translate(Translator translator, @Nullable EntryMapping map @Override public int hashCode() { - return Utils.combineHashesOrdered(this.parent, this.name, this.desc); + return Objects.hash(this.parent, this.name, this.desc); } @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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java rename to 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 similarity index 96% rename from src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java index 3ccb1fa1a..3f98f0303 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 @@ import com.google.common.base.Preconditions; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.utils.Utils; import javax.annotation.Nullable; +import java.util.Objects; /** * TypeDescriptor... @@ -64,7 +64,7 @@ public LocalVariableEntry withParent(MethodEntry parent) { @Override public int hashCode() { - return Utils.combineHashesOrdered(this.parent, this.index); + return Objects.hash(this.parent, this.index); } @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 similarity index 100% rename from src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java rename to 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 similarity index 96% rename from src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java index e1ffad37e..086a5c1fc 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 cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.representation.MethodDescriptor; -import cuchaz.enigma.utils.Utils; import javax.annotation.Nullable; +import java.util.Objects; public class MethodEntry extends ParentedEntry implements Comparable { @@ -72,7 +72,7 @@ public MethodEntry withParent(ClassEntry parent) { @Override public int hashCode() { - return Utils.combineHashesOrdered(this.parent, this.name, this.descriptor); + return Objects.hash(this.parent, this.name, this.descriptor); } @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 similarity index 98% rename from src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java rename to enigma/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java index cbc5faf5b..95be22cec 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 @@ package cuchaz.enigma.translation.representation.entry; import com.google.common.base.Preconditions; -import cuchaz.enigma.translation.Translatable; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMap; import 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 similarity index 92% rename from src/main/java/cuchaz/enigma/utils/I18n.java rename to enigma/src/main/java/cuchaz/enigma/utils/I18n.java index f91c916a1..e18532b66 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.ResourceInfo; import com.google.gson.Gson; -import cuchaz.enigma.config.Config; - public class I18n { public static final String DEFAULT_LANGUAGE = "en_us"; private static final Gson GSON = new Gson(); @@ -26,8 +24,8 @@ public class I18n { private static Map languageNames = Maps.newHashMap(); static { - translations = load(Config.getInstance().language); defaultTranslations = load(DEFAULT_LANGUAGE); + translations = defaultTranslations; } @SuppressWarnings("unchecked") @@ -61,12 +59,7 @@ public static String getLanguageName(String language) { } public static void setLanguage(String language) { - Config.getInstance().language = language; - try { - Config.getInstance().saveConfig(); - } catch (IOException e) { - e.printStackTrace(); - } + translations = load(language); } public static ArrayList getAvailableLanguages() { diff --git a/src/main/java/cuchaz/enigma/utils/Pair.java b/enigma/src/main/java/cuchaz/enigma/utils/Pair.java similarity index 100% rename from src/main/java/cuchaz/enigma/utils/Pair.java rename to 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 000000000..26640993c --- /dev/null +++ b/enigma/src/main/java/cuchaz/enigma/utils/Utils.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2015 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public + * License v3.0 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl.html + *

+ * Contributors: + * Jeff Martin - initial API and implementation + ******************************************************************************/ + +package cuchaz.enigma.utils; + +import com.google.common.io.CharStreams; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +public class Utils { + public static String readStreamToString(InputStream in) throws IOException { + return CharStreams.toString(new InputStreamReader(in, StandardCharsets.UTF_8)); + } + + public static String readResourceToString(String path) throws IOException { + InputStream in = Utils.class.getResourceAsStream(path); + if (in == null) { + throw new IllegalArgumentException("Resource not found! " + path); + } + return readStreamToString(in); + } + + public static void delete(Path path) throws IOException { + if (Files.exists(path)) { + for (Path p : Files.walk(path).sorted(Comparator.reverseOrder()).collect(Collectors.toList())) { + Files.delete(p); + } + } + } + + public static byte[] zipSha1(Path path) throws IOException { + MessageDigest digest; + try { + digest = MessageDigest.getInstance("SHA-1"); + } catch (NoSuchAlgorithmException e) { + // Algorithm guaranteed to be supported + throw new RuntimeException(e); + } + try (ZipFile zip = new ZipFile(path.toFile())) { + List entries = Collections.list(zip.entries()); + // only compare classes (some implementations may not generate directory entries) + entries.removeIf(entry -> !entry.getName().toLowerCase(Locale.ROOT).endsWith(".class")); + // different implementations may add zip entries in a different order + entries.sort(Comparator.comparing(ZipEntry::getName)); + byte[] buffer = new byte[8192]; + for (ZipEntry entry : entries) { + digest.update(entry.getName().getBytes(StandardCharsets.UTF_8)); + try (InputStream in = zip.getInputStream(entry)) { + int n; + while ((n = in.read(buffer)) != -1) { + digest.update(buffer, 0, n); + } + } + } + } + return digest.digest(); + } + + public static boolean isBlank(String input) { + if (input == null) { + return true; + } + for (int i = 0; i < input.length(); i++) { + if (!Character.isWhitespace(input.charAt(i))) { + return false; + } + } + return true; + } +} 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 similarity index 100% rename from src/main/resources/META-INF/services/cuchaz.enigma.api.EnigmaPlugin rename to 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 similarity index 100% rename from src/main/resources/lang/en_us.json rename to 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 similarity index 100% rename from src/main/resources/lang/fr_fr.json rename to 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 similarity index 100% rename from src/main/resources/lang/zh_cn.json rename to enigma/src/main/resources/lang/zh_cn.json diff --git a/src/main/resources/profile.json b/enigma/src/main/resources/profile.json similarity index 100% rename from src/main/resources/profile.json rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java rename to 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 similarity index 86% rename from src/test/java/cuchaz/enigma/TestDeobfed.java rename to enigma/src/test/java/cuchaz/enigma/TestDeobfed.java index d64a745bc..494d959e9 100644 --- a/src/test/java/cuchaz/enigma/TestDeobfed.java +++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java @@ -13,13 +13,14 @@ import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.network.EnigmaServer; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.Decompilers; import cuchaz.enigma.source.SourceSettings; import org.junit.BeforeClass; import org.junit.Test; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import static cuchaz.enigma.TestEntryFactory.newClass; @@ -27,7 +28,6 @@ import static org.hamcrest.Matchers.containsInAnyOrder; public class TestDeobfed { - private static Enigma enigma; private static ClassCache classCache; private static JarIndex index; @@ -36,7 +36,13 @@ public class TestDeobfed { public static void beforeClass() throws Exception { enigma = Enigma.create(); - classCache = ClassCache.of(Paths.get("build/test-deobf/translation.jar")); + Path obf = Paths.get("build/test-obf/translation.jar"); + Path deobf = Paths.get("build/test-deobf/translation.jar"); + Files.createDirectories(deobf.getParent()); + EnigmaProject project = enigma.openJar(obf, ProgressListener.none()); + project.exportRemappedJar(ProgressListener.none()).write(deobf, ProgressListener.none()); + + classCache = ClassCache.of(deobf); index = classCache.index(ProgressListener.none()); } @@ -71,7 +77,7 @@ public void obfEntries() { @Test public void decompile() { - EnigmaProject project = new EnigmaProject(enigma, classCache, index, new byte[EnigmaServer.CHECKSUM_SIZE]); + EnigmaProject project = new EnigmaProject(enigma, classCache, index, new byte[20]); Decompiler decompiler = Decompilers.PROCYON.create(project.getClassCache(), new SourceSettings(false, false)); decompiler.getSource("a"); diff --git a/src/test/java/cuchaz/enigma/TestDeobfuscator.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java similarity index 100% rename from src/test/java/cuchaz/enigma/TestDeobfuscator.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestEntryFactory.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestInnerClasses.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestMethodDescriptor.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestTokensConstructors.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestTranslator.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/TestTypeDescriptor.java rename to 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 similarity index 98% rename from src/test/java/cuchaz/enigma/TokenChecker.java rename to enigma/src/test/java/cuchaz/enigma/TokenChecker.java index 48d0c830d..96fc6dab0 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.EntryReference; import cuchaz.enigma.source.SourceIndex; import cuchaz.enigma.source.*; -import cuchaz.enigma.analysis.Token; +import cuchaz.enigma.source.Token; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.IOException; diff --git a/src/test/java/cuchaz/enigma/inputs/Keep.java b/enigma/src/test/java/cuchaz/enigma/inputs/Keep.java similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/Keep.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/constructors/BaseClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/constructors/Caller.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/constructors/DefaultConstructable.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/constructors/SubClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/constructors/SubSubClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/inheritanceTree/BaseClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassA.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubclassB.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/inheritanceTree/SubsubclassAA.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/innerClasses/D_Simple.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/loneClass/LoneClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/A_Basic.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/B_BaseClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/C_SubClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/D_AnonymousTesting.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/E_Bridges.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/F_ObjectMethods.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/G_OuterClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/H_NamelessClass.java rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/inputs/translation/I_Generics.java rename to 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 similarity index 73% rename from src/test/java/cuchaz/enigma/mapping/TestComments.java rename to enigma/src/test/java/cuchaz/enigma/translation/mapping/TestComments.java index b3a60056e..e83194304 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 @@ -package cuchaz.enigma.mapping; +package cuchaz.enigma.translation.mapping; import java.io.IOException; import java.net.URISyntaxException; @@ -6,12 +6,11 @@ import java.nio.file.Paths; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.serde.EnigmaMappingsReader; -import cuchaz.enigma.translation.mapping.serde.TinyV2Writer; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingParseException; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; +import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer; import cuchaz.enigma.translation.mapping.tree.EntryTree; import org.junit.Test; diff --git a/src/test/java/cuchaz/enigma/mapping/TestTinyV2InnerClasses.java b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java similarity index 83% rename from src/test/java/cuchaz/enigma/mapping/TestTinyV2InnerClasses.java rename to enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java index 7cfdacaa3..65941e54c 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 @@ * Jeff Martin - initial API and implementation ******************************************************************************/ -package cuchaz.enigma.mapping; +package cuchaz.enigma.translation.mapping; import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.translation.mapping.serde.EnigmaMappingsReader; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import org.junit.Test; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; import java.nio.file.Path; import java.nio.file.Paths; -import static cuchaz.enigma.TestEntryFactory.newClass; - public final class TestTinyV2InnerClasses { private Path jar; 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 similarity index 65% rename from src/test/java/cuchaz/enigma/mapping/TestV2Main.java rename to enigma/src/test/java/cuchaz/enigma/translation/mapping/TestV2Main.java index 021a90cb3..6e4d7b995 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 @@ -package cuchaz.enigma.mapping; +package cuchaz.enigma.translation.mapping; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.serde.EnigmaMappingsReader; -import cuchaz.enigma.translation.mapping.serde.TinyV2Writer; +import cuchaz.enigma.translation.mapping.serde.MappingFileNameFormat; +import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; +import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; +import cuchaz.enigma.translation.mapping.serde.tinyv2.TinyV2Writer; import cuchaz.enigma.translation.mapping.tree.EntryTree; import java.nio.file.Path; diff --git a/src/test/resources/comments/test.mapping b/enigma/src/test/resources/comments/test.mapping similarity index 100% rename from src/test/resources/comments/test.mapping rename to enigma/src/test/resources/comments/test.mapping diff --git a/src/test/resources/proguard-build.conf b/enigma/src/test/resources/proguard-build.conf similarity index 65% rename from src/test/resources/proguard-build.conf rename to enigma/src/test/resources/proguard-build.conf index ba3575ae0..691d8a294 100644 --- a/src/test/resources/proguard-build.conf +++ b/enigma/src/test/resources/proguard-build.conf @@ -2,5 +2,5 @@ -dontobfuscate -dontwarn -keep class cuchaz.enigma.Main { static void main(java.lang.String[]); } --keep class cuchaz.enigma.CommandMain { static void main(java.lang.String[]); } +-keep class cuchaz.enigma.command.Main { static void main(java.lang.String[]); } -keep class de.sciss.syntaxpane.** { *; } diff --git a/src/test/resources/proguard-test.conf b/enigma/src/test/resources/proguard-test.conf similarity index 100% rename from src/test/resources/proguard-test.conf rename to enigma/src/test/resources/proguard-test.conf diff --git a/src/test/resources/tinyV2InnerClasses/c.mapping b/enigma/src/test/resources/tinyV2InnerClasses/c.mapping similarity index 100% rename from src/test/resources/tinyV2InnerClasses/c.mapping rename to 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 similarity index 100% rename from src/test/resources/tinyV2InnerClasses/cuchaz/enigma/Dad.mapping rename to 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 similarity index 100% rename from src/test/java/cuchaz/enigma/resources/translation.mappings rename to enigma/src/test/resources/translation.mappings diff --git a/settings.gradle b/settings.gradle index 8fa1712ac..875402767 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,4 @@ -rootProject.name = 'enigma' \ No newline at end of file +include 'enigma' +include 'enigma-swing' +include 'enigma-server' +include '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 577315ff4..000000000 --- a/src/main/java/cuchaz/enigma/Constants.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ - -package cuchaz.enigma; - -public class Constants { - public static final String NAME = "Enigma"; - public static final String VERSION = "@VERSION@/Fabric"; - public static final String URL = "https://fabricmc.net"; - public static final int MiB = 1024 * 1024; // 1 mebibyte - public static final int KiB = 1024; // 1 kebibyte -} 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 fc7afbc0f..000000000 --- a/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java +++ /dev/null @@ -1,148 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.MappingTranslator; -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.VoidEntryResolver; -import cuchaz.enigma.translation.mapping.serde.*; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; -import cuchaz.enigma.translation.mapping.tree.HashEntryTree; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.translation.representation.entry.FieldEntry; -import cuchaz.enigma.translation.representation.entry.MethodEntry; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.Set; - -public final class MappingCommandsUtil { - private MappingCommandsUtil() {} - - public static EntryTree invert(EntryTree mappings) { - Translator translator = new MappingTranslator(mappings, VoidEntryResolver.INSTANCE); - EntryTree result = new HashEntryTree<>(); - - for (EntryTreeNode node : mappings) { - Entry leftEntry = node.getEntry(); - EntryMapping leftMapping = node.getValue(); - - if (!(leftEntry instanceof ClassEntry || leftEntry instanceof MethodEntry || leftEntry instanceof FieldEntry)) { - result.insert(translator.translate(leftEntry), leftMapping); - continue; - } - - Entry rightEntry = translator.translate(leftEntry); - - result.insert(rightEntry, leftMapping == null ? null : new EntryMapping(leftEntry.getName())); // TODO: leftMapping.withName once javadoc PR is merged - } - - return result; - } - - public static EntryTree compose(EntryTree left, EntryTree right, boolean keepLeftOnly, boolean keepRightOnly) { - Translator leftTranslator = new MappingTranslator(left, VoidEntryResolver.INSTANCE); - EntryTree result = new HashEntryTree<>(); - Set> addedMappings = new HashSet<>(); - - for (EntryTreeNode node : left) { - Entry leftEntry = node.getEntry(); - EntryMapping leftMapping = node.getValue(); - - Entry rightEntry = leftTranslator.translate(leftEntry); - - EntryMapping rightMapping = right.get(rightEntry); - if (rightMapping != null) { - result.insert(leftEntry, rightMapping); - addedMappings.add(rightEntry); - } else if (keepLeftOnly) { - result.insert(leftEntry, leftMapping); - } - } - - if (keepRightOnly) { - Translator leftInverseTranslator = new MappingTranslator(invert(left), VoidEntryResolver.INSTANCE); - for (EntryTreeNode node : right) { - Entry rightEntry = node.getEntry(); - EntryMapping rightMapping = node.getValue(); - - if (!addedMappings.contains(rightEntry)) { - result.insert(leftInverseTranslator.translate(rightEntry), rightMapping); - } - } - } - return result; - } - - public static EntryTree read(String type, Path path, MappingSaveParameters saveParameters) throws MappingParseException, IOException { - if (type.equals("enigma")) { - return (Files.isDirectory(path) ? EnigmaMappingsReader.DIRECTORY : EnigmaMappingsReader.ZIP).read(path, ProgressListener.none(), saveParameters); - } - - if (type.equals("tiny")) { - return TinyMappingsReader.INSTANCE.read(path, ProgressListener.none(), saveParameters); - } - - MappingFormat format = null; - try { - format = MappingFormat.valueOf(type.toUpperCase()); - } catch (IllegalArgumentException ignored) { - if (type.equals("tinyv2")) { - format = MappingFormat.TINY_V2; - } - } - - if (format != null) { - return format.getReader().read(path, ProgressListener.none(), saveParameters); - } - - throw new IllegalArgumentException("no reader for " + type); - } - - public static void write(EntryTree mappings, String type, Path path, MappingSaveParameters saveParameters) { - if (type.equals("enigma")) { - EnigmaMappingsWriter.DIRECTORY.write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - if (type.startsWith("tinyv2:") || type.startsWith("tiny_v2:")) { - String[] split = type.split(":"); - - if (split.length != 3) { - throw new IllegalArgumentException("specify column names as 'tinyv2:from_namespace:to_namespace'"); - } - - new TinyV2Writer(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - if (type.startsWith("tiny:")) { - String[] split = type.split(":"); - - if (split.length != 3) { - throw new IllegalArgumentException("specify column names as 'tiny:from_column:to_column'"); - } - - new TinyMappingsWriter(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - MappingFormat format = null; - try { - format = MappingFormat.valueOf(type.toUpperCase()); - } catch (IllegalArgumentException ignored) {} - - if (format != null) { - format.getWriter().write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - throw new IllegalArgumentException("no writer for " + type); - } -} 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 95cd44949..000000000 --- a/src/main/java/cuchaz/enigma/throwables/MappingConflict.java +++ /dev/null @@ -1,7 +0,0 @@ -package cuchaz.enigma.throwables; - -public class MappingConflict extends Exception { - public MappingConflict(String clazz, String name, String nameExisting) { - super(String.format("Conflicting mappings found for %s. The mapping file is %s and the second is %s", clazz, name, nameExisting)); - } -} 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 c12e9134d..000000000 --- a/src/main/java/cuchaz/enigma/utils/LFPrintWriter.java +++ /dev/null @@ -1,16 +0,0 @@ -package cuchaz.enigma.utils; - -import java.io.PrintWriter; -import java.io.Writer; - -public class LFPrintWriter extends PrintWriter { - public LFPrintWriter(Writer out) { - super(out); - } - - @Override - public void println() { - // https://stackoverflow.com/a/14749004 - write('\n'); - } -} 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 b45b00d1c..000000000 --- a/src/main/java/cuchaz/enigma/utils/Utils.java +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ - -package cuchaz.enigma.utils; - -import com.google.common.io.CharStreams; -import org.objectweb.asm.Opcodes; - -import javax.swing.*; -import javax.swing.text.BadLocationException; -import javax.swing.text.JTextComponent; -import java.awt.*; -import java.awt.event.MouseEvent; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.*; -import java.util.List; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -public class Utils { - - public static final int ASM_VERSION = Opcodes.ASM8; - - public static int combineHashesOrdered(Object... objs) { - final int prime = 67; - int result = 1; - for (Object obj : objs) { - result *= prime; - if (obj != null) { - result += obj.hashCode(); - } - } - return result; - } - - public static int combineHashesOrdered(List objs) { - final int prime = 67; - int result = 1; - for (Object obj : objs) { - result *= prime; - if (obj != null) { - result += obj.hashCode(); - } - } - return result; - } - - public static String readStreamToString(InputStream in) throws IOException { - return CharStreams.toString(new InputStreamReader(in, "UTF-8")); - } - - public static String readResourceToString(String path) throws IOException { - InputStream in = Utils.class.getResourceAsStream(path); - if (in == null) { - throw new IllegalArgumentException("Resource not found! " + path); - } - return readStreamToString(in); - } - - public static void openUrl(String url) { - if (Desktop.isDesktopSupported()) { - Desktop desktop = Desktop.getDesktop(); - try { - desktop.browse(new URI(url)); - } catch (IOException ex) { - throw new Error(ex); - } catch (URISyntaxException ex) { - throw new IllegalArgumentException(ex); - } - } - } - - public static JLabel unboldLabel(JLabel label) { - Font font = label.getFont(); - label.setFont(font.deriveFont(font.getStyle() & ~Font.BOLD)); - return label; - } - - public static void showToolTipNow(JComponent component) { - // HACKHACK: trick the tooltip manager into showing the tooltip right now - ToolTipManager manager = ToolTipManager.sharedInstance(); - int oldDelay = manager.getInitialDelay(); - manager.setInitialDelay(0); - manager.mouseMoved(new MouseEvent(component, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, 0, 0, 0, false)); - manager.setInitialDelay(oldDelay); - } - - public static Rectangle safeModelToView(JTextComponent component, int modelPos) { - if (modelPos < 0) { - modelPos = 0; - } else if (modelPos >= component.getText().length()) { - modelPos = component.getText().length(); - } - try { - return component.modelToView(modelPos); - } catch (BadLocationException e) { - throw new RuntimeException(e); - } - } - - public static boolean getSystemPropertyAsBoolean(String property, boolean defValue) { - String value = System.getProperty(property); - return value == null ? defValue : Boolean.parseBoolean(value); - } - - public static void delete(Path path) throws IOException { - if (Files.exists(path)) { - for (Path p : Files.walk(path).sorted(Comparator.reverseOrder()).collect(Collectors.toList())) { - Files.delete(p); - } - } - } - - public static byte[] zipSha1(Path path) throws IOException { - MessageDigest digest; - try { - digest = MessageDigest.getInstance("SHA-1"); - } catch (NoSuchAlgorithmException e) { - // Algorithm guaranteed to be supported - throw new RuntimeException(e); - } - try (ZipFile zip = new ZipFile(path.toFile())) { - List entries = Collections.list(zip.entries()); - // only compare classes (some implementations may not generate directory entries) - entries.removeIf(entry -> !entry.getName().toLowerCase(Locale.ROOT).endsWith(".class")); - // different implementations may add zip entries in a different order - entries.sort(Comparator.comparing(ZipEntry::getName)); - byte[] buffer = new byte[8192]; - for (ZipEntry entry : entries) { - digest.update(entry.getName().getBytes(StandardCharsets.UTF_8)); - try (InputStream in = zip.getInputStream(entry)) { - int n; - while ((n = in.read(buffer)) != -1) { - digest.update(buffer, 0, n); - } - } - } - } - return digest.digest(); - } - - public static String caplisiseCamelCase(String input){ - StringJoiner stringJoiner = new StringJoiner(" "); - for (String word : input.toLowerCase(Locale.ROOT).split("_")) { - stringJoiner.add(word.substring(0, 1).toUpperCase(Locale.ROOT) + word.substring(1)); - } - return stringJoiner.toString(); - } - - public static boolean isBlank(String input) { - if (input == null) { - return true; - } - for (int i = 0; i < input.length(); i++) { - if (!Character.isWhitespace(input.charAt(i))) { - return false; - } - } - return true; - } -} diff --git a/src/test/java/cuchaz/enigma/TestSourceIndex.java b/src/test/java/cuchaz/enigma/TestSourceIndex.java deleted file mode 100644 index b20160898..000000000 --- a/src/test/java/cuchaz/enigma/TestSourceIndex.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - * - * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ - -package cuchaz.enigma; - -import com.google.common.collect.Sets; -import cuchaz.enigma.analysis.ClassCache; -import cuchaz.enigma.source.*; -import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import org.junit.Test; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Set; - -public class TestSourceIndex { - @Test - public void indexEverything() - throws Exception { - // Figure out where Minecraft is... - final String mcDir = System.getProperty("enigma.test.minecraftdir"); - Path mcJar = null; - if (mcDir == null) { - String osname = System.getProperty("os.name").toLowerCase(); - if (osname.contains("nix") || osname.contains("nux") || osname.contains("solaris")) { - mcJar = Paths.get(System.getProperty("user.home"), ".minecraft/versions/1.8.3/1.8.3.jar"); - } else if (osname.contains("mac") || osname.contains("darwin")) { - mcJar = Paths.get(System.getProperty("user.home"), "Library/Application Support/minecraft/versions/1.8.3/1.8.3.jar"); - } else if (osname.contains("win")) { - mcJar = Paths.get(System.getenv("AppData"), ".minecraft/versions/1.8.3/1.8.3.jar"); - } - } else { - mcJar = Paths.get(mcDir, "versions/1.8.3/1.8.3.jar"); - } - - if (mcJar == null) { - throw new NullPointerException("Couldn't find jar"); - } - - Enigma enigma = Enigma.create(); - EnigmaProject project = enigma.openJar(mcJar, ProgressListener.none()); - - ClassCache classCache = project.getClassCache(); - JarIndex index = project.getJarIndex(); - - Decompiler decompiler = Decompilers.PROCYON.create(classCache, new SourceSettings(false, false)); - - // get all classes that aren't inner classes - Set classEntries = Sets.newHashSet(); - for (ClassEntry obfClassEntry : index.getEntryIndex().getClasses()) { - if (!obfClassEntry.isInnerClass()) { - classEntries.add(obfClassEntry); - } - } - - for (ClassEntry obfClassEntry : classEntries) { - try { - Source source = decompiler.getSource(obfClassEntry.getName()); - source.index(); - } catch (Throwable t) { - throw new Error("Unable to index " + obfClassEntry, t); - } - } - } -}