Full Code of skylot/jadx for AI

master 15ea9a56b996 cached
2269 files
7.1 MB
2.0M tokens
17124 symbols
1 requests
Download .txt
Showing preview only (8,017K chars total). Download the full file or copy to clipboard to get everything.
Repository: skylot/jadx
Branch: master
Commit: 15ea9a56b996
Files: 2269
Total size: 7.1 MB

Directory structure:
gitextract_b8off970/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   ├── decompilation-issue.yml
│   │   ├── feature-request.yml
│   │   └── jadx-gui-issue.yml
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── build-artifacts.yml
│       ├── build-test.yml
│       └── release.yml
├── .gitignore
├── .gitlab-ci.yml
├── .jitpack.yml
├── .typos.toml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── SECURITY.md
├── build.gradle.kts
├── buildSrc/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── kotlin/
│               ├── jadx-java.gradle.kts
│               ├── jadx-kotlin.gradle.kts
│               ├── jadx-library.gradle.kts
│               └── jadx-rewrite.gradle.kts
├── config/
│   ├── checkstyle/
│   │   └── checkstyle.xml
│   ├── code-formatter/
│   │   ├── eclipse.importorder
│   │   └── eclipse.xml
│   └── jflex/
│       ├── .gitignore
│       ├── README.md
│       ├── SmaliTokenMaker.flex
│       └── skeleton.default
├── contrib/
│   └── jadx-gui.desktop
├── gradle/
│   └── wrapper/
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── jadx-cli/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jadx/
│       │   │       └── cli/
│       │   │           ├── JCommanderWrapper.java
│       │   │           ├── JadxAppCommon.java
│       │   │           ├── JadxCLI.java
│       │   │           ├── JadxCLIArgs.java
│       │   │           ├── JadxCLICommands.java
│       │   │           ├── LogHelper.java
│       │   │           ├── SingleClassMode.java
│       │   │           ├── clst/
│       │   │           │   └── ConvertToClsSet.java
│       │   │           ├── commands/
│       │   │           │   ├── CommandPlugins.java
│       │   │           │   └── ICommand.java
│       │   │           ├── config/
│       │   │           │   ├── IJadxConfig.java
│       │   │           │   ├── JadxConfigAdapter.java
│       │   │           │   └── JadxConfigExclude.java
│       │   │           ├── plugins/
│       │   │           │   └── JadxFilesGetter.java
│       │   │           └── tools/
│       │   │               └── ConvertArscFile.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       ├── cli/
│           │       │   ├── BaseCliIntegrationTest.java
│           │       │   ├── JadxCLIArgsTest.java
│           │       │   ├── RenameConverterTest.java
│           │       │   ├── TestExport.java
│           │       │   └── TestInput.java
│           │       └── plugins/
│           │           └── tools/
│           │               └── utils/
│           │                   └── PluginUtilsTest.java
│           └── resources/
│               └── samples/
│                   ├── HelloWorld.smali
│                   ├── hello.dex
│                   ├── resources-only.apk
│                   ├── small.apk
│                   └── test-lib.aar
├── jadx-commons/
│   ├── jadx-app-commons/
│   │   ├── README.md
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── jadx/
│   │                   └── commons/
│   │                       └── app/
│   │                           ├── JadxCommonEnv.java
│   │                           ├── JadxCommonFiles.java
│   │                           ├── JadxSystemInfo.java
│   │                           └── JadxTempFiles.java
│   └── jadx-zip/
│       ├── README.md
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               └── java/
│                   └── jadx/
│                       └── zip/
│                           ├── IZipEntry.java
│                           ├── IZipParser.java
│                           ├── ZipContent.java
│                           ├── ZipReader.java
│                           ├── ZipReaderFlags.java
│                           ├── ZipReaderOptions.java
│                           ├── fallback/
│                           │   ├── FallbackZipEntry.java
│                           │   └── FallbackZipParser.java
│                           ├── io/
│                           │   ├── ByteBufferBackedInputStream.java
│                           │   └── LimitedInputStream.java
│                           ├── parser/
│                           │   ├── JadxZipEntry.java
│                           │   ├── JadxZipParser.java
│                           │   └── ZipDeflate.java
│                           └── security/
│                               ├── DisabledZipSecurity.java
│                               ├── IJadxZipSecurity.java
│                               └── JadxZipSecurity.java
├── jadx-core/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jadx/
│       │   │       ├── api/
│       │   │       │   ├── CommentsLevel.java
│       │   │       │   ├── DecompilationMode.java
│       │   │       │   ├── ICodeCache.java
│       │   │       │   ├── ICodeInfo.java
│       │   │       │   ├── ICodeWriter.java
│       │   │       │   ├── IDecompileScheduler.java
│       │   │       │   ├── JadxArgs.java
│       │   │       │   ├── JadxArgsValidator.java
│       │   │       │   ├── JadxDecompiler.java
│       │   │       │   ├── JavaClass.java
│       │   │       │   ├── JavaField.java
│       │   │       │   ├── JavaMethod.java
│       │   │       │   ├── JavaNode.java
│       │   │       │   ├── JavaPackage.java
│       │   │       │   ├── JavaVariable.java
│       │   │       │   ├── ResourceFile.java
│       │   │       │   ├── ResourceFileContainer.java
│       │   │       │   ├── ResourceFileContent.java
│       │   │       │   ├── ResourceType.java
│       │   │       │   ├── ResourcesLoader.java
│       │   │       │   ├── args/
│       │   │       │   │   ├── GeneratedRenamesMappingFileMode.java
│       │   │       │   │   ├── IntegerFormat.java
│       │   │       │   │   ├── ResourceNameSource.java
│       │   │       │   │   ├── UseSourceNameAsClassNameAlias.java
│       │   │       │   │   └── UserRenamesMappingsMode.java
│       │   │       │   ├── data/
│       │   │       │   │   ├── CodeRefType.java
│       │   │       │   │   ├── CommentStyle.java
│       │   │       │   │   ├── ICodeComment.java
│       │   │       │   │   ├── ICodeData.java
│       │   │       │   │   ├── ICodeRename.java
│       │   │       │   │   ├── IJavaCodeRef.java
│       │   │       │   │   ├── IJavaNodeRef.java
│       │   │       │   │   ├── IRenameNode.java
│       │   │       │   │   └── impl/
│       │   │       │   │       ├── JadxCodeComment.java
│       │   │       │   │       ├── JadxCodeData.java
│       │   │       │   │       ├── JadxCodeRef.java
│       │   │       │   │       ├── JadxCodeRename.java
│       │   │       │   │       └── JadxNodeRef.java
│       │   │       │   ├── deobf/
│       │   │       │   │   ├── IAliasProvider.java
│       │   │       │   │   ├── IDeobfCondition.java
│       │   │       │   │   ├── IRenameCondition.java
│       │   │       │   │   └── impl/
│       │   │       │   │       ├── AlwaysRename.java
│       │   │       │   │       ├── AnyRenameCondition.java
│       │   │       │   │       └── CombineDeobfConditions.java
│       │   │       │   ├── gui/
│       │   │       │   │   └── tree/
│       │   │       │   │       └── ITreeNode.java
│       │   │       │   ├── impl/
│       │   │       │   │   ├── AnnotatedCodeInfo.java
│       │   │       │   │   ├── AnnotatedCodeWriter.java
│       │   │       │   │   ├── DelegateCodeCache.java
│       │   │       │   │   ├── InMemoryCodeCache.java
│       │   │       │   │   ├── NoOpCodeCache.java
│       │   │       │   │   ├── SimpleCodeInfo.java
│       │   │       │   │   ├── SimpleCodeWriter.java
│       │   │       │   │   └── passes/
│       │   │       │   │       ├── DecompilePassWrapper.java
│       │   │       │   │       ├── IPassWrapperVisitor.java
│       │   │       │   │       └── PreparePassWrapper.java
│       │   │       │   ├── metadata/
│       │   │       │   │   ├── ICodeAnnotation.java
│       │   │       │   │   ├── ICodeMetadata.java
│       │   │       │   │   ├── ICodeNodeRef.java
│       │   │       │   │   ├── annotations/
│       │   │       │   │   │   ├── InsnCodeOffset.java
│       │   │       │   │   │   ├── NodeDeclareRef.java
│       │   │       │   │   │   ├── NodeEnd.java
│       │   │       │   │   │   ├── VarNode.java
│       │   │       │   │   │   └── VarRef.java
│       │   │       │   │   └── impl/
│       │   │       │   │       └── CodeMetadataStorage.java
│       │   │       │   ├── plugins/
│       │   │       │   │   ├── CustomResourcesLoader.java
│       │   │       │   │   ├── JadxPlugin.java
│       │   │       │   │   ├── JadxPluginContext.java
│       │   │       │   │   ├── JadxPluginInfo.java
│       │   │       │   │   ├── JadxPluginInfoBuilder.java
│       │   │       │   │   ├── data/
│       │   │       │   │   │   ├── IJadxFiles.java
│       │   │       │   │   │   ├── IJadxPlugins.java
│       │   │       │   │   │   └── JadxPluginRuntimeData.java
│       │   │       │   │   ├── events/
│       │   │       │   │   │   ├── IJadxEvent.java
│       │   │       │   │   │   ├── IJadxEvents.java
│       │   │       │   │   │   ├── JadxEventType.java
│       │   │       │   │   │   ├── JadxEvents.java
│       │   │       │   │   │   └── types/
│       │   │       │   │   │       ├── NodeRenamedByUser.java
│       │   │       │   │   │       ├── ReloadProject.java
│       │   │       │   │   │       └── ReloadSettingsWindow.java
│       │   │       │   │   ├── gui/
│       │   │       │   │   │   ├── ISettingsGroup.java
│       │   │       │   │   │   ├── JadxGuiContext.java
│       │   │       │   │   │   └── JadxGuiSettings.java
│       │   │       │   │   ├── loader/
│       │   │       │   │   │   ├── JadxBasePluginLoader.java
│       │   │       │   │   │   └── JadxPluginLoader.java
│       │   │       │   │   ├── options/
│       │   │       │   │   │   ├── JadxPluginOptions.java
│       │   │       │   │   │   ├── OptionDescription.java
│       │   │       │   │   │   ├── OptionFlag.java
│       │   │       │   │   │   ├── OptionType.java
│       │   │       │   │   │   └── impl/
│       │   │       │   │   │       ├── BaseOptionsParser.java
│       │   │       │   │   │       ├── BasePluginOptionsBuilder.java
│       │   │       │   │   │       ├── JadxOptionDescription.java
│       │   │       │   │   │       └── OptionBuilder.java
│       │   │       │   │   ├── pass/
│       │   │       │   │   │   ├── JadxPass.java
│       │   │       │   │   │   ├── JadxPassInfo.java
│       │   │       │   │   │   ├── impl/
│       │   │       │   │   │   │   ├── OrderedJadxPassInfo.java
│       │   │       │   │   │   │   ├── SimpleAfterLoadPass.java
│       │   │       │   │   │   │   └── SimpleJadxPassInfo.java
│       │   │       │   │   │   └── types/
│       │   │       │   │   │       ├── JadxAfterLoadPass.java
│       │   │       │   │   │       ├── JadxDecompilePass.java
│       │   │       │   │   │       ├── JadxPassType.java
│       │   │       │   │   │       └── JadxPreparePass.java
│       │   │       │   │   ├── resources/
│       │   │       │   │   │   ├── IResContainerFactory.java
│       │   │       │   │   │   ├── IResTableParserProvider.java
│       │   │       │   │   │   └── IResourcesLoader.java
│       │   │       │   │   └── utils/
│       │   │       │   │       ├── CommonFileUtils.java
│       │   │       │   │       ├── Utils.java
│       │   │       │   │       └── ZipSecurity.java
│       │   │       │   ├── resources/
│       │   │       │   │   └── ResourceContentType.java
│       │   │       │   ├── security/
│       │   │       │   │   ├── IJadxSecurity.java
│       │   │       │   │   ├── JadxSecurityFlag.java
│       │   │       │   │   └── impl/
│       │   │       │   │       └── JadxSecurity.java
│       │   │       │   ├── usage/
│       │   │       │   │   ├── IUsageInfoCache.java
│       │   │       │   │   ├── IUsageInfoData.java
│       │   │       │   │   ├── IUsageInfoVisitor.java
│       │   │       │   │   └── impl/
│       │   │       │   │       ├── EmptyUsageInfoCache.java
│       │   │       │   │       └── InMemoryUsageInfoCache.java
│       │   │       │   └── utils/
│       │   │       │       ├── CodeUtils.java
│       │   │       │       └── tasks/
│       │   │       │           └── ITaskExecutor.java
│       │   │       └── core/
│       │   │           ├── Consts.java
│       │   │           ├── Jadx.java
│       │   │           ├── ProcessClass.java
│       │   │           ├── clsp/
│       │   │           │   ├── ClsSet.java
│       │   │           │   ├── ClspClass.java
│       │   │           │   ├── ClspClassSource.java
│       │   │           │   ├── ClspGraph.java
│       │   │           │   ├── ClspMethod.java
│       │   │           │   └── SimpleMethodDetails.java
│       │   │           ├── codegen/
│       │   │           │   ├── AnnotationGen.java
│       │   │           │   ├── ClassGen.java
│       │   │           │   ├── CodeGen.java
│       │   │           │   ├── ConditionGen.java
│       │   │           │   ├── InsnGen.java
│       │   │           │   ├── MethodGen.java
│       │   │           │   ├── NameGen.java
│       │   │           │   ├── RegionGen.java
│       │   │           │   ├── SimpleModeHelper.java
│       │   │           │   ├── TypeGen.java
│       │   │           │   ├── json/
│       │   │           │   │   ├── JsonCodeGen.java
│       │   │           │   │   ├── JsonMappingGen.java
│       │   │           │   │   ├── cls/
│       │   │           │   │   │   ├── JsonClass.java
│       │   │           │   │   │   ├── JsonCodeLine.java
│       │   │           │   │   │   ├── JsonField.java
│       │   │           │   │   │   ├── JsonMethod.java
│       │   │           │   │   │   └── JsonNode.java
│       │   │           │   │   └── mapping/
│       │   │           │   │       ├── JsonClsMapping.java
│       │   │           │   │       ├── JsonFieldMapping.java
│       │   │           │   │       ├── JsonMapping.java
│       │   │           │   │       └── JsonMthMapping.java
│       │   │           │   └── utils/
│       │   │           │       ├── CodeComment.java
│       │   │           │       └── CodeGenUtils.java
│       │   │           ├── deobf/
│       │   │           │   ├── DeobfAliasProvider.java
│       │   │           │   ├── DeobfPresets.java
│       │   │           │   ├── DeobfuscatorVisitor.java
│       │   │           │   ├── FileTypeDetector.java
│       │   │           │   ├── NameMapper.java
│       │   │           │   ├── SaveDeobfMapping.java
│       │   │           │   └── conditions/
│       │   │           │       ├── AbstractDeobfCondition.java
│       │   │           │       ├── AvoidClsAndPkgNamesCollision.java
│       │   │           │       ├── BaseDeobfCondition.java
│       │   │           │       ├── DeobfLengthCondition.java
│       │   │           │       ├── DeobfWhitelist.java
│       │   │           │       ├── ExcludeAndroidRClass.java
│       │   │           │       ├── ExcludePackageWithTLDNames.java
│       │   │           │       └── JadxRenameConditions.java
│       │   │           ├── dex/
│       │   │           │   ├── attributes/
│       │   │           │   │   ├── AFlag.java
│       │   │           │   │   ├── AType.java
│       │   │           │   │   ├── AttrList.java
│       │   │           │   │   ├── AttrNode.java
│       │   │           │   │   ├── AttributeStorage.java
│       │   │           │   │   ├── EmptyAttrStorage.java
│       │   │           │   │   ├── FieldInitInsnAttr.java
│       │   │           │   │   ├── IAttributeNode.java
│       │   │           │   │   ├── ILineAttributeNode.java
│       │   │           │   │   └── nodes/
│       │   │           │   │       ├── AnonymousClassAttr.java
│       │   │           │   │       ├── ClassTypeVarsAttr.java
│       │   │           │   │       ├── CodeFeaturesAttr.java
│       │   │           │   │       ├── DeclareVariablesAttr.java
│       │   │           │   │       ├── DecompileModeOverrideAttr.java
│       │   │           │   │       ├── EdgeInsnAttr.java
│       │   │           │   │       ├── EnumClassAttr.java
│       │   │           │   │       ├── EnumMapAttr.java
│       │   │           │   │       ├── ExcSplitCrossAttr.java
│       │   │           │   │       ├── FieldReplaceAttr.java
│       │   │           │   │       ├── ForceReturnAttr.java
│       │   │           │   │       ├── GenericInfoAttr.java
│       │   │           │   │       ├── InlinedAttr.java
│       │   │           │   │       ├── JadxCommentsAttr.java
│       │   │           │   │       ├── JadxError.java
│       │   │           │   │       ├── JumpInfo.java
│       │   │           │   │       ├── LineAttrNode.java
│       │   │           │   │       ├── LocalVarsDebugInfoAttr.java
│       │   │           │   │       ├── LoopInfo.java
│       │   │           │   │       ├── LoopLabelAttr.java
│       │   │           │   │       ├── MethodBridgeAttr.java
│       │   │           │   │       ├── MethodInlineAttr.java
│       │   │           │   │       ├── MethodOverrideAttr.java
│       │   │           │   │       ├── MethodReplaceAttr.java
│       │   │           │   │       ├── MethodThrowsAttr.java
│       │   │           │   │       ├── MethodTypeVarsAttr.java
│       │   │           │   │       ├── NotificationAttrNode.java
│       │   │           │   │       ├── PhiListAttr.java
│       │   │           │   │       ├── RegDebugInfoAttr.java
│       │   │           │   │       ├── RegionRefAttr.java
│       │   │           │   │       ├── RenameReasonAttr.java
│       │   │           │   │       ├── SkipMethodArgsAttr.java
│       │   │           │   │       ├── SpecialEdgeAttr.java
│       │   │           │   │       └── TmpEdgeAttr.java
│       │   │           │   ├── info/
│       │   │           │   │   ├── AccessInfo.java
│       │   │           │   │   ├── ClassAliasInfo.java
│       │   │           │   │   ├── ClassInfo.java
│       │   │           │   │   ├── ConstStorage.java
│       │   │           │   │   ├── FieldInfo.java
│       │   │           │   │   ├── InfoStorage.java
│       │   │           │   │   ├── MethodInfo.java
│       │   │           │   │   └── PackageInfo.java
│       │   │           │   ├── instructions/
│       │   │           │   │   ├── ArithNode.java
│       │   │           │   │   ├── ArithOp.java
│       │   │           │   │   ├── BaseInvokeNode.java
│       │   │           │   │   ├── ConstClassNode.java
│       │   │           │   │   ├── ConstStringNode.java
│       │   │           │   │   ├── FillArrayData.java
│       │   │           │   │   ├── FillArrayInsn.java
│       │   │           │   │   ├── FilledNewArrayNode.java
│       │   │           │   │   ├── GotoNode.java
│       │   │           │   │   ├── IfNode.java
│       │   │           │   │   ├── IfOp.java
│       │   │           │   │   ├── IndexInsnNode.java
│       │   │           │   │   ├── InsnDecoder.java
│       │   │           │   │   ├── InsnType.java
│       │   │           │   │   ├── InvokeCustomBuilder.java
│       │   │           │   │   ├── InvokeCustomNode.java
│       │   │           │   │   ├── InvokeCustomRawNode.java
│       │   │           │   │   ├── InvokeNode.java
│       │   │           │   │   ├── InvokePolymorphicNode.java
│       │   │           │   │   ├── InvokeType.java
│       │   │           │   │   ├── NewArrayNode.java
│       │   │           │   │   ├── PhiInsn.java
│       │   │           │   │   ├── SwitchData.java
│       │   │           │   │   ├── SwitchInsn.java
│       │   │           │   │   ├── TargetInsnNode.java
│       │   │           │   │   ├── args/
│       │   │           │   │   │   ├── ArgType.java
│       │   │           │   │   │   ├── CodeVar.java
│       │   │           │   │   │   ├── InsnArg.java
│       │   │           │   │   │   ├── InsnWrapArg.java
│       │   │           │   │   │   ├── LiteralArg.java
│       │   │           │   │   │   ├── Named.java
│       │   │           │   │   │   ├── NamedArg.java
│       │   │           │   │   │   ├── PrimitiveType.java
│       │   │           │   │   │   ├── RegisterArg.java
│       │   │           │   │   │   ├── SSAVar.java
│       │   │           │   │   │   ├── Typed.java
│       │   │           │   │   │   └── VarName.java
│       │   │           │   │   ├── invokedynamic/
│       │   │           │   │   │   ├── CustomLambdaCall.java
│       │   │           │   │   │   ├── CustomRawCall.java
│       │   │           │   │   │   ├── CustomStringConcat.java
│       │   │           │   │   │   └── InvokeCustomUtils.java
│       │   │           │   │   ├── java/
│       │   │           │   │   │   └── JsrNode.java
│       │   │           │   │   └── mods/
│       │   │           │   │       ├── ConstructorInsn.java
│       │   │           │   │       └── TernaryInsn.java
│       │   │           │   ├── nodes/
│       │   │           │   │   ├── BlockNode.java
│       │   │           │   │   ├── ClassNode.java
│       │   │           │   │   ├── Edge.java
│       │   │           │   │   ├── FieldNode.java
│       │   │           │   │   ├── IBlock.java
│       │   │           │   │   ├── IBranchRegion.java
│       │   │           │   │   ├── ICodeDataUpdateListener.java
│       │   │           │   │   ├── ICodeNode.java
│       │   │           │   │   ├── IConditionRegion.java
│       │   │           │   │   ├── IContainer.java
│       │   │           │   │   ├── IDexNode.java
│       │   │           │   │   ├── IFieldInfoRef.java
│       │   │           │   │   ├── ILoadable.java
│       │   │           │   │   ├── IMethodDetails.java
│       │   │           │   │   ├── IPackageUpdate.java
│       │   │           │   │   ├── IRegion.java
│       │   │           │   │   ├── IUsageInfoNode.java
│       │   │           │   │   ├── InsnContainer.java
│       │   │           │   │   ├── InsnNode.java
│       │   │           │   │   ├── LoadStage.java
│       │   │           │   │   ├── MethodNode.java
│       │   │           │   │   ├── PackageNode.java
│       │   │           │   │   ├── ProcessState.java
│       │   │           │   │   ├── RootNode.java
│       │   │           │   │   ├── parser/
│       │   │           │   │   │   └── SignatureParser.java
│       │   │           │   │   └── utils/
│       │   │           │   │       ├── MethodUtils.java
│       │   │           │   │       ├── SelectFromDuplicates.java
│       │   │           │   │       └── TypeUtils.java
│       │   │           │   ├── regions/
│       │   │           │   │   ├── AbstractRegion.java
│       │   │           │   │   ├── Region.java
│       │   │           │   │   ├── SwitchRegion.java
│       │   │           │   │   ├── SynchronizedRegion.java
│       │   │           │   │   ├── TryCatchRegion.java
│       │   │           │   │   ├── conditions/
│       │   │           │   │   │   ├── Compare.java
│       │   │           │   │   │   ├── ConditionRegion.java
│       │   │           │   │   │   ├── IfCondition.java
│       │   │           │   │   │   ├── IfInfo.java
│       │   │           │   │   │   └── IfRegion.java
│       │   │           │   │   └── loops/
│       │   │           │   │       ├── ForEachLoop.java
│       │   │           │   │       ├── ForLoop.java
│       │   │           │   │       ├── LoopRegion.java
│       │   │           │   │       └── LoopType.java
│       │   │           │   ├── trycatch/
│       │   │           │   │   ├── CatchAttr.java
│       │   │           │   │   ├── ExcHandlerAttr.java
│       │   │           │   │   ├── ExceptionHandler.java
│       │   │           │   │   ├── TryCatchBlockAttr.java
│       │   │           │   │   ├── TryEdge.java
│       │   │           │   │   ├── TryEdgeScopeGroupMap.java
│       │   │           │   │   └── TryEdgeType.java
│       │   │           │   └── visitors/
│       │   │           │       ├── AbstractVisitor.java
│       │   │           │       ├── AdjustForIfMergeVisitor.java
│       │   │           │       ├── AnonymousClassVisitor.java
│       │   │           │       ├── ApplyVariableNames.java
│       │   │           │       ├── AttachCommentsVisitor.java
│       │   │           │       ├── AttachMethodDetails.java
│       │   │           │       ├── AttachTryCatchVisitor.java
│       │   │           │       ├── CheckCode.java
│       │   │           │       ├── ClassModifier.java
│       │   │           │       ├── ConstInlineVisitor.java
│       │   │           │       ├── ConstructorVisitor.java
│       │   │           │       ├── DeboxingVisitor.java
│       │   │           │       ├── DepthTraversal.java
│       │   │           │       ├── DotGraphVisitor.java
│       │   │           │       ├── EnumVisitor.java
│       │   │           │       ├── ExtractFieldInit.java
│       │   │           │       ├── FallbackModeVisitor.java
│       │   │           │       ├── FixSwitchOverEnum.java
│       │   │           │       ├── GenericTypesVisitor.java
│       │   │           │       ├── IDexTreeVisitor.java
│       │   │           │       ├── InitCodeVariables.java
│       │   │           │       ├── InlineMethods.java
│       │   │           │       ├── JadxVisitor.java
│       │   │           │       ├── MarkMethodsForInline.java
│       │   │           │       ├── MethodInvokeVisitor.java
│       │   │           │       ├── MethodThrowsVisitor.java
│       │   │           │       ├── MethodVisitor.java
│       │   │           │       ├── ModVisitor.java
│       │   │           │       ├── MoveInlineVisitor.java
│       │   │           │       ├── OverrideMethodVisitor.java
│       │   │           │       ├── PrepareForCodeGen.java
│       │   │           │       ├── ProcessAnonymous.java
│       │   │           │       ├── ProcessInstructionsVisitor.java
│       │   │           │       ├── ProcessMethodsForInline.java
│       │   │           │       ├── ReplaceNewArray.java
│       │   │           │       ├── SaveCode.java
│       │   │           │       ├── ShadowFieldVisitor.java
│       │   │           │       ├── SignatureProcessor.java
│       │   │           │       ├── SimplifyVisitor.java
│       │   │           │       ├── blocks/
│       │   │           │       │   ├── BlockExceptionHandler.java
│       │   │           │       │   ├── BlockFinisher.java
│       │   │           │       │   ├── BlockProcessor.java
│       │   │           │       │   ├── BlockSplitter.java
│       │   │           │       │   ├── DominatorTree.java
│       │   │           │       │   ├── FixMultiEntryLoops.java
│       │   │           │       │   ├── PostDominatorTree.java
│       │   │           │       │   └── ResolveJavaJSR.java
│       │   │           │       ├── debuginfo/
│       │   │           │       │   ├── DebugInfoApplyVisitor.java
│       │   │           │       │   └── DebugInfoAttachVisitor.java
│       │   │           │       ├── finaly/
│       │   │           │       │   ├── CentralityState.java
│       │   │           │       │   ├── FinallyExtractInfo.java
│       │   │           │       │   ├── InsnsSlice.java
│       │   │           │       │   ├── MarkFinallyVisitor.java
│       │   │           │       │   ├── SameInstructionsStrategy.java
│       │   │           │       │   ├── SameInstructionsStrategyImpl.java
│       │   │           │       │   ├── TryCatchEdgeBlockMap.java
│       │   │           │       │   └── traverser/
│       │   │           │       │       ├── GlobalTraverserSourceState.java
│       │   │           │       │       ├── TraverserController.java
│       │   │           │       │       ├── TraverserException.java
│       │   │           │       │       ├── factory/
│       │   │           │       │       │   ├── DuplicatedTraverserStateFactory.java
│       │   │           │       │       │   └── TraverserStateFactory.java
│       │   │           │       │       ├── handlers/
│       │   │           │       │       │   ├── AbstractActivePathTraverserHandler.java
│       │   │           │       │       │   ├── AbstractBlockPathTraverserHandler.java
│       │   │           │       │       │   ├── AbstractBlockTraverserHandler.java
│       │   │           │       │       │   ├── BaseBlockTraverserHandler.java
│       │   │           │       │       │   ├── InstructionActivePathTraverserHandler.java
│       │   │           │       │       │   ├── MergePathActivePathTraverserHandler.java
│       │   │           │       │       │   ├── PredecessorBlockPathTraverserHandler.java
│       │   │           │       │       │   └── PredecessorMergeActivePathTraverserHandler.java
│       │   │           │       │       ├── state/
│       │   │           │       │       │   ├── AwaitingInsnCompareTraverserState.java
│       │   │           │       │       │   ├── ISourceBlockState.java
│       │   │           │       │       │   ├── IdentifiedScopeWithTerminatorTraverserState.java
│       │   │           │       │       │   ├── NewBlockTraverserState.java
│       │   │           │       │       │   ├── NoBlockTraverserState.java
│       │   │           │       │       │   ├── RecoveredFromCacheTraverserState.java
│       │   │           │       │       │   ├── TerminalTraverserState.java
│       │   │           │       │       │   ├── TraverserActivePathState.java
│       │   │           │       │       │   ├── TraverserBlockInfo.java
│       │   │           │       │       │   ├── TraverserGlobalCommonState.java
│       │   │           │       │       │   ├── TraverserState.java
│       │   │           │       │       │   └── UnknownAdvanceStrategyTraverserState.java
│       │   │           │       │       └── visitors/
│       │   │           │       │           ├── AbstractBlockTraverserVisitor.java
│       │   │           │       │           ├── ImplicitInsnBlockTraverserVisitor.java
│       │   │           │       │           ├── PathEndBlockTraverserVisitor.java
│       │   │           │       │           ├── PredecessorBlockTraverserVisitor.java
│       │   │           │       │           └── comparator/
│       │   │           │       │               ├── AbstractTraverserComparatorVisitor.java
│       │   │           │       │               └── InstructionBlockComparatorTraverserVisitor.java
│       │   │           │       ├── fixaccessmodifiers/
│       │   │           │       │   ├── FixAccessModifiers.java
│       │   │           │       │   └── VisibilityUtils.java
│       │   │           │       ├── gradle/
│       │   │           │       │   └── NonFinalResIdsVisitor.java
│       │   │           │       ├── kotlin/
│       │   │           │       │   └── ProcessKotlinInternals.java
│       │   │           │       ├── methods/
│       │   │           │       │   └── MutableMethodDetails.java
│       │   │           │       ├── prepare/
│       │   │           │       │   ├── AddAndroidConstants.java
│       │   │           │       │   └── CollectConstValues.java
│       │   │           │       ├── regions/
│       │   │           │       │   ├── AbstractRegionVisitor.java
│       │   │           │       │   ├── CheckRegions.java
│       │   │           │       │   ├── CleanRegions.java
│       │   │           │       │   ├── DebugRegionCounter.java
│       │   │           │       │   ├── DepthRegionTraversal.java
│       │   │           │       │   ├── IRegionIterativeVisitor.java
│       │   │           │       │   ├── IRegionVisitor.java
│       │   │           │       │   ├── IfRegionVisitor.java
│       │   │           │       │   ├── LoopRegionVisitor.java
│       │   │           │       │   ├── PostProcessRegions.java
│       │   │           │       │   ├── ProcessTryCatchRegions.java
│       │   │           │       │   ├── RegionMakerVisitor.java
│       │   │           │       │   ├── ReturnVisitor.java
│       │   │           │       │   ├── SwitchBreakVisitor.java
│       │   │           │       │   ├── SwitchOverStringVisitor.java
│       │   │           │       │   ├── TernaryMod.java
│       │   │           │       │   ├── TracedRegionVisitor.java
│       │   │           │       │   ├── maker/
│       │   │           │       │   │   ├── ExcHandlersRegionMaker.java
│       │   │           │       │   │   ├── IfRegionMaker.java
│       │   │           │       │   │   ├── LoopRegionMaker.java
│       │   │           │       │   │   ├── RegionMaker.java
│       │   │           │       │   │   ├── RegionStack.java
│       │   │           │       │   │   ├── SwitchRegionMaker.java
│       │   │           │       │   │   └── SynchronizedRegionMaker.java
│       │   │           │       │   └── variables/
│       │   │           │       │       ├── CollectUsageRegionVisitor.java
│       │   │           │       │       ├── ProcessVariables.java
│       │   │           │       │       ├── UsePlace.java
│       │   │           │       │       └── VarUsage.java
│       │   │           │       ├── rename/
│       │   │           │       │   ├── CodeRenameVisitor.java
│       │   │           │       │   ├── RenameVisitor.java
│       │   │           │       │   ├── SourceFileRename.java
│       │   │           │       │   └── UserRenames.java
│       │   │           │       ├── shrink/
│       │   │           │       │   ├── ArgsInfo.java
│       │   │           │       │   ├── CodeShrinkVisitor.java
│       │   │           │       │   └── WrapInfo.java
│       │   │           │       ├── ssa/
│       │   │           │       │   ├── LiveVarAnalysis.java
│       │   │           │       │   ├── RenameState.java
│       │   │           │       │   └── SSATransform.java
│       │   │           │       ├── typeinference/
│       │   │           │       │   ├── AbstractTypeConstraint.java
│       │   │           │       │   ├── BoundEnum.java
│       │   │           │       │   ├── FinishTypeInference.java
│       │   │           │       │   ├── FixTypesVisitor.java
│       │   │           │       │   ├── ITypeBound.java
│       │   │           │       │   ├── ITypeBoundDynamic.java
│       │   │           │       │   ├── ITypeConstraint.java
│       │   │           │       │   ├── ITypeListener.java
│       │   │           │       │   ├── TypeBoundCheckCastAssign.java
│       │   │           │       │   ├── TypeBoundConst.java
│       │   │           │       │   ├── TypeBoundFieldGetAssign.java
│       │   │           │       │   ├── TypeBoundInvokeAssign.java
│       │   │           │       │   ├── TypeBoundInvokeUse.java
│       │   │           │       │   ├── TypeCompare.java
│       │   │           │       │   ├── TypeCompareEnum.java
│       │   │           │       │   ├── TypeInferenceVisitor.java
│       │   │           │       │   ├── TypeInfo.java
│       │   │           │       │   ├── TypeSearch.java
│       │   │           │       │   ├── TypeSearchState.java
│       │   │           │       │   ├── TypeSearchVarInfo.java
│       │   │           │       │   ├── TypeUpdate.java
│       │   │           │       │   ├── TypeUpdateEntry.java
│       │   │           │       │   ├── TypeUpdateFlags.java
│       │   │           │       │   ├── TypeUpdateInfo.java
│       │   │           │       │   ├── TypeUpdateRegistry.java
│       │   │           │       │   └── TypeUpdateResult.java
│       │   │           │       └── usage/
│       │   │           │           ├── UsageInfo.java
│       │   │           │           ├── UsageInfoVisitor.java
│       │   │           │           └── UseSet.java
│       │   │           ├── export/
│       │   │           │   ├── ExportGradle.java
│       │   │           │   ├── ExportGradleType.java
│       │   │           │   ├── GradleInfoStorage.java
│       │   │           │   ├── OutDirs.java
│       │   │           │   ├── TemplateFile.java
│       │   │           │   └── gen/
│       │   │           │       ├── AndroidGradleGenerator.java
│       │   │           │       ├── GradleGeneratorTools.java
│       │   │           │       ├── IExportGradleGenerator.java
│       │   │           │       └── SimpleJavaGradleGenerator.java
│       │   │           ├── plugins/
│       │   │           │   ├── AppContext.java
│       │   │           │   ├── JadxPluginManager.java
│       │   │           │   ├── JadxPluginsData.java
│       │   │           │   ├── PluginContext.java
│       │   │           │   ├── events/
│       │   │           │   │   ├── JadxEventsImpl.java
│       │   │           │   │   └── JadxEventsManager.java
│       │   │           │   ├── files/
│       │   │           │   │   ├── IJadxFilesGetter.java
│       │   │           │   │   ├── JadxFilesData.java
│       │   │           │   │   ├── SingleDirFilesGetter.java
│       │   │           │   │   └── TempFilesGetter.java
│       │   │           │   └── versions/
│       │   │           │       ├── VerifyRequiredVersion.java
│       │   │           │       └── VersionComparator.java
│       │   │           ├── utils/
│       │   │           │   ├── BetterName.java
│       │   │           │   ├── BlockInsnPair.java
│       │   │           │   ├── BlockParentContainer.java
│       │   │           │   ├── BlockUtils.java
│       │   │           │   ├── CacheStorage.java
│       │   │           │   ├── DebugChecks.java
│       │   │           │   ├── DebugChecksPass.java
│       │   │           │   ├── DebugUtils.java
│       │   │           │   ├── DecompilerScheduler.java
│       │   │           │   ├── DotGraphUtils.java
│       │   │           │   ├── EmptyBitSet.java
│       │   │           │   ├── EncodedValueUtils.java
│       │   │           │   ├── ErrorsCounter.java
│       │   │           │   ├── FileSignature.java
│       │   │           │   ├── GsonUtils.java
│       │   │           │   ├── ImmutableList.java
│       │   │           │   ├── InsnList.java
│       │   │           │   ├── InsnRemover.java
│       │   │           │   ├── InsnUtils.java
│       │   │           │   ├── ListUtils.java
│       │   │           │   ├── Pair.java
│       │   │           │   ├── PassMerge.java
│       │   │           │   ├── RegionUtils.java
│       │   │           │   ├── StringUtils.java
│       │   │           │   ├── Utils.java
│       │   │           │   ├── android/
│       │   │           │   │   ├── AndroidManifestParser.java
│       │   │           │   │   ├── AndroidResourcesMap.java
│       │   │           │   │   ├── AndroidResourcesUtils.java
│       │   │           │   │   ├── AppAttribute.java
│       │   │           │   │   ├── ApplicationParams.java
│       │   │           │   │   ├── DataInputDelegate.java
│       │   │           │   │   ├── ExtDataInput.java
│       │   │           │   │   ├── Res9patchStreamDecoder.java
│       │   │           │   │   └── TextResMapFile.java
│       │   │           │   ├── blocks/
│       │   │           │   │   ├── BlockPair.java
│       │   │           │   │   ├── BlockSet.java
│       │   │           │   │   └── DFSIteration.java
│       │   │           │   ├── exceptions/
│       │   │           │   │   ├── CodegenException.java
│       │   │           │   │   ├── DecodeException.java
│       │   │           │   │   ├── InvalidDataException.java
│       │   │           │   │   ├── JadxArgsValidateException.java
│       │   │           │   │   ├── JadxException.java
│       │   │           │   │   ├── JadxOverflowException.java
│       │   │           │   │   └── JadxRuntimeException.java
│       │   │           │   ├── files/
│       │   │           │   │   └── FileUtils.java
│       │   │           │   ├── input/
│       │   │           │   │   └── InsnDataUtils.java
│       │   │           │   ├── log/
│       │   │           │   │   └── LogUtils.java
│       │   │           │   └── tasks/
│       │   │           │       └── TaskExecutor.java
│       │   │           └── xmlgen/
│       │   │               ├── BinaryXMLParser.java
│       │   │               ├── BinaryXMLStrings.java
│       │   │               ├── CommonBinaryParser.java
│       │   │               ├── IResTableParser.java
│       │   │               ├── ManifestAttributes.java
│       │   │               ├── ParserConstants.java
│       │   │               ├── ParserStream.java
│       │   │               ├── ResContainer.java
│       │   │               ├── ResDecoder.java
│       │   │               ├── ResNameUtils.java
│       │   │               ├── ResTableBinaryParser.java
│       │   │               ├── ResTableBinaryParserProvider.java
│       │   │               ├── ResXmlGen.java
│       │   │               ├── ResourceStorage.java
│       │   │               ├── ResourcesSaver.java
│       │   │               ├── StringFormattedCheck.java
│       │   │               ├── XMLChar.java
│       │   │               ├── XmlDeobf.java
│       │   │               ├── XmlGenUtils.java
│       │   │               └── entry/
│       │   │                   ├── EntryConfig.java
│       │   │                   ├── ProtoValue.java
│       │   │                   ├── RawNamedValue.java
│       │   │                   ├── RawValue.java
│       │   │                   ├── ResourceEntry.java
│       │   │                   └── ValuesParser.java
│       │   └── resources/
│       │       ├── android/
│       │       │   ├── attrs.xml
│       │       │   ├── attrs_manifest.xml
│       │       │   └── res-map.txt
│       │       ├── clst/
│       │       │   └── core.jcst
│       │       ├── export/
│       │       │   ├── android/
│       │       │   │   ├── app.build.gradle.tmpl
│       │       │   │   ├── build.gradle.tmpl
│       │       │   │   ├── lib.build.gradle.tmpl
│       │       │   │   └── settings.gradle.tmpl
│       │       │   └── java/
│       │       │       ├── build.gradle.kts.tmpl
│       │       │       └── settings.gradle.kts.tmpl
│       │       └── jadx/
│       │           └── core/
│       │               └── deobf/
│       │                   └── conditions/
│       │                       └── tlds.txt
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       ├── NotYetImplemented.java
│           │       ├── NotYetImplementedExtension.java
│           │       ├── api/
│           │       │   ├── JadxArgsValidatorOutDirsTest.java
│           │       │   ├── JadxDecompilerTest.java
│           │       │   └── JadxInternalAccess.java
│           │       ├── core/
│           │       │   ├── deobf/
│           │       │   │   └── NameMapperTest.java
│           │       │   ├── dex/
│           │       │   │   ├── info/
│           │       │   │   │   └── AccessInfoTest.java
│           │       │   │   ├── instructions/
│           │       │   │   │   └── args/
│           │       │   │   │       └── ArgTypeTest.java
│           │       │   │   ├── nodes/
│           │       │   │   │   └── utils/
│           │       │   │   │       ├── SelectFromDuplicatesTest.java
│           │       │   │   │       └── TypeUtilsTest.java
│           │       │   │   ├── trycatch/
│           │       │   │   │   └── TryCatchBlockAttrTest.java
│           │       │   │   └── visitors/
│           │       │   │       └── typeinference/
│           │       │   │           ├── PrimitiveConversionsTests.java
│           │       │   │           └── TypeCompareTest.java
│           │       │   ├── plugins/
│           │       │   │   └── versions/
│           │       │   │       ├── VerifyRequiredVersionTest.java
│           │       │   │       └── VersionComparatorTest.java
│           │       │   ├── utils/
│           │       │   │   ├── PassMergeTest.java
│           │       │   │   ├── TestBetterName.java
│           │       │   │   ├── TestGetBetterClassName.java
│           │       │   │   ├── TestGetBetterResourceName.java
│           │       │   │   ├── TypeUtilsTest.java
│           │       │   │   └── log/
│           │       │   │       └── LogUtilsTest.java
│           │       │   └── xmlgen/
│           │       │       ├── ResNameUtilsTest.java
│           │       │       ├── ResXmlGenTest.java
│           │       │       └── entry/
│           │       │           └── ValuesParserTest.java
│           │       └── tests/
│           │           ├── api/
│           │           │   ├── ExportGradleTest.java
│           │           │   ├── IntegrationTest.java
│           │           │   ├── RaungTest.java
│           │           │   ├── SmaliTest.java
│           │           │   ├── compiler/
│           │           │   │   ├── ClassFileManager.java
│           │           │   │   ├── CompilerOptions.java
│           │           │   │   ├── DynamicClassLoader.java
│           │           │   │   ├── EclipseCompilerUtils.java
│           │           │   │   ├── JavaClassObject.java
│           │           │   │   ├── JavaUtils.java
│           │           │   │   ├── StringJavaFileObject.java
│           │           │   │   └── TestCompiler.java
│           │           │   ├── extensions/
│           │           │   │   └── profiles/
│           │           │   │       ├── JadxTestProfilesExtension.java
│           │           │   │       ├── TestProfile.java
│           │           │   │       └── TestWithProfiles.java
│           │           │   └── utils/
│           │           │       ├── TestFilesGetter.java
│           │           │       ├── TestUtils.java
│           │           │       └── assertj/
│           │           │           ├── JadxAssertions.java
│           │           │           ├── JadxClassNodeAssertions.java
│           │           │           ├── JadxCodeAssertions.java
│           │           │           ├── JadxCodeInfoAssertions.java
│           │           │           └── JadxMethodNodeAssertions.java
│           │           ├── export/
│           │           │   ├── IllegalCharsForGradleWrapper.java
│           │           │   ├── OptionalTargetSdkVersion.java
│           │           │   ├── TestApacheHttpClient.java
│           │           │   ├── TestNonFinalResIds.java
│           │           │   └── VectorDrawablesUseSupportLibrary.java
│           │           ├── external/
│           │           │   └── BaseExternalTest.java
│           │           ├── functional/
│           │           │   ├── AttributeStorageTest.java
│           │           │   ├── JadxClasspathTest.java
│           │           │   ├── JadxVisitorsOrderTest.java
│           │           │   ├── NameMapperTest.java
│           │           │   ├── SignatureParserTest.java
│           │           │   ├── StringUtilsTest.java
│           │           │   ├── TemplateFileTest.java
│           │           │   └── TestIfCondition.java
│           │           └── integration/
│           │               ├── android/
│           │               │   ├── TestRFieldAccess.java
│           │               │   ├── TestRFieldRestore.java
│           │               │   ├── TestRFieldRestore2.java
│           │               │   ├── TestRFieldRestore3.java
│           │               │   ├── TestResConstReplace.java
│           │               │   ├── TestResConstReplace2.java
│           │               │   └── TestResConstReplace3.java
│           │               ├── annotations/
│           │               │   ├── TestAnnotations.java
│           │               │   ├── TestAnnotations2.java
│           │               │   ├── TestAnnotationsMix.java
│           │               │   ├── TestAnnotationsRename.java
│           │               │   ├── TestAnnotationsRenameDef.java
│           │               │   ├── TestAnnotationsUsage.java
│           │               │   └── TestParamAnnotations.java
│           │               ├── arith/
│           │               │   ├── TestArith.java
│           │               │   ├── TestArith2.java
│           │               │   ├── TestArith3.java
│           │               │   ├── TestArith4.java
│           │               │   ├── TestArithConst.java
│           │               │   ├── TestArithNot.java
│           │               │   ├── TestFieldIncrement.java
│           │               │   ├── TestFieldIncrement2.java
│           │               │   ├── TestFieldIncrement3.java
│           │               │   ├── TestNumbersFormat.java
│           │               │   ├── TestPrimitivesNegate.java
│           │               │   ├── TestSpecialValues.java
│           │               │   ├── TestSpecialValues2.java
│           │               │   └── TestXor.java
│           │               ├── arrays/
│           │               │   ├── TestArrayFill.java
│           │               │   ├── TestArrayFill2.java
│           │               │   ├── TestArrayFill3.java
│           │               │   ├── TestArrayFill4.java
│           │               │   ├── TestArrayFillConstReplace.java
│           │               │   ├── TestArrayFillNegative.java
│           │               │   ├── TestArrayFillWithMove.java
│           │               │   ├── TestArrayInit.java
│           │               │   ├── TestArrayInitField.java
│           │               │   ├── TestArrayInitField2.java
│           │               │   ├── TestArrays.java
│           │               │   ├── TestArrays2.java
│           │               │   ├── TestArrays3.java
│           │               │   ├── TestArrays4.java
│           │               │   ├── TestFillArrayData.java
│           │               │   └── TestMultiDimArrayFill.java
│           │               ├── code/
│           │               │   ├── TestArrayAccessReorder.java
│           │               │   └── TestCodeCommentStyle.java
│           │               ├── conditions/
│           │               │   ├── TestBitwiseAnd.java
│           │               │   ├── TestBitwiseOr.java
│           │               │   ├── TestBooleanToByte.java
│           │               │   ├── TestBooleanToChar.java
│           │               │   ├── TestBooleanToDouble.java
│           │               │   ├── TestBooleanToFloat.java
│           │               │   ├── TestBooleanToInt.java
│           │               │   ├── TestBooleanToInt2.java
│           │               │   ├── TestBooleanToLong.java
│           │               │   ├── TestBooleanToShort.java
│           │               │   ├── TestCast.java
│           │               │   ├── TestCmpOp.java
│           │               │   ├── TestCmpOp2.java
│           │               │   ├── TestComplexIf.java
│           │               │   ├── TestComplexIf2.java
│           │               │   ├── TestComplexIf3.java
│           │               │   ├── TestComplexIf4.java
│           │               │   ├── TestConditionInLoop.java
│           │               │   ├── TestConditions.java
│           │               │   ├── TestConditions10.java
│           │               │   ├── TestConditions11.java
│           │               │   ├── TestConditions12.java
│           │               │   ├── TestConditions13.java
│           │               │   ├── TestConditions14.java
│           │               │   ├── TestConditions15.java
│           │               │   ├── TestConditions16.java
│           │               │   ├── TestConditions17.java
│           │               │   ├── TestConditions18.java
│           │               │   ├── TestConditions2.java
│           │               │   ├── TestConditions21.java
│           │               │   ├── TestConditions3.java
│           │               │   ├── TestConditions4.java
│           │               │   ├── TestConditions5.java
│           │               │   ├── TestConditions6.java
│           │               │   ├── TestConditions7.java
│           │               │   ├── TestConditions8.java
│           │               │   ├── TestConditions9.java
│           │               │   ├── TestElseIf.java
│           │               │   ├── TestElseIfCodeStyle.java
│           │               │   ├── TestIfAndSwitch.java
│           │               │   ├── TestIfCodeStyle.java
│           │               │   ├── TestIfCodeStyle2.java
│           │               │   ├── TestIfElseAndConditionIntermediateInstruction.java
│           │               │   ├── TestInnerAssign.java
│           │               │   ├── TestInnerAssign2.java
│           │               │   ├── TestInnerAssign3.java
│           │               │   ├── TestNestedIf.java
│           │               │   ├── TestNestedIf2.java
│           │               │   ├── TestOutBlock.java
│           │               │   ├── TestSimpleConditions.java
│           │               │   ├── TestTernary.java
│           │               │   ├── TestTernary2.java
│           │               │   ├── TestTernary3.java
│           │               │   ├── TestTernary4.java
│           │               │   ├── TestTernaryInIf.java
│           │               │   ├── TestTernaryInIf2.java
│           │               │   ├── TestTernaryInIf3.java
│           │               │   ├── TestTernaryOneBranchInConstructor.java
│           │               │   └── TestTernaryOneBranchInConstructor2.java
│           │               ├── debuginfo/
│           │               │   ├── TestLineNumbers.java
│           │               │   ├── TestLineNumbers2.java
│           │               │   ├── TestLineNumbers3.java
│           │               │   ├── TestReturnSourceLine.java
│           │               │   └── TestVariablesNames.java
│           │               ├── deobf/
│           │               │   ├── TestDontRenameClspOverriddenMethod.java
│           │               │   ├── TestFieldFromInnerClass.java
│           │               │   ├── TestInheritedMethodRename.java
│           │               │   ├── TestMthRename.java
│           │               │   ├── TestRenameOverriddenMethod.java
│           │               │   ├── TestRenameOverriddenMethod2.java
│           │               │   ├── TestRenameOverriddenMethod3.java
│           │               │   └── a/
│           │               │       └── TestNegativeRenameCondition.java
│           │               ├── enums/
│           │               │   ├── TestEnumKotlinEntries.java
│           │               │   ├── TestEnumObfuscated.java
│           │               │   ├── TestEnumUsesOtherEnum.java
│           │               │   ├── TestEnumWithConstInlining.java
│           │               │   ├── TestEnumWithFields.java
│           │               │   ├── TestEnums.java
│           │               │   ├── TestEnums10.java
│           │               │   ├── TestEnums11.java
│           │               │   ├── TestEnums2.java
│           │               │   ├── TestEnums2a.java
│           │               │   ├── TestEnums3.java
│           │               │   ├── TestEnums4.java
│           │               │   ├── TestEnums5.java
│           │               │   ├── TestEnums6.java
│           │               │   ├── TestEnums7.java
│           │               │   ├── TestEnums8.java
│           │               │   ├── TestEnums9.java
│           │               │   ├── TestEnumsInterface.java
│           │               │   ├── TestEnumsWithAssert.java
│           │               │   ├── TestEnumsWithConsts.java
│           │               │   ├── TestEnumsWithCustomInit.java
│           │               │   ├── TestEnumsWithStaticFields.java
│           │               │   ├── TestEnumsWithTernary.java
│           │               │   ├── TestInnerEnums.java
│           │               │   ├── TestSwitchOverEnum.java
│           │               │   └── TestSwitchOverEnum2.java
│           │               ├── fallback/
│           │               │   ├── TestFallbackManyNops.java
│           │               │   └── TestFallbackMode.java
│           │               ├── generics/
│           │               │   ├── TestClassSignature.java
│           │               │   ├── TestConstructorGenerics.java
│           │               │   ├── TestGeneric8.java
│           │               │   ├── TestGenericFields.java
│           │               │   ├── TestGenerics.java
│           │               │   ├── TestGenerics2.java
│           │               │   ├── TestGenerics3.java
│           │               │   ├── TestGenerics4.java
│           │               │   ├── TestGenerics6.java
│           │               │   ├── TestGenerics7.java
│           │               │   ├── TestGenerics8.java
│           │               │   ├── TestGenericsInArgs.java
│           │               │   ├── TestGenericsMthOverride.java
│           │               │   ├── TestImportGenericMap.java
│           │               │   ├── TestMethodOverride.java
│           │               │   ├── TestMissingGenericsTypes2.java
│           │               │   ├── TestOuterGeneric.java
│           │               │   ├── TestSyntheticOverride.java
│           │               │   ├── TestTypeVarsFromOuterClass.java
│           │               │   ├── TestTypeVarsFromSuperClass.java
│           │               │   └── TestUsageInGenerics.java
│           │               ├── inline/
│           │               │   ├── TestConstInline.java
│           │               │   ├── TestGetterInlineNegative.java
│           │               │   ├── TestInline.java
│           │               │   ├── TestInline2.java
│           │               │   ├── TestInline3.java
│           │               │   ├── TestInline6.java
│           │               │   ├── TestInline7.java
│           │               │   ├── TestInstanceLambda.java
│           │               │   ├── TestIssue86.java
│           │               │   ├── TestMethodInline.java
│           │               │   ├── TestOverlapSyntheticMethods.java
│           │               │   ├── TestOverrideBridgeMerge.java
│           │               │   ├── TestSyntheticBridgeRename.java
│           │               │   ├── TestSyntheticClassInline.java
│           │               │   ├── TestSyntheticInline.java
│           │               │   ├── TestSyntheticInline2.java
│           │               │   ├── TestSyntheticInline3.java
│           │               │   └── TestTernaryCast.java
│           │               ├── inner/
│           │               │   ├── TestAnonymousClass.java
│           │               │   ├── TestAnonymousClass10.java
│           │               │   ├── TestAnonymousClass11.java
│           │               │   ├── TestAnonymousClass12.java
│           │               │   ├── TestAnonymousClass13.java
│           │               │   ├── TestAnonymousClass14.java
│           │               │   ├── TestAnonymousClass15.java
│           │               │   ├── TestAnonymousClass16.java
│           │               │   ├── TestAnonymousClass17.java
│           │               │   ├── TestAnonymousClass18.java
│           │               │   ├── TestAnonymousClass19.java
│           │               │   ├── TestAnonymousClass2.java
│           │               │   ├── TestAnonymousClass20.java
│           │               │   ├── TestAnonymousClass21.java
│           │               │   ├── TestAnonymousClass22.java
│           │               │   ├── TestAnonymousClass3.java
│           │               │   ├── TestAnonymousClass3a.java
│           │               │   ├── TestAnonymousClass4.java
│           │               │   ├── TestAnonymousClass5.java
│           │               │   ├── TestAnonymousClass6.java
│           │               │   ├── TestAnonymousClass7.java
│           │               │   ├── TestAnonymousClass8.java
│           │               │   ├── TestAnonymousClass9.java
│           │               │   ├── TestIncorrectAnonymousClass.java
│           │               │   ├── TestInner2Samples.java
│           │               │   ├── TestInnerClass.java
│           │               │   ├── TestInnerClass2.java
│           │               │   ├── TestInnerClass3.java
│           │               │   ├── TestInnerClass4.java
│           │               │   ├── TestInnerClass5.java
│           │               │   ├── TestInnerClassFakeSyntheticConstructor.java
│           │               │   ├── TestInnerClassSyntheticConstructor.java
│           │               │   ├── TestInnerClassSyntheticRename.java
│           │               │   ├── TestInnerConstructorCall.java
│           │               │   ├── TestNestedAnonymousClass.java
│           │               │   ├── TestOuterConstructorCall.java
│           │               │   ├── TestReplaceConstsInAnnotations.java
│           │               │   ├── TestReplaceConstsInAnnotations2.java
│           │               │   └── TestSyntheticMthRename.java
│           │               ├── invoke/
│           │               │   ├── TestCastInOverloadedAccessor.java
│           │               │   ├── TestCastInOverloadedInvoke.java
│           │               │   ├── TestCastInOverloadedInvoke2.java
│           │               │   ├── TestCastInOverloadedInvoke3.java
│           │               │   ├── TestCastInOverloadedInvoke4.java
│           │               │   ├── TestConstructorWithMoves.java
│           │               │   ├── TestHierarchyOverloadedInvoke.java
│           │               │   ├── TestInheritedStaticInvoke.java
│           │               │   ├── TestInvoke1.java
│           │               │   ├── TestInvokeInCatch.java
│           │               │   ├── TestInvokeWithWideVars.java
│           │               │   ├── TestOverloadedInvoke.java
│           │               │   ├── TestOverloadedMethodInvoke.java
│           │               │   ├── TestOverloadedMethodInvoke2.java
│           │               │   ├── TestPolymorphicInvoke.java
│           │               │   ├── TestPolymorphicRangeInvoke.java
│           │               │   ├── TestRawCustomInvoke.java
│           │               │   ├── TestSuperInvoke.java
│           │               │   ├── TestSuperInvoke2.java
│           │               │   ├── TestSuperInvokeUnknown.java
│           │               │   ├── TestSuperInvokeWithGenerics.java
│           │               │   ├── TestVarArg.java
│           │               │   └── TestVarArg2.java
│           │               ├── java8/
│           │               │   ├── TestLambdaArgs.java
│           │               │   ├── TestLambdaConstructor.java
│           │               │   ├── TestLambdaExtVar.java
│           │               │   ├── TestLambdaExtVar2.java
│           │               │   ├── TestLambdaInArray.java
│           │               │   ├── TestLambdaInstance.java
│           │               │   ├── TestLambdaInstance2.java
│           │               │   ├── TestLambdaInstance3.java
│           │               │   ├── TestLambdaResugar.java
│           │               │   ├── TestLambdaReturn.java
│           │               │   └── TestLambdaStatic.java
│           │               ├── jbc/
│           │               │   ├── TestDup2x1.java
│           │               │   └── TestStackConvert.java
│           │               ├── loops/
│           │               │   ├── TestArrayForEach.java
│           │               │   ├── TestArrayForEach2.java
│           │               │   ├── TestArrayForEach3.java
│           │               │   ├── TestArrayForEachNegative.java
│           │               │   ├── TestBreakInComplexIf.java
│           │               │   ├── TestBreakInComplexIf2.java
│           │               │   ├── TestBreakInLoop.java
│           │               │   ├── TestBreakInLoop2.java
│           │               │   ├── TestBreakInLoop3.java
│           │               │   ├── TestBreakInLoop4.java
│           │               │   ├── TestBreakInLoop5.java
│           │               │   ├── TestBreakInLoop6.java
│           │               │   ├── TestBreakWithLabel.java
│           │               │   ├── TestComplexWhileLoop.java
│           │               │   ├── TestContinueInLoop.java
│           │               │   ├── TestDoWhileBreak.java
│           │               │   ├── TestDoWhileBreak2.java
│           │               │   ├── TestDoWhileBreak3.java
│           │               │   ├── TestEndlessLoop.java
│           │               │   ├── TestEndlessLoop2.java
│           │               │   ├── TestIfInLoop2.java
│           │               │   ├── TestIfInLoop3.java
│           │               │   ├── TestIfInLoop4.java
│           │               │   ├── TestIndexForLoop.java
│           │               │   ├── TestIndexedLoop.java
│           │               │   ├── TestIterableForEach.java
│           │               │   ├── TestIterableForEach2.java
│           │               │   ├── TestIterableForEach3.java
│           │               │   ├── TestIterableForEach4.java
│           │               │   ├── TestLoopCondition.java
│           │               │   ├── TestLoopCondition2.java
│           │               │   ├── TestLoopCondition3.java
│           │               │   ├── TestLoopCondition4.java
│           │               │   ├── TestLoopCondition5.java
│           │               │   ├── TestLoopConditionInvoke.java
│           │               │   ├── TestLoopDetection.java
│           │               │   ├── TestLoopDetection2.java
│           │               │   ├── TestLoopDetection3.java
│           │               │   ├── TestLoopDetection4.java
│           │               │   ├── TestLoopDetection5.java
│           │               │   ├── TestLoopRestore.java
│           │               │   ├── TestLoopRestore2.java
│           │               │   ├── TestLoopRestore3.java
│           │               │   ├── TestMultiEntryLoop.java
│           │               │   ├── TestMultiEntryLoop2.java
│           │               │   ├── TestNestedLoops.java
│           │               │   ├── TestNestedLoops2.java
│           │               │   ├── TestNestedLoops3.java
│           │               │   ├── TestNestedLoops4.java
│           │               │   ├── TestNestedLoops5.java
│           │               │   ├── TestNotIndexedLoop.java
│           │               │   ├── TestSequentialLoops.java
│           │               │   ├── TestSequentialLoops2.java
│           │               │   ├── TestSynchronizedInEndlessLoop.java
│           │               │   ├── TestTryCatchInLoop.java
│           │               │   └── TestTryCatchInLoop2.java
│           │               ├── names/
│           │               │   ├── TestCaseSensitiveChecks.java
│           │               │   ├── TestClassNameWithInvalidChar.java
│           │               │   ├── TestClassNamesCollision.java
│           │               │   ├── TestClassNamesCollision2.java
│           │               │   ├── TestCollisionWithJavaLangClasses.java
│           │               │   ├── TestConstructorArgNames.java
│           │               │   ├── TestDefPkgRename.java
│           │               │   ├── TestDuplicateVarNames.java
│           │               │   ├── TestDuplicatedNames.java
│           │               │   ├── TestFieldCollideWithPackage.java
│           │               │   ├── TestLocalVarCollideWithPackage.java
│           │               │   ├── TestNameAssign2.java
│           │               │   ├── TestReservedClassNames.java
│           │               │   ├── TestReservedNames.java
│           │               │   ├── TestReservedPackageNames.java
│           │               │   ├── TestSameMethodsNames.java
│           │               │   ├── pkg/
│           │               │   │   ├── a.java
│           │               │   │   └── b.java
│           │               │   └── pkg2/
│           │               │       ├── System.java
│           │               │       └── TestCls.java
│           │               ├── others/
│           │               │   ├── TestAllNops.java
│           │               │   ├── TestArgInline.java
│           │               │   ├── TestBadClassAccessModifiers.java
│           │               │   ├── TestBadMethodAccessModifiers.java
│           │               │   ├── TestCastOfNull.java
│           │               │   ├── TestClassGen.java
│           │               │   ├── TestClassImplementsSignature.java
│           │               │   ├── TestClassReGen.java
│           │               │   ├── TestCodeComments.java
│           │               │   ├── TestCodeComments2.java
│           │               │   ├── TestCodeComments2a.java
│           │               │   ├── TestCodeCommentsMultiline.java
│           │               │   ├── TestCodeCommentsOverride.java
│           │               │   ├── TestCodeMetadata.java
│           │               │   ├── TestCodeMetadata2.java
│           │               │   ├── TestCodeMetadata3.java
│           │               │   ├── TestConstReplace.java
│           │               │   ├── TestConstStringConcat.java
│           │               │   ├── TestConstructor.java
│           │               │   ├── TestConstructor2.java
│           │               │   ├── TestConstructorBranched.java
│           │               │   ├── TestConstructorBranched2.java
│           │               │   ├── TestConstructorBranched3.java
│           │               │   ├── TestDeadBlockReferencesStart.java
│           │               │   ├── TestDeboxing.java
│           │               │   ├── TestDeboxing2.java
│           │               │   ├── TestDeboxing3.java
│           │               │   ├── TestDeboxing4.java
│           │               │   ├── TestDeboxing5.java
│           │               │   ├── TestDefConstructorNotRemoved.java
│           │               │   ├── TestDefConstructorWithAnnotation.java
│           │               │   ├── TestDuplicateCast.java
│           │               │   ├── TestExplicitOverride.java
│           │               │   ├── TestFieldAccessReorder.java
│           │               │   ├── TestFieldInit2.java
│           │               │   ├── TestFieldInit3.java
│           │               │   ├── TestFieldInitInTryCatch.java
│           │               │   ├── TestFieldInitNegative.java
│           │               │   ├── TestFieldInitOrder.java
│           │               │   ├── TestFieldInitOrder2.java
│           │               │   ├── TestFieldInitOrderStatic.java
│           │               │   ├── TestFieldUsageMove.java
│           │               │   ├── TestFixClassAccessModifiers.java
│           │               │   ├── TestFloatValue.java
│           │               │   ├── TestIfInTry.java
│           │               │   ├── TestIfTryInCatch.java
│           │               │   ├── TestIncorrectFieldSignature.java
│           │               │   ├── TestIncorrectMethodSignature.java
│           │               │   ├── TestInlineVarArg.java
│           │               │   ├── TestInsnsBeforeSuper.java
│           │               │   ├── TestInsnsBeforeSuper2.java
│           │               │   ├── TestInsnsBeforeThis.java
│           │               │   ├── TestInterfaceDefaultMethod.java
│           │               │   ├── TestInvalidExceptions.java
│           │               │   ├── TestInvalidExceptions2.java
│           │               │   ├── TestIssue13a.java
│           │               │   ├── TestIssue13b.java
│           │               │   ├── TestJavaDup2x2.java
│           │               │   ├── TestJavaDupInsn.java
│           │               │   ├── TestJavaJSR.java
│           │               │   ├── TestJavaSwap.java
│           │               │   ├── TestJsonOutput.java
│           │               │   ├── TestLoopInTry.java
│           │               │   ├── TestMethodParametersAttribute.java
│           │               │   ├── TestMissingExceptions.java
│           │               │   ├── TestMoveInline.java
│           │               │   ├── TestMultipleNOPs.java
│           │               │   ├── TestN21.java
│           │               │   ├── TestNullInline.java
│           │               │   ├── TestOverridePackagePrivateMethod.java
│           │               │   ├── TestOverridePrivateMethod.java
│           │               │   ├── TestOverrideStaticMethod.java
│           │               │   ├── TestOverrideWithSameName.java
│           │               │   ├── TestOverrideWithTwoBases.java
│           │               │   ├── TestOverrideWithTwoBases2.java
│           │               │   ├── TestPrimitiveCasts.java
│           │               │   ├── TestPrimitiveCasts2.java
│           │               │   ├── TestRedundantBrackets.java
│           │               │   ├── TestRedundantReturn.java
│           │               │   ├── TestReturnWrapping.java
│           │               │   ├── TestShadowingSuperMember.java
│           │               │   ├── TestStaticFieldsInit.java
│           │               │   ├── TestStaticMethod.java
│           │               │   ├── TestStringBuilderElimination.java
│           │               │   ├── TestStringBuilderElimination2.java
│           │               │   ├── TestStringBuilderElimination3.java
│           │               │   ├── TestStringBuilderElimination4Neg.java
│           │               │   ├── TestStringBuilderElimination5.java
│           │               │   ├── TestStringConcatJava11.java
│           │               │   ├── TestStringConcatWithoutResult.java
│           │               │   ├── TestStringConstructor.java
│           │               │   ├── TestSuperLoop.java
│           │               │   ├── TestSyntheticConstructor.java
│           │               │   ├── TestThrows.java
│           │               │   ├── TestUsageApacheHttpClient.java
│           │               │   ├── TestWrongCode.java
│           │               │   └── TestWrongCode2.java
│           │               ├── rename/
│           │               │   ├── TestAnonymousInline.java
│           │               │   ├── TestConstReplace.java
│           │               │   ├── TestFieldRenameFormat.java
│           │               │   ├── TestFieldWithGenericRename.java
│           │               │   ├── TestRenameEnum.java
│           │               │   ├── TestUserRenames.java
│           │               │   └── TestUsingSourceFileName.java
│           │               ├── special/
│           │               │   └── TestPackageInfoSupport.java
│           │               ├── switches/
│           │               │   ├── TestSwitch.java
│           │               │   ├── TestSwitch2.java
│           │               │   ├── TestSwitch3.java
│           │               │   ├── TestSwitch4.java
│           │               │   ├── TestSwitchBreak.java
│           │               │   ├── TestSwitchBreak2.java
│           │               │   ├── TestSwitchBreak3.java
│           │               │   ├── TestSwitchBreak4.java
│           │               │   ├── TestSwitchContinue.java
│           │               │   ├── TestSwitchFallThrough.java
│           │               │   ├── TestSwitchInLoop.java
│           │               │   ├── TestSwitchInLoop2.java
│           │               │   ├── TestSwitchInLoop3.java
│           │               │   ├── TestSwitchInLoop4.java
│           │               │   ├── TestSwitchInLoop5.java
│           │               │   ├── TestSwitchInLoop6.java
│           │               │   ├── TestSwitchInLoop7.java
│           │               │   ├── TestSwitchInLoop8.java
│           │               │   ├── TestSwitchInLoop9.java
│           │               │   ├── TestSwitchLabels.java
│           │               │   ├── TestSwitchNoDefault.java
│           │               │   ├── TestSwitchOverStrings.java
│           │               │   ├── TestSwitchOverStrings2.java
│           │               │   ├── TestSwitchOverStrings3.java
│           │               │   ├── TestSwitchReturnFromCase.java
│           │               │   ├── TestSwitchReturnFromCase2.java
│           │               │   ├── TestSwitchSimple.java
│           │               │   ├── TestSwitchWithFallThroughCase.java
│           │               │   ├── TestSwitchWithFallThroughCase2.java
│           │               │   ├── TestSwitchWithThrow.java
│           │               │   └── TestSwitchWithTryCatch.java
│           │               ├── synchronize/
│           │               │   ├── TestNestedSynchronize.java
│           │               │   ├── TestSynchronized.java
│           │               │   ├── TestSynchronized2.java
│           │               │   ├── TestSynchronized3.java
│           │               │   ├── TestSynchronized4.java
│           │               │   ├── TestSynchronized5.java
│           │               │   └── TestSynchronized6.java
│           │               ├── trycatch/
│           │               │   ├── TestEmptyCatch.java
│           │               │   ├── TestEmptyFinally.java
│           │               │   ├── TestFinally.java
│           │               │   ├── TestFinally2.java
│           │               │   ├── TestFinally3.java
│           │               │   ├── TestFinallyExtract.java
│           │               │   ├── TestIfInTryCatch.java
│           │               │   ├── TestInlineInCatch.java
│           │               │   ├── TestLoopInTryCatch.java
│           │               │   ├── TestMultiExceptionCatch.java
│           │               │   ├── TestMultiExceptionCatch2.java
│           │               │   ├── TestMultiExceptionCatchSameJump.java
│           │               │   ├── TestNestedTryCatch.java
│           │               │   ├── TestNestedTryCatch2.java
│           │               │   ├── TestNestedTryCatch3.java
│           │               │   ├── TestNestedTryCatch4.java
│           │               │   ├── TestNestedTryCatch5.java
│           │               │   ├── TestTryAfterDeclaration.java
│           │               │   ├── TestTryCatch.java
│           │               │   ├── TestTryCatch10.java
│           │               │   ├── TestTryCatch11.java
│           │               │   ├── TestTryCatch2.java
│           │               │   ├── TestTryCatch6.java
│           │               │   ├── TestTryCatch7.java
│           │               │   ├── TestTryCatch8.java
│           │               │   ├── TestTryCatch9.java
│           │               │   ├── TestTryCatchFinally.java
│           │               │   ├── TestTryCatchFinally10.java
│           │               │   ├── TestTryCatchFinally11.java
│           │               │   ├── TestTryCatchFinally12.java
│           │               │   ├── TestTryCatchFinally13.java
│           │               │   ├── TestTryCatchFinally14.java
│           │               │   ├── TestTryCatchFinally15.java
│           │               │   ├── TestTryCatchFinally16.java
│           │               │   ├── TestTryCatchFinally17.java
│           │               │   ├── TestTryCatchFinally18.java
│           │               │   ├── TestTryCatchFinally19.java
│           │               │   ├── TestTryCatchFinally2.java
│           │               │   ├── TestTryCatchFinally3.java
│           │               │   ├── TestTryCatchFinally4.java
│           │               │   ├── TestTryCatchFinally5.java
│           │               │   ├── TestTryCatchFinally6.java
│           │               │   ├── TestTryCatchFinally7.java
│           │               │   ├── TestTryCatchFinally8.java
│           │               │   ├── TestTryCatchFinally9.java
│           │               │   ├── TestTryCatchInIf.java
│           │               │   ├── TestTryCatchInIf2.java
│           │               │   ├── TestTryCatchLastInsn.java
│           │               │   ├── TestTryCatchMultiException.java
│           │               │   ├── TestTryCatchMultiException2.java
│           │               │   ├── TestTryCatchNoMoveExc.java
│           │               │   ├── TestTryCatchNoMoveExc2.java
│           │               │   ├── TestTryCatchStartOnMove.java
│           │               │   ├── TestTryWithEmptyCatch.java
│           │               │   ├── TestTryWithEmptyCatchTriple.java
│           │               │   ├── TestTryWithResources.java
│           │               │   ├── TestUnreachableCatch.java
│           │               │   └── TestUnreachableCatch2.java
│           │               ├── types/
│           │               │   ├── TestArrayTypes.java
│           │               │   ├── TestConstInline.java
│           │               │   ├── TestConstTypeInference.java
│           │               │   ├── TestFieldAccess.java
│           │               │   ├── TestFieldCast.java
│           │               │   ├── TestGenerics.java
│           │               │   ├── TestGenerics2.java
│           │               │   ├── TestGenerics3.java
│           │               │   ├── TestGenerics4.java
│           │               │   ├── TestGenerics5.java
│           │               │   ├── TestGenerics6.java
│           │               │   ├── TestGenerics7.java
│           │               │   ├── TestGenerics8.java
│           │               │   ├── TestGenericsInFullInnerCls.java
│           │               │   ├── TestInterfacesCast.java
│           │               │   ├── TestLongCast.java
│           │               │   ├── TestPrimitiveConversion.java
│           │               │   ├── TestPrimitiveConversion2.java
│           │               │   ├── TestPrimitivesInIf.java
│           │               │   ├── TestTypeInheritance.java
│           │               │   ├── TestTypeResolver.java
│           │               │   ├── TestTypeResolver10.java
│           │               │   ├── TestTypeResolver11.java
│           │               │   ├── TestTypeResolver12.java
│           │               │   ├── TestTypeResolver13.java
│           │               │   ├── TestTypeResolver14.java
│           │               │   ├── TestTypeResolver15.java
│           │               │   ├── TestTypeResolver16.java
│           │               │   ├── TestTypeResolver17.java
│           │               │   ├── TestTypeResolver18.java
│           │               │   ├── TestTypeResolver19.java
│           │               │   ├── TestTypeResolver2.java
│           │               │   ├── TestTypeResolver20.java
│           │               │   ├── TestTypeResolver21.java
│           │               │   ├── TestTypeResolver22.java
│           │               │   ├── TestTypeResolver23.java
│           │               │   ├── TestTypeResolver24.java
│           │               │   ├── TestTypeResolver25.java
│           │               │   ├── TestTypeResolver26.java
│           │               │   ├── TestTypeResolver3.java
│           │               │   ├── TestTypeResolver4.java
│           │               │   ├── TestTypeResolver5.java
│           │               │   ├── TestTypeResolver6.java
│           │               │   ├── TestTypeResolver6a.java
│           │               │   ├── TestTypeResolver7.java
│           │               │   ├── TestTypeResolver8.java
│           │               │   └── TestTypeResolver9.java
│           │               ├── usethis/
│           │               │   ├── TestDontInlineThis.java
│           │               │   ├── TestInlineThis.java
│           │               │   ├── TestInlineThis2.java
│           │               │   └── TestRedundantThis.java
│           │               └── variables/
│           │                   ├── TestThisBranchDup.java
│           │                   ├── TestVariables2.java
│           │                   ├── TestVariables3.java
│           │                   ├── TestVariables4.java
│           │                   ├── TestVariables5.java
│           │                   ├── TestVariables6.java
│           │                   ├── TestVariablesDeclAnnotation.java
│           │                   ├── TestVariablesDefinitions.java
│           │                   ├── TestVariablesDefinitions2.java
│           │                   ├── TestVariablesGeneric.java
│           │                   ├── TestVariablesIfElseChain.java
│           │                   ├── TestVariablesInInlinedAssign.java
│           │                   ├── TestVariablesInLoop.java
│           │                   └── TestVariablesUsageWithLoops.java
│           ├── raung/
│           │   ├── enums/
│           │   │   └── TestEnums11.raung
│           │   ├── java8/
│           │   │   └── TestLambdaInstance3.raung
│           │   ├── jbc/
│           │   │   └── TestStackConvert.raung
│           │   ├── loops/
│           │   │   └── TestLoopRestore2.raung
│           │   └── others/
│           │       ├── TestClassImplementsSignature.raung
│           │       ├── TestJavaDup2x2.raung
│           │       ├── TestJavaJSR.raung
│           │       ├── TestJavaSwap.raung
│           │       └── TestStringConcatJava11.raung
│           ├── resources/
│           │   ├── logback.xml
│           │   ├── manifest/
│           │   │   ├── IllegalCharsForGradleWrapper.xml
│           │   │   ├── MinSdkVersion25.xml
│           │   │   ├── OptionalTargetSdkVersion.xml
│           │   │   └── strings.xml
│           │   ├── mockito-extensions/
│           │   │   └── org.mockito.plugins.MockMaker
│           │   └── test-samples/
│           │       ├── app-with-fake-dex.apk
│           │       └── hello.dex
│           └── smali/
│               ├── arith/
│               │   ├── TestArithConst.smali
│               │   ├── TestArithNot.smali
│               │   └── TestXor.smali
│               ├── arrays/
│               │   ├── TestArrayFillWithMove/
│               │   │   └── TestCls.smali
│               │   ├── TestArrayInitField2.smali
│               │   └── TestFillArrayData/
│               │       └── TestCls.smali
│               ├── conditions/
│               │   ├── TestBooleanToByte.smali
│               │   ├── TestBooleanToChar.smali
│               │   ├── TestBooleanToDouble.smali
│               │   ├── TestBooleanToFloat.smali
│               │   ├── TestBooleanToInt.smali
│               │   ├── TestBooleanToInt2.smali
│               │   ├── TestBooleanToLong.smali
│               │   ├── TestBooleanToShort.smali
│               │   ├── TestComplexIf.smali
│               │   ├── TestComplexIf2.smali
│               │   ├── TestComplexIf3.smali
│               │   ├── TestComplexIf4.smali
│               │   ├── TestConditions18.smali
│               │   ├── TestConditions21.smali
│               │   ├── TestIfAndSwitch.smali
│               │   ├── TestIfCodeStyle.smali
│               │   ├── TestIfCodeStyle2.smali
│               │   ├── TestIfElseAndConditionIntermediateInstruction.smali
│               │   ├── TestInnerAssign3.smali
│               │   ├── TestOutBlock.smali
│               │   ├── TestTernary4.smali
│               │   ├── TestTernaryInIf2.smali
│               │   ├── TestTernaryInIf3.smali
│               │   └── TestTernaryOneBranchInConstructor2.smali
│               ├── debuginfo/
│               │   └── TestVariablesNames.smali
│               ├── enums/
│               │   ├── TestEnumKotlinEntries.smali
│               │   ├── TestEnumObfuscated.smali
│               │   ├── TestEnumUsesOtherEnum.smali
│               │   ├── TestEnumWithFields.smali
│               │   ├── TestEnums10.smali
│               │   ├── TestEnums5.smali
│               │   ├── TestEnums8.smali
│               │   ├── TestEnumsWithStaticFields.smali
│               │   └── TestSwitchOverEnum/
│               │       ├── Count.smali
│               │       └── TestSwitchOverEnum.smali
│               ├── fallback/
│               │   └── TestFallbackManyNops.smali
│               ├── generics/
│               │   ├── TestClassSignature.smali
│               │   ├── TestMethodOverride.smali
│               │   ├── TestMissingGenericsTypes2.smali
│               │   └── TestSyntheticOverride/
│               │       ├── KotlinFunction1.smali
│               │       └── TestSyntheticOverride.smali
│               ├── inline/
│               │   ├── TestGetterInlineNegative.smali
│               │   ├── TestInline7.smali
│               │   ├── TestInstanceLambda/
│               │   │   ├── Lambda.smali
│               │   │   └── TestCls.smali
│               │   ├── TestMethodInline/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   ├── TestOverlapSyntheticMethods.smali
│               │   ├── TestOverrideBridgeMerge.smali
│               │   ├── TestSyntheticClassInline/
│               │   │   ├── A.smali
│               │   │   └── B.smali
│               │   └── TestSyntheticInline3/
│               │       ├── KotlinFunction1.smali
│               │       ├── TestSyntheticInline3$onCreate$1.smali
│               │       └── TestSyntheticInline3.smali
│               ├── inner/
│               │   ├── TestAnonymousClass14/
│               │   │   ├── OuterCls$1.smali
│               │   │   ├── OuterCls$TestCls.smali
│               │   │   └── OuterCls.smali
│               │   ├── TestAnonymousClass19/
│               │   │   ├── ATestCls.smali
│               │   │   └── Lambda$TestCls$1.smali
│               │   ├── TestIncorrectAnonymousClass/
│               │   │   ├── TestCls$1.smali
│               │   │   └── TestCls.smali
│               │   ├── TestInnerClassFakeSyntheticConstructor.smali
│               │   ├── TestInnerClassSyntheticRename.smali
│               │   ├── TestNestedAnonymousClass/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   └── TestSyntheticMthRename/
│               │       ├── TestCls$A.smali
│               │       ├── TestCls$I.smali
│               │       └── TestCls.smali
│               ├── invoke/
│               │   ├── TestCastInOverloadedInvoke2.smali
│               │   ├── TestConstructorWithMoves.smali
│               │   ├── TestPolymorphicInvoke.smali
│               │   └── TestRawCustomInvoke.smali
│               ├── loops/
│               │   ├── TestBreakInLoop6.smali
│               │   ├── TestEndlessLoop2.smali
│               │   ├── TestIfInLoop4.smali
│               │   ├── TestLoopCondition5.smali
│               │   ├── TestLoopRestore.smali
│               │   ├── TestLoopRestore3.smali
│               │   ├── TestMultiEntryLoop.smali
│               │   └── TestMultiEntryLoop2.smali
│               ├── names/
│               │   ├── TestCaseSensitiveChecks/
│               │   │   ├── 1.smali
│               │   │   └── 2.smali
│               │   ├── TestClassNameWithInvalidChar/
│               │   │   ├── a.smali
│               │   │   └── b.smali
│               │   ├── TestDefPkgRename/
│               │   │   ├── a.smali
│               │   │   └── b.smali
│               │   ├── TestDuplicatedNames.smali
│               │   ├── TestFieldCollideWithPackage/
│               │   │   ├── 1.smali
│               │   │   └── 2.smali
│               │   ├── TestLocalVarCollideWithPackage/
│               │   │   ├── 1.smali
│               │   │   ├── 2.smali
│               │   │   └── 3.smali
│               │   ├── TestReservedClassNames.smali
│               │   ├── TestReservedNames.smali
│               │   └── TestReservedPackageNames/
│               │       └── a.smali
│               ├── others/
│               │   ├── TestAllNops.smali
│               │   ├── TestBadClassAccessModifiers/
│               │   │   ├── A.smali
│               │   │   ├── B$BB$BBB.smali
│               │   │   ├── B$BB.smali
│               │   │   └── B.smali
│               │   ├── TestBadMethodAccessModifiers/
│               │   │   ├── TestCls$A.smali
│               │   │   ├── TestCls$B.smali
│               │   │   └── TestCls.smali
│               │   ├── TestConstructor.smali
│               │   ├── TestConstructor2/
│               │   │   ├── A.smali
│               │   │   └── TestConstructor2.smali
│               │   ├── TestConstructorBranched.smali
│               │   ├── TestConstructorBranched2.smali
│               │   ├── TestConstructorBranched3.smali
│               │   ├── TestDeadBlockReferencesStart.smali
│               │   ├── TestExplicitOverride.smali
│               │   ├── TestFieldInitOrder2.smali
│               │   ├── TestFieldUsageMove.smali
│               │   ├── TestFixClassAccessModifiers/
│               │   │   ├── Cls.smali
│               │   │   ├── InnerCls.smali
│               │   │   └── TestCls.smali
│               │   ├── TestIncorrectFieldSignature.smali
│               │   ├── TestIncorrectMethodSignature.smali
│               │   ├── TestInlineVarArg.smali
│               │   ├── TestInsnsBeforeSuper/
│               │   │   ├── A.smali
│               │   │   └── B.smali
│               │   ├── TestInsnsBeforeSuper2.smali
│               │   ├── TestInsnsBeforeThis.smali
│               │   ├── TestInvalidExceptions.smali
│               │   ├── TestInvalidExceptions2.smali
│               │   ├── TestMissingExceptions.smali
│               │   ├── TestMoveInline.smali
│               │   ├── TestMultipleNOPs/
│               │   │   └── test.smali
│               │   ├── TestN21.smali
│               │   ├── TestOverridePackagePrivateMethod/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   ├── TestOverrideWithSameName/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   ├── TestSuperLoop/
│               │   │   ├── A.smali
│               │   │   └── B.smali
│               │   ├── TestSyntheticConstructor/
│               │   │   ├── BuggyConstructor.smali
│               │   │   └── Test.smali
│               │   └── TestUsageApacheHttpClient.smali
│               ├── rename/
│               │   └── TestUsingSourceFileName/
│               │       └── b.smali
│               ├── special/
│               │   └── TestPackageInfoSupport/
│               │       ├── pkg1.smali
│               │       ├── pkg2.smali
│               │       └── pkg3.smali
│               ├── switches/
│               │   ├── TestSwitchOverStrings3.smali
│               │   └── TestSwitchOverStrings4.smali
│               ├── synchronize/
│               │   ├── TestNestedSynchronize.smali
│               │   ├── TestSynchronized4.smali
│               │   ├── TestSynchronized5.smali
│               │   └── TestSynchronized6.smali
│               ├── trycatch/
│               │   ├── TestEmptyCatch.smali
│               │   ├── TestFinally3.smali
│               │   ├── TestLoopInTryCatch.smali
│               │   ├── TestMultiExceptionCatchSameJump.smali
│               │   ├── TestNestedTryCatch4.smali
│               │   ├── TestNestedTryCatch5.smali
│               │   ├── TestTryCatch10.smali
│               │   ├── TestTryCatchFinally10.smali
│               │   ├── TestTryCatchFinally15.smali
│               │   ├── TestTryCatchLastInsn.smali
│               │   ├── TestTryCatchMultiException2.smali
│               │   ├── TestTryCatchNoMoveExc.smali
│               │   ├── TestTryCatchNoMoveExc2.smali
│               │   ├── TestTryCatchStartOnMove.smali
│               │   ├── TestTryWithEmptyCatchTriple.smali
│               │   └── TestUnreachableCatch.smali
│               ├── types/
│               │   ├── TestConstInline.smali
│               │   ├── TestGenerics2.smali
│               │   ├── TestGenericsInFullInnerCls/
│               │   │   ├── FieldCls.smali
│               │   │   ├── ba.smali
│               │   │   ├── bb.smali
│               │   │   ├── bc.smali
│               │   │   └── n.smali
│               │   ├── TestPrimitiveConversion.smali
│               │   ├── TestPrimitiveConversion2.smali
│               │   ├── TestTypeResolver10.smali
│               │   ├── TestTypeResolver14.smali
│               │   ├── TestTypeResolver15.smali
│               │   ├── TestTypeResolver16.smali
│               │   ├── TestTypeResolver17.smali
│               │   ├── TestTypeResolver20/
│               │   │   ├── Sequence.smali
│               │   │   └── TestTypeResolver20.smali
│               │   ├── TestTypeResolver21.smali
│               │   ├── TestTypeResolver24/
│               │   │   ├── T1.smali
│               │   │   ├── T2.smali
│               │   │   └── Test1.smali
│               │   ├── TestTypeResolver25.smali
│               │   ├── TestTypeResolver5.smali
│               │   └── TestTypeResolver8/
│               │       ├── A.smali
│               │       ├── B.smali
│               │       └── TestCls.smali
│               └── variables/
│                   ├── TestThisBranchDup.smali
│                   ├── TestVariables6.smali
│                   ├── TestVariablesGeneric.smali
│                   └── TestVariablesInLoop.smali
├── jadx-gui/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jadx/
│       │   │       └── gui/
│       │   │           ├── JadxGUI.java
│       │   │           ├── JadxWrapper.java
│       │   │           ├── cache/
│       │   │           │   ├── code/
│       │   │           │   │   ├── CodeCacheMode.java
│       │   │           │   │   ├── CodeStringCache.java
│       │   │           │   │   ├── FixedCodeCache.java
│       │   │           │   │   └── disk/
│       │   │           │   │       ├── BufferCodeCache.java
│       │   │           │   │       ├── CodeMetadataAdapter.java
│       │   │           │   │       ├── DiskCodeCache.java
│       │   │           │   │       └── adapters/
│       │   │           │   │           ├── ArgTypeAdapter.java
│       │   │           │   │           ├── ClassNodeAdapter.java
│       │   │           │   │           ├── CodeAnnotationAdapter.java
│       │   │           │   │           ├── DataAdapter.java
│       │   │           │   │           ├── DataAdapterHelper.java
│       │   │           │   │           ├── FieldNodeAdapter.java
│       │   │           │   │           ├── InsnCodeOffsetAdapter.java
│       │   │           │   │           ├── MethodNodeAdapter.java
│       │   │           │   │           ├── NodeDeclareRefAdapter.java
│       │   │           │   │           ├── NodeEndAdapter.java
│       │   │           │   │           ├── VarNodeAdapter.java
│       │   │           │   │           └── VarRefAdapter.java
│       │   │           │   ├── manager/
│       │   │           │   │   ├── CacheEntry.java
│       │   │           │   │   └── CacheManager.java
│       │   │           │   └── usage/
│       │   │           │       ├── CachedMethodRef.java
│       │   │           │       ├── ClsUsageData.java
│       │   │           │       ├── CollectUsageData.java
│       │   │           │       ├── FldRef.java
│       │   │           │       ├── FldUsageData.java
│       │   │           │       ├── MthRef.java
│       │   │           │       ├── MthUsageData.java
│       │   │           │       ├── RawUsageData.java
│       │   │           │       ├── UsageCacheMode.java
│       │   │           │       ├── UsageData.java
│       │   │           │       ├── UsageFileAdapter.java
│       │   │           │       └── UsageInfoCache.java
│       │   │           ├── device/
│       │   │           │   ├── debugger/
│       │   │           │   │   ├── ArtAdapter.java
│       │   │           │   │   ├── BreakpointManager.java
│       │   │           │   │   ├── DbgUtils.java
│       │   │           │   │   ├── DebugController.java
│       │   │           │   │   ├── DebugSettings.java
│       │   │           │   │   ├── EventListenerAdapter.java
│       │   │           │   │   ├── LogcatController.java
│       │   │           │   │   ├── RegisterObserver.java
│       │   │           │   │   ├── RuntimeType.java
│       │   │           │   │   ├── SmaliDebugger.java
│       │   │           │   │   ├── SmaliDebuggerException.java
│       │   │           │   │   ├── SuspendInfo.java
│       │   │           │   │   └── smali/
│       │   │           │   │       ├── RegisterInfo.java
│       │   │           │   │       ├── Smali.java
│       │   │           │   │       ├── SmaliMethodNode.java
│       │   │           │   │       ├── SmaliRegister.java
│       │   │           │   │       └── SmaliWriter.java
│       │   │           │   └── protocol/
│       │   │           │       ├── ADB.java
│       │   │           │       ├── ADBDevice.java
│       │   │           │       └── ADBDeviceInfo.java
│       │   │           ├── events/
│       │   │           │   ├── JadxGuiEvents.java
│       │   │           │   ├── services/
│       │   │           │   │   └── RenameService.java
│       │   │           │   └── types/
│       │   │           │       ├── JadxGuiEventsImpl.java
│       │   │           │       └── TreeUpdate.java
│       │   │           ├── jobs/
│       │   │           │   ├── BackgroundExecutor.java
│       │   │           │   ├── Cancelable.java
│       │   │           │   ├── CancelableBackgroundTask.java
│       │   │           │   ├── DecompileTask.java
│       │   │           │   ├── ExportTask.java
│       │   │           │   ├── IBackgroundTask.java
│       │   │           │   ├── ITaskInfo.java
│       │   │           │   ├── ITaskProgress.java
│       │   │           │   ├── InternalTask.java
│       │   │           │   ├── LoadTask.java
│       │   │           │   ├── ProcessResult.java
│       │   │           │   ├── ProgressUpdater.java
│       │   │           │   ├── SilentTask.java
│       │   │           │   ├── SimpleTask.java
│       │   │           │   ├── TaskProgress.java
│       │   │           │   ├── TaskStatus.java
│       │   │           │   └── TaskWithExtraOnFinish.java
│       │   │           ├── logs/
│       │   │           │   ├── ILogListener.java
│       │   │           │   ├── IssuesListener.java
│       │   │           │   ├── LimitedQueue.java
│       │   │           │   ├── LogAppender.java
│       │   │           │   ├── LogCollector.java
│       │   │           │   ├── LogEvent.java
│       │   │           │   ├── LogMode.java
│       │   │           │   ├── LogOptions.java
│       │   │           │   └── LogPanel.java
│       │   │           ├── plugins/
│       │   │           │   ├── context/
│       │   │           │   │   ├── CodePopupAction.java
│       │   │           │   │   ├── CommonGuiPluginsContext.java
│       │   │           │   │   ├── GuiPluginContext.java
│       │   │           │   │   ├── GuiSettingsContext.java
│       │   │           │   │   ├── ITreeInputCategory.java
│       │   │           │   │   └── TreePopupMenuEntry.java
│       │   │           │   ├── mappings/
│       │   │           │   │   ├── JInputMapping.java
│       │   │           │   │   └── RenameMappingsGui.java
│       │   │           │   └── quark/
│       │   │           │       ├── QuarkDialog.java
│       │   │           │       ├── QuarkManager.java
│       │   │           │       ├── QuarkReportData.java
│       │   │           │       ├── QuarkReportNode.java
│       │   │           │       └── QuarkReportPanel.java
│       │   │           ├── report/
│       │   │           │   ├── ExceptionData.java
│       │   │           │   ├── ExceptionDialog.java
│       │   │           │   └── JadxExceptionHandler.java
│       │   │           ├── search/
│       │   │           │   ├── ISearchMethod.java
│       │   │           │   ├── ISearchProvider.java
│       │   │           │   ├── SearchJob.java
│       │   │           │   ├── SearchSettings.java
│       │   │           │   ├── SearchTask.java
│       │   │           │   └── providers/
│       │   │           │       ├── BaseSearchProvider.java
│       │   │           │       ├── ClassSearchProvider.java
│       │   │           │       ├── CodeSearchProvider.java
│       │   │           │       ├── CommentSearchProvider.java
│       │   │           │       ├── FieldSearchProvider.java
│       │   │           │       ├── MergedSearchProvider.java
│       │   │           │       ├── MethodSearchProvider.java
│       │   │           │       ├── ResourceFilter.java
│       │   │           │       └── ResourceSearchProvider.java
│       │   │           ├── settings/
│       │   │           │   ├── JadxConfigExcludeExport.java
│       │   │           │   ├── JadxGUIArgs.java
│       │   │           │   ├── JadxProject.java
│       │   │           │   ├── JadxSettings.java
│       │   │           │   ├── JadxSettingsData.java
│       │   │           │   ├── JadxUpdateChannel.java
│       │   │           │   ├── LineNumbersMode.java
│       │   │           │   ├── TabStateViewAdapter.java
│       │   │           │   ├── WindowLocation.java
│       │   │           │   ├── XposedCodegenLanguage.java
│       │   │           │   ├── data/
│       │   │           │   │   ├── ITabStatePersist.java
│       │   │           │   │   ├── ProjectData.java
│       │   │           │   │   ├── SaveOptionEnum.java
│       │   │           │   │   ├── ShortcutsWrapper.java
│       │   │           │   │   ├── TabViewState.java
│       │   │           │   │   └── ViewPoint.java
│       │   │           │   ├── font/
│       │   │           │   │   ├── FontAdapter.java
│       │   │           │   │   └── FontSettings.java
│       │   │           │   └── ui/
│       │   │           │       ├── JadxSettingsWindow.java
│       │   │           │       ├── SettingsGroup.java
│       │   │           │       ├── SettingsTree.java
│       │   │           │       ├── SettingsTreeNode.java
│       │   │           │       ├── SubSettingsGroup.java
│       │   │           │       ├── cache/
│       │   │           │       │   ├── CacheSettingsGroup.java
│       │   │           │       │   ├── CachesTable.java
│       │   │           │       │   ├── CachesTableModel.java
│       │   │           │       │   ├── CachesTableRenderer.java
│       │   │           │       │   └── TableRow.java
│       │   │           │       ├── font/
│       │   │           │       │   ├── FontChooserHack.java
│       │   │           │       │   └── JadxFontDialog.java
│       │   │           │       ├── plugins/
│       │   │           │       │   ├── AvailablePluginNode.java
│       │   │           │       │   ├── BasePluginListNode.java
│       │   │           │       │   ├── InstallPluginDialog.java
│       │   │           │       │   ├── InstalledPluginNode.java
│       │   │           │       │   ├── LoadedPluginNode.java
│       │   │           │       │   ├── PluginAction.java
│       │   │           │       │   ├── PluginSettings.java
│       │   │           │       │   ├── PluginSettingsGroup.java
│       │   │           │       │   └── TitleNode.java
│       │   │           │       └── shortcut/
│       │   │           │           ├── ShortcutEdit.java
│       │   │           │           └── ShortcutsSettingsGroup.java
│       │   │           ├── tree/
│       │   │           │   └── TreeExpansionService.java
│       │   │           ├── treemodel/
│       │   │           │   ├── ApkSignatureNode.java
│       │   │           │   ├── CodeNode.java
│       │   │           │   ├── JClass.java
│       │   │           │   ├── JEditableNode.java
│       │   │           │   ├── JField.java
│       │   │           │   ├── JInputFile.java
│       │   │           │   ├── JInputFiles.java
│       │   │           │   ├── JInputSmaliFile.java
│       │   │           │   ├── JInputs.java
│       │   │           │   ├── JLoadableNode.java
│       │   │           │   ├── JMethod.java
│       │   │           │   ├── JNode.java
│       │   │           │   ├── JPackage.java
│       │   │           │   ├── JRenameNode.java
│       │   │           │   ├── JResSearchNode.java
│       │   │           │   ├── JResource.java
│       │   │           │   ├── JRoot.java
│       │   │           │   ├── JSources.java
│       │   │           │   ├── JSubResource.java
│       │   │           │   ├── JVariable.java
│       │   │           │   └── TextNode.java
│       │   │           ├── ui/
│       │   │           │   ├── HeapUsageBar.java
│       │   │           │   ├── JadxEventQueue.java
│       │   │           │   ├── MainDropTarget.java
│       │   │           │   ├── MainWindow.java
│       │   │           │   ├── action/
│       │   │           │   │   ├── ActionCategory.java
│       │   │           │   │   ├── ActionModel.java
│       │   │           │   │   ├── CodeAreaAction.java
│       │   │           │   │   ├── CommentSearchAction.java
│       │   │           │   │   ├── FindUsageAction.java
│       │   │           │   │   ├── FridaAction.java
│       │   │           │   │   ├── GoToDeclarationAction.java
│       │   │           │   │   ├── IShortcutAction.java
│       │   │           │   │   ├── JNodeAction.java
│       │   │           │   │   ├── JadxAutoCompletion.java
│       │   │           │   │   ├── JadxGuiAction.java
│       │   │           │   │   ├── JsonPrettifyAction.java
│       │   │           │   │   ├── RenameAction.java
│       │   │           │   │   ├── ViewCallGraphAction.java
│       │   │           │   │   ├── ViewClassInheritanceGraphAction.java
│       │   │           │   │   ├── ViewClassMethodGraphAction.java
│       │   │           │   │   ├── ViewControlFlowGraphAction.java
│       │   │           │   │   ├── ViewRawControlFlowGraphAction.java
│       │   │           │   │   ├── ViewRegionControlFlowGraphAction.java
│       │   │           │   │   └── XposedAction.kt
│       │   │           │   ├── cellrenders/
│       │   │           │   │   ├── MethodRenderHelper.java
│       │   │           │   │   ├── MethodsListRenderer.java
│       │   │           │   │   └── PathHighlightTreeCellRenderer.java
│       │   │           │   ├── codearea/
│       │   │           │   │   ├── AbstractCodeArea.java
│       │   │           │   │   ├── AbstractCodeContentPanel.java
│       │   │           │   │   ├── BinaryContentPanel.java
│       │   │           │   │   ├── ClassCodeContentPanel.java
│       │   │           │   │   ├── CodeArea.java
│       │   │           │   │   ├── CodeContentPanel.java
│       │   │           │   │   ├── CodeLinkGenerator.java
│       │   │           │   │   ├── CodePanel.java
│       │   │           │   │   ├── CommentAction.java
│       │   │           │   │   ├── ConvertNumberAction.java
│       │   │           │   │   ├── EditorViewState.java
│       │   │           │   │   ├── JNodePopupBuilder.java
│       │   │           │   │   ├── JNodePopupListener.java
│       │   │           │   │   ├── JadxTokenMaker.java
│       │   │           │   │   ├── MouseHoverHighlighter.java
│       │   │           │   │   ├── SearchBar.java
│       │   │           │   │   ├── SimpleTokenMaker.java
│       │   │           │   │   ├── SmaliArea.java
│       │   │           │   │   ├── SmaliFoldParser.java
│       │   │           │   │   ├── SmaliTokenMaker.java
│       │   │           │   │   ├── SourceLineFormatter.java
│       │   │           │   │   ├── UsageDialogPlusAction.java
│       │   │           │   │   ├── mode/
│       │   │           │   │   │   └── JCodeMode.java
│       │   │           │   │   ├── sync/
│       │   │           │   │   │   ├── CodeMetadataRange.java
│       │   │           │   │   │   ├── CodePanelSyncee.java
│       │   │           │   │   │   ├── CodePanelSyncer.java
│       │   │           │   │   │   ├── CodePanelSyncerAbstractFactory.java
│       │   │           │   │   │   ├── CodeSyncHighlighter.java
│       │   │           │   │   │   ├── DebugLineJavaSyncer.java
│       │   │           │   │   │   ├── DebugLineSmaliSyncer.java
│       │   │           │   │   │   ├── IToJavaSyncStrategy.java
│       │   │           │   │   │   ├── IToSmaliSyncStrategy.java
│       │   │           │   │   │   ├── InsnOffsetJavaSyncer.java
│       │   │           │   │   │   ├── InsnOffsetSmaliSyncer.java
│       │   │           │   │   │   ├── JavaSyncer.java
│       │   │           │   │   │   ├── SmaliSyncer.java
│       │   │           │   │   │   └── fallback/
│       │   │           │   │   │       ├── AbstractCodeAreaLine.java
│       │   │           │   │   │       ├── AbstractCodeAreaToken.java
│       │   │           │   │   │       ├── ClassDeclaration.java
│       │   │           │   │   │       ├── FallbackSyncException.java
│       │   │           │   │   │       ├── FallbackSyncer.java
│       │   │           │   │   │       ├── IDeclaration.java
│       │   │           │   │   │       ├── JavaCodeAreaLine.java
│       │   │           │   │   │       ├── JavaCodeAreaToken.java
│       │   │           │   │   │       ├── MethodDeclaration.java
│       │   │           │   │   │       ├── SmaliAreaLine.java
│       │   │           │   │   │       └── SmaliAreaToken.java
│       │   │           │   │   └── theme/
│       │   │           │   │       ├── DynamicCodeAreaTheme.java
│       │   │           │   │       ├── EditorThemeManager.java
│       │   │           │   │       ├── FallbackEditorTheme.java
│       │   │           │   │       ├── IEditorTheme.java
│       │   │           │   │       ├── RSTABundledTheme.java
│       │   │           │   │       ├── RSTAThemeXML.java
│       │   │           │   │       └── ThemeIdAndName.java
│       │   │           │   ├── dialog/
│       │   │           │   │   ├── ADBDialog.java
│       │   │           │   │   ├── AboutDialog.java
│       │   │           │   │   ├── CallGraphDialog.java
│       │   │           │   │   ├── CharsetDialog.java
│       │   │           │   │   ├── ClassInheritanceGraphDialog.java
│       │   │           │   │   ├── ClassMethodGraphDialog.java
│       │   │           │   │   ├── CommentDialog.java
│       │   │           │   │   ├── CommonDialog.java
│       │   │           │   │   ├── CommonSearchDialog.java
│       │   │           │   │   ├── ControlFlowGraphDialog.java
│       │   │           │   │   ├── ExcludePkgDialog.java
│       │   │           │   │   ├── GotoAddressDialog.java
│       │   │           │   │   ├── GraphDialog.java
│       │   │           │   │   ├── LogViewerDialog.java
│       │   │           │   │   ├── MethodsDialog.java
│       │   │           │   │   ├── RenameDialog.java
│       │   │           │   │   ├── SearchDialog.java
│       │   │           │   │   ├── SetValueDialog.java
│       │   │           │   │   ├── UsageDialog.java
│       │   │           │   │   └── UsageDialogPlus.java
│       │   │           │   ├── export/
│       │   │           │   │   ├── ExportProjectDialog.java
│       │   │           │   │   └── ExportProjectProperties.java
│       │   │           │   ├── filedialog/
│       │   │           │   │   ├── CustomFileChooser.java
│       │   │           │   │   ├── CustomFileDialog.java
│       │   │           │   │   ├── FileDialogWrapper.java
│       │   │           │   │   ├── FileNameMultiExtensionFilter.java
│       │   │           │   │   └── FileOpenMode.java
│       │   │           │   ├── hexviewer/
│       │   │           │   │   ├── BinEdCodeAreaAssessor.java
│       │   │           │   │   ├── HexEditorHeader.java
│       │   │           │   │   ├── HexInspectorPanel.java
│       │   │           │   │   ├── HexPreviewPanel.java
│       │   │           │   │   ├── HexSearchBar.java
│       │   │           │   │   └── search/
│       │   │           │   │       ├── BinarySearch.java
│       │   │           │   │       ├── SearchCondition.java
│       │   │           │   │       ├── SearchParameters.java
│       │   │           │   │       └── service/
│       │   │           │   │           ├── BinarySearchService.java
│       │   │           │   │           └── BinarySearchServiceImpl.java
│       │   │           │   ├── menu/
│       │   │           │   │   ├── HiddenMenuItem.java
│       │   │           │   │   ├── JadxMenu.java
│       │   │           │   │   └── JadxMenuBar.java
│       │   │           │   ├── panel/
│       │   │           │   │   ├── ContentPanel.java
│       │   │           │   │   ├── FontPanel.java
│       │   │           │   │   ├── HtmlPanel.java
│       │   │           │   │   ├── IDebugController.java
│       │   │           │   │   ├── IViewStateSupport.java
│       │   │           │   │   ├── ImagePanel.java
│       │   │           │   │   ├── IssuesPanel.java
│       │   │           │   │   ├── JDebuggerPanel.java
│       │   │           │   │   ├── LogcatPanel.java
│       │   │           │   │   ├── ProgressPanel.java
│       │   │           │   │   ├── SimpleCodePanel.java
│       │   │           │   │   └── UndisplayedStringsPanel.java
│       │   │           │   ├── popupmenu/
│       │   │           │   │   ├── JClassExportType.java
│       │   │           │   │   ├── JClassPopupMenu.java
│       │   │           │   │   ├── JPackagePopupMenu.java
│       │   │           │   │   ├── JResourcePopupMenu.java
│       │   │           │   │   ├── RecentProjectsMenuListener.java
│       │   │           │   │   └── VarTreePopupMenu.java
│       │   │           │   ├── startpage/
│       │   │           │   │   ├── RecentProjectItem.java
│       │   │           │   │   ├── RecentProjectListCellRenderer.java
│       │   │           │   │   ├── StartPageNode.java
│       │   │           │   │   └── StartPagePanel.java
│       │   │           │   ├── tab/
│       │   │           │   │   ├── EditorSyncManager.java
│       │   │           │   │   ├── ITabStatesListener.java
│       │   │           │   │   ├── LogTabStates.java
│       │   │           │   │   ├── NavigationController.java
│       │   │           │   │   ├── QuickTabsBaseNode.java
│       │   │           │   │   ├── QuickTabsBookmarkParentNode.java
│       │   │           │   │   ├── QuickTabsChildNode.java
│       │   │           │   │   ├── QuickTabsOpenParentNode.java
│       │   │           │   │   ├── QuickTabsParentNode.java
│       │   │           │   │   ├── QuickTabsPinParentNode.java
│       │   │           │   │   ├── QuickTabsTree.java
│       │   │           │   │   ├── TabBlueprint.java
│       │   │           │   │   ├── TabComponent.java
│       │   │           │   │   ├── TabbedPane.java
│       │   │           │   │   ├── TabsController.java
│       │   │           │   │   └── dnd/
│       │   │           │   │       ├── TabDndController.java
│       │   │           │   │       ├── TabDndGestureListener.java
│       │   │           │   │       ├── TabDndGhostPane.java
│       │   │           │   │       ├── TabDndGhostType.java
│       │   │           │   │       ├── TabDndSourceListener.java
│       │   │           │   │       ├── TabDndTargetListener.java
│       │   │           │   │       └── TabDndTransferable.java
│       │   │           │   └── treenodes/
│       │   │           │       ├── SummaryNode.java
│       │   │           │       └── UndisplayedStringsNode.java
│       │   │           ├── update/
│       │   │           │   └── JadxUpdate.kt
│       │   │           └── utils/
│       │   │               ├── CacheObject.java
│       │   │               ├── CaretPositionFix.java
│       │   │               ├── CertificateManager.java
│       │   │               ├── DefaultPopupMenuListener.java
│       │   │               ├── DesktopEntryUtils.java
│       │   │               ├── FontUtils.java
│       │   │               ├── HexUtils.java
│       │   │               ├── ILoadListener.java
│       │   │               ├── IOUtils.java
│       │   │               ├── Icons.java
│       │   │               ├── IconsCache.java
│       │   │               ├── JNodeCache.java
│       │   │               ├── JumpManager.java
│       │   │               ├── JumpPosition.java
│       │   │               ├── LafManager.java
│       │   │               ├── LangLocale.java
│       │   │               ├── Link.java
│       │   │               ├── NLS.java
│       │   │               ├── ObjectPool.java
│       │   │               ├── OverlayIcon.java
│       │   │               ├── PathTypeAdapter.java
│       │   │               ├── RectangleTypeAdapter.java
│       │   │               ├── RelativePathTypeAdapter.java
│       │   │               ├── SimpleListener.java
│       │   │               ├── TextStandardActions.java
│       │   │               ├── UiUtils.java
│       │   │               ├── cache/
│       │   │               │   └── ValueCache.java
│       │   │               ├── dbg/
│       │   │               │   └── UIWatchDog.java
│       │   │               ├── files/
│       │   │               │   └── JadxFiles.java
│       │   │               ├── fileswatcher/
│       │   │               │   ├── FilesWatcher.java
│       │   │               │   └── LiveReloadWorker.java
│       │   │               ├── layout/
│       │   │               │   └── WrapLayout.java
│       │   │               ├── pkgs/
│       │   │               │   ├── JRenamePackage.java
│       │   │               │   └── PackageHelper.java
│       │   │               ├── plugins/
│       │   │               │   ├── CloseablePlugins.java
│       │   │               │   ├── CollectPlugins.java
│       │   │               │   ├── PluginWithOptions.java
│       │   │               │   ├── SettingsGroupPluginWrap.java
│       │   │               │   └── TreeInputsHelper.java
│       │   │               ├── res/
│       │   │               │   └── ResTableHelper.java
│       │   │               ├── rx/
│       │   │               │   ├── CustomDisposable.java
│       │   │               │   ├── DebounceUpdate.java
│       │   │               │   └── RxUtils.java
│       │   │               ├── shortcut/
│       │   │               │   ├── Shortcut.java
│       │   │               │   └── ShortcutsController.java
│       │   │               ├── tools/
│       │   │               │   └── SyncNLSLines.java
│       │   │               └── ui/
│       │   │                   ├── ActionHandler.java
│       │   │                   ├── DocumentUpdateListener.java
│       │   │                   ├── FileOpenerHelper.java
│       │   │                   ├── MousePressedHandler.java
│       │   │                   ├── NodeLabel.java
│       │   │                   ├── SimpleMenuItem.java
│       │   │                   └── ZoomActions.java
│       │   └── resources/
│       │       ├── files/
│       │       │   └── jadx-gui.desktop.tmpl
│       │       └── i18n/
│       │           ├── Messages_de_DE.properties
│       │           ├── Messages_en_US.properties
│       │           ├── Messages_es_ES.properties
│       │           ├── Messages_id_ID.properties
│       │           ├── Messages_ko_KR.properties
│       │           ├── Messages_pt_BR.properties
│       │           ├── Messages_ru_RU.properties
│       │           ├── Messages_zh_CN.properties
│       │           └── Messages_zh_TW.properties
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       └── gui/
│           │           ├── TestI18n.java
│           │           ├── device/
│           │           │   └── debugger/
│           │           │       └── smali/
│           │           │           └── DbgSmaliTest.java
│           │           ├── ui/
│           │           │   └── codearea/
│           │           │       └── ConvertNumberActionTest.java
│           │           ├── update/
│           │           │   └── TestJadxUpdate.kt
│           │           └── utils/
│           │               ├── CertificateManagerTest.java
│           │               ├── JumpManagerTest.java
│           │               ├── cache/
│           │               │   └── code/
│           │               │       ├── DiskCodeCacheTest.java
│           │               │       └── disk/
│           │               │           └── adapters/
│           │               │               └── DataAdapterHelperTest.java
│           │               └── pkgs/
│           │                   └── TestJRenamePackage.java
│           ├── resources/
│           │   ├── certificate-test/
│           │   │   ├── CERT.DSA
│           │   │   ├── CERT.RSA
│           │   │   └── EMPTY.txt
│           │   └── logback-test.xml
│           └── smali/
│               ├── params.smali
│               └── switch.smali
├── jadx-plugins/
│   ├── jadx-aab-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── aab/
│   │           │                   ├── AabInputPlugin.java
│   │           │                   ├── ResTableProtoParserProvider.java
│   │           │                   ├── factories/
│   │           │                   │   ├── ProtoAppDependenciesResContainerFactory.java
│   │           │                   │   ├── ProtoAssetsConfigResContainerFactory.java
│   │           │                   │   ├── ProtoBundleConfigResContainerFactory.java
│   │           │                   │   ├── ProtoNativeConfigResContainerFactory.java
│   │           │                   │   ├── ProtoTableResContainerFactory.java
│   │           │                   │   └── ProtoXmlResContainerFactory.java
│   │           │                   └── parsers/
│   │           │                       ├── CommonProtoParser.java
│   │           │                       ├── ResTableProtoParser.java
│   │           │                       └── ResXmlProtoParser.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-apkm-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── apkm/
│   │           │                   ├── ApkmCustomCodeInput.kt
│   │           │                   ├── ApkmCustomResourcesLoader.kt
│   │           │                   ├── ApkmInputPlugin.kt
│   │           │                   ├── ApkmManifest.kt
│   │           │                   └── ApkmUtils.kt
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-apks-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── apks/
│   │           │                   ├── ApksCustomCodeInput.kt
│   │           │                   ├── ApksCustomResourcesLoader.kt
│   │           │                   └── ApksInputPlugin.kt
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-dex-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── input/
│   │       │   │               └── dex/
│   │       │   │                   ├── DexException.java
│   │       │   │                   ├── DexFileLoader.java
│   │       │   │                   ├── DexInputOptions.java
│   │       │   │                   ├── DexInputPlugin.java
│   │       │   │                   ├── DexLoadResult.java
│   │       │   │                   ├── DexReader.java
│   │       │   │                   ├── insns/
│   │       │   │                   │   ├── DexInsnData.java
│   │       │   │                   │   ├── DexInsnFormat.java
│   │       │   │                   │   ├── DexInsnInfo.java
│   │       │   │                   │   ├── DexInsnMnemonics.java
│   │       │   │                   │   ├── DexOpcodes.java
│   │       │   │                   │   └── payloads/
│   │       │   │                   │       └── DexArrayPayload.java
│   │       │   │                   ├── sections/
│   │       │   │                   │   ├── DexAnnotationsConvert.java
│   │       │   │                   │   ├── DexClassData.java
│   │       │   │                   │   ├── DexCodeReader.java
│   │       │   │                   │   ├── DexConsts.java
│   │       │   │                   │   ├── DexFieldData.java
│   │       │   │                   │   ├── DexHeader.java
│   │       │   │                   │   ├── DexHeaderV41.java
│   │       │   │                   │   ├── DexMethodData.java
│   │       │   │                   │   ├── DexMethodProto.java
│   │       │   │                   │   ├── DexMethodRef.java
│   │       │   │                   │   ├── SectionReader.java
│   │       │   │                   │   ├── annotations/
│   │       │   │                   │   │   ├── AnnotationsParser.java
│   │       │   │                   │   │   ├── AnnotationsUtils.java
│   │       │   │                   │   │   └── EncodedValueParser.java
│   │       │   │                   │   └── debuginfo/
│   │       │   │                   │       ├── DebugInfoParser.java
│   │       │   │                   │       └── DexLocalVar.java
│   │       │   │                   ├── smali/
│   │       │   │                   │   ├── InsnFormatter.java
│   │       │   │                   │   ├── InsnFormatterInfo.java
│   │       │   │                   │   ├── SmaliCodeWriter.java
│   │       │   │                   │   ├── SmaliInsnFormat.java
│   │       │   │                   │   └── SmaliPrinter.java
│   │       │   │                   └── utils/
│   │       │   │                       ├── DataReader.java
│   │       │   │                       ├── DexCheckSum.java
│   │       │   │                       ├── IDexData.java
│   │       │   │                       ├── Leb128.java
│   │       │   │                       ├── MUtf8.java
│   │       │   │                       ├── SimpleDexData.java
│   │       │   │                       └── SmaliUtils.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── dex/
│   │           │                   ├── DexInputPluginTest.java
│   │           │                   └── utils/
│   │           │                       └── SmaliTestUtils.java
│   │           └── resources/
│   │               └── samples/
│   │                   ├── app-with-fake-dex.apk
│   │                   ├── hello.dex
│   │                   └── test.smali
│   ├── jadx-input-api/
│   │   ├── README.md
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── jadx/
│   │                   └── api/
│   │                       └── plugins/
│   │                           └── input/
│   │                               ├── ICodeLoader.java
│   │                               ├── JadxCodeInput.java
│   │                               ├── data/
│   │                               │   ├── AccessFlags.java
│   │                               │   ├── AccessFlagsScope.java
│   │                               │   ├── ICallSite.java
│   │                               │   ├── ICatch.java
│   │                               │   ├── IClassData.java
│   │                               │   ├── ICodeReader.java
│   │                               │   ├── IDebugInfo.java
│   │                               │   ├── IFieldData.java
│   │                               │   ├── IFieldRef.java
│   │                               │   ├── ILocalVar.java
│   │                               │   ├── IMethodData.java
│   │                               │   ├── IMethodHandle.java
│   │                               │   ├── IMethodProto.java
│   │                               │   ├── IMethodRef.java
│   │                               │   ├── IResourceData.java
│   │                               │   ├── ISeqConsumer.java
│   │                               │   ├── ITry.java
│   │                               │   ├── MethodHandleType.java
│   │                               │   ├── annotations/
│   │                               │   │   ├── AnnotationVisibility.java
│   │                               │   │   ├── EncodedType.java
│   │                               │   │   ├── EncodedValue.java
│   │                               │   │   ├── IAnnotation.java
│   │                               │   │   └── JadxAnnotation.java
│   │                               │   ├── attributes/
│   │                               │   │   ├── IJadxAttrType.java
│   │                               │   │   ├── IJadxAttribute.java
│   │                               │   │   ├── JadxAttrType.java
│   │                               │   │   ├── PinnedAttribute.java
│   │                               │   │   └── types/
│   │                               │   │       ├── AnnotationDefaultAttr.java
│   │                               │   │       ├── AnnotationDefaultClassAttr.java
│   │                               │   │       ├── AnnotationMethodParamsAttr.java
│   │                               │   │       ├── AnnotationsAttr.java
│   │                               │   │       ├── ExceptionsAttr.java
│   │                               │   │       ├── InnerClassesAttr.java
│   │                               │   │       ├── InnerClsInfo.java
│   │                               │   │       ├── MethodParametersAttr.java
│   │                               │   │       ├── SignatureAttr.java
│   │                               │   │       └── SourceFileAttr.java
│   │                               │   └── impl/
│   │                               │       ├── CallSite.java
│   │                               │       ├── CatchData.java
│   │                               │       ├── DebugInfo.java
│   │                               │       ├── EmptyCodeLoader.java
│   │                               │       ├── FieldRefHandle.java
│   │                               │       ├── InputUtils.java
│   │                               │       ├── JadxFieldRef.java
│   │                               │       ├── ListConsumer.java
│   │                               │       ├── MergeCodeLoader.java
│   │                               │       ├── MethodRefHandle.java
│   │                               │       └── TryData.java
│   │                               └── insns/
│   │                                   ├── InsnData.java
│   │                                   ├── InsnIndexType.java
│   │                                   ├── Opcode.java
│   │                                   └── custom/
│   │                                       ├── IArrayPayload.java
│   │                                       ├── ICustomPayload.java
│   │                                       ├── ISwitchPayload.java
│   │                                       └── impl/
│   │                                           └── SwitchPayload.java
│   ├── jadx-java-convert/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── javaconvert/
│   │           │                   ├── AsmUtils.java
│   │           │                   ├── ConvertResult.java
│   │           │                   ├── D8Converter.java
│   │           │                   ├── DxConverter.java
│   │           │                   ├── JavaConvertLoader.java
│   │           │                   ├── JavaConvertOptions.java
│   │           │                   └── JavaConvertPlugin.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-java-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── input/
│   │       │   │               └── java/
│   │       │   │                   ├── JavaClassReader.java
│   │       │   │                   ├── JavaInputLoader.java
│   │       │   │                   ├── JavaInputPlugin.java
│   │       │   │                   ├── JavaLoadResult.java
│   │       │   │                   ├── data/
│   │       │   │                   │   ├── ClassOffsets.java
│   │       │   │                   │   ├── ConstPoolReader.java
│   │       │   │                   │   ├── ConstantType.java
│   │       │   │                   │   ├── DataReader.java
│   │       │   │                   │   ├── JavaClassData.java
│   │       │   │                   │   ├── JavaFieldData.java
│   │       │   │                   │   ├── JavaMethodData.java
│   │       │   │                   │   ├── JavaMethodProto.java
│   │       │   │                   │   ├── JavaMethodRef.java
│   │       │   │                   │   ├── attributes/
│   │       │   │                   │   │   ├── AttributesReader.java
│   │       │   │                   │   │   ├── EncodedValueReader.java
│   │       │   │                   │   │   ├── IJavaAttribute.java
│   │       │   │                   │   │   ├── IJavaAttributeReader.java
│   │       │   │                   │   │   ├── JavaAttrStorage.java
│   │       │   │                   │   │   ├── JavaAttrType.java
│   │       │   │                   │   │   ├── debuginfo/
│   │       │   │                   │   │   │   ├── JavaLocalVar.java
│   │       │   │                   │   │   │   ├── LineNumberTableAttr.java
│   │       │   │                   │   │   │   ├── LocalVarTypesAttr.java
│   │       │   │                   │   │   │   └── LocalVarsAttr.java
│   │       │   │                   │   │   ├── stack/
│   │       │   │                   │   │   │   ├── StackFrame.java
│   │       │   │                   │   │   │   ├── StackFrameType.java
│   │       │   │                   │   │   │   ├── StackMapTableReader.java
│   │       │   │                   │   │   │   ├── StackValueType.java
│   │       │   │                   │   │   │   └── TypeInfoReader.java
│   │       │   │                   │   │   └── types/
│   │       │   │                   │   │       ├── CodeAttr.java
│   │       │   │                   │   │       ├── ConstValueAttr.java
│   │       │   │                   │   │       ├── IgnoredAttr.java
│   │       │   │                   │   │       ├── JavaAnnotationDefaultAttr.java
│   │       │   │                   │   │       ├── JavaAnnotationsAttr.java
│   │       │   │                   │   │       ├── JavaBootstrapMethodsAttr.java
│   │       │   │                   │   │       ├── JavaExceptionsAttr.java
│   │       │   │                   │   │       ├── JavaInnerClsAttr.java
│   │       │   │                   │   │       ├── JavaMethodParametersAttr.java
│   │       │   │                   │   │       ├── JavaParamAnnsAttr.java
│   │       │   │                   │   │       ├── JavaSignatureAttr.java
│   │       │   │                   │   │       ├── JavaSourceFileAttr.java
│   │       │   │                   │   │       ├── StackMapTableAttr.java
│   │       │   │                   │   │       └── data/
│   │       │   │                   │   │           └── RawBootstrapMethod.java
│   │       │   │                   │   └── code/
│   │       │   │                   │       ├── ArrayType.java
│   │       │   │                   │       ├── CodeDecodeState.java
│   │       │   │                   │       ├── JavaCodeReader.java
│   │       │   │                   │       ├── JavaInsnData.java
│   │       │   │                   │       ├── JavaInsnInfo.java
│   │       │   │                   │       ├── JavaInsnsRegister.java
│   │       │   │                   │       ├── StackState.java
│   │       │   │                   │       ├── decoders/
│   │       │   │                   │       │   ├── IJavaInsnDecoder.java
│   │       │   │                   │       │   ├── InvokeDecoder.java
│   │       │   │                   │       │   ├── LoadConstDecoder.java
│   │       │   │                   │       │   ├── LookupSwitchDecoder.java
│   │       │   │                   │       │   ├── TableSwitchDecoder.java
│   │       │   │                   │       │   └── WideDecoder.java
│   │       │   │                   │       └── trycatch/
│   │       │   │                   │           ├── JavaSingleCatch.java
│   │       │   │                   │           └── JavaTryData.java
│   │       │   │                   └── utils/
│   │       │   │                       ├── DescriptorParser.java
│   │       │   │                       ├── DisasmUtils.java
│   │       │   │                       ├── JavaClassParseException.java
│   │       │   │                       └── ModifiedUTF8Decoder.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           └── java/
│   │               └── jadx/
│   │                   └── plugins/
│   │                       └── input/
│   │                           └── java/
│   │                               ├── CustomLoadTest.java
│   │                               └── utils/
│   │                                   ├── DescriptorParserTest.java
│   │                                   └── ModifiedUTF8DecoderTest.java
│   ├── jadx-kotlin-metadata/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── kotlin/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── kotlin/
│   │       │   │               └── metadata/
│   │       │   │                   ├── KotlinMetadataOptions.kt
│   │       │   │                   ├── KotlinMetadataPlugin.kt
│   │       │   │                   ├── model/
│   │       │   │                   │   ├── KotlinMetadataConsts.kt
│   │       │   │                   │   └── KotlinRenameResults.kt
│   │       │   │                   ├── pass/
│   │       │   │                   │   ├── KotlinMetadataDecompilePass.kt
│   │       │   │                   │   └── KotlinMetadataPreparePass.kt
│   │       │   │                   └── utils/
│   │       │   │                       ├── KmClassWrapper.kt
│   │       │   │                       ├── KmExt.kt
│   │       │   │                       ├── KotlinMetadataExt.kt
│   │       │   │                       ├── KotlinMetadataUtils.kt
│   │       │   │                       ├── KotlinUtils.kt
│   │       │   │                       ├── LogExt.kt
│   │       │   │                       └── ToStringParser.kt
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── kotlin/
│   │           │   ├── TestJavaParser.kt
│   │           │   └── TestKotlinMetadata.kt
│   │           └── smali/
│   │               └── deobf/
│   │                   └── TestKotlinMetadata/
│   │                       ├── a$b.smali
│   │                       └── a.smali
│   ├── jadx-kotlin-source-debug-extension/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── kotlin/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── kotlin/
│   │       │   │               └── smap/
│   │       │   │                   ├── KotlinSmapOptions.kt
│   │       │   │                   ├── KotlinSmapPlugin.kt
│   │       │   │                   ├── model/
│   │       │   │                   │   ├── ClassAliasRename.kt
│   │       │   │                   │   ├── Constants.kt
│   │       │   │                   │   ├── SMAP.kt
│   │       │   │                   │   └── SourceInfo.kt
│   │       │   │                   ├── pass/
│   │       │   │                   │   └── KotlinSourceDebugExtensionPass.kt
│   │       │   │                   └── utils/
│   │       │   │                       ├── Extensions.kt
│   │       │   │                       ├── KotlinSmapUtils.kt
│   │       │   │                       └── SMAPParser.kt
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── kotlin/
│   │           │   └── TestSourceDebugExtension.kt
│   │           └── smali/
│   │               └── deobf/
│   │                   └── TestKotlinSourceDebugExtension/
│   │                       └── C6.smali
│   ├── jadx-raung-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── raung/
│   │           │                   ├── RaungConvert.java
│   │           │                   └── RaungInputPlugin.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-rename-mappings/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── mappings/
│   │       │   │               ├── RenameMappingsData.java
│   │       │   │               ├── RenameMappingsOptions.java
│   │       │   │               ├── RenameMappingsPlugin.java
│   │       │   │               ├── load/
│   │       │   │               │   ├── ApplyMappingsPass.java
│   │       │   │               │   ├── CodeMappingsPass.java
│   │       │   │               │   └── LoadMappingsPass.java
│   │       │   │               ├── save/
│   │       │   │               │   └── MappingExporter.java
│   │       │   │               └── utils/
│   │       │   │                   ├── DalvikToJavaBytecodeUtils.java
│   │       │   │                   └── VariablesUtils.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── mappings/
│   │           │               ├── BaseRenameMappingsTest.java
│   │           │               └── TestInnerClassRename.java
│   │           └── resources/
│   │               ├── inner-cls-rename/
│   │               │   ├── base.smali
│   │               │   ├── enigma.mapping
│   │               │   └── inner.smali
│   │               └── logback-test.xml
│   ├── jadx-smali-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── smali/
│   │           │                   ├── SmaliConvert.java
│   │           │                   ├── SmaliInputOptions.java
│   │           │                   ├── SmaliInputPlugin.java
│   │           │                   └── SmaliUtils.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   └── jadx-xapk-input/
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               ├── java/
│               │   └── jadx/
│               │       └── plugins/
│               │           └── input/
│               │               └── xapk/
│               │                   ├── XApkCustomInput.java
│               │                   ├── XApkInputPlugin.java
│               │                   ├── XApkLoader.java
│               │                   └── data/
│               │                       ├── SplitApk.java
│               │                       ├── XApkData.java
│               │                       └── XApkManifest.java
│               └── resources/
│                   └── META-INF/
│                       └── services/
│                           └── jadx.api.plugins.JadxPlugin
├── jadx-plugins-tools/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── jadx/
│       │           └── plugins/
│       │               └── tools/
│       │                   ├── JadxExternalPluginsLoader.java
│       │                   ├── JadxPluginsList.java
│       │                   ├── JadxPluginsTools.java
│       │                   ├── data/
│       │                   │   ├── JadxInstalledPlugins.java
│       │                   │   ├── JadxPluginListCache.java
│       │                   │   ├── JadxPluginListEntry.java
│       │                   │   ├── JadxPluginMetadata.java
│       │                   │   └── JadxPluginUpdate.java
│       │                   ├── resolvers/
│       │                   │   ├── IJadxPluginResolver.java
│       │                   │   ├── README.md
│       │                   │   ├── ResolversRegistry.java
│       │                   │   ├── file/
│       │                   │   │   └── LocalFileResolver.java
│       │                   │   └── github/
│       │                   │       ├── GithubReleaseResolver.java
│       │                   │       ├── GithubTools.java
│       │                   │       ├── LocationInfo.java
│       │                   │       └── data/
│       │                   │           ├── Asset.java
│       │                   │           └── Release.java
│       │                   └── utils/
│       │                       ├── PluginFiles.java
│       │                       └── PluginUtils.java
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       └── plugins/
│           │           └── tools/
│           │               └── resolvers/
│           │                   └── github/
│           │                       └── GithubToolsTest.java
│           └── resources/
│               └── github/
│                   └── plugins-list-good.json
└── settings.gradle.kts

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://EditorConfig.org
root = true

[*]
end_of_line = lf
insert_final_newline = true

indent_style = tab
tab_width = 4

charset = utf-8
trim_trailing_whitespace = true

[*.java]
ij_java_continuation_indent_size = 8
ij_java_use_single_class_imports = true
ij_java_class_count_to_use_import_on_demand = 99
ij_java_names_count_to_use_import_on_demand = 99
ij_java_packages_to_use_import_on_demand = *

[*.kt]
ij_kotlin_continuation_indent_size = 8
ij_kotlin_name_count_to_use_star_import = 99
ij_kotlin_name_count_to_use_star_import_for_members = 99
ij_kotlin_packages_to_use_import_on_demand = *

[*.yml]
indent_style = space
indent_size = 2

[*.bat]
end_of_line = crlf


================================================
FILE: .gitattributes
================================================
*       text=auto eol=lf

*.java  text eol=lf diff=java
*.kt    text eol=lf diff=kotlin
*.kts   text eol=lf diff=kotlin

gradlew text eol=lf

*.bat   text eol=crlf

*.png   binary
*.jar   binary


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false


================================================
FILE: .github/ISSUE_TEMPLATE/decompilation-issue.yml
================================================
name: Decompilation issue
description: Create a report to help us improve jadx decompiler
title: '[core] '
labels:
  - Core
  - bug
body:
  - type: markdown
    attributes:
      value: |
        **Checks before submit**
        - check [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) section on wiki
        - try [latest unstable build](https://nightly.link/skylot/jadx/workflows/build-artifacts/master), maybe issue already fixed
        - search existing issues by exception message
  - type: textarea
    id: details
    attributes:
      label: Issue details
      placeholder: >-
        Describe issue
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: Relevant log output or stacktrace
      description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
      render: java
  - type: textarea
    id: sample
    attributes:
      label: Provide sample and class/method full name
      description: |
        - sample: attach or provide a link
        - full name of class or method with issue
        - other details which may help to reproduce issue
  - type: input
    id: jadx-version
    attributes:
      label: Jadx version


================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: Feature Request
description: Suggest an idea for jadx
title: '[feature] '
labels:
  - 'new feature'
body:
  - type: textarea
    id: details
    attributes:
      label: Describe your idea
      placeholder: Feature details
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/jadx-gui-issue.yml
================================================
name: jadx-gui issue
description: Create a bug report about issue found in jadx-gui
title: '[gui] '
labels:
  - GUI
  - bug
body:
  - type: markdown
    attributes:
      value: |
        **Checks before submit**
        - check [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) section on wiki
        - try [latest unstable build](https://nightly.link/skylot/jadx/workflows/build-artifacts/master), maybe issue already fixed
        - search existing issues by exception message
  - type: textarea
    id: details
    attributes:
      label: Issue details
      placeholder: Describe issue and how to reproduce it
    validations:
      required: true
  - type: input
    id: jadx-version
    attributes:
      label: Jadx version
      placeholder: check `Help->About`
    validations:
      required: true
  - type: input
    id: java-version
    attributes:
      label: Java version
      placeholder: check `Help->About`
    validations:
      required: true
  - type: checkboxes
    id: os
    attributes:
      label: OS
      options:
        - label: Windows
        - label: Linux
        - label: macOS


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  # Set update schedule for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/pull_request_template.md
================================================
:exclamation: Please review the [guidelines for contributing](https://github.com/skylot/jadx/blob/master/CONTRIBUTING.md#Pull-Request-Process)

### Description
Please describe your pull request.
Reference issue it fixes.


================================================
FILE: .github/workflows/build-artifacts.yml
================================================
name: Build Artifacts

on:
  push:
    branches: [ master, build-test ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Set up JDK
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 25

      - name: Set jadx version
        run: |
          JADX_REV=$(git rev-list --count HEAD)
          JADX_VERSION="r${JADX_REV}.${GITHUB_SHA:0:7}"
          echo "JADX_VERSION=$JADX_VERSION" >> $GITHUB_ENV

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Build
        run: ./gradlew dist distWin
        env:
          JADX_BUILD_JAVA_VERSION: 11

      - name: Save bundle artifact
        uses: actions/upload-artifact@v7
        with:
          name: ${{ format('jadx-{0}', env.JADX_VERSION) }}
          # Waiting fix for https://github.com/actions/upload-artifact/issues/39 to upload zip file
          # Upload unpacked files for now
          path: build/jadx/**/*
          if-no-files-found: error
          retention-days: 14

      - name: Save Windows bundle artifact
        uses: actions/upload-artifact@v7
        with:
          name: ${{ format('jadx-gui-{0}-no-jre-win', env.JADX_VERSION) }}
          # Upload unpacked files for now
          path: jadx-gui/build/jadx-gui-win/*
          if-no-files-found: error
          retention-days: 14

  build-win-bundle:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Set up JDK
        uses: oracle-actions/setup-java@v1
        with:
          release: 25

      - name: Print Java version
        shell: bash
        run: java -version

      - name: Set jadx version
        shell: bash
        run: |
          JADX_REV=$(git rev-list --count HEAD)
          JADX_VERSION="r${JADX_REV}.${GITHUB_SHA:0:7}"
          echo "JADX_VERSION=$JADX_VERSION" >> $GITHUB_ENV

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Build
        run: ./gradlew dist -PbundleJRE=true

      - name: Save Windows with JRE bundle artifact
        uses: actions/upload-artifact@v7
        with:
          name: ${{ format('jadx-gui-{0}-with-jre-win', env.JADX_VERSION) }}
          # Upload unpacked files for now
          path: jadx-gui/build/jadx-gui-with-jre-win/*
          if-no-files-found: error
          retention-days: 14


================================================
FILE: .github/workflows/build-test.yml
================================================
name: Build Test

on:
  push:
    branches: [ master, build-test ]
  pull_request:
    branches: [ master ]

jobs:
  tests:
    strategy:
      matrix:
        os: [ ubuntu-latest, windows-latest ]

    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6

      - name: Set up JDK
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 25

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Build
        run: ./gradlew build dist distWin
        env:
          JADX_BUILD_JAVA_VERSION: 11


================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  push:
    tags:
      - "v*.*.*"

# additional permissions for provided GitHub token to create new release
permissions:
  contents: write

jobs:
  build-release-win-bundle:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6

      - name: Set up JDK
        uses: oracle-actions/setup-java@v1
        with:
          release: 25

      - name: Set jadx version
        uses: actions/github-script@v8
        with:
          script: |
            const jadxVersion = context.ref.split('/').pop().substring(1)
            core.exportVariable('JADX_VERSION', jadxVersion);

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Build
        run: ./gradlew dist -PbundleJRE=true

      - name: Save JRE bundle artifact
        uses: actions/upload-artifact@v7
        with:
          name: ${{ format('jadx-gui-{0}-with-jre-win', env.JADX_VERSION) }}
          path: ${{ format('build/distWinWithJre/jadx-gui-{0}-with-jre-win.zip', env.JADX_VERSION) }}
          if-no-files-found: error
          retention-days: 1

  release:
    needs: build-release-win-bundle
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - name: Set up JDK
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 25

      - name: Set jadx version and release name
        uses: actions/github-script@v8
        with:
          script: |
            const jadxVersion = context.ref.split('/').pop().substring(1)
            core.exportVariable('JADX_VERSION', jadxVersion);

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Build
        run: ./gradlew dist distWin
        env:
          JADX_BUILD_JAVA_VERSION: 11

      - name: Download Windows JRE bundle
        uses: actions/download-artifact@v8
        with:
          name: ${{ format('jadx-gui-{0}-with-jre-win', env.JADX_VERSION) }}
          path: ${{ format('build/jadx-gui-{0}-with-jre-win', env.JADX_VERSION) }}

      - run: |
          cd build
          pwd
          ls -l
          ls jadx-gui-*-with-jre-win
          mv jadx-gui-*-with-jre-win/jadx-gui-*-with-jre-win.zip .
          mv distWin/jadx-gui-*-win.zip .
          ls -l *.zip

      - name: Release
        uses: softprops/action-gh-release@v2
        with:
          name: ${{ env.JADX_VERSION }}
          draft: true
          fail_on_unmatched_files: true
          files: build/jadx-*.zip


================================================
FILE: .gitignore
================================================
# Eclipse files
.classpath
.project
.settings/

# IntelliJ Idea files
.idea/
.run/
out/
*.iml
*.ipr
*.iws
.attach_pid*
*.hprof

**/.DS_Store

bin/
target/
build/
classes/
idea/
.gradle/
.kotlin/
node_modules/
.vscode/

jadx-output/
*-tmp/
**/tmp/
*.jobf
*.jadx

*.class
*.jar
*.dump
*.log
*.cfg
*.orig
quark.json

cliff.toml
jadx-gui/src/main/resources/logback.xml


================================================
FILE: .gitlab-ci.yml
================================================
variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  TERM: "dumb"

before_script:
  - chmod +x gradlew

stages:
  - test

build-test:
  stage: test
  image: eclipse-temurin:21
  script: JADX_BUILD_JAVA_VERSION=11 JADX_TEST_JAVA_VERSION=11 ./gradlew clean build dist distWin


================================================
FILE: .jitpack.yml
================================================
jdk:
  - openjdk11
install:
  - echo "Jitpack is not supported. Use artifacts from Maven Central (https://search.maven.org/search?q=jadx), check usage help at https://github.com/skylot/jadx/wiki/Use-jadx-as-a-library"
  - ./gradlew intentional-fail


================================================
FILE: .typos.toml
================================================
# Config for 'typos' spellchecker (https://github.com/crate-ci/typos)

[default.extend-words]
IPUT = "IPUT"
Laf = "Laf"
Darcula="Darcula"

[default]
extend-ignore-identifiers-re = [
    "finaly", # intentional package name
]

[files]
extend-exclude = [
    "config/",
    "jadx-core/src/main/resources/",
    "jadx-core/src/test/",
    "jadx-gui/src/main/resources/i18n/",
    "!jadx-gui/src/main/resources/i18n/Messages_en_US.properties",
]

================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to make participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
  advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
  address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies within all project spaces, and it also applies when
an individual is representing the project or its community in public spaces.
Examples of representing a project or community include using an official
project e-mail address, posting via an official social media account, or acting
as an appointed representative at an online or offline event. Representation of
a project may be further defined and clarified by project maintainers.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

Please note, we have [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your interactions with the project.

## Open Issue

1. Before proceed, please do:
    - check [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A) section on wiki
    - search existing issues by exception message

2. Describe error:
    - full name of method or class with error
    - full java stacktrace (no need to copy method fallback code (commented pseudocode))
    - **IMPORTANT!:** attach or provide link to apk file (double check apk version)

	  **Note**: GitHub don't allow attaching files with `.apk` extension, but you can change extension by adding `.zip` at the end :)


## Pull Request Process

1. Please don't submit any code style fixes or dependencies updates changes.

1. Use only features and API from Java 11 or below.

1. Make sure your code is correctly formatted, see description here: [Code Formatting](https://github.com/skylot/jadx/wiki/Code-Formatting).

1. Make sure your changes are passing build: `./gradlew clean build dist`


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: NOTICE
================================================
The majority of jadx is written and copyrighted by me (Skylot)
and released under the Apache 2.0 license (see LICENSE file for full license text):

*******************************************************************************
Copyright 2015, Skylot

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*******************************************************************************


Various portions of the code including dx library are taken from
the Android Open Source Project, and are used in accordance with
the following license:

*******************************************************************************
Copyright (C) 2007 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*******************************************************************************


Other binary libraries used in 'jadx'
=====================================

JCommander library (http://jcommander.org/) released under the following license:

*******************************************************************************
Copyright 2012, Cedric Beust

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*******************************************************************************


SLF4J source code and binaries are distributed under the following license:

*******************************************************************************
Copyright (c) 2004-2011 QOS.ch
 All rights reserved.

 Permission is hereby granted, free  of charge, to any person obtaining
 a  copy  of this  software  and  associated  documentation files  (the
 "Software"), to  deal in  the Software without  restriction, including
 without limitation  the rights to  use, copy, modify,  merge, publish,
 distribute,  sublicense, and/or sell  copies of  the Software,  and to
 permit persons to whom the Software  is furnished to do so, subject to
 the following conditions:

 The  above  copyright  notice  and  this permission  notice  shall  be
 included in all copies or substantial portions of the Software.

 THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
 EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
 MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*******************************************************************************


Logback source code and binaries are dual-licensed under the EPL v1.0 and the LGPL 2.1, or more formally:

*******************************************************************************
Logback: the reliable, generic, fast and flexible logging framework.
Copyright (C) 1999-2012, QOS.ch. All rights reserved.

This program and the accompanying materials are dual-licensed under
either the terms of the Eclipse Public License v1.0 as published by
the Eclipse Foundation

  or (per the licensee's choosing)

under the terms of the GNU Lesser General Public License version 2.1
as published by the Free Software Foundation.
*******************************************************************************


ASM library:

*******************************************************************************
Copyright (c) 2000-2011 INRIA, France Telecom
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holders nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************



Jadx-gui components
===================

RSyntaxTextArea library (https://github.com/bobbylight/RSyntaxTextArea)
licensed under modified BSD license:

*******************************************************************************
Copyright (c) 2012, Robert Futrell
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the author nor the names of its contributors may
      be used to endorse or promote products derived from this software
      without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************


Concurrent Trees (https://code.google.com/p/concurrent-trees/)
licenced under Apache License 2.0:

*******************************************************************************
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*******************************************************************************


Image Viewer (https://github.com/kazocsaba/imageviewer)

*******************************************************************************
Copyright (c) 2008-2012 Kazó Csaba

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*******************************************************************************

JFontChooser Component - http://sourceforge.jp/projects/jfontchooser/

Icons copied from several places:
 - Eclipse Project (JDT UI) - licensed under EPL v1.0 (http://www.eclipse.org/legal/epl-v10.html)
 - famfamfam silk icon set (http://www.famfamfam.com/lab/icons/silk/) - licensed
     under Creative Commons Attribution 2.5 License (http://creativecommons.org/licenses/by/2.5/)


================================================
FILE: README.md
================================================
<img src="https://raw.githubusercontent.com/skylot/jadx/master/jadx-gui/src/main/resources/logos/jadx-logo.png" width="64" align="left" />

## JADX

![Build status](https://img.shields.io/github/actions/workflow/status/skylot/jadx/build-artifacts.yml)
![GitHub contributors](https://img.shields.io/github/contributors/skylot/jadx)
![GitHub all releases](https://img.shields.io/github/downloads/skylot/jadx/total)
![GitHub release (latest by SemVer)](https://img.shields.io/github/downloads/skylot/jadx/latest/total)
![Latest release](https://img.shields.io/github/release/skylot/jadx.svg)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.skylot/jadx-core)](https://search.maven.org/search?q=g:io.github.skylot%20AND%20jadx)
![Java 11+](https://img.shields.io/badge/Java-11%2B-blue)
[![License](http://img.shields.io/:license-apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)

**jadx** - Dex to Java decompiler

Command line and GUI tools for producing Java source code from Android Dex and Apk files

> [!WARNING]
> Please note that in most cases **jadx** can't decompile all 100% of the code, so errors will occur.<br />
> Check [Troubleshooting guide](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A#decompilation-issues) for workarounds.

**Main features:**
- decompile Dalvik bytecode to Java code from APK, dex, aar, aab and zip files
- decode `AndroidManifest.xml` and other resources from `resources.arsc`
- deobfuscator included

**jadx-gui features:**
- view decompiled code with highlighted syntax
- jump to declaration
- find usage
- full text search
- smali debugger, check [wiki page](https://github.com/skylot/jadx/wiki/Smali-debugger) for setup and usage

Jadx-gui key bindings can be found [here](https://github.com/skylot/jadx/wiki/JADX-GUI-Key-bindings)

See these features in action here: [jadx-gui features overview](https://github.com/skylot/jadx/wiki/jadx-gui-features-overview)

<img src="https://user-images.githubusercontent.com/118523/142730720-839f017e-38db-423e-b53f-39f5f0a0316f.png" width="700"/>

### Download
- release
  from [github: ![Latest release](https://img.shields.io/github/release/skylot/jadx.svg)](https://github.com/skylot/jadx/releases/latest)
- latest [unstable build ![GitHub commits since tagged version (branch)](https://img.shields.io/github/commits-since/skylot/jadx/latest/master)](https://nightly.link/skylot/jadx/workflows/build-artifacts/master)

After download unpack zip file go to `bin` directory and run:
- `jadx` - command line version
- `jadx-gui` - UI version

On Windows run `.bat` files with double-click\
**Note:** ensure you have installed Java 11 or later 64-bit version.
For Windows, you can download it from [oracle.com](https://www.oracle.com/java/technologies/downloads/#jdk17-windows) (select x64 Installer).

### Install
- Arch Linux
  [![Arch Linux package](https://img.shields.io/archlinux/v/extra/any/jadx)](https://archlinux.org/packages/extra/any/jadx/)
  [![AUR Version](https://img.shields.io/aur/version/jadx-git)](https://aur.archlinux.org/packages/jadx-git)
  ```bash
  sudo pacman -S jadx
  ```
- macOS
  [![homebrew version](https://img.shields.io/homebrew/v/jadx)](https://formulae.brew.sh/formula/jadx)
  ```bash
  brew install jadx
  ```
- Flathub
  [![Flathub Version](https://img.shields.io/flathub/v/com.github.skylot.jadx)](https://flathub.org/apps/com.github.skylot.jadx)
  ```bash
  flatpak install flathub com.github.skylot.jadx
  ```

### Use jadx as a library
You can use jadx in your java projects, check details on [wiki page](https://github.com/skylot/jadx/wiki/Use-jadx-as-a-library)

### Build from source
JDK 11 or higher must be installed:
```
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
```

(on Windows, use `gradlew.bat` instead of `./gradlew`)

Scripts for run jadx will be placed in `build/jadx/bin`
and also packed to `build/jadx-<version>.zip`

### Usage
```
jadx[-gui] [command] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts)
commands (use '<command> --help' for command options):
  plugins	  - manage jadx plugins

options:
  -d, --output-dir                              - output directory
  -ds, --output-dir-src                         - output directory for sources
  -dr, --output-dir-res                         - output directory for resources
  -r, --no-res                                  - do not decode resources
  -s, --no-src                                  - do not decompile source code
  -j, --threads-count                           - processing threads count, default: 16
  --single-class                                - decompile a single class, full name, raw or alias
  --single-class-output                         - file or dir for write if decompile a single class
  --output-format                               - can be 'java' or 'json', default: java
  -e, --export-gradle                           - save as gradle project (set '--export-gradle-type' to 'auto')
  --export-gradle-type                          - Gradle project template for export:
                                                   'auto' - detect automatically
                                                   'android-app' - Android Application (apk)
                                                   'android-library' - Android Library (aar)
                                                   'simple-java' - simple Java
  -m, --decompilation-mode                      - code output mode:
                                                   'auto' - trying best options (default)
                                                   'restructure' - restore code structure (normal java code)
                                                   'simple' - simplified instructions (linear, with goto's)
                                                   'fallback' - raw instructions without modifications
  --show-bad-code                               - show inconsistent code (incorrectly decompiled)
  --no-xml-pretty-print                         - do not prettify XML
  --no-imports                                  - disable use of imports, always write entire package name
  --no-debug-info                               - disable debug info parsing and processing
  --add-debug-lines                             - add comments with debug line numbers if available
  --no-inline-anonymous                         - disable anonymous classes inline
  --no-inline-methods                           - disable methods inline
  --no-move-inner-classes                       - disable move inner classes into parent
  --no-inline-kotlin-lambda                     - disable inline for Kotlin lambdas
  --no-finally                                  - don't extract finally block
  --no-restore-switch-over-string               - don't restore switch over string
  --no-replace-consts                           - don't replace constant value with matching constant field
  --escape-unicode                              - escape non latin characters in strings (with \u)
  --respect-bytecode-access-modifiers           - don't change original access modifiers
  --mappings-path                               - deobfuscation mappings file or directory. Allowed formats: Tiny and Tiny v2 (both '.tiny'), Enigma (.mapping) or Enigma directory
  --mappings-mode                               - set mode for handling the deobfuscation mapping file:
                                                   'read' - just read, user can always save manually (default)
                                                   'read-and-autosave-every-change' - read and autosave after every change
                                                   'read-and-autosave-before-closing' - read and autosave before exiting the app or closing the project
                                                   'ignore' - don't read or save (can be used to skip loading mapping files referenced in the project file)
  --deobf                                       - activate deobfuscation
  --deobf-min                                   - min length of name, renamed if shorter, default: 3
  --deobf-max                                   - max length of name, renamed if longer, default: 64
  --deobf-whitelist                             - space separated list of classes (full name) and packages (ends with '.*') to exclude from deobfuscation, default: android.support.v4.* android.support.v7.* android.support.v4.os.* android.support.annotation.Px androidx.core.os.* androidx.annotation.Px
  --deobf-cfg-file                              - deobfuscation mappings file used for JADX auto-generated names (in the JOBF file format), default: same dir and name as input file with '.jobf' extension
  --deobf-cfg-file-mode                         - set mode for handling the JADX auto-generated names' deobfuscation map file:
                                                   'read' - read if found, don't save (default)
                                                   'read-or-save' - read if found, save otherwise (don't overwrite)
                                                   'overwrite' - don't read, always save
                                                   'ignore' - don't read and don't save
  --deobf-res-name-source                       - better name source for resources:
                                                   'auto' - automatically select best name (default)
                                                   'resources' - use resources names
                                                   'code' - use R class fields names
  --use-source-name-as-class-name-alias         - use source name as class name alias:
                                                   'always' - always use source name if it's available
                                                   'if-better' - use source name if it seems better than the current one
                                                   'never' - never use source name, even if it's available
  --source-name-repeat-limit                    - allow using source name if it appears less than a limit number, default: 10
  --use-kotlin-methods-for-var-names            - use kotlin intrinsic methods to rename variables, values: disable, apply, apply-and-hide, default: apply
  --use-headers-for-detect-resource-extensions  - Use headers for detect resource extensions if resource obfuscated
  --rename-flags                                - fix options (comma-separated list of):
                                                   'case' - fix case sensitivity issues (according to --fs-case-sensitive option),
                                                   'valid' - rename java identifiers to make them valid,
                                                   'printable' - remove non-printable chars from identifiers,
                                                  or single 'none' - to disable all renames
                                                  or single 'all' - to enable all (default)
  --integer-format                              - how integers are displayed:
                                                   'auto' - automatically select (default)
                                                   'decimal' - use decimal
                                                   'hexadecimal' - use hexadecimal
  --type-update-limit                           - type update limit count (per one instruction), default: 10
  --fs-case-sensitive                           - treat filesystem as case sensitive, false by default
  --cfg                                         - save methods control flow graph to dot file
  --raw-cfg                                     - save methods control flow graph (use raw instructions)
  -f, --fallback                                - set '--decompilation-mode' to 'fallback' (deprecated)
  --use-dx                                      - use dx/d8 to convert java bytecode
  --comments-level                              - set code comments level, values: error, warn, info, debug, user-only, none, default: info
  --log-level                                   - set log level, values: quiet, progress, error, warn, info, debug, default: progress
  -v, --verbose                                 - verbose output (set --log-level to DEBUG)
  -q, --quiet                                   - turn off output (set --log-level to QUIET)
  --disable-plugins                             - comma separated list of plugin ids to disable
  --config <config-ref>                         - load configuration from file, <config-ref> can be:
                                                   path to '.json' file
                                                   short name - uses file with this name from config directory
                                                   'none' - to disable config loading
  --save-config <config-ref>                    - save current options into configuration file and exit, <config-ref> can be:
                                                   empty - for default config
                                                   path to '.json' file
                                                   short name - file will be saved in config directory
  --print-files                                 - print files and directories used by jadx (config, cache, temp)
  --version                                     - print jadx version
  -h, --help                                    - print this help

Plugin options (-P<name>=<value>):
  dex-input: Load .dex and .apk files
    - dex-input.verify-checksum                 - verify dex file checksum before load, values: [yes, no], default: yes
  java-convert: Convert .class, .jar and .aar files to dex
    - java-convert.mode                         - convert mode, values: [dx, d8, both], default: both
    - java-convert.d8-desugar                   - use desugar in d8, values: [yes, no], default: no
  kotlin-metadata: Use kotlin.Metadata annotation for code generation
    - kotlin-metadata.class-alias               - rename class alias, values: [yes, no], default: yes
    - kotlin-metadata.method-args               - rename function arguments, values: [yes, no], default: yes
    - kotlin-metadata.fields                    - rename fields, values: [yes, no], default: yes
    - kotlin-metadata.companion                 - rename companion object, values: [yes, no], default: yes
    - kotlin-metadata.data-class                - add data class modifier, values: [yes, no], default: yes
    - kotlin-metadata.to-string                 - rename fields using toString, values: [yes, no], default: yes
    - kotlin-metadata.getters                   - rename simple getters to field names, values: [yes, no], default: yes
  kotlin-smap: Use kotlin.SourceDebugExtension annotation for rename class alias
    - kotlin-smap.class-alias-source-dbg        - rename class alias from SourceDebugExtension, values: [yes, no], default: no
  rename-mappings: various mappings support
    - rename-mappings.format                    - mapping format, values: [AUTO, TINY_FILE, TINY_2_FILE, ENIGMA_FILE, ENIGMA_DIR, PROGUARD_FILE, SRG_FILE, XSRG_FILE, JAM_FILE, CSRG_FILE, TSRG_FILE, TSRG_2_FILE, INTELLIJ_MIGRATION_MAP_FILE, RECAF_SIMPLE_FILE, JOBF_FILE], default: AUTO
    - rename-mappings.invert                    - invert mapping on load, values: [yes, no], default: no
  smali-input: Load .smali files
    - smali-input.api-level                     - Android API level, default: 27

Environment variables:
  JADX_DISABLE_XML_SECURITY - set to 'true' to disable all security checks for XML files
  JADX_DISABLE_ZIP_SECURITY - set to 'true' to disable all security checks for zip files
  JADX_ZIP_MAX_ENTRIES_COUNT - maximum allowed number of entries in zip files (default: 100 000)
  JADX_CONFIG_DIR - custom config directory, using system by default
  JADX_CACHE_DIR - custom cache directory, using system by default
  JADX_TMP_DIR - custom temp directory, using system by default

Examples:
  jadx -d out classes.dex
  jadx --rename-flags "none" classes.dex
  jadx --rename-flags "valid, printable" classes.dex
  jadx --log-level ERROR app.apk
  jadx -Pdex-input.verify-checksum=no app.apk
```
These options also work in jadx-gui running from command line and override options from preferences' dialog

Usage for `plugins` command
```
usage: plugins [options]
options:
  -i, --install <locationId>      - install plugin with locationId
  -j, --install-jar <path-to.jar> - install plugin from jar file
  -l, --list                      - list installed plugins
  -a, --available                 - list available plugins from jadx-plugins-list (aka marketplace)
  -u, --update                    - update installed plugins
  --uninstall <pluginId>          - uninstall plugin with pluginId
  --disable <pluginId>            - disable plugin with pluginId
  --enable <pluginId>             - enable plugin with pluginId
  --list-all                      - list all plugins including bundled and dropins
  --list-versions <locationId>    - fetch latest versions of plugin from locationId (will download all artefacts, limited to 10)
  -h, --help                      - print this help
```


### Troubleshooting
Please check wiki page [Troubleshooting Q&A](https://github.com/skylot/jadx/wiki/Troubleshooting-Q&A)

### Contributing
To support this project you can:
  - Post thoughts about new features/optimizations that important to you
  - Submit decompilation issues, please read before proceed: [Open issue](CONTRIBUTING.md#Open-Issue)
  - Open pull request, please follow these rules: [Pull Request Process](CONTRIBUTING.md#Pull-Request-Process)

---------------------------------------
*Licensed under the Apache 2.0 License*


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Reporting a Vulnerability

To report a security issue, please open a [new security advisory](https://github.com/skylot/jadx/security/advisories/new).
Please fill the steps you took to create the issue, affected versions, and, if known, mitigations for the issue.
We will check and respond within 3 working days.
If the issue is confirmed as a vulnerability, we will apply required mitigations at the next release.


================================================
FILE: build.gradle.kts
================================================
import com.diffplug.gradle.spotless.FormatExtension
import com.diffplug.gradle.spotless.SpotlessExtension
import com.diffplug.spotless.LineEnding
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
import java.util.Locale

plugins {
	id("com.github.ben-manes.versions") version "0.53.0"
	id("se.patrikerdes.use-latest-versions") version "0.2.19"
	id("com.diffplug.spotless") version "6.25.0"
}

val jadxVersion by extra { System.getenv("JADX_VERSION") ?: "dev" }
println("jadx version: $jadxVersion")
version = jadxVersion

val jadxBuildJavaVersion by extra { getBuildJavaVersion() }

fun getBuildJavaVersion(): Int? {
	val envVarName = "JADX_BUILD_JAVA_VERSION"
	val buildJavaVer = System.getenv(envVarName)?.toInt() ?: return null
	if (buildJavaVer < 11) {
		throw GradleException("'$envVarName' can't be set to lower than 11")
	}
	println("Set Java toolchain for jadx build to version '$buildJavaVer'")
	return buildJavaVer
}

allprojects {
	apply(plugin = "java")
	apply(plugin = "checkstyle")
	apply(plugin = "com.diffplug.spotless")
	apply(plugin = "com.github.ben-manes.versions")
	apply(plugin = "se.patrikerdes.use-latest-versions")

	repositories {
		mavenCentral()
	}

	configure<SpotlessExtension> {
		java {
			importOrderFile("$rootDir/config/code-formatter/eclipse.importorder")
			eclipse().configFile("$rootDir/config/code-formatter/eclipse.xml")
			removeUnusedImports()
			commonFormatOptions()
		}
		kotlin {
			ktlint().editorConfigOverride(mapOf("indent_style" to "tab"))
			commonFormatOptions()
		}
		kotlinGradle {
			ktlint()
			commonFormatOptions()
		}
		format("misc") {
			target("**/*.gradle", "**/*.xml", "**/.gitignore", "**/.properties")
			targetExclude(".gradle/**", ".idea/**", "*/build/**")
			commonFormatOptions()
		}
	}

	tasks.named<DependencyUpdatesTask>("dependencyUpdates") {
		rejectVersionIf {
			// disallow release candidates as upgradable versions from stable versions
			isNonStable(candidate.version) && !isNonStable(currentVersion)
		}
	}
}

fun FormatExtension.commonFormatOptions() {
	lineEndings = LineEnding.UNIX
	encoding = Charsets.UTF_8
	trimTrailingWhitespace()
	endWithNewline()
}

fun isNonStable(version: String): Boolean {
	val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.uppercase(Locale.getDefault()).contains(it) }
	val regex = "^[0-9,.v-]+(-r)?$".toRegex()
	val isStable = stableKeyword || regex.matches(version)
	return isStable.not()
}

val distWinConfiguration: Configuration by configurations.creating {
	isCanBeConsumed = false
}
val distWinWithJreConfiguration: Configuration by configurations.creating {
	isCanBeConsumed = false
}
dependencies {
	distWinConfiguration(project(":jadx-gui", "distWinConfiguration"))
	distWinWithJreConfiguration(project(":jadx-gui", "distWinWithJreConfiguration"))
}

val copyArtifacts by tasks.registering(Copy::class) {
	val jarCliPattern = "jadx-cli-(.*)-all.jar".toPattern()
	from(tasks.getByPath(":jadx-cli:installShadowDist")) {
		exclude("**/*.jar")
		filter { line ->
			jarCliPattern.matcher(line).replaceAll("jadx-$1-all.jar")
				.replace("-jar \"\\\"\$CLASSPATH\\\"\"", "-cp \"\\\"\$CLASSPATH\\\"\" jadx.cli.JadxCLI")
				.replace("-jar \"%CLASSPATH%\"", "-cp \"%CLASSPATH%\" jadx.cli.JadxCLI")
		}
	}
	val jarGuiPattern = "jadx-gui-(.*)-all.jar".toPattern()
	from(tasks.getByPath(":jadx-gui:installShadowDist")) {
		exclude("**/*.jar")
		filter { line -> jarGuiPattern.matcher(line).replaceAll("jadx-$1-all.jar") }
	}
	from(tasks.getByPath(":jadx-gui:installShadowDist")) {
		include("**/*.jar")
		rename("jadx-gui-(.*)-all.jar", "jadx-$1-all.jar")
	}
	from(layout.projectDirectory) {
		include("README.md")
		include("LICENSE")
	}
	into(layout.buildDirectory.dir("jadx"))
	duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

val pack by tasks.registering(Zip::class) {
	from(copyArtifacts)
	archiveFileName.set("jadx-$jadxVersion.zip")
	destinationDirectory.set(layout.buildDirectory)
}

val distWin by tasks.registering(Zip::class) {
	group = "jadx"
	description = "Build Windows bundle"

	from(distWinConfiguration)

	destinationDirectory.set(layout.buildDirectory.dir("distWin"))
	archiveFileName.set("jadx-gui-$jadxVersion-win.zip")
	duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

val distWinWithJre by tasks.registering(Zip::class) {
	description = "Build Windows with JRE bundle"

	from(distWinWithJreConfiguration)

	destinationDirectory.set(layout.buildDirectory.dir("distWinWithJre"))
	archiveFileName.set("jadx-gui-$jadxVersion-with-jre-win.zip")
	duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

val dist by tasks.registering {
	group = "jadx"
	description = "Build jadx distribution zip bundles"

	dependsOn(pack)

	val os = DefaultNativePlatform.getCurrentOperatingSystem()
	if (os.isWindows) {
		if (project.hasProperty("bundleJRE")) {
			println("Build win bundle with JRE")
			dependsOn(distWinWithJre)
		} else {
			dependsOn(distWin)
		}
	}
}

val cleanBuildDir by tasks.registering(Delete::class) {
	delete(layout.buildDirectory)
}
tasks.getByName("clean").dependsOn(cleanBuildDir)


================================================
FILE: buildSrc/build.gradle.kts
================================================
plugins {
	`kotlin-dsl`
}

dependencies {
	implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.10")

	implementation("org.openrewrite:plugin:6.19.1")
}

repositories {
	gradlePluginPortal()
}


================================================
FILE: buildSrc/src/main/kotlin/jadx-java.gradle.kts
================================================
import org.gradle.api.tasks.testing.logging.TestExceptionFormat

plugins {
	java
	checkstyle

	id("jadx-rewrite")
}

val jadxVersion: String by rootProject.extra
val jadxBuildJavaVersion: Int? by rootProject.extra

group = "io.github.skylot"
version = jadxVersion

dependencies {
	implementation("org.slf4j:slf4j-api:2.0.17")
	compileOnly("org.jetbrains:annotations:26.0.2")

	testImplementation("ch.qos.logback:logback-classic:1.5.22")
	testImplementation("org.assertj:assertj-core:3.27.6")

	testImplementation("org.junit.jupiter:junit-jupiter:5.13.3")
	testRuntimeOnly("org.junit.platform:junit-platform-launcher")

	testCompileOnly("org.jetbrains:annotations:26.0.2")
}

repositories {
	mavenCentral()
	// required for: aapt-proto, r8, smali
	google()
}

java {
	jadxBuildJavaVersion?.let { buildJavaVer ->
		toolchain {
			languageVersion = JavaLanguageVersion.of(buildJavaVer)
		}
	}
	sourceCompatibility = JavaVersion.VERSION_11
	targetCompatibility = JavaVersion.VERSION_11
}

tasks {
	compileJava {
		options.encoding = "UTF-8"
		// options.compilerArgs = listOf("-Xlint:deprecation")
	}
	jar {
		manifest {
			attributes("jadx-version" to jadxVersion)
		}
	}
	test {
		useJUnitPlatform()
		maxParallelForks = Runtime.getRuntime().availableProcessors()
		testLogging {
			showExceptions = true
			exceptionFormat = TestExceptionFormat.FULL
			showCauses = true
		}
	}
}


================================================
FILE: buildSrc/src/main/kotlin/jadx-kotlin.gradle.kts
================================================
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
	id("jadx-java")
	id("org.jetbrains.kotlin.jvm")
}

dependencies {
	implementation(kotlin("stdlib"))
	implementation(kotlin("reflect")) // don't work from plugin classloader
}

kotlin {
	compilerOptions {
		jvmTarget.set(JvmTarget.JVM_11)
	}
}


================================================
FILE: buildSrc/src/main/kotlin/jadx-library.gradle.kts
================================================
plugins {
	id("jadx-java")
	id("java-library")
	id("maven-publish")
	id("signing")
}

val jadxVersion: String by rootProject.extra

group = "io.github.skylot"
version = jadxVersion

java {
	withJavadocJar()
	withSourcesJar()
}

publishing {
	publications {
		create<MavenPublication>("mavenJava") {
			artifactId = project.name
			from(components["java"])
			versionMapping {
				usage("java-api") {
					fromResolutionOf("runtimeClasspath")
				}
				usage("java-runtime") {
					fromResolutionResult()
				}
			}
			pom {
				name.set(project.name)
				description.set(project.description ?: "Dex to Java decompiler")
				url.set("https://github.com/skylot/jadx")
				licenses {
					license {
						name.set("The Apache License, Version 2.0")
						url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
					}
				}
				developers {
					developer {
						id.set("skylot")
						name.set("Skylot")
						email.set(project.properties["libEmail"].toString())
						url.set("https://github.com/skylot")
					}
				}
				scm {
					connection.set("scm:git:git://github.com/skylot/jadx.git")
					developerConnection.set("scm:git:ssh://github.com:skylot/jadx.git")
					url.set("https://github.com/skylot/jadx")
				}
			}
		}
	}
	repositories {
		maven {
			val releasesRepoUrl = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
			val snapshotsRepoUrl = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")
			url = if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl
			credentials {
				username = project.properties["ossrhUser"].toString()
				password = project.properties["ossrhPassword"].toString()
			}
		}
	}
}

signing {
	isRequired = gradle.taskGraph.hasTask("publish")
	sign(publishing.publications["mavenJava"])
}


tasks.javadoc {
	val stdOptions = options as StandardJavadocDocletOptions
	stdOptions.addBooleanOption("html5", true)
	// disable 'missing' warnings
	stdOptions.addStringOption("Xdoclint:all,-missing", "-quiet")
}


================================================
FILE: buildSrc/src/main/kotlin/jadx-rewrite.gradle.kts
================================================
plugins {
	id("org.openrewrite.rewrite")
}

repositories {
	mavenCentral()
}

dependencies {
	rewrite("org.openrewrite.recipe:rewrite-testing-frameworks:3.24.0")
	rewrite("org.openrewrite.recipe:rewrite-logging-frameworks:3.20.0")
	rewrite("org.openrewrite.recipe:rewrite-migrate-java:3.24.0")
	rewrite("org.openrewrite.recipe:rewrite-static-analysis:2.24.0")
}

tasks {
	rewrite {
		// exclusion("src/test/java/jadx/tests/integration")

		// activeRecipe("org.openrewrite.java.migrate.Java8toJava11")

		// checkstyle auto fix
		// activeRecipe("org.openrewrite.staticanalysis.CodeCleanup")
		// setCheckstyleConfigFile(file("$rootDir/config/checkstyle/checkstyle.xml"))

		// logging
		// activeRecipe("org.openrewrite.java.logging.slf4j.Slf4jBestPractices")
		// activeRecipe("org.openrewrite.java.logging.slf4j.LoggersNamedForEnclosingClass")
		// activeRecipe("org.openrewrite.java.logging.slf4j.ParameterizedLogging")
		// activeRecipe("org.openrewrite.java.logging.PrintStackTraceToLogError")

		// testing
		activeRecipe("org.openrewrite.java.testing.assertj.Assertj")
	}
}


================================================
FILE: config/checkstyle/checkstyle.xml
================================================
<?xml version="1.0" ?>

<!DOCTYPE module PUBLIC
		"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
		"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

<module name="Checker">
	<property name="fileExtensions" value="java, properties, xml"/>
	<property name="charset" value="UTF-8"/>

	<module name="TreeWalker">
		<property name="tabWidth" value="4"/>
		<module name="RegexpSinglelineJava">
			<property name="format" value="^\t* "/>
			<property name="message" value="Indent must use tab characters"/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="format" value="^(?!\s+\* $).*?\s+$"/>
			<property name="message" value="Line has trailing spaces."/>
		</module>
		<module name="AvoidEscapedUnicodeCharacters">
			<property name="allowEscapesForControlCharacters" value="true"/>
			<property name="allowByTailComment" value="true"/>
			<property name="allowNonPrintableEscapes" value="true"/>
		</module>

		<module name="EmptyLineSeparator">
			<property name="allowNoEmptyLineBetweenFields" value="true"/>
			<property name="allowMultipleEmptyLines" value="false"/>
		</module>

		<!-- whitespaces -->
		<module name="SingleSpaceSeparator"/>
		<module name="GenericWhitespace"/>
		<module name="MethodParamPad"/>
		<module name="NoWhitespaceBefore"/>
		<module name="OperatorWrap"/>
		<module name="ParenPad"/>
		<module name="TypecastParenPad"/>
		<module name="WhitespaceAfter"/>
		<module name="WhitespaceAround">
			<property name="allowEmptyMethods" value="true"/>
		</module>
		<!-- <module name="EmptyForIteratorPad"/> -->
		<!-- <module name="NoWhitespaceAfter"/>-->

		<module name="NoLineWrap"/>

		<module name="IllegalImport"/> <!-- defaults to sun.* packages -->
		<module name="RedundantImport"/>
		<module name="UnusedImports"/>
		<!-- <module name="AvoidStarImport"/> -->

		<module name="NeedBraces"/>
		<module name="LeftCurly"/>
		<module name="RightCurly"/>
		<module name="EmptyCatchBlock">
			<property name="exceptionVariableName" value="expected|ignore"/>
		</module>

		<!-- naming -->
		<module name="PackageName"/>
		<module name="TypeName"/>
		<module name="InterfaceTypeParameterName"/>
		<module name="ClassTypeParameterName"/>
		<module name="StaticVariableName"/>
		<module name="ConstantName"/>
		<module name="MemberName"/>
		<module name="MethodName"/>
		<module name="MethodTypeParameterName"/>
		<module name="ParameterName"/>
		<module name="LambdaParameterName"/>
		<module name="LocalVariableName"/>
		<module name="LocalFinalVariableName"/>
		<module name="CatchParameterName"/>
		<!-- <module name="HiddenField"/> -->

		<!-- annotations -->
		<module name="AnnotationLocation"/>
		<module name="AnnotationUseStyle">
			<property name="elementStyle" value="compact"/>
		</module>
		<module name="MissingOverride"/>
		<!-- <module name="MissingDeprecated"/> -->

		<module name="ModifierOrder"/>
		<!-- <module name="RedundantModifier"/> -->
		<!-- <module name="ParameterNumber"/> -->

		<module name="EmptyStatement"/>
		<module name="DefaultComesLast"/>
		<module name="EqualsHashCode"/>
		<module name="FallThrough"/>
		<!-- <module name="IllegalCatch"/> -->
		<module name="IllegalThrows"/>
		<module name="IllegalType"/>
		<module name="InnerAssignment"/>
		<module name="MultipleVariableDeclarations"/>
		<module name="NoClone"/>
		<module name="NoFinalizer"/>
		<module name="OneStatementPerLine"/>
		<module name="PackageDeclaration"/>
		<module name="StringLiteralEquality"/>

		<!-- design -->
		<module name="OneTopLevelClass"/>
		<module name="MutableException"/>
		<module name="InterfaceIsType"/>
		<module name="ThrowsCount">
			<property name="max" value="2"/>
		</module>

		<!-- misc -->
		<module name="ArrayTypeStyle"/>
		<module name="OuterTypeFilename"/>

		<!-- sizes -->
		<module name="OuterTypeNumber"/>

		<module name="SuppressWarningsHolder"/>

		<module name="IllegalType">
			<property name="illegalClassNames" value="java.util.ArrayList, java.util.HashMap, java.util.HashSet,
				 java.util.LinkedHashMap, java.util.LinkedHashSet, java.util.TreeMap, java.util.TreeSet"/>
		</module>
		<module name="IllegalImport">
			<property name="illegalClasses" value="jadx.core.utils.DebugUtils"/>
			<!-- don't use nullable annotations from RxJava -->
			<property name="illegalClasses" value="io.reactivex.rxjava3.annotations.NonNull"/>
			<property name="illegalClasses" value="io.reactivex.rxjava3.annotations.Nullable"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="id" value="printstacktrace"/>
			<property name="format" value="\.printStackTrace\(\)"/>
			<property name="ignoreComments" value="true"/>
			<property name="message"
					  value="Using Throwable.printStackTrace() is forbidden. Use logger to print exception"/>
		</module>
	</module>

	<module name="NewlineAtEndOfFile"/>
	<module name="SuppressWarningsFilter"/>
</module>


================================================
FILE: config/code-formatter/eclipse.importorder
================================================
#Import Order
0=java
1=javax
2=org
3=com
4=
5=jadx
6=\#


================================================
FILE: config/code-formatter/eclipse.xml
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="23">
    <profile kind="CodeFormatterProfile" name="jadx eclipse" version="23">
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="separate_lines_if_wrapped"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="49"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="49"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
        <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="48"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="49"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="49"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="49"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
        <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
        <setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
        <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="140"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
    </profile>
</profiles>


================================================
FILE: config/jflex/.gitignore
================================================
SmaliTokenMaker.java


================================================
FILE: config/jflex/README.md
================================================
Refer to the following instructions to modify and use to generate SmaliTokenMarker

```shell
jflex SmaliTokenMaker.flex --skel skeleton.default
```


================================================
FILE: config/jflex/SmaliTokenMaker.flex
================================================
/*
 * Generated on 11/22/21, 8:58 PM
 */
package jadx.gui.ui.codearea;

import java.io.*;
import javax.swing.text.Segment;

import org.fife.ui.rsyntaxtextarea.*;


/*
 * 用于Smali代码高亮
 * MartinKay@qq.com
 */
%%

%public
%class SmaliTokenMaker
%extends AbstractJFlexCTokenMaker
%unicode
/* Case sensitive */
%type org.fife.ui.rsyntaxtextarea.Token


%{


	/**
	 * Constructor.  This must be here because JFlex does not generate a
	 * no-parameter constructor.
	 */
	public SmaliTokenMaker() {
	}


	/**
	 * Adds the token specified to the current linked list of tokens.
	 *
	 * @param tokenType The token's type.
	 * @see #addToken(int, int, int)
	 */
	private void addHyperlinkToken(int start, int end, int tokenType) {
		int so = start + offsetShift;
		addToken(zzBuffer, start,end, tokenType, so, true);
	}


	/**
	 * Adds the token specified to the current linked list of tokens.
	 *
	 * @param tokenType The token's type.
	 */
	private void addToken(int tokenType) {
		addToken(zzStartRead, zzMarkedPos-1, tokenType);
	}


	/**
	 * Adds the token specified to the current linked list of tokens.
	 *
	 * @param tokenType The token's type.
	 * @see #addHyperlinkToken(int, int, int)
	 */
	private void addToken(int start, int end, int tokenType) {
		int so = start + offsetShift;
		addToken(zzBuffer, start,end, tokenType, so, false);
	}


	/**
	 * Adds the token specified to the current linked list of tokens.
	 *
	 * @param array The character array.
	 * @param start The starting offset in the array.
	 * @param end The ending offset in the array.
	 * @param tokenType The token's type.
	 * @param startOffset The offset in the document at which this token
	 *        occurs.
	 * @param hyperlink Whether this token is a hyperlink.
	 */
	public void addToken(char[] array, int start, int end, int tokenType,
						int startOffset, boolean hyperlink) {
		super.addToken(array, start,end, tokenType, startOffset, hyperlink);
		zzStartRead = zzMarkedPos;
	}


	/**
	 * {@inheritDoc}
	 */
	public String[] getLineCommentStartAndEnd(int languageIndex) {
		return new String[] { "#", null };
	}


	/**
	 * Returns the first token in the linked list of tokens generated
	 * from <code>text</code>.  This method must be implemented by
	 * subclasses so they can correctly implement syntax highlighting.
	 *
	 * @param text The text from which to get tokens.
	 * @param initialTokenType The token type we should start with.
	 * @param startOffset The offset into the document at which
	 *        <code>text</code> starts.
	 * @return The first <code>Token</code> in a linked list representing
	 *         the syntax highlighted text.
	 */
	public Token getTokenList(Segment text, int initialTokenType, int startOffset) {

		resetTokenList();
		this.offsetShift = -text.offset + startOffset;

		// Start off in the proper state.
		int state = Token.NULL;
		switch (initialTokenType) {
			/* No multi-line comments */
			/* No documentation comments */
			default:
				state = Token.NULL;
		}

		s = text;
		try {
			yyreset(zzReader);
			yybegin(state);
			return yylex();
		} catch (IOException ioe) {
			ioe.printStackTrace();
			return new TokenImpl();
		}

	}


	/**
	 * Refills the input buffer.
	 *
	 * @return      <code>true</code> if EOF was reached, otherwise
	 *              <code>false</code>.
	 */
	private boolean zzRefill() {
		return zzCurrentPos>=s.offset+s.count;
	}


	/**
	 * Resets the scanner to read from a new input stream.
	 * Does not close the old reader.
	 *
	 * All internal variables are reset, the old input stream
	 * <b>cannot</b> be reused (internal buffer is discarded and lost).
	 * Lexical state is set to <tt>YY_INITIAL</tt>.
	 *
	 * @param reader   the new input stream
	 */
	public final void yyreset(Reader reader) {
		// 's' has been updated.
		zzBuffer = s.array;
		/*
		 * We replaced the line below with the two below it because zzRefill
		 * no longer "refills" the buffer (since the way we do it, it's always
		 * "full" the first time through, since it points to the segment's
		 * array).  So, we assign zzEndRead here.
		 */
		//zzStartRead = zzEndRead = s.offset;
		zzStartRead = s.offset;
		zzEndRead = zzStartRead + s.count - 1;
		zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset;
		zzLexicalState = YYINITIAL;
		zzReader = reader;
		zzAtBOL  = true;
		zzAtEOF  = false;
	}

%}

Letter							= [A-Za-z]
LetterOrUnderscore				= ({Letter}|"_")
NonzeroDigit						= [1-9]
Digit							= ("0"|{NonzeroDigit})
HexDigit							= ({Digit}|[A-Fa-f])
OctalDigit						= ([0-7])
AnyCharacterButApostropheOrBackSlash	= ([^\\'])
AnyCharacterButDoubleQuoteOrBackSlash	= ([^\\\"\n])
EscapedSourceCharacter				= ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit})
Escape							= ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter}))
NonSeparator						= ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\")
IdentifierStart					= ({LetterOrUnderscore}|"$")
IdentifierPart						= ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter}))

LineTerminator				= (\n)
WhiteSpace				= ([ \t\f]+)

CharLiteral	= ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\'])
UnclosedCharLiteral			= ([\'][^\'\n]*)
ErrorCharLiteral			= ({UnclosedCharLiteral}[\'])
StringLiteral				= ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"])
UnclosedStringLiteral		= ([\"]([\\].|[^\\\"])*[^\"]?)
ErrorStringLiteral			= ({UnclosedStringLiteral}[\"])

/* No multi-line comments */
/* No documentation comments */
LineCommentBegin			= "#"

IntegerLiteral			= ({Digit}+)
HexLiteral			= (0x{HexDigit}+)
FloatLiteral			= (({Digit}+)("."{Digit}+)?(e[+-]?{Digit}+)? | ({Digit}+)?("."{Digit}+)(e[+-]?{Digit}+)?)
ErrorNumberFormat			= (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+)
BooleanLiteral				= ("true"|"false")

Separator					= ([\(\)\{\}\[\]])
Separator2				= ([\;,.])

Identifier				= ({IdentifierStart}{IdentifierPart}*)

URLGenDelim				= ([:\/\?#\[\]@])
URLSubDelim				= ([\!\$&'\(\)\*\+,;=])
URLUnreserved			= ({LetterOrUnderscore}|{Digit}|[\-\.\~])
URLCharacter			= ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%])
URLCharacters			= ({URLCharacter}*)
URLEndCharacter			= ([\/\$]|{Letter}|{Digit})
URL						= (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?)


/*  Custom Regex  */
/* fully-qualified name Rules  */
SimpleName = ([a-zA-Z0-9_$]*)
QUALIFIED_TYPE_NAME = ("L"({SimpleName}{SLASH})*{SimpleName}*";")
/* Types */
VOID_TYPE = ("V")
BOOLEAN_TYPE = ("Z")
BYTE_TYPE = ("B")
SHORT_TYPE = ("S")
CHAR_TYPE = ("C")
INT_TYPE = ("I")
LONG_TYPE = ("J")
FLOAT_TYPE = ("F")
DOUBLE_TYPE = ("D")
/* Multi Args Types Highlight  */
MULTI_ARGS_TYPES = (({BOOLEAN_TYPE}|{BYTE_TYPE}|{SHORT_TYPE}|{CHAR_TYPE}|{INT_TYPE}|{LONG_TYPE}|{FLOAT_TYPE}|{DOUBLE_TYPE})+);

/* Types fully-qualified name */
COMPOUND_METHOD_ARG_LITERAL = (({BOOLEAN_TYPE}|{BYTE_TYPE}|{SHORT_TYPE}|{CHAR_TYPE}|{INT_TYPE}|{LONG_TYPE}|{FLOAT_TYPE}|{DOUBLE_TYPE})+{QUALIFIED_TYPE_NAME})


LBRACK = ("[")
RBRACK = ("]")
LPAREN = ("(")
RPAREN = (")")
LBRACE = ("{")
RBRACE = ("}")
COLON = (":")
ASSIGN = ("=")
DOT = (".")
SUB = ("-")
COMMA = (",")
SLASH = ("/")
LT = ("<")
GT = (">")
ARROW = ("->")
SEMI = (";")
ARROW_FUNCTION = ({ARROW}[a-zA-Z_$<>]*)
CustomSeparator = ({Separator}|{ARROW_FUNCTION})

/* Register */
VREGISTER = ("v"("0"|[1-9])*)
PREGISTER = ("p"("0"|[1-9])*)

/* Flags  */
FLAG_PSWITCH = (":pswitch_"{SimpleName})
FLAG_PSWITCH_DATA = (":pswitch_data_"{SimpleName})
FLAG_GOTO = (":goto_"{SimpleName})
FLAG_COND = (":cond_"{SimpleName})
FLAG_TRY_START = (":try_start_"{SimpleName})
FLAG_TRY_END = (":try_end_"{SimpleName})
FLAG_CATCH = (":catch_"{SimpleName})
FLAG_CATCHALL = (":catchall_"{SimpleName})
FLAG_ARRAY = (":array_"{SimpleName})

/* No string state */
/* No char state */
/* No MLC state */
/* No documentation comment state */
%state EOL_COMMENT

%%

<YYINITIAL> {

	/* Keywords Instructions Highlight */
"nop" |
"move" |
"move/from16" |
"move/16" |
"move-wide" |
"move-wide/from16" |
"move-wide/16" |
"move-object" |
"move-object/from16" |
"move-object/16" |
"move-result" |
"move-result-wide" |
"move-result-object" |
"move-exception" |
"return-void" |
"return" |
"return-wide" |
"return-object" |
"const/4" |
"const/16" |
"const" |
"const/high16" |
"const-wide/16" |
"const-wide/32" |
"const-wide" |
"const-wide/high16" |
"const-string" |
"const-string/jumbo" |
"const-class" |
"monitor-enter" |
"monitor-exit" |
"check-cast" |
"instance-of" |
"array-length" |
"new-instance" |
"new-array" |
"filled-new-array" |
"filled-new-array/range" |
"fill-array-data" |
"throw" |
"goto" |
"goto/16" |
"goto/32" |
"cmpl-float" |
"cmpg-float" |
"cmpl-double" |
"cmpg-double" |
"cmp-long" |
"if-eq" |
"if-ne" |
"if-lt" |
"if-ge" |
"if-gt" |
"if-le" |
"if-eqz" |
"if-nez" |
"if-ltz" |
"if-gez" |
"if-gtz" |
"if-lez" |
"aget" |
"aget-wide" |
"aget-object" |
"aget-boolean" |
"aget-byte" |
"aget-char" |
"aget-short" |
"aput" |
"aput-wide" |
"aput-object" |
"aput-boolean" |
"aput-byte" |
"aput-char" |
"aput-short" |
"iget" |
"iget-wide" |
"iget-object" |
"iget-boolean" |
"iget-byte" |
"iget-char" |
"iget-short" |
"iput" |
"iput-wide" |
"iput-object" |
"iput-boolean" |
"iput-byte" |
"iput-char" |
"iput-short" |
"sget" |
"sget-wide" |
"sget-object" |
"sget-boolean" |
"sget-byte" |
"sget-char" |
"sget-short" |
"sput" |
"sput-wide" |
"sput-object" |
"sput-boolean" |
"sput-byte" |
"sput-char" |
"sput-short" |
"invoke-virtual" |
"invoke-super" |
"invoke-direct" |
"invoke-static" |
"invoke-interface" |
"invoke-virtual/range" |
"invoke-super/range" |
"invoke-direct/range" |
"invoke-static/range" |
"invoke-interface/range" |
"neg-int" |
"not-int" |
"neg-long" |
"not-long" |
"neg-float" |
"neg-double" |
"int-to-long" |
"int-to-float" |
"int-to-double" |
"long-to-int" |
"long-to-float" |
"long-to-double" |
"float-to-int" |
"float-to-long" |
"float-to-double" |
"double-to-int" |
"double-to-long" |
"double-to-float" |
"int-to-byte" |
"int-to-char" |
"int-to-short" |
"add-int" |
"sub-int" |
"mul-int" |
"div-int" |
"rem-int" |
"and-int" |
"or-int" |
"xor-int" |
"shl-int" |
"shr-int" |
"ushr-int" |
"add-long" |
"sub-long" |
"mul-long" |
"div-long" |
"rem-long" |
"and-long" |
"or-long" |
"xor-long" |
"shl-long" |
"shr-long" |
"ushr-long" |
"add-float" |
"sub-float" |
"mul-float" |
"div-float" |
"rem-float" |
"add-double" |
"sub-double" |
"mul-double" |
"div-double" |
"rem-double" |
"add-int/2addr" |
"sub-int/2addr" |
"mul-int/2addr" |
"div-int/2addr" |
"rem-int/2addr" |
"and-int/2addr" |
"or-int/2addr" |
"xor-int/2addr" |
"shl-int/2addr" |
"shr-int/2addr" |
"ushr-int/2addr" |
"add-long/2addr" |
"sub-long/2addr" |
"mul-long/2addr" |
"div-long/2addr" |
"rem-long/2addr" |
"and-long/2addr" |
"or-long/2addr" |
"xor-long/2addr" |
"shl-long/2addr" |
"shr-long/2addr" |
"ushr-long/2addr" |
"add-float/2addr" |
"sub-float/2addr" |
"mul-float/2addr" |
"div-float/2addr" |
"rem-float/2addr" |
"add-double/2addr" |
"sub-double/2addr" |
"mul-double/2addr" |
"div-double/2addr" |
"rem-double/2addr" |
"add-int/lit16" |
"rsub-int" |
"mul-int/lit16" |
"div-int/lit16" |
"rem-int/lit16" |
"and-int/lit16" |
"or-int/lit16" |
"xor-int/lit16" |
"add-int/lit8" |
"rsub-int/lit8" |
"mul-int/lit8" |
"div-int/lit8" |
"rem-int/lit8" |
"and-int/lit8" |
"or-int/lit8" |
"xor-int/lit8" |
"shl-int/lit8" |
"shr-int/lit8" |
"ushr-int/lit8" |
"invoke-polymorphic" |
"invoke-polymorphic/range" |
"invoke-custom" |
"invoke-custom/range" |
"const-method-handle" |
"const-method-type" |
"packed-switch" |
"sparse-switch"		{ addToken(Token.FUNCTION); }

	/* Keywords Modifiers(IDENTIFIER标识符、修饰符) Highlight */
"public" |
"private" |
"protected" |
"final" |
"annotation" |
"static" |
"synthetic" |
"constructor" |
"abstract" |
"enum" |
"interface" |
"transient" |
"bridge" |
"declared-synchronized" |
"volatile" |
"strictfp" |
"varargs" |
"native"		{ addToken(Token.RESERVED_WORD); }




	/* Keywords Directives Highlight */
".method" |
".end method" |
".implements" |
".class" |
".prologue" |
".source" |
".super" |
".field" |
".end field" |
".registers" |
".locals" |
".param" |
".line" |
".catch" |
".catchall" |
".annotation" |
".end annotation" |
".local" |
".end local" |
".restart local" |
".packed-switch" |
".end packed-switch" |
".array-data" |
".end array-data" |
".sparse-switch" |
".end sparse-switch" |
".end param"		{ addToken(Token.RESERVED_WORD_2); }


	/* VARIABLE Register Highlight */
{VREGISTER} |
{PREGISTER}		{ addToken(Token.VARIABLE); }



	/* Data types Highlight */
{QUALIFIED_TYPE_NAME} |
{COMPOUND_METHOD_ARG_LITERAL} |
{MULTI_ARGS_TYPES} |
{QUALIFIED_TYPE_NAME} |
{VOID_TYPE} |
{BOOLEAN_TYPE} |
{BYTE_TYPE} |
{SHORT_TYPE} |
{CHAR_TYPE} |
{INT_TYPE} |
{LONG_TYPE} |
{FLOAT_TYPE} |
{DOUBLE_TYPE} 	{ addToken(Token.DATA_TYPE); }

 /* FLAGS */
{FLAG_PSWITCH} |
{FLAG_PSWITCH_DATA} |
{FLAG_GOTO} |
{FLAG_COND} |
{FLAG_TRY_START} |
{FLAG_TRY_END} |
{FLAG_CATCHALL} |
{FLAG_ARRAY} |
{FLAG_CATCH}  	{ addToken(Token.MARKUP_TAG_NAME); }

	/* Functions */
	/* No functions */

	{BooleanLiteral}			{ addToken(Token.LITERAL_BOOLEAN); }

	{LineTerminator}				{ addNullToken(); return firstToken; }

	{Identifier}					{ addToken(Token.IDENTIFIER); }

	{WhiteSpace}					{ addToken(Token.WHITESPACE); }

	/* String/Character literals. */
	{CharLiteral}				{ addToken(Token.LITERAL_CHAR); }
{UnclosedCharLiteral}		{ addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; }
{ErrorCharLiteral}			{ addToken(Token.ERROR_CHAR); }
	{StringLiteral}				{ addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); }
{UnclosedStringLiteral}		{ addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; }
{ErrorStringLiteral}			{ addToken(Token.ERROR_STRING_DOUBLE); }

	/* Comment literals. */
	/* No multi-line comments */
	/* No documentation comments */
	{LineCommentBegin}			{ start = zzMarkedPos-1; yybegin(EOL_COMMENT); }

	/* Separators. */
	{CustomSeparator}					{ addToken(Token.SEPARATOR); }
	{Separator2}					{ addToken(Token.IDENTIFIER); }

	/* Operators. */
"!" |
";" |
"." |
"=" |
"/" |
"'" |
"(" |
")" |
"," |
"->" |
";->" |
"<" |
">" |
"@" |
"[" |
"]" |
"{" |
"}"		{ addToken(Token.OPERATOR); }

	/* Numbers */
	{IntegerLiteral}				{ addToken(Token.LITERAL_NUMBER_DECIMAL_INT); }
	{HexLiteral}					{ addToken(Token.LITERAL_NUMBER_HEXADECIMAL); }
	{FloatLiteral}					{ addToken(Token.LITERAL_NUMBER_FLOAT); }
	{ErrorNumberFormat}			{ addToken(Token.ERROR_NUMBER_FORMAT); }

	/* Ended with a line not in a string or comment. */
	<<EOF>>						{ addNullToken(); return firstToken; }

	/* Catch any other (unhandled) characters. */
	.							{ addToken(Token.IDENTIFIER); }

}


/* No char state */

/* No string state */

/* No multi-line comment state */

/* No documentation comment state */

<EOL_COMMENT> {
	[^hwf\n]+				{}
	{URL}					{ int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; }
	[hwf]					{}
	\n						{ addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; }
	<<EOF>>					{ addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; }
}


================================================
FILE: config/jflex/skeleton.default
================================================

  /** This character denotes the end of file */
  public static final int YYEOF = -1;

  /** initial size of the lookahead buffer */
--- private static final int ZZ_BUFFERSIZE = ...;

  /** lexical states */
---  lexical states, charmap

  /* error codes */
  private static final int ZZ_UNKNOWN_ERROR = 0;
  private static final int ZZ_NO_MATCH = 1;
  private static final int ZZ_PUSHBACK_2BIG = 2;

  /* error messages for the codes above */
  private static final String ZZ_ERROR_MSG[] = {
    "Unkown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

--- isFinal list
  /** the input device */
  private java.io.Reader zzReader;

  /** the current state of the DFA */
  private int zzState;

  /** the current lexical state */
  private int zzLexicalState = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private char zzBuffer[];

  /** the textposition at the last accepting state */
  private int zzMarkedPos;

  /** the textposition at the last state to be included in yytext */
  private int zzPushbackPos;

  /** the current text position in the buffer */
  private int zzCurrentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int zzStartRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int zzEndRead;

  /** number of newlines encountered up to the start of the matched text */
  private int yyline;

  /** the number of characters up to the start of the matched text */
  private int yychar;

  /**
   * the number of characters from the last newline up to the start of the
   * matched text
   */
  private int yycolumn;

  /**
   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
   */
  private boolean zzAtBOL = true;

  /** zzAtEOF == true <=> the scanner is at the EOF */
  private boolean zzAtEOF;

--- user class code

  /**
   * Creates a new scanner
   * There is also a java.io.InputStream version of this constructor.
   *
   * @param   in  the java.io.Reader to read input from.
   */
--- constructor declaration


  /**
   * Closes the input stream.
   */
  public final void yyclose() throws java.io.IOException {
    zzAtEOF = true;            /* indicate end of file */
    zzEndRead = zzStartRead;  /* invalidate buffer    */

    if (zzReader != null)
      zzReader.close();
  }


  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  public final void yybegin(int newState) {
    zzLexicalState = newState;
  }

  public final int yystate() {
    return zzLexicalState;
  }

  /**
   * Returns the text matched by the current regular expression.
   */
  public final String yytext() {
    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
  }


  /**
   * Returns the character at position <tt>pos</tt> from the
   * matched text.
   *
   * It is equivalent to yytext().charAt(pos), but faster
   *
   * @param pos the position of the character to fetch.
   *            A value from 0 to yylength()-1.
   *
   * @return the character at position pos
   */
  public final char yycharat(int pos) {
    return zzBuffer[zzStartRead+pos];
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return zzMarkedPos-zzStartRead;
  }


  /**
   * Reports an error that occured while scanning.
   *
   * In a wellformed scanner (no or only correct usage of
   * yypushback(int) and a match-all fallback rule) this method
   * will only be called with things that "Can't Possibly Happen".
   * If this method is called, something is seriously wrong
   * (e.g. a JFlex bug producing a faulty scanner etc.).
   *
   * Usual syntax/scanner level error handling should be done
   * in error fallback rules.
   *
   * @param   errorCode  the code of the errormessage to display
   */
--- zzScanError declaration
    String message;
    try {
      message = ZZ_ERROR_MSG[errorCode];
    }
    catch (ArrayIndexOutOfBoundsException e) {
      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
    }

--- throws clause
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
--- yypushback decl (contains zzScanError exception)
    if ( number > yylength() )
      zzScanError(ZZ_PUSHBACK_2BIG);

    zzMarkedPos -= number;
  }


--- zzDoEOF
  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
--- yylex declaration
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    char [] zzBufferL = zzBuffer;
    char [] zzCMapL = ZZ_CMAP;

--- local declarations

    while (true) {
      zzMarkedPosL = zzMarkedPos;

--- start admin (line, char, col count)
      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

--- start admin (lexstate etc)

      zzForAction: {
        while (true) {

--- next input, line, col, char count, next transition, isFinal action
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
--- line count update
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;
--- char count update

--- actions
        default:
          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
            zzAtEOF = true;
--- eofvalue
          }
          else {
--- no match
          }
      }
    }
  }

--- main

}


================================================
FILE: contrib/jadx-gui.desktop
================================================
[Desktop Entry]
Name=JADX GUI
Comment=Dex to Java decompiler
Icon=jadx
Exec=jadx-gui %f
Terminal=false
Type=Application
Categories=Development;Java;
Keywords=Java;Decompiler;
StartupWMClass=jadx-gui-JadxGUI


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=72f44c9f8ebcb1af43838f45ee5c4aa9c5444898b3468ab3f4af7b6076c5bc3f
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
org.gradle.warning.mode=all
org.gradle.parallel=true
org.gradle.caching=true

### Disable configuration cache for now: causing issues with spotless and version plugins
# org.gradle.configuration-cache=true
# org.gradle.configuration-cache.problems=warn

# Flags for google-java-format (optimize imports by spotless) for Java >= 16.
# Java < 9 will ignore unsupported flags (thanks to -XX:+IgnoreUnrecognizedVMOptions)
org.gradle.jvmargs=-XX:+IgnoreUnrecognizedVMOptions \
  --add-exports='jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' \
  --add-exports='jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED' \
  --add-exports='jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED' \
  --add-exports='jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED' \
  --add-exports='jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED'


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac



# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line



@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: jadx-cli/build.gradle.kts
================================================
plugins {
	id("jadx-java")
	id("jadx-library")
	id("application")

	// use shadow only for application scripts, jar will be copied from jadx-gui
	id("com.gradleup.shadow") version "8.3.8"
}

dependencies {
	implementation(project(":jadx-core"))
	implementation(project(":jadx-plugins-tools"))
	implementation(project(":jadx-commons:jadx-app-commons"))

	runtimeOnly(project(":jadx-plugins:jadx-dex-input"))
	runtimeOnly(project(":jadx-plugins:jadx-java-input"))
	runtimeOnly(project(":jadx-plugins:jadx-java-convert"))
	runtimeOnly(project(":jadx-plugins:jadx-smali-input"))
	runtimeOnly(project(":jadx-plugins:jadx-rename-mappings"))
	runtimeOnly(project(":jadx-plugins:jadx-kotlin-metadata"))
	runtimeOnly(project(":jadx-plugins:jadx-kotlin-source-debug-extension"))
	runtimeOnly(project(":jadx-plugins:jadx-xapk-input"))
	runtimeOnly(project(":jadx-plugins:jadx-aab-input"))
	runtimeOnly(project(":jadx-plugins:jadx-apkm-input"))
	runtimeOnly(project(":jadx-plugins:jadx-apks-input"))

	implementation("org.jcommander:jcommander:2.0")
	implementation("ch.qos.logback:logback-classic:1.5.22")
	implementation("com.google.code.gson:gson:2.13.2")
}

application {
	applicationName = "jadx"
	mainClass.set("jadx.cli.JadxCLI")
	applicationDefaultJvmArgs =
		listOf(
			"-XX:+IgnoreUnrecognizedVMOptions",
			"-Xms256M",
			"-XX:MaxRAMPercentage=70.0",
			"-XX:ParallelGCThreads=3",
			// disable zip checks (#1962)
			"-Djdk.util.zip.disableZip64ExtraFieldValidation=true",
			// Foreign API access for 'directories' library (Windows only)
			"--enable-native-access=ALL-UNNAMED",
		)
	applicationDistribution.from("$rootDir") {
		include("README.md")
		include("NOTICE")
		include("LICENSE")
	}
}

tasks.shadowJar {
	// shadow jar not needed
	configurations = listOf()
}


================================================
FILE: jadx-cli/src/main/java/jadx/cli/JCommanderWrapper.java
================================================
package jadx.cli;

import java.io.PrintStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.function.Supplier;

import org.jetbrains.annotations.Nullable;

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterDescription;
import com.beust.jcommander.ParameterException;
import com.beust.jcommander.Parameterized;

import jadx.api.JadxDecompiler;
import jadx.api.plugins.JadxPluginInfo;
import jadx.api.plugins.options.JadxPluginOptions;
import jadx.api.plugins.options.OptionDescription;
import jadx.core.plugins.JadxPluginManager;
import jadx.core.plugins.PluginContext;
import jadx.core.utils.Utils;

public class JCommanderWrapper {
	private final JCommander jc;
	private final JadxCLIArgs argsObj;

	public JCommanderWrapper(JadxCLIArgs argsObj) {
		JCommander.Builder builder = JCommander.newBuilder().addObject(argsObj);
		builder.acceptUnknownOptions(true); // workaround for "default" command
		JadxCLICommands.append(builder);
		this.jc = builder.build();
		this.argsObj = argsObj;
	}

	public boolean parse(String[] args) {
		try {
			String[] fixedArgs = fixArgsForEmptySaveConfig(args);
			jc.parse(fixedArgs);
			applyFiles(argsObj);
			return true;
		} catch (ParameterException e) {
			System.err.println("Arguments parse error: " + e.getMessage());
			return false;
		}
	}

	public void overrideProvided(JadxCLIArgs obj) {
		applyFiles(obj);
		for (ParameterDescription parameter : jc.getParameters()) {
			if (parameter.isAssigned()) {
				overrideProperty(obj, parameter);
			}
		}
	}

	public boolean processCommands() {
		String parsedCommand = jc.getParsedCommand();
		if (parsedCommand == null) {
			return false;
		}
		return JadxCLICommands.process(this, jc, parsedCommand);
	}

	/**
	 * The main parameter parsing doesn't work if accepting unknown options
	 */
	private void applyFiles(JadxCLIArgs argsObj) {
		argsObj.setFiles(jc.getUnknownOptions());
	}

	/**
	 * Override assigned field value to obj
	 */
	private static void overrideProperty(JadxCLIArgs obj, ParameterDescription parameter) {
		Parameterized parameterized = parameter.getParameterized();
		Object providedValue = parameterized.get(parameter.getObject());
		Object newValue = mergeValues(parameterized.getType(), providedValue, () -> parameterized.get(obj));
		parameterized.set(obj, newValue);
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	private static Object mergeValues(Class<?> type, Object value, Supplier<Object> prevValueProvider) {
		if (type.isAssignableFrom(Map.class)) {
			// merge maps instead replacing whole map
			Map prevMap = (Map) prevValueProvider.get();
			return Utils.mergeMaps(prevMap, (Map) value); // value map will override keys in prevMap
		}
		// simple override
		return value;
	}

	/**
	 * Workaround to allow empty value (i.e. zero arity) for '--save-config' option
	 * Insert empty string arg if another option start right after this one, or it is a last one.
	 */
	private String[] fixArgsForEmptySaveConfig(String[] args) {
		int len = args.length;
		for (int i = 0; i < len; i++) {
			String arg = args[i];
			if (arg.equals("--save-config")) {
				int next = i + 1;
				if (next == len) {
					return insertEmptyArg(args, next, true);
				}
				if (next < len) {
					String nextArg = args[next];
					if (nextArg.startsWith("-")) {
						return insertEmptyArg(args, next, false);
					}
				}
				break;
			}
		}
		return args;
	}

	private static String[] insertEmptyArg(String[] args, int i, boolean add) {
		List<String> strings = new ArrayList<>(Arrays.asList(args));
		if (add) {
			strings.add("");
		} else {
			strings.add(i, "");
		}
		return strings.toArray(new String[0]);
	}

	public void printUsage() {
		LogHelper.setLogLevel(LogHelper.LogLevelEnum.ERROR); // mute logger while printing help

		// print usage in not sorted fields order (by default sorted by description)
		PrintStream out = System.out;
		out.println();
		out.println("jadx - dex to java decompiler, version: " + JadxDecompiler.getVersion());
		out.println();
		out.println("usage: jadx [command] [options] " + jc.getMainParameterDescription());

		out.println("commands (use '<command> --help' for command options):");
		for (String command : jc.getCommands().keySet()) {
			out.println("  " + command + "\t  - " + jc.getUsageFormatter().getCommandDescription(command));
		}
		out.println();

		int maxNamesLen = printOptions(jc, out, true);
		out.println(appendPluginOptions(maxNamesLen));
		out.println();
		out.println("Environment variables:");
		out.println("  JADX_DISABLE_XML_SECURITY - set to 'true' to disable all security checks for XML files");
		out.println("  JADX_DISABLE_ZIP_SECURITY - set to 'true' to disable all security checks for zip files");
		out.println("  JADX_ZIP_MAX_ENTRIES_COUNT - maximum allowed number of entries in zip files (default: 100 000)");
		out.println("  JADX_CONFIG_DIR - custom config directory, using system by default");
		out.println("  JADX_CACHE_DIR - custom cache directory, using system by default");
		out.println("  JADX_TMP_DIR - custom temp directory, using system by default");
		out.println();
		out.println("Examples:");
		out.println("  jadx -d out classes.dex");
		out.println("  jadx --rename-flags \"none\" classes.dex");
		out.println("  jadx --rename-flags \"valid, printable\" classes.dex");
		out.println("  jadx --log-level ERROR app.apk");
		out.println("  jadx -Pdex-input.verify-checksum=no app.apk");
	}

	public void printUsage(JCommander subCommander) {
		PrintStream out = System.out;
		out.println("usage: " + subCommander.getProgramName() + " [options]");
		printOptions(subCommander, out, false);
	}

	private static int printOptions(JCommander jc, PrintStream out, boolean addDefaults) {
		out.println("options:");

		List<ParameterDescription> params = jc.getParameters();
		Map<String, ParameterDescription> paramsMap = new HashMap<>(params.size());
		int maxNamesLen = 0;
		for (ParameterDescription p : params) {
			paramsMap.put(p.getParameterized().getName(), p);
			int len = p.getNames().length();
			String valueDesc = getValueDesc(p);
			if (valueDesc != null) {
				len += 1 + valueDesc.length();
			}
			maxNamesLen = Math.max(maxNamesLen, len);
		}
		maxNamesLen += 3;

		Object args = jc.getObjects().get(0);
		for (Field f : getFields(args.getClass())) {
			String name = f.getName();
			ParameterDescription p = paramsMap.get(name);
			if (p == null || p.getParameter().hidden()) {
				continue;
			}
			StringBuilder opt = new StringBuilder();
			opt.append("  ").append(p.getNames());
			String valueDesc = getValueDesc(p);
			if (valueDesc != null) {
				opt.append(' ').append(valueDesc);
			}
			addSpaces(opt, maxNamesLen - opt.length());
			String description = p.getDescription();
			if (description.contains("\n")) {
				String[] lines = description.split("\n");
				opt.append("- ").append(lines[0]);
				for (int i = 1; i < lines.length; i++) {
					opt.append('\n');
					addSpaces(opt, maxNamesLen + 2);
					opt.append(lines[i]);
				}
			} else {
				opt.append("- ").append(description);
			}
			if (addDefaults) {
				String defaultValue = getDefaultValue(args, f);
				if (defaultValue != null
						&& !defaultValue.isEmpty()
						&& !description.contains("(default)")) {
					opt.append(", default: ").append(defaultValue);
				}
			}
			out.println(opt);
		}
		return maxNamesLen;
	}

	private static @Nullable String getValueDesc(ParameterDescription p) {
		Parameter parameterAnnotation = p.getParameterAnnotation();
		return parameterAnnotation == null ? null : parameterAnnotation.defaultValueDescription();
	}

	/**
	 * Get all declared fields of the specified class and all super classes
	 */
	private static List<Field> getFields(Class<?> clazz) {
		List<Field> fieldList = new ArrayList<>();
		while (clazz != null) {
			fieldList.addAll(Arrays.asList(clazz.getDeclaredFields()));
			clazz = clazz.getSuperclass();
		}
		return fieldList;
	}

	@Nullable
	private static String getDefaultValue(Object args, Field f) {
		try {
			Class<?> fieldType = f.getType();
			if (fieldType == int.class) {
				return Integer.toString(f.getInt(args));
			}
			if (fieldType == String.class) {
				return (String) f.get(args);
			}
			if (Enum.class.isAssignableFrom(fieldType)) {
				Enum<?> val = (Enum<?>) f.get(args);
				if (val != null) {
					return val.name().toLowerCase(Locale.ROOT);
				}
			}
		} catch (Exception e) {
			// ignore
		}
		return null;
	}

	private static void addSpaces(StringBuilder str, int count) {
		for (int i = 0; i < count; i++) {
			str.append(' ');
		}
	}

	private String appendPluginOptions(int maxNamesLen) {
		StringBuilder sb = new StringBuilder();
		// load and init all options plugins to print all options
		try (JadxDecompiler decompiler = new JadxDecompiler(argsObj.toJadxArgs())) {
			JadxPluginManager pluginManager = decompiler.getPluginManager();
			pluginManager.load(decompiler.getArgs().getPluginLoader());
			pluginManager.initAll();
			try {
				for (PluginContext context : pluginManager.getAllPluginContexts()) {
					JadxPluginOptions options = context.getOptions();
					if (options != null) {
						appendPlugin(context.getPluginInfo(), context.getOptions(), sb, maxNamesLen);
					}
				}
			} finally {
				pluginManager.unloadAll();
			}
		}
		if (sb.length() == 0) {
			return "";
		}
		return "\nPlugin options (-P<name>=<value>):" + sb;
	}

	private boolean appendPlugin(JadxPluginInfo pluginInfo, JadxPluginOptions options, StringBuilder out, int maxNamesLen) {
		List<OptionDescription> descs = options.getOptionsDescriptions();
		if (descs.isEmpty()) {
			return false;
		}
		out.append("\n  ");
		out.append(pluginInfo.getPluginId()).append(": ").append(pluginInfo.getDescription());
		for (OptionDescription desc : descs) {
			StringBuilder opt = new StringBuilder();
			opt.append("    - ").append(desc.name());
			addSpaces(opt, maxNamesLen - opt.length());
			opt.append("- ").append(desc.description());
			if (!desc.values().isEmpty()) {
				opt.append(", values: ").append(desc.values());
			}
			if (desc.defaultValue() != null) {
				opt.append(", default: ").append(desc.defaultValue());
			}
			out.append("\n").append(opt);
		}
		return true;
	}
}


================================================
FILE: jadx-cli/src/main/java/jadx/cli/JadxAppCommon.java
================================================
package jadx.cli;

import java.util.Set;

import jadx.api.JadxArgs;
import jadx.api.security.JadxSecurityFlag;
import jadx.api.security.impl.JadxSecurity;
import jadx.commons.app.JadxCommonEnv;
import jadx.zip.security.DisabledZipSecurity;
import jadx.zip.security.IJadxZipSecurity;
import jadx.zip.security.JadxZipSecurity;

public class JadxAppCommon {

	public static void applyEnvVars(JadxArgs jadxArgs) {
		Set<JadxSecurityFlag> flags = JadxSecurityFlag.all();
		IJadxZipSecurity zipSecurity;

		boolean disableXmlSecurity = JadxCommonEnv.getBool("JADX_DISABLE_XML_SECURITY", false);
		if (disableXmlSecurity) {
			flags.remove(JadxSecurityFlag.SECURE_XML_PARSER);
			// TODO: not related to 'xml security', but kept for compatibility
			flags.remove(JadxSecurityFlag.VERIFY_APP_PACKAGE);
		}

		boolean disableZipSecurity = JadxCommonEnv.getBool("JADX_DISABLE_ZIP_SECURITY", false);
		if (disableZipSecurity) {
			flags.remove(JadxSecurityFlag.SECURE_ZIP_READER);
			zipSecurity = DisabledZipSecurity.INSTANCE;
		} else {
			JadxZipSecurity jadxZipSecurity = new JadxZipSecurity();
			int maxZipEntriesCount = JadxCommonEnv.getInt("JADX_ZIP_MAX_ENTRIES_COUNT", -2);
			if (maxZipEntriesCount != -2) {
				jadxZipSecurity.setMaxEntriesCount(maxZipEntriesCount);
			}
			int zipBombMinUncompressedSize = JadxCommonEnv.getInt("JADX_ZIP_BOMB_MIN_UNCOMPRESSED_SIZE", -2);
			if (zipBombMinUncompressedSize != -2) {
				jadxZipSecurity.setZipBombMinUncompressedSize(zipBombMinUncompressedSize);
			}
			int setZipBombDetectionFactor = JadxCommonEnv.getInt("JADX_ZIP_BOMB_DETECTION_FACTOR", -2);
			if (setZipBombDetectionFactor != -2) {
				jadxZipSecurity.setZipBombDetectionFactor(setZipBombDetectionFactor);
			}
			zipSecurity = jadxZipSecurity;
		}
		jadxArgs.setSecurity(new JadxSecurity(flags, zipSecurity));
	}
}


================================================
FILE: jadx-cli/src/main/java/jadx/cli/JadxCLI.java
================================================
package jadx.cli;

import java.util.function.Consumer;

import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jadx.api.JadxArgs;
import jadx.api.JadxDecompiler;
import jadx.api.impl.AnnotatedCodeWriter;
import jadx.api.impl.NoOpCodeCache;
import jadx.api.impl.SimpleCodeWriter;
import jadx.api.usage.impl.EmptyUsageInfoCache;
import jadx.cli.LogHelper.LogLevelEnum;
import jadx.cli.config.JadxConfigAdapter;
import jadx.cli.plugins.JadxFilesGetter;
import jadx.core.utils.exceptions.JadxArgsValidateException;
import jadx.plugins.tools.JadxExternalPluginsLoader;

public class JadxCLI {
	private static final Logger LOG = LoggerFactory.getLogger(JadxCLI.class);

	public static void main(String[] args) {
		int result = 1;
		try {
			result = execute(args);
		} finally {
			System.exit(result);
		}
	}

	public static int execute(String[] args) {
		return execute(args, null);
	}

	public static int execute(String[] args, @Nullable Consumer<JadxArgs> argsMod) {
		try {
			JadxCLIArgs cliArgs = JadxCLIArgs.processArgs(args,
					new JadxCLIArgs(),
					new JadxConfigAdapter<>(JadxCLIArgs.class, "cli"));
			if (cliArgs == null) {
				return 0;
			}
			JadxArgs jadxArgs = buildArgs(cliArgs);
			if (argsMod != null) {
				argsMod.accept(jadxArgs);
			}
			return runSave(jadxArgs, cliArgs);
		} catch (JadxArgsValidateException e) {
			LOG.error("Incorrect arguments: {}", e.getMessage());
			return 1;
		} catch (Throwable e) {
			LOG.error("Process error:", e);
			return 1;
		}
	}

	private static JadxArgs buildArgs(JadxCLIArgs cliArgs) {
		JadxArgs jadxArgs = cliArgs.toJadxArgs();
		jadxArgs.setCodeCache(new NoOpCodeCache());
		jadxArgs.setUsageInfoCache(new EmptyUsageInfoCache());
		jadxArgs.setPluginLoader(new JadxExternalPluginsLoader());
		jadxArgs.setFilesGetter(JadxFilesGetter.INSTANCE);
		initCodeWriterProvider(jadxArgs);
		JadxAppCommon.applyEnvVars(jadxArgs);
		return jadxArgs;
	}

	private static int runSave(JadxArgs jadxArgs, JadxCLIArgs cliArgs) {
		try (JadxDecompiler jadx = new JadxDecompiler(jadxArgs)) {
			jadx.load();
			if (checkForErrors(jadx)) {
				return 2;
			}
			if (!SingleClassMode.process(jadx, cliArgs)) {
				save(jadx);
			}
			int errorsCount = jadx.getErrorsCount();
			if (errorsCount != 0) {
				jadx.printErrorsReport();
				LOG.error("finished with errors, count: {}", errorsCount);
				return 3;
			}
			LOG.info("done");
			return 0;
		}
	}

	private static void initCodeWriterProvider(JadxArgs jadxArgs) {
		switch (jadxArgs.getOutputFormat()) {
			case JAVA:
				jadxArgs.setCodeWriterProvider(SimpleCodeWriter::new);
				break;
			case JSON:
				// needed for code offsets and source lines
				jadxArgs.setCodeWriterProvider(AnnotatedCodeWriter::new);
				break;
		}
	}

	private static boolean checkForErrors(JadxDecompiler jadx) {
		if (jadx.getRoot().getClasses().isEmpty()) {
			if (jadx.getArgs().isSkipResources()) {
				LOG.error("Load failed! No classes for decompile!");
				return true;
			}
			if (!jadx.getArgs().isSkipSources()) {
				LOG.warn("No classes to decompile; decoding resources only");
				jadx.getArgs().setSkipSources(true);
			}
		}
		int errorsCount = jadx.getErrorsCount();
		if (errorsCount > 0) {
			LOG.error("Loading finished with errors! Count: {}", errorsCount);
			// continue processing
		}
		return false;
	}

	private static void save(JadxDecompiler jadx) {
		if (LogHelper.getLogLevel() == LogLevelEnum.QUIET) {
			jadx.save();
		} else {
			LOG.info("processing ...");
			jadx.save(500, (done, total) -> {
				int progress = (int) (done * 100.0 / total);
				System.out.printf("INFO  - progress: %d of %d (%d%%)\r", done, total, progress);
			});
			// dumb line clear :)
			System.out.print("                                                             \r");
		}
	}
}


================================================
FILE: jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java
================================================
package jadx.cli;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.beust.jcommander.DynamicParameter;
import com.beust.jcommander.IStringConverter;
import com.beust.jcommander.Parameter;

import jadx.api.CommentsLevel;
import jadx.api.DecompilationMode;
import jadx.api.JadxArgs;
import jadx.api.JadxArgs.RenameEnum;
import jadx.api.JadxArgs.UseKotlinMethodsForVarNames;
import jadx.api.JadxDecompiler;
import jadx.api.args.GeneratedRenamesMappingFileMode;
import jadx.api.args.IntegerFormat;
import jadx.api.args.ResourceNameSource;
import jadx.api.args.UseSourceNameAsClassNameAlias;
import jadx.api.args.UserRenamesMappingsMode;
import jadx.cli.config.IJadxConfig;
import jadx.cli.config.JadxConfigAdapter;
import jadx.cli.config.JadxConfigExclude;
import jadx.commons.app.JadxCommonFiles;
import jadx.commons.app.JadxTempFiles;
import jadx.core.deobf.conditions.DeobfWhitelist;
import jadx.core.export.ExportGradleType;
import jadx.core.utils.exceptions.JadxArgsValidateException;
import jadx.core.utils.exceptions.JadxRuntimeException;
import jadx.core.utils.files.FileUtils;

public class JadxCLIArgs implements IJadxConfig {
	private static final Logger LOG = LoggerFactory.getLogger(JadxCLIArgs.class);

	@JadxConfigExclude
	@Parameter(description = "<input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts)")
	protected List<String> files = Collections.emptyList();

	@JadxConfigExclude
	@Parameter(names = { "-d", "--output-dir" }, description = "output directory")
	protected String outDir;

	@JadxConfigExclude
	@Parameter(names = { "-ds", "--output-dir-src" }, description = "output directory for sources")
	protected String outDirSrc;

	@JadxConfigExclude
	@Parameter(names = { "-dr", "--output-dir-res" }, description = "output directory for resources")
	protected String outDirRes;

	@Parameter(names = { "-r", "--no-res" }, description = "do not decode resources")
	protected boolean skipResources = false;

	@Parameter(names = { "-s", "--no-src" }, description = "do not decompile source code")
	protected boolean skipSources = false;

	@Parameter(names = { "-j", "--threads-count" }, description = "processing threads count")
	protected int threadsCount = JadxArgs.DEFAULT_THREADS_COUNT;

	@JadxConfigExclude
	@Parameter(names = { "--single-class" }, description = "decompile a single class, full name, raw or alias")
	protected String singleClass = null;

	@JadxConfigExclude
	@Parameter(names = { "--single-class-output" }, description = "file or dir for write if decompile a single class")
	protected String singleClassOutput = null;

	@Parameter(names = { "--output-format" }, description = "can be 'java' or 'json'")
	protected String outputFormat = "java";

	@Parameter(names = { "-e", "--export-gradle" }, description = "save as gradle project (set '--export-gradle-type' to 'auto')")
	protected boolean exportAsGradleProject = false;

	@Parameter(
			names = { "--export-gradle-type" },
			description = "Gradle project template for export:"
					+ "\n 'auto' - detect automatically"
					+ "\n 'android-app' - Android Application (apk)"
					+ "\n 'android-library' - Android Library (aar)"
					+ "\n 'simple-java' - simple Java",
			converter = ExportGradleTypeConverter.class
	)
	protected @Nullable ExportGradleType exportGradleType = null;

	@Parameter(
			names = { "-m", "--decompilation-mode" },
			description = "code output mode:"
					+ "\n 'auto' - trying best options (default)"
					+ "\n 'restructure' - restore code structure (normal java code)"
					+ "\n 'simple' - simplified instructions (linear, with goto's)"
					+ "\n 'fallback' - raw instructions without modifications",
			converter = DecompilationModeConverter.class
	)
	protected DecompilationMode decompilationMode = DecompilationMode.AUTO;

	@Parameter(names = { "--show-bad-code" }, description = "show inconsistent code (incorrectly decompiled)")
	protected boolean showInconsistentCode = false;

	@Parameter(names = { "--no-xml-pretty-print" }, description = "do not prettify XML")
	protected boolean skipXmlPrettyPrint = false;

	@Parameter(names = { "--no-imports" }, description = "disable use of imports, always write entire package name")
	protected boolean useImports = true;

	@Parameter(names = { "--no-debug-info" }, description = "disable debug info parsing and processing")
	protected boolean debugInfo = true;

	@Parameter(names = { "--add-debug-lines" }, description = "add comments with debug line numbers if available")
	protected boolean addDebugLines = false;

	@Parameter(names = { "--no-inline-anonymous" }, description = "disable anonymous classes inline")
	protected boolean inlineAnonymousClasses = true;

	@Parameter(names = { "--no-inline-methods" }, description = "disable methods inline")
	protected boolean inlineMethods = true;

	@Parameter(names = { "--no-move-inner-classes" }, description = "disable move inner classes into parent")
	protected boolean moveInnerClasses = true;

	@Parameter(names = { "--no-inline-kotlin-lambda" }, description = "disable inline for Kotlin lambdas")
	protected boolean allowInlineKotlinLambda = true;

	@Parameter(names = "--no-finally", description = "don't extract finally block")
	protected boolean extractFinally = true;

	@Parameter(names = "--no-restore-switch-over-string", description = "don't restore switch over string")
	protected boolean restoreSwitchOverString = true;

	@Parameter(names = "--no-replace-consts", description = "don't replace constant value with matching constant field")
	protected boolean replaceConsts = true;

	@Parameter(names = { "--escape-unicode" }, description = "escape non latin characters in strings (with \\u)")
	protected boolean escapeUnicode = false;

	@Parameter(names = { "--respect-bytecode-access-modifiers" }, description = "don't change original access modifiers")
	protected boolean respectBytecodeAccessModifiers = false;

	@Parameter(
			names = { "--mappings-path" },
			description = "deobfuscation mappings file or directory. Allowed formats: Tiny and Tiny v2 (both '.tiny'), Enigma (.mapping) or Enigma directory"
	)
	protected Path userRenamesMappingsPath;

	@Parameter(
			names = { "--mappings-mode" },
			description = "set mode for handling the deobfuscation mapping file:"
					+ "\n 'read' - just read, user can always save manually (default)"
					+ "\n 'read-and-autosave-every-change' - read and autosave after every change"
					+ "\n 'read-and-autosave-before-closing' - read and autosave before exiting the app or closing the project"
					+ "\n 'ignore' - don't read or save (can be used to skip loading mapping files referenced in the project file)"
	)
	protected UserRenamesMappingsMode userRenamesMappingsMode = UserRenamesMappingsMode.getDefault();

	@Parameter(names = { "--deobf" }, description = "activate deobfuscation")
	protected boolean deobfuscationOn = false;

	@Parameter(names = { "--deobf-min" }, description = "min length of name, renamed if shorter")
	protected int deobfuscationMinLength = 3;

	@Parameter(names = { "--deobf-max" }, description = "max length of name, renamed if longer")
	protected int deobfuscationMaxLength = 64;

	@Parameter(
			names = { "--deobf-whitelist" },
			description = "space separated list of classes (full name) and packages (ends with '.*') to exclude from deobfuscation"
	)
	protected String deobfuscationWhitelistStr = DeobfWhitelist.DEFAULT_STR;

	@JadxConfigExclude
	@Parameter(
			names = { "--deobf-cfg-file" },
			description = "deobfuscation mappings file used for JADX auto-generated names (in the JOBF file format),"
					+ " default: same dir and name as input file with '.jobf' extension"
	)
	protected String generatedRenamesMappingFile;

	@Parameter(
			names = { "--deobf-cfg-file-mode" },
			description = "set mode for handling the JADX auto-generated names' deobfuscation map file:"
					+ "\n 'read' - read if found, don't save (default)"
					+ "\n 'read-or-save' - read if found, save otherwise (don't overwrite)"
					+ "\n 'overwrite' - don't read, always save"
					+ "\n 'ignore' - don't read and don't save",
			converter = DeobfuscationMapFileModeConverter.class
	)
	protected GeneratedRenamesMappingFileMode generatedRenamesMappingFileMode = GeneratedRenamesMappingFileMode.getDefault();

	@SuppressWarnings("DeprecatedIsStillUsed")
	@Parameter(
			names = { "--deobf-use-sourcename" },
			description = "use source file name as class name alias."
					+ "\nDEPRECATED, use \"--use-source-name-as-class-name-alias\" instead",
			hidden = true
	)
	@Deprecated
	protected Boolean deobfuscationUseSourceNameAsAlias = null;

	@Parameter(
			names = { "--deobf-res-name-source" },
			description = "better name source for resources:"
					+ "\n 'auto' - automatically select best name (default)"
					+ "\n 'resources' - use resources names"
					+ "\n 'code' - use R class fields names",
			converter = ResourceNameSourceConverter.class
	)
	protected ResourceNameSource resourceNameSource = ResourceNameSource.AUTO;

	@Parameter(
			names = { "--use-source-name-as-class-name-alias" },
			description = "use source name as class name alias:"
					+ "\n 'always' - always use source name if it's available"
					+ "\n 'if-better' - use source name if it seems better than the current one"
					+ "\n 'never' - never use source name, even if it's available",
			converter = UseSourceNameAsClassNameConverter.class
	)
	protected UseSourceNameAsClassNameAlias useSourceNameAsClassNameAlias = null;

	@Parameter(
			names = { "--source-name-repeat-limit" },
			description = "allow using source name if it appears less than a limit number"
	)
	protected int sourceNameRepeatLimit = 10;

	@Parameter(
			names = { "--use-kotlin-methods-for-var-names" },
			description = "use kotlin intrinsic methods to rename variables, values: disable, apply, apply-and-hide",
			converter = UseKotlinMethodsForVarNamesConverter.class
	)
	protected UseKotlinMethodsForVarNames useKotlinMethodsForVarNames = UseKotlinMethodsForVarNames.APPLY;

	@Parameter(
			names = { "--use-headers-for-detect-resource-extensions" },
			description = "Use headers for detect resource extensions if resource obfuscated"
	)
	protected boolean useHeadersForDetectResourceExtensions = false;

	@Parameter(
			names = { "--rename-flags" },
			description = "fix options (comma-separated list of):"
					+ "\n 'case' - fix case sensitivity issues (according to --fs-case-sensitive option),"
					+ "\n 'valid' - rename java identifiers to make them valid,"
					+ "\n 'printable' - remove non-printable chars from identifiers,"
					+ "\nor single 'none' - to disable all renames"
					+ "\nor single 'all' - to enable all (default)",
			listConverter = RenameConverter.class
	)
	protected Set<RenameEnum> renameFlags = EnumSet.allOf(RenameEnum.class);

	@Parameter(
			names = { "--integer-format" },
			description = "how integers are displayed:"
					+ "\n 'auto' - automatically select (default)"
					+ "\n 'decimal' - use decimal"
					+ "\n 'hexadecimal' - use hexadecimal",
			converter = IntegerFormatConverter.class
	)
	protected IntegerFormat integerFormat = IntegerFormat.AUTO;

	@Parameter(names = { "--type-update-limit" }, description = "type update limit count (per one instruction)")
	protected int typeUpdatesLimitCount = 10;

	@Parameter(names = { "--fs-case-sensitive" }, description = "treat filesystem as case sensitive, false by default")
	protected boolean fsCaseSensitive = false;

	@Parameter(names = { "--cfg" }, description = "save methods control flow graph to dot file")
	protected boolean cfgOutput = false;

	@Parameter(names = { "--raw-cfg" }, description = "save methods control flow graph (use raw instructions)")
	protected boolean rawCfgOutput = false;

	@Parameter(names = { "-f", "--fallback" }, description = "set '--decompilation-mode' to 'fallback' (deprecated)")
	protected boolean fallbackMode = false;

	@Parameter(names = { "--use-dx" }, description = "use dx/d8 to convert java bytecode")
	protected boolean useDx = false;

	@Parameter(
			names = { "--comments-level" },
			description = "set code comments level, values: error, warn, info, debug, user-only, none",
			converter = CommentsLevelConverter.class
	)
	protected CommentsLevel commentsLevel = CommentsLevel.INFO;

	@Parameter(
			names = { "--log-level" },
			description = "set log level, values: quiet, progress, error, warn, info, debug",
			converter = LogLevelConverter.class
	)
	protected LogHelper.LogLevelEnum logLevel = LogHelper.LogLevelEnum.PROGRESS;

	@JadxConfigExclude
	@Parameter(names = { "-v", "--verbose" }, description = "verbose output (set --log-level to DEBUG)")
	protected boolean verbose = false;

	@JadxConfigExclude
	@Parameter(names = { "-q", "--quiet" }, description = "turn off output (set --log-level to QUIET)")
	protected boolean quiet = false;

	@JadxConfigExclude
	@Parameter(names = { "--disable-plugins" }, description = "comma separated list of plugin ids to disable")
	protected String disablePlugins = "";

	@JadxConfigExclude
	@Parameter(
			names = { "--config" },
			defaultValueDescription = "<config-ref>",
			description = "load configuration from file, <config-ref> can be:"
					+ "\n path to '.json' file"
					+ "\n short name - uses file with this name from config directory"
					+ "\n 'none' - to disable config loading"
	)
	protected String config = "";

	@JadxConfigExclude
	@Parameter(
			names = { "--save-config" },
			defaultValueDescription = "<config-ref>",
			description = "save current options into configuration file and exit, <config-ref> can be:"
					+ "\n empty - for default config"
					+ "\n path to '.json' file"
					+ "\n short name - file will be saved in config directory"
	)
	protected String saveConfig = null;

	@JadxConfigExclude
	@Parameter(names = { "--print-files" }, description = "print files and directories used by jadx (config, cache, temp)")
	protected boolean printFiles = false;

	@JadxConfigExclude
	@Parameter(names = { "--version" }, description = "print jadx version")
	protected boolean printVersion = false;

	@JadxConfigExclude
	@Parameter(names = { "-h", "--help" }, description = "print this help", help = true)
	protected boolean printHelp = false;

	@DynamicParameter(names = "-P", description = "Plugin options", hidden = true)
	protected Map<String, String> pluginOptions = new HashMap<>();

	/**
	 * Obsolete method without config support,
	 * prefer {@link #processArgs(String[], JadxCLIArgs, JadxConfigAdapter)}
	 */
	public boolean processArgs(String[] args) {
		return processArgs(args, this, null) != null;
	}

	public static <T extends JadxCLIArgs> @Nullable T processArgs(
			String[] args, T argsObj, @Nullable JadxConfigAdapter<T> configAdapter) {
		JCommanderWrapper jcw = new JCommanderWrapper(argsObj);
		if (!jcw.parse(args)) {
			return null;
		}
		applyArgs(argsObj);

		// process commands and early exit flags
		if (!argsObj.process(jcw)) {
			return null;
		}
		if (configAdapter != null) {
			if (argsObj.printFiles) {
				printFilesAndDirs(configAdapter.getDefaultConfigFileName());
				return null;
			}
			if (!argsObj.config.equalsIgnoreCase("none")) {
				// load config file and merge with command line args
				try {
					configAdapter.useConfigRef(argsObj.config);
					T configObj = configAdapter.load();
					if (configObj != null) {
						jcw.overrideProvided(configObj);
						argsObj = configObj;
					}
				} catch (Exception e) {
					LOG.error("Config load failed, continue with default values", e);
				}
			}
		}
		// verify result object
		argsObj.verify();
		applyArgs(argsObj);

		// save config if requested
		if (argsObj.saveConfig != null) {
			saveConfig(argsObj, configAdapter);
			return null;
		}
		return argsObj;
	}

	private static <T extends JadxCLIArgs> void applyArgs(T argsObj) {
		// apply log levels
		LogHelper.initLogLevel(argsObj);
		LogHelper.applyLogLevels();
	}

	public boolean process(JCommanderWrapper jcw) {
		if (jcw.processCommands()) {
			return false;
		}
		if (printHelp) {
			jcw.printUsage();
			return false;
		}
		if (printVersion) {
			System.out.println(JadxDecompiler.getVersion());
			return false;
		}
		// unknown options added to 'files', run checks
		for (String fileName : files) {
			if (fileName.startsWith("-")) {
				throw new JadxArgsValidateException("Unknown option: " + fileName);
			}
		}
		return true;
	}

	private static void printFilesAndDirs(String defaultConfigFileName) {
		System.out.println("Files and directories used by jadx:");
		System.out.println(" - default config file: " + JadxCommonFiles.getConfigDir().resolve(defaultConfigFileName).toAbsolutePath());
		System.out.println(" - config directory:    " + JadxCommonFiles.getConfigDir().toAbsolutePath());
		System.out.println(" - cache directory:     " + JadxCommonFiles.getCacheDir().toAbsolutePath());
		System.out.println(" - temp directory:      " + JadxTempFiles.getTempRootDir().getParent().toAbsolutePath());
	}

	public void verify() {
		if (threadsCount <= 0) {
			throw new JadxArgsValidateException("Threads count must be positive, got: " + threadsCount);
		}
	}

	private static <T extends JadxCLIArgs> void saveConfig(T argsObj, @Nullable JadxConfigAdapter<T> configAdapter) {
		if (configAdapter == null) {
			throw new JadxRuntimeException("Config adapter set to null, can't save config");
		}
		configAdapter.useConfigRef(argsObj.saveConfig);
		configAdapter.save(argsObj);
		System.out.println("Config saved to " + configAdapter.getConfigPath().toAbsolutePath());
	}

	public JadxArgs toJadxArgs() {
		JadxArgs args = new JadxArgs();
		args.setInputFiles(files.stream().map(FileUtils::toFile).collect(Collectors.toList()));
		args.setOutDir(FileUtils.toFile(outDir));
		args.setOutDirSrc(FileUtils.toFile(outDirSrc));
		args.setOutDirRes(FileUtils.toFile(outDirRes));
		args.setOutputFormat(JadxArgs.OutputFormatEnum.valueOf(outputFormat.toUpperCase()));
		args.setThreadsCount(threadsCount);
		args.setSkipSources(skipSources);
		args.setSkipResources(skipResources);
		if (fallbackMode) {
			args.setDecompilationMode(DecompilationMode.FALLBACK);
		} else {
			args.setDecompilationMode(decompilationMode);
		}
		args.setShowInconsistentCode(showInconsistentCode);
		args.setCfgOutput(cfgOutput);
		args.setRawCFGOutput(rawCfgOutput);
		args.setReplaceConsts(replaceConsts);
		if (userRenamesMappingsPath != null) {
			args.setUserRenamesMappingsPath(userRenamesMappingsPath);
		}
		args.setUserRenamesMappingsMode(userRenamesMappingsMode);
		args.setDeobfuscationOn(deobfuscationOn);
		args.setGeneratedRenamesMappingFile(FileUtils.toFile(generatedRenamesMappingFile));
		args.setGeneratedRenamesMappingFileMode(generatedRenamesMappingFileMode);
		args.setDeobfuscationMinLength(deobfuscationMinLength);
		args.setDeobfuscationMaxLength(deobfuscationMaxLength);
		args.setDeobfuscationWhitelist(Arrays.asList(deobfuscationWhitelistStr.split(" ")));
		args.setUseSourceNameAsClassNameAlias(getUseSourceNameAsClassNameAlias());
		args.setUseHeadersForDetectResourceExtensions(useHeadersForDetectResourceExtensions);
		args.setSourceNameRepeatLimit(sourceNameRepeatLimit);
		args.setUseKotlinMethodsForVarNames(useKotlinMethodsForVarNames);
		args.setResourceNameSource(resourceNameSource);
		args.setEscapeUnicode(escapeUnicode);
		args.setRespectBytecodeAccModifiers(respectBytecodeAccessModifiers);
		args.setExportGradleType(exportGradleType);
		if (exportAsGradleProject && exportGradleType == null) {
			args.setExportGradleType(ExportGradleType.AUTO);
		}
		args.setSkipXmlPrettyPrint(skipXmlPrettyPrint);
		args.setUseImports(useImports);
		args.setDebugInfo(debugInfo);
		args.setInsertDebugLines(addDebugLines);
		args.setInlineAnonymousClasses(inlineAnonymousClasses);
		args.setInlineMethods(inlineMethods);
		args.setMoveInnerClasses(moveInnerClasses);
		args.setAllowInlineKotlinLambda(allowInlineKotlinLambda);
		args.setExtractFinally(extractFinally);
		args.setRestoreSwitchOverString(restoreSwitchOverString);
		args.setRenameFlags(buildEnumSetForRenameFlags());
		args.setFsCaseSensitive(fsCaseSensitive);
		args.setCommentsLevel(commentsLevel);
		args.setIntegerFormat(integerFormat);
		args.setTypeUpdatesLimitCount(typeUpdatesLimitCount);
		args.setUseDxInput(useDx);
		args.setPluginOptions(pluginOptions);
		args.setDisabledPlugins(Arrays.stream(disablePlugins.split(",")).map(String::trim).collect(Collectors.toSet()));
		return args;
	}

	private EnumSet<RenameEnum> buildEnumSetForRenameFlags() {
		EnumSet<RenameEnum> set = EnumSet.noneOf(RenameEnum.class);
		set.addAll(renameFlags);
		return set;
	}

	public List<String> getFiles() {
		return files;
	}

	public void setFiles(List<String> files) {
		this.files = files;
	}

	public String getOutDir() {
		return outDir;
	}

	public String getOutDirSrc() {
		return outDirSrc;
	}

	public String getOutDirRes() {
		return outDirRes;
	}

	public String getSingleClass() {
		return singleClass;
	}

	public String getSingleClassOutput() {
		return singleClassOutput;
	}

	public boolean isSkipResources() {
		return skipResources;
	}

	public void setSkipResources(boolean skipResources) {
		this.skipResources = skipResources;
	}

	public boolean isSkipSources() {
		return skipSources;
	}

	public void setSkipSources(boolean skipSources) {
		this.skipSources = skipSources;
	}

	public int getThreadsCount() {
		return threadsCount;
	}

	public void setThreadsCount(int threadsCount) {
		this.threadsCount = threadsCount;
	}

	public boolean isFallbackMode() {
		return fallbackMode;
	}

	public boolean isUseDx() {
		return useDx;
	}

	public void setUseDx(boolean useDx) {
		this.useDx = useDx;
	}

	public DecompilationMode getDecompilationMode() {
		return decompilationMode;
	}

	public void setDecompilationMode(DecompilationMode decompilationMode) {
		this.decompilationMode = decompilationMode;
	}

	public boolean isShowInconsistentCode() {
		return showInconsistentCode;
	}

	public void setShowInconsistentCode(boolean showInconsistentCode) {
		this.showInconsistentCode = showInconsistentCode;
	}

	public boolean isUseImports() {
		return useImports;
	}

	public void setUseImports(boolean useImports) {
		this.useImports = useImports;
	}

	public boolean isDebugInfo() {
		return debugInfo;
	}

	public void setDebugInfo(boolean debugInfo) {
		this.debugInfo = debugInfo;
	}

	public boolean isAddDebugLines() {
		return addDebugLines;
	}

	public void setAddDebugLines(boolean addDebugLines) {
		this.addDebugLines = addDebugLines;
	}

	public boolean isInlineAnonymousClasses() {
		return inlineAnonymousClasses;
	}

	public void setInlineAnonymousClasses(boolean inlineAnonymousClasses) {
		this.inlineAnonymousClasses = inlineAnonymousClasses;
	}

	public boolean isInlineMethods() {
		return inlineMethods;
	}

	public void setInlineMethods(boolean inlineMethods) {
		this.inlineMethods = inlineMethods;
	}

	public boolean isMoveInnerClasses() {
		return moveInnerClasses;
	}

	public void setMoveInnerClasses(boolean moveInnerClasses) {
		this.moveInnerClasses = moveInnerClasses;
	}

	public boolean isAllowInlineKotlinLambda() {
		return allowInlineKotlinLambda;
	}

	public void setAllowInlineKotlinLambda(boolean allowInlineKotlinLambda) {
		this.allowInlineKotlinLambda = allowInlineKotlinLambda;
	}

	public boolean isExtractFinally() {
		return extractFinally;
	}

	public void setExtractFinally(boolean extractFinally) {
		this.extractFinally = extractFinally;
	}

	public boolean isRestoreSwitchOverString() {
		return restoreSwitchOverString;
	}

	public void setRestoreSwitchOverString(boolean restoreSwitchOverString) {
		this.restoreSwitchOverString = restoreSwitchOverString;
	}

	public Path getUserRenamesMappingsPath() {
		return userRenamesMappingsPath;
	}

	public void setUserRenamesMappingsPath(Path userRenamesMappingsPath) {
		this.userRenamesMappingsPath = userRenamesMappingsPath;
	}

	public UserRenamesMappingsMode getUserRenamesMappingsMode() {
		return userRenamesMappingsMode;
	}

	public void setUserRenamesMappingsMode(UserRenamesMappingsMode userRenamesMappingsMode) {
		this.userRenamesMappingsMode = userRenamesMappingsMode;
	}

	public boolean isDeobfuscationOn() {
		return deobfuscationOn;
	}

	public void setDeobfuscationOn(boolean deobfuscationOn) {
		this.deobfuscationOn = deobfuscationOn;
	}

	public int getDeobfuscationMinLength() {
		return deobfuscationMinLength;
	}

	public void setDeobfuscationMinLength(int deobfuscationMinLength) {
		this.deobfuscationMinLength = deobfuscationMinLength;
	}

	public int getDeobfuscationMaxLength() {
		return deobfuscationMaxLength;
	}

	public void setDeobfuscationMaxLength(int deobfuscationMaxLength) {
		this.deobfuscationMaxLength = deobfuscationMaxLength;
	}

	public String getDeobfuscationWhitelistStr() {
		return deobfuscationWhitelistStr;
	}

	public void setDeobfuscationWhitelistStr(String deobfuscationWhitelistStr) {
		this.deobfuscationWhitelistStr = deobfuscationWhitelistStr;
	}

	public String getGeneratedRenamesMappingFile() {
		return generatedRenamesMappingFile;
	}

	public void setGeneratedRenamesMappingFile(String generatedRenamesMappingFile) {
		this.generatedRenamesMappingFile = generatedRenamesMappingFile;
	}

	public GeneratedRenamesMappingFileMode getGeneratedRenamesMappingFileMode() {
		return generatedRenamesMappingFileMode;
	}

	public void setGeneratedRenamesMappingFileMode(GeneratedRenamesMappingFileMode generatedRenamesMappingFileMode) {
		this.generatedRenamesMappingFileMode = generatedRenamesMappingFileMode;
	}

	public int getSourceNameRepeatLimit() {
		return sourceNameRepeatLimit;
	}

	public void setSourceNameRepeatLimit(int sourceNameRepeatLimit) {
		this.sourceNameRepeatLimit = sourceNameRepeatLimit;
	}

	public UseSourceNameAsClassNameAlias getUseSourceNameAsClassNameAlias() {
		if (useSourceNameAsClassNameAlias != null) {
			return useSourceNameAsClassNameAlias;
		} else if (deobfuscationUseSourceNameAsAlias != null) {
			// noinspection deprecation
			return UseSourceNameAsClassNameAlias.create(deobfuscationUseSourceNameAsAlias);
		} else {
			return UseSourceNameAsClassNameAlias.getDefault();
		}
	}

	public void setUseSourceNameAsClassNameAlias(UseSourceNameAsClassNameAlias useSourceNameAsClassNameAlias) {
		this.useSourceNameAsClassNameAlias = useSourceNameAsClassNameAlias;
	}

	/**
	 * @deprecated Use {@link #getUseSourceNameAsClassNameAlias()} instead.
	 */
	@Deprecated
	public boolean isDeobf
Download .txt
gitextract_b8off970/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   ├── decompilation-issue.yml
│   │   ├── feature-request.yml
│   │   └── jadx-gui-issue.yml
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── build-artifacts.yml
│       ├── build-test.yml
│       └── release.yml
├── .gitignore
├── .gitlab-ci.yml
├── .jitpack.yml
├── .typos.toml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── SECURITY.md
├── build.gradle.kts
├── buildSrc/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── kotlin/
│               ├── jadx-java.gradle.kts
│               ├── jadx-kotlin.gradle.kts
│               ├── jadx-library.gradle.kts
│               └── jadx-rewrite.gradle.kts
├── config/
│   ├── checkstyle/
│   │   └── checkstyle.xml
│   ├── code-formatter/
│   │   ├── eclipse.importorder
│   │   └── eclipse.xml
│   └── jflex/
│       ├── .gitignore
│       ├── README.md
│       ├── SmaliTokenMaker.flex
│       └── skeleton.default
├── contrib/
│   └── jadx-gui.desktop
├── gradle/
│   └── wrapper/
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── jadx-cli/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jadx/
│       │   │       └── cli/
│       │   │           ├── JCommanderWrapper.java
│       │   │           ├── JadxAppCommon.java
│       │   │           ├── JadxCLI.java
│       │   │           ├── JadxCLIArgs.java
│       │   │           ├── JadxCLICommands.java
│       │   │           ├── LogHelper.java
│       │   │           ├── SingleClassMode.java
│       │   │           ├── clst/
│       │   │           │   └── ConvertToClsSet.java
│       │   │           ├── commands/
│       │   │           │   ├── CommandPlugins.java
│       │   │           │   └── ICommand.java
│       │   │           ├── config/
│       │   │           │   ├── IJadxConfig.java
│       │   │           │   ├── JadxConfigAdapter.java
│       │   │           │   └── JadxConfigExclude.java
│       │   │           ├── plugins/
│       │   │           │   └── JadxFilesGetter.java
│       │   │           └── tools/
│       │   │               └── ConvertArscFile.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       ├── cli/
│           │       │   ├── BaseCliIntegrationTest.java
│           │       │   ├── JadxCLIArgsTest.java
│           │       │   ├── RenameConverterTest.java
│           │       │   ├── TestExport.java
│           │       │   └── TestInput.java
│           │       └── plugins/
│           │           └── tools/
│           │               └── utils/
│           │                   └── PluginUtilsTest.java
│           └── resources/
│               └── samples/
│                   ├── HelloWorld.smali
│                   ├── hello.dex
│                   ├── resources-only.apk
│                   ├── small.apk
│                   └── test-lib.aar
├── jadx-commons/
│   ├── jadx-app-commons/
│   │   ├── README.md
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── jadx/
│   │                   └── commons/
│   │                       └── app/
│   │                           ├── JadxCommonEnv.java
│   │                           ├── JadxCommonFiles.java
│   │                           ├── JadxSystemInfo.java
│   │                           └── JadxTempFiles.java
│   └── jadx-zip/
│       ├── README.md
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               └── java/
│                   └── jadx/
│                       └── zip/
│                           ├── IZipEntry.java
│                           ├── IZipParser.java
│                           ├── ZipContent.java
│                           ├── ZipReader.java
│                           ├── ZipReaderFlags.java
│                           ├── ZipReaderOptions.java
│                           ├── fallback/
│                           │   ├── FallbackZipEntry.java
│                           │   └── FallbackZipParser.java
│                           ├── io/
│                           │   ├── ByteBufferBackedInputStream.java
│                           │   └── LimitedInputStream.java
│                           ├── parser/
│                           │   ├── JadxZipEntry.java
│                           │   ├── JadxZipParser.java
│                           │   └── ZipDeflate.java
│                           └── security/
│                               ├── DisabledZipSecurity.java
│                               ├── IJadxZipSecurity.java
│                               └── JadxZipSecurity.java
├── jadx-core/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jadx/
│       │   │       ├── api/
│       │   │       │   ├── CommentsLevel.java
│       │   │       │   ├── DecompilationMode.java
│       │   │       │   ├── ICodeCache.java
│       │   │       │   ├── ICodeInfo.java
│       │   │       │   ├── ICodeWriter.java
│       │   │       │   ├── IDecompileScheduler.java
│       │   │       │   ├── JadxArgs.java
│       │   │       │   ├── JadxArgsValidator.java
│       │   │       │   ├── JadxDecompiler.java
│       │   │       │   ├── JavaClass.java
│       │   │       │   ├── JavaField.java
│       │   │       │   ├── JavaMethod.java
│       │   │       │   ├── JavaNode.java
│       │   │       │   ├── JavaPackage.java
│       │   │       │   ├── JavaVariable.java
│       │   │       │   ├── ResourceFile.java
│       │   │       │   ├── ResourceFileContainer.java
│       │   │       │   ├── ResourceFileContent.java
│       │   │       │   ├── ResourceType.java
│       │   │       │   ├── ResourcesLoader.java
│       │   │       │   ├── args/
│       │   │       │   │   ├── GeneratedRenamesMappingFileMode.java
│       │   │       │   │   ├── IntegerFormat.java
│       │   │       │   │   ├── ResourceNameSource.java
│       │   │       │   │   ├── UseSourceNameAsClassNameAlias.java
│       │   │       │   │   └── UserRenamesMappingsMode.java
│       │   │       │   ├── data/
│       │   │       │   │   ├── CodeRefType.java
│       │   │       │   │   ├── CommentStyle.java
│       │   │       │   │   ├── ICodeComment.java
│       │   │       │   │   ├── ICodeData.java
│       │   │       │   │   ├── ICodeRename.java
│       │   │       │   │   ├── IJavaCodeRef.java
│       │   │       │   │   ├── IJavaNodeRef.java
│       │   │       │   │   ├── IRenameNode.java
│       │   │       │   │   └── impl/
│       │   │       │   │       ├── JadxCodeComment.java
│       │   │       │   │       ├── JadxCodeData.java
│       │   │       │   │       ├── JadxCodeRef.java
│       │   │       │   │       ├── JadxCodeRename.java
│       │   │       │   │       └── JadxNodeRef.java
│       │   │       │   ├── deobf/
│       │   │       │   │   ├── IAliasProvider.java
│       │   │       │   │   ├── IDeobfCondition.java
│       │   │       │   │   ├── IRenameCondition.java
│       │   │       │   │   └── impl/
│       │   │       │   │       ├── AlwaysRename.java
│       │   │       │   │       ├── AnyRenameCondition.java
│       │   │       │   │       └── CombineDeobfConditions.java
│       │   │       │   ├── gui/
│       │   │       │   │   └── tree/
│       │   │       │   │       └── ITreeNode.java
│       │   │       │   ├── impl/
│       │   │       │   │   ├── AnnotatedCodeInfo.java
│       │   │       │   │   ├── AnnotatedCodeWriter.java
│       │   │       │   │   ├── DelegateCodeCache.java
│       │   │       │   │   ├── InMemoryCodeCache.java
│       │   │       │   │   ├── NoOpCodeCache.java
│       │   │       │   │   ├── SimpleCodeInfo.java
│       │   │       │   │   ├── SimpleCodeWriter.java
│       │   │       │   │   └── passes/
│       │   │       │   │       ├── DecompilePassWrapper.java
│       │   │       │   │       ├── IPassWrapperVisitor.java
│       │   │       │   │       └── PreparePassWrapper.java
│       │   │       │   ├── metadata/
│       │   │       │   │   ├── ICodeAnnotation.java
│       │   │       │   │   ├── ICodeMetadata.java
│       │   │       │   │   ├── ICodeNodeRef.java
│       │   │       │   │   ├── annotations/
│       │   │       │   │   │   ├── InsnCodeOffset.java
│       │   │       │   │   │   ├── NodeDeclareRef.java
│       │   │       │   │   │   ├── NodeEnd.java
│       │   │       │   │   │   ├── VarNode.java
│       │   │       │   │   │   └── VarRef.java
│       │   │       │   │   └── impl/
│       │   │       │   │       └── CodeMetadataStorage.java
│       │   │       │   ├── plugins/
│       │   │       │   │   ├── CustomResourcesLoader.java
│       │   │       │   │   ├── JadxPlugin.java
│       │   │       │   │   ├── JadxPluginContext.java
│       │   │       │   │   ├── JadxPluginInfo.java
│       │   │       │   │   ├── JadxPluginInfoBuilder.java
│       │   │       │   │   ├── data/
│       │   │       │   │   │   ├── IJadxFiles.java
│       │   │       │   │   │   ├── IJadxPlugins.java
│       │   │       │   │   │   └── JadxPluginRuntimeData.java
│       │   │       │   │   ├── events/
│       │   │       │   │   │   ├── IJadxEvent.java
│       │   │       │   │   │   ├── IJadxEvents.java
│       │   │       │   │   │   ├── JadxEventType.java
│       │   │       │   │   │   ├── JadxEvents.java
│       │   │       │   │   │   └── types/
│       │   │       │   │   │       ├── NodeRenamedByUser.java
│       │   │       │   │   │       ├── ReloadProject.java
│       │   │       │   │   │       └── ReloadSettingsWindow.java
│       │   │       │   │   ├── gui/
│       │   │       │   │   │   ├── ISettingsGroup.java
│       │   │       │   │   │   ├── JadxGuiContext.java
│       │   │       │   │   │   └── JadxGuiSettings.java
│       │   │       │   │   ├── loader/
│       │   │       │   │   │   ├── JadxBasePluginLoader.java
│       │   │       │   │   │   └── JadxPluginLoader.java
│       │   │       │   │   ├── options/
│       │   │       │   │   │   ├── JadxPluginOptions.java
│       │   │       │   │   │   ├── OptionDescription.java
│       │   │       │   │   │   ├── OptionFlag.java
│       │   │       │   │   │   ├── OptionType.java
│       │   │       │   │   │   └── impl/
│       │   │       │   │   │       ├── BaseOptionsParser.java
│       │   │       │   │   │       ├── BasePluginOptionsBuilder.java
│       │   │       │   │   │       ├── JadxOptionDescription.java
│       │   │       │   │   │       └── OptionBuilder.java
│       │   │       │   │   ├── pass/
│       │   │       │   │   │   ├── JadxPass.java
│       │   │       │   │   │   ├── JadxPassInfo.java
│       │   │       │   │   │   ├── impl/
│       │   │       │   │   │   │   ├── OrderedJadxPassInfo.java
│       │   │       │   │   │   │   ├── SimpleAfterLoadPass.java
│       │   │       │   │   │   │   └── SimpleJadxPassInfo.java
│       │   │       │   │   │   └── types/
│       │   │       │   │   │       ├── JadxAfterLoadPass.java
│       │   │       │   │   │       ├── JadxDecompilePass.java
│       │   │       │   │   │       ├── JadxPassType.java
│       │   │       │   │   │       └── JadxPreparePass.java
│       │   │       │   │   ├── resources/
│       │   │       │   │   │   ├── IResContainerFactory.java
│       │   │       │   │   │   ├── IResTableParserProvider.java
│       │   │       │   │   │   └── IResourcesLoader.java
│       │   │       │   │   └── utils/
│       │   │       │   │       ├── CommonFileUtils.java
│       │   │       │   │       ├── Utils.java
│       │   │       │   │       └── ZipSecurity.java
│       │   │       │   ├── resources/
│       │   │       │   │   └── ResourceContentType.java
│       │   │       │   ├── security/
│       │   │       │   │   ├── IJadxSecurity.java
│       │   │       │   │   ├── JadxSecurityFlag.java
│       │   │       │   │   └── impl/
│       │   │       │   │       └── JadxSecurity.java
│       │   │       │   ├── usage/
│       │   │       │   │   ├── IUsageInfoCache.java
│       │   │       │   │   ├── IUsageInfoData.java
│       │   │       │   │   ├── IUsageInfoVisitor.java
│       │   │       │   │   └── impl/
│       │   │       │   │       ├── EmptyUsageInfoCache.java
│       │   │       │   │       └── InMemoryUsageInfoCache.java
│       │   │       │   └── utils/
│       │   │       │       ├── CodeUtils.java
│       │   │       │       └── tasks/
│       │   │       │           └── ITaskExecutor.java
│       │   │       └── core/
│       │   │           ├── Consts.java
│       │   │           ├── Jadx.java
│       │   │           ├── ProcessClass.java
│       │   │           ├── clsp/
│       │   │           │   ├── ClsSet.java
│       │   │           │   ├── ClspClass.java
│       │   │           │   ├── ClspClassSource.java
│       │   │           │   ├── ClspGraph.java
│       │   │           │   ├── ClspMethod.java
│       │   │           │   └── SimpleMethodDetails.java
│       │   │           ├── codegen/
│       │   │           │   ├── AnnotationGen.java
│       │   │           │   ├── ClassGen.java
│       │   │           │   ├── CodeGen.java
│       │   │           │   ├── ConditionGen.java
│       │   │           │   ├── InsnGen.java
│       │   │           │   ├── MethodGen.java
│       │   │           │   ├── NameGen.java
│       │   │           │   ├── RegionGen.java
│       │   │           │   ├── SimpleModeHelper.java
│       │   │           │   ├── TypeGen.java
│       │   │           │   ├── json/
│       │   │           │   │   ├── JsonCodeGen.java
│       │   │           │   │   ├── JsonMappingGen.java
│       │   │           │   │   ├── cls/
│       │   │           │   │   │   ├── JsonClass.java
│       │   │           │   │   │   ├── JsonCodeLine.java
│       │   │           │   │   │   ├── JsonField.java
│       │   │           │   │   │   ├── JsonMethod.java
│       │   │           │   │   │   └── JsonNode.java
│       │   │           │   │   └── mapping/
│       │   │           │   │       ├── JsonClsMapping.java
│       │   │           │   │       ├── JsonFieldMapping.java
│       │   │           │   │       ├── JsonMapping.java
│       │   │           │   │       └── JsonMthMapping.java
│       │   │           │   └── utils/
│       │   │           │       ├── CodeComment.java
│       │   │           │       └── CodeGenUtils.java
│       │   │           ├── deobf/
│       │   │           │   ├── DeobfAliasProvider.java
│       │   │           │   ├── DeobfPresets.java
│       │   │           │   ├── DeobfuscatorVisitor.java
│       │   │           │   ├── FileTypeDetector.java
│       │   │           │   ├── NameMapper.java
│       │   │           │   ├── SaveDeobfMapping.java
│       │   │           │   └── conditions/
│       │   │           │       ├── AbstractDeobfCondition.java
│       │   │           │       ├── AvoidClsAndPkgNamesCollision.java
│       │   │           │       ├── BaseDeobfCondition.java
│       │   │           │       ├── DeobfLengthCondition.java
│       │   │           │       ├── DeobfWhitelist.java
│       │   │           │       ├── ExcludeAndroidRClass.java
│       │   │           │       ├── ExcludePackageWithTLDNames.java
│       │   │           │       └── JadxRenameConditions.java
│       │   │           ├── dex/
│       │   │           │   ├── attributes/
│       │   │           │   │   ├── AFlag.java
│       │   │           │   │   ├── AType.java
│       │   │           │   │   ├── AttrList.java
│       │   │           │   │   ├── AttrNode.java
│       │   │           │   │   ├── AttributeStorage.java
│       │   │           │   │   ├── EmptyAttrStorage.java
│       │   │           │   │   ├── FieldInitInsnAttr.java
│       │   │           │   │   ├── IAttributeNode.java
│       │   │           │   │   ├── ILineAttributeNode.java
│       │   │           │   │   └── nodes/
│       │   │           │   │       ├── AnonymousClassAttr.java
│       │   │           │   │       ├── ClassTypeVarsAttr.java
│       │   │           │   │       ├── CodeFeaturesAttr.java
│       │   │           │   │       ├── DeclareVariablesAttr.java
│       │   │           │   │       ├── DecompileModeOverrideAttr.java
│       │   │           │   │       ├── EdgeInsnAttr.java
│       │   │           │   │       ├── EnumClassAttr.java
│       │   │           │   │       ├── EnumMapAttr.java
│       │   │           │   │       ├── ExcSplitCrossAttr.java
│       │   │           │   │       ├── FieldReplaceAttr.java
│       │   │           │   │       ├── ForceReturnAttr.java
│       │   │           │   │       ├── GenericInfoAttr.java
│       │   │           │   │       ├── InlinedAttr.java
│       │   │           │   │       ├── JadxCommentsAttr.java
│       │   │           │   │       ├── JadxError.java
│       │   │           │   │       ├── JumpInfo.java
│       │   │           │   │       ├── LineAttrNode.java
│       │   │           │   │       ├── LocalVarsDebugInfoAttr.java
│       │   │           │   │       ├── LoopInfo.java
│       │   │           │   │       ├── LoopLabelAttr.java
│       │   │           │   │       ├── MethodBridgeAttr.java
│       │   │           │   │       ├── MethodInlineAttr.java
│       │   │           │   │       ├── MethodOverrideAttr.java
│       │   │           │   │       ├── MethodReplaceAttr.java
│       │   │           │   │       ├── MethodThrowsAttr.java
│       │   │           │   │       ├── MethodTypeVarsAttr.java
│       │   │           │   │       ├── NotificationAttrNode.java
│       │   │           │   │       ├── PhiListAttr.java
│       │   │           │   │       ├── RegDebugInfoAttr.java
│       │   │           │   │       ├── RegionRefAttr.java
│       │   │           │   │       ├── RenameReasonAttr.java
│       │   │           │   │       ├── SkipMethodArgsAttr.java
│       │   │           │   │       ├── SpecialEdgeAttr.java
│       │   │           │   │       └── TmpEdgeAttr.java
│       │   │           │   ├── info/
│       │   │           │   │   ├── AccessInfo.java
│       │   │           │   │   ├── ClassAliasInfo.java
│       │   │           │   │   ├── ClassInfo.java
│       │   │           │   │   ├── ConstStorage.java
│       │   │           │   │   ├── FieldInfo.java
│       │   │           │   │   ├── InfoStorage.java
│       │   │           │   │   ├── MethodInfo.java
│       │   │           │   │   └── PackageInfo.java
│       │   │           │   ├── instructions/
│       │   │           │   │   ├── ArithNode.java
│       │   │           │   │   ├── ArithOp.java
│       │   │           │   │   ├── BaseInvokeNode.java
│       │   │           │   │   ├── ConstClassNode.java
│       │   │           │   │   ├── ConstStringNode.java
│       │   │           │   │   ├── FillArrayData.java
│       │   │           │   │   ├── FillArrayInsn.java
│       │   │           │   │   ├── FilledNewArrayNode.java
│       │   │           │   │   ├── GotoNode.java
│       │   │           │   │   ├── IfNode.java
│       │   │           │   │   ├── IfOp.java
│       │   │           │   │   ├── IndexInsnNode.java
│       │   │           │   │   ├── InsnDecoder.java
│       │   │           │   │   ├── InsnType.java
│       │   │           │   │   ├── InvokeCustomBuilder.java
│       │   │           │   │   ├── InvokeCustomNode.java
│       │   │           │   │   ├── InvokeCustomRawNode.java
│       │   │           │   │   ├── InvokeNode.java
│       │   │           │   │   ├── InvokePolymorphicNode.java
│       │   │           │   │   ├── InvokeType.java
│       │   │           │   │   ├── NewArrayNode.java
│       │   │           │   │   ├── PhiInsn.java
│       │   │           │   │   ├── SwitchData.java
│       │   │           │   │   ├── SwitchInsn.java
│       │   │           │   │   ├── TargetInsnNode.java
│       │   │           │   │   ├── args/
│       │   │           │   │   │   ├── ArgType.java
│       │   │           │   │   │   ├── CodeVar.java
│       │   │           │   │   │   ├── InsnArg.java
│       │   │           │   │   │   ├── InsnWrapArg.java
│       │   │           │   │   │   ├── LiteralArg.java
│       │   │           │   │   │   ├── Named.java
│       │   │           │   │   │   ├── NamedArg.java
│       │   │           │   │   │   ├── PrimitiveType.java
│       │   │           │   │   │   ├── RegisterArg.java
│       │   │           │   │   │   ├── SSAVar.java
│       │   │           │   │   │   ├── Typed.java
│       │   │           │   │   │   └── VarName.java
│       │   │           │   │   ├── invokedynamic/
│       │   │           │   │   │   ├── CustomLambdaCall.java
│       │   │           │   │   │   ├── CustomRawCall.java
│       │   │           │   │   │   ├── CustomStringConcat.java
│       │   │           │   │   │   └── InvokeCustomUtils.java
│       │   │           │   │   ├── java/
│       │   │           │   │   │   └── JsrNode.java
│       │   │           │   │   └── mods/
│       │   │           │   │       ├── ConstructorInsn.java
│       │   │           │   │       └── TernaryInsn.java
│       │   │           │   ├── nodes/
│       │   │           │   │   ├── BlockNode.java
│       │   │           │   │   ├── ClassNode.java
│       │   │           │   │   ├── Edge.java
│       │   │           │   │   ├── FieldNode.java
│       │   │           │   │   ├── IBlock.java
│       │   │           │   │   ├── IBranchRegion.java
│       │   │           │   │   ├── ICodeDataUpdateListener.java
│       │   │           │   │   ├── ICodeNode.java
│       │   │           │   │   ├── IConditionRegion.java
│       │   │           │   │   ├── IContainer.java
│       │   │           │   │   ├── IDexNode.java
│       │   │           │   │   ├── IFieldInfoRef.java
│       │   │           │   │   ├── ILoadable.java
│       │   │           │   │   ├── IMethodDetails.java
│       │   │           │   │   ├── IPackageUpdate.java
│       │   │           │   │   ├── IRegion.java
│       │   │           │   │   ├── IUsageInfoNode.java
│       │   │           │   │   ├── InsnContainer.java
│       │   │           │   │   ├── InsnNode.java
│       │   │           │   │   ├── LoadStage.java
│       │   │           │   │   ├── MethodNode.java
│       │   │           │   │   ├── PackageNode.java
│       │   │           │   │   ├── ProcessState.java
│       │   │           │   │   ├── RootNode.java
│       │   │           │   │   ├── parser/
│       │   │           │   │   │   └── SignatureParser.java
│       │   │           │   │   └── utils/
│       │   │           │   │       ├── MethodUtils.java
│       │   │           │   │       ├── SelectFromDuplicates.java
│       │   │           │   │       └── TypeUtils.java
│       │   │           │   ├── regions/
│       │   │           │   │   ├── AbstractRegion.java
│       │   │           │   │   ├── Region.java
│       │   │           │   │   ├── SwitchRegion.java
│       │   │           │   │   ├── SynchronizedRegion.java
│       │   │           │   │   ├── TryCatchRegion.java
│       │   │           │   │   ├── conditions/
│       │   │           │   │   │   ├── Compare.java
│       │   │           │   │   │   ├── ConditionRegion.java
│       │   │           │   │   │   ├── IfCondition.java
│       │   │           │   │   │   ├── IfInfo.java
│       │   │           │   │   │   └── IfRegion.java
│       │   │           │   │   └── loops/
│       │   │           │   │       ├── ForEachLoop.java
│       │   │           │   │       ├── ForLoop.java
│       │   │           │   │       ├── LoopRegion.java
│       │   │           │   │       └── LoopType.java
│       │   │           │   ├── trycatch/
│       │   │           │   │   ├── CatchAttr.java
│       │   │           │   │   ├── ExcHandlerAttr.java
│       │   │           │   │   ├── ExceptionHandler.java
│       │   │           │   │   ├── TryCatchBlockAttr.java
│       │   │           │   │   ├── TryEdge.java
│       │   │           │   │   ├── TryEdgeScopeGroupMap.java
│       │   │           │   │   └── TryEdgeType.java
│       │   │           │   └── visitors/
│       │   │           │       ├── AbstractVisitor.java
│       │   │           │       ├── AdjustForIfMergeVisitor.java
│       │   │           │       ├── AnonymousClassVisitor.java
│       │   │           │       ├── ApplyVariableNames.java
│       │   │           │       ├── AttachCommentsVisitor.java
│       │   │           │       ├── AttachMethodDetails.java
│       │   │           │       ├── AttachTryCatchVisitor.java
│       │   │           │       ├── CheckCode.java
│       │   │           │       ├── ClassModifier.java
│       │   │           │       ├── ConstInlineVisitor.java
│       │   │           │       ├── ConstructorVisitor.java
│       │   │           │       ├── DeboxingVisitor.java
│       │   │           │       ├── DepthTraversal.java
│       │   │           │       ├── DotGraphVisitor.java
│       │   │           │       ├── EnumVisitor.java
│       │   │           │       ├── ExtractFieldInit.java
│       │   │           │       ├── FallbackModeVisitor.java
│       │   │           │       ├── FixSwitchOverEnum.java
│       │   │           │       ├── GenericTypesVisitor.java
│       │   │           │       ├── IDexTreeVisitor.java
│       │   │           │       ├── InitCodeVariables.java
│       │   │           │       ├── InlineMethods.java
│       │   │           │       ├── JadxVisitor.java
│       │   │           │       ├── MarkMethodsForInline.java
│       │   │           │       ├── MethodInvokeVisitor.java
│       │   │           │       ├── MethodThrowsVisitor.java
│       │   │           │       ├── MethodVisitor.java
│       │   │           │       ├── ModVisitor.java
│       │   │           │       ├── MoveInlineVisitor.java
│       │   │           │       ├── OverrideMethodVisitor.java
│       │   │           │       ├── PrepareForCodeGen.java
│       │   │           │       ├── ProcessAnonymous.java
│       │   │           │       ├── ProcessInstructionsVisitor.java
│       │   │           │       ├── ProcessMethodsForInline.java
│       │   │           │       ├── ReplaceNewArray.java
│       │   │           │       ├── SaveCode.java
│       │   │           │       ├── ShadowFieldVisitor.java
│       │   │           │       ├── SignatureProcessor.java
│       │   │           │       ├── SimplifyVisitor.java
│       │   │           │       ├── blocks/
│       │   │           │       │   ├── BlockExceptionHandler.java
│       │   │           │       │   ├── BlockFinisher.java
│       │   │           │       │   ├── BlockProcessor.java
│       │   │           │       │   ├── BlockSplitter.java
│       │   │           │       │   ├── DominatorTree.java
│       │   │           │       │   ├── FixMultiEntryLoops.java
│       │   │           │       │   ├── PostDominatorTree.java
│       │   │           │       │   └── ResolveJavaJSR.java
│       │   │           │       ├── debuginfo/
│       │   │           │       │   ├── DebugInfoApplyVisitor.java
│       │   │           │       │   └── DebugInfoAttachVisitor.java
│       │   │           │       ├── finaly/
│       │   │           │       │   ├── CentralityState.java
│       │   │           │       │   ├── FinallyExtractInfo.java
│       │   │           │       │   ├── InsnsSlice.java
│       │   │           │       │   ├── MarkFinallyVisitor.java
│       │   │           │       │   ├── SameInstructionsStrategy.java
│       │   │           │       │   ├── SameInstructionsStrategyImpl.java
│       │   │           │       │   ├── TryCatchEdgeBlockMap.java
│       │   │           │       │   └── traverser/
│       │   │           │       │       ├── GlobalTraverserSourceState.java
│       │   │           │       │       ├── TraverserController.java
│       │   │           │       │       ├── TraverserException.java
│       │   │           │       │       ├── factory/
│       │   │           │       │       │   ├── DuplicatedTraverserStateFactory.java
│       │   │           │       │       │   └── TraverserStateFactory.java
│       │   │           │       │       ├── handlers/
│       │   │           │       │       │   ├── AbstractActivePathTraverserHandler.java
│       │   │           │       │       │   ├── AbstractBlockPathTraverserHandler.java
│       │   │           │       │       │   ├── AbstractBlockTraverserHandler.java
│       │   │           │       │       │   ├── BaseBlockTraverserHandler.java
│       │   │           │       │       │   ├── InstructionActivePathTraverserHandler.java
│       │   │           │       │       │   ├── MergePathActivePathTraverserHandler.java
│       │   │           │       │       │   ├── PredecessorBlockPathTraverserHandler.java
│       │   │           │       │       │   └── PredecessorMergeActivePathTraverserHandler.java
│       │   │           │       │       ├── state/
│       │   │           │       │       │   ├── AwaitingInsnCompareTraverserState.java
│       │   │           │       │       │   ├── ISourceBlockState.java
│       │   │           │       │       │   ├── IdentifiedScopeWithTerminatorTraverserState.java
│       │   │           │       │       │   ├── NewBlockTraverserState.java
│       │   │           │       │       │   ├── NoBlockTraverserState.java
│       │   │           │       │       │   ├── RecoveredFromCacheTraverserState.java
│       │   │           │       │       │   ├── TerminalTraverserState.java
│       │   │           │       │       │   ├── TraverserActivePathState.java
│       │   │           │       │       │   ├── TraverserBlockInfo.java
│       │   │           │       │       │   ├── TraverserGlobalCommonState.java
│       │   │           │       │       │   ├── TraverserState.java
│       │   │           │       │       │   └── UnknownAdvanceStrategyTraverserState.java
│       │   │           │       │       └── visitors/
│       │   │           │       │           ├── AbstractBlockTraverserVisitor.java
│       │   │           │       │           ├── ImplicitInsnBlockTraverserVisitor.java
│       │   │           │       │           ├── PathEndBlockTraverserVisitor.java
│       │   │           │       │           ├── PredecessorBlockTraverserVisitor.java
│       │   │           │       │           └── comparator/
│       │   │           │       │               ├── AbstractTraverserComparatorVisitor.java
│       │   │           │       │               └── InstructionBlockComparatorTraverserVisitor.java
│       │   │           │       ├── fixaccessmodifiers/
│       │   │           │       │   ├── FixAccessModifiers.java
│       │   │           │       │   └── VisibilityUtils.java
│       │   │           │       ├── gradle/
│       │   │           │       │   └── NonFinalResIdsVisitor.java
│       │   │           │       ├── kotlin/
│       │   │           │       │   └── ProcessKotlinInternals.java
│       │   │           │       ├── methods/
│       │   │           │       │   └── MutableMethodDetails.java
│       │   │           │       ├── prepare/
│       │   │           │       │   ├── AddAndroidConstants.java
│       │   │           │       │   └── CollectConstValues.java
│       │   │           │       ├── regions/
│       │   │           │       │   ├── AbstractRegionVisitor.java
│       │   │           │       │   ├── CheckRegions.java
│       │   │           │       │   ├── CleanRegions.java
│       │   │           │       │   ├── DebugRegionCounter.java
│       │   │           │       │   ├── DepthRegionTraversal.java
│       │   │           │       │   ├── IRegionIterativeVisitor.java
│       │   │           │       │   ├── IRegionVisitor.java
│       │   │           │       │   ├── IfRegionVisitor.java
│       │   │           │       │   ├── LoopRegionVisitor.java
│       │   │           │       │   ├── PostProcessRegions.java
│       │   │           │       │   ├── ProcessTryCatchRegions.java
│       │   │           │       │   ├── RegionMakerVisitor.java
│       │   │           │       │   ├── ReturnVisitor.java
│       │   │           │       │   ├── SwitchBreakVisitor.java
│       │   │           │       │   ├── SwitchOverStringVisitor.java
│       │   │           │       │   ├── TernaryMod.java
│       │   │           │       │   ├── TracedRegionVisitor.java
│       │   │           │       │   ├── maker/
│       │   │           │       │   │   ├── ExcHandlersRegionMaker.java
│       │   │           │       │   │   ├── IfRegionMaker.java
│       │   │           │       │   │   ├── LoopRegionMaker.java
│       │   │           │       │   │   ├── RegionMaker.java
│       │   │           │       │   │   ├── RegionStack.java
│       │   │           │       │   │   ├── SwitchRegionMaker.java
│       │   │           │       │   │   └── SynchronizedRegionMaker.java
│       │   │           │       │   └── variables/
│       │   │           │       │       ├── CollectUsageRegionVisitor.java
│       │   │           │       │       ├── ProcessVariables.java
│       │   │           │       │       ├── UsePlace.java
│       │   │           │       │       └── VarUsage.java
│       │   │           │       ├── rename/
│       │   │           │       │   ├── CodeRenameVisitor.java
│       │   │           │       │   ├── RenameVisitor.java
│       │   │           │       │   ├── SourceFileRename.java
│       │   │           │       │   └── UserRenames.java
│       │   │           │       ├── shrink/
│       │   │           │       │   ├── ArgsInfo.java
│       │   │           │       │   ├── CodeShrinkVisitor.java
│       │   │           │       │   └── WrapInfo.java
│       │   │           │       ├── ssa/
│       │   │           │       │   ├── LiveVarAnalysis.java
│       │   │           │       │   ├── RenameState.java
│       │   │           │       │   └── SSATransform.java
│       │   │           │       ├── typeinference/
│       │   │           │       │   ├── AbstractTypeConstraint.java
│       │   │           │       │   ├── BoundEnum.java
│       │   │           │       │   ├── FinishTypeInference.java
│       │   │           │       │   ├── FixTypesVisitor.java
│       │   │           │       │   ├── ITypeBound.java
│       │   │           │       │   ├── ITypeBoundDynamic.java
│       │   │           │       │   ├── ITypeConstraint.java
│       │   │           │       │   ├── ITypeListener.java
│       │   │           │       │   ├── TypeBoundCheckCastAssign.java
│       │   │           │       │   ├── TypeBoundConst.java
│       │   │           │       │   ├── TypeBoundFieldGetAssign.java
│       │   │           │       │   ├── TypeBoundInvokeAssign.java
│       │   │           │       │   ├── TypeBoundInvokeUse.java
│       │   │           │       │   ├── TypeCompare.java
│       │   │           │       │   ├── TypeCompareEnum.java
│       │   │           │       │   ├── TypeInferenceVisitor.java
│       │   │           │       │   ├── TypeInfo.java
│       │   │           │       │   ├── TypeSearch.java
│       │   │           │       │   ├── TypeSearchState.java
│       │   │           │       │   ├── TypeSearchVarInfo.java
│       │   │           │       │   ├── TypeUpdate.java
│       │   │           │       │   ├── TypeUpdateEntry.java
│       │   │           │       │   ├── TypeUpdateFlags.java
│       │   │           │       │   ├── TypeUpdateInfo.java
│       │   │           │       │   ├── TypeUpdateRegistry.java
│       │   │           │       │   └── TypeUpdateResult.java
│       │   │           │       └── usage/
│       │   │           │           ├── UsageInfo.java
│       │   │           │           ├── UsageInfoVisitor.java
│       │   │           │           └── UseSet.java
│       │   │           ├── export/
│       │   │           │   ├── ExportGradle.java
│       │   │           │   ├── ExportGradleType.java
│       │   │           │   ├── GradleInfoStorage.java
│       │   │           │   ├── OutDirs.java
│       │   │           │   ├── TemplateFile.java
│       │   │           │   └── gen/
│       │   │           │       ├── AndroidGradleGenerator.java
│       │   │           │       ├── GradleGeneratorTools.java
│       │   │           │       ├── IExportGradleGenerator.java
│       │   │           │       └── SimpleJavaGradleGenerator.java
│       │   │           ├── plugins/
│       │   │           │   ├── AppContext.java
│       │   │           │   ├── JadxPluginManager.java
│       │   │           │   ├── JadxPluginsData.java
│       │   │           │   ├── PluginContext.java
│       │   │           │   ├── events/
│       │   │           │   │   ├── JadxEventsImpl.java
│       │   │           │   │   └── JadxEventsManager.java
│       │   │           │   ├── files/
│       │   │           │   │   ├── IJadxFilesGetter.java
│       │   │           │   │   ├── JadxFilesData.java
│       │   │           │   │   ├── SingleDirFilesGetter.java
│       │   │           │   │   └── TempFilesGetter.java
│       │   │           │   └── versions/
│       │   │           │       ├── VerifyRequiredVersion.java
│       │   │           │       └── VersionComparator.java
│       │   │           ├── utils/
│       │   │           │   ├── BetterName.java
│       │   │           │   ├── BlockInsnPair.java
│       │   │           │   ├── BlockParentContainer.java
│       │   │           │   ├── BlockUtils.java
│       │   │           │   ├── CacheStorage.java
│       │   │           │   ├── DebugChecks.java
│       │   │           │   ├── DebugChecksPass.java
│       │   │           │   ├── DebugUtils.java
│       │   │           │   ├── DecompilerScheduler.java
│       │   │           │   ├── DotGraphUtils.java
│       │   │           │   ├── EmptyBitSet.java
│       │   │           │   ├── EncodedValueUtils.java
│       │   │           │   ├── ErrorsCounter.java
│       │   │           │   ├── FileSignature.java
│       │   │           │   ├── GsonUtils.java
│       │   │           │   ├── ImmutableList.java
│       │   │           │   ├── InsnList.java
│       │   │           │   ├── InsnRemover.java
│       │   │           │   ├── InsnUtils.java
│       │   │           │   ├── ListUtils.java
│       │   │           │   ├── Pair.java
│       │   │           │   ├── PassMerge.java
│       │   │           │   ├── RegionUtils.java
│       │   │           │   ├── StringUtils.java
│       │   │           │   ├── Utils.java
│       │   │           │   ├── android/
│       │   │           │   │   ├── AndroidManifestParser.java
│       │   │           │   │   ├── AndroidResourcesMap.java
│       │   │           │   │   ├── AndroidResourcesUtils.java
│       │   │           │   │   ├── AppAttribute.java
│       │   │           │   │   ├── ApplicationParams.java
│       │   │           │   │   ├── DataInputDelegate.java
│       │   │           │   │   ├── ExtDataInput.java
│       │   │           │   │   ├── Res9patchStreamDecoder.java
│       │   │           │   │   └── TextResMapFile.java
│       │   │           │   ├── blocks/
│       │   │           │   │   ├── BlockPair.java
│       │   │           │   │   ├── BlockSet.java
│       │   │           │   │   └── DFSIteration.java
│       │   │           │   ├── exceptions/
│       │   │           │   │   ├── CodegenException.java
│       │   │           │   │   ├── DecodeException.java
│       │   │           │   │   ├── InvalidDataException.java
│       │   │           │   │   ├── JadxArgsValidateException.java
│       │   │           │   │   ├── JadxException.java
│       │   │           │   │   ├── JadxOverflowException.java
│       │   │           │   │   └── JadxRuntimeException.java
│       │   │           │   ├── files/
│       │   │           │   │   └── FileUtils.java
│       │   │           │   ├── input/
│       │   │           │   │   └── InsnDataUtils.java
│       │   │           │   ├── log/
│       │   │           │   │   └── LogUtils.java
│       │   │           │   └── tasks/
│       │   │           │       └── TaskExecutor.java
│       │   │           └── xmlgen/
│       │   │               ├── BinaryXMLParser.java
│       │   │               ├── BinaryXMLStrings.java
│       │   │               ├── CommonBinaryParser.java
│       │   │               ├── IResTableParser.java
│       │   │               ├── ManifestAttributes.java
│       │   │               ├── ParserConstants.java
│       │   │               ├── ParserStream.java
│       │   │               ├── ResContainer.java
│       │   │               ├── ResDecoder.java
│       │   │               ├── ResNameUtils.java
│       │   │               ├── ResTableBinaryParser.java
│       │   │               ├── ResTableBinaryParserProvider.java
│       │   │               ├── ResXmlGen.java
│       │   │               ├── ResourceStorage.java
│       │   │               ├── ResourcesSaver.java
│       │   │               ├── StringFormattedCheck.java
│       │   │               ├── XMLChar.java
│       │   │               ├── XmlDeobf.java
│       │   │               ├── XmlGenUtils.java
│       │   │               └── entry/
│       │   │                   ├── EntryConfig.java
│       │   │                   ├── ProtoValue.java
│       │   │                   ├── RawNamedValue.java
│       │   │                   ├── RawValue.java
│       │   │                   ├── ResourceEntry.java
│       │   │                   └── ValuesParser.java
│       │   └── resources/
│       │       ├── android/
│       │       │   ├── attrs.xml
│       │       │   ├── attrs_manifest.xml
│       │       │   └── res-map.txt
│       │       ├── clst/
│       │       │   └── core.jcst
│       │       ├── export/
│       │       │   ├── android/
│       │       │   │   ├── app.build.gradle.tmpl
│       │       │   │   ├── build.gradle.tmpl
│       │       │   │   ├── lib.build.gradle.tmpl
│       │       │   │   └── settings.gradle.tmpl
│       │       │   └── java/
│       │       │       ├── build.gradle.kts.tmpl
│       │       │       └── settings.gradle.kts.tmpl
│       │       └── jadx/
│       │           └── core/
│       │               └── deobf/
│       │                   └── conditions/
│       │                       └── tlds.txt
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       ├── NotYetImplemented.java
│           │       ├── NotYetImplementedExtension.java
│           │       ├── api/
│           │       │   ├── JadxArgsValidatorOutDirsTest.java
│           │       │   ├── JadxDecompilerTest.java
│           │       │   └── JadxInternalAccess.java
│           │       ├── core/
│           │       │   ├── deobf/
│           │       │   │   └── NameMapperTest.java
│           │       │   ├── dex/
│           │       │   │   ├── info/
│           │       │   │   │   └── AccessInfoTest.java
│           │       │   │   ├── instructions/
│           │       │   │   │   └── args/
│           │       │   │   │       └── ArgTypeTest.java
│           │       │   │   ├── nodes/
│           │       │   │   │   └── utils/
│           │       │   │   │       ├── SelectFromDuplicatesTest.java
│           │       │   │   │       └── TypeUtilsTest.java
│           │       │   │   ├── trycatch/
│           │       │   │   │   └── TryCatchBlockAttrTest.java
│           │       │   │   └── visitors/
│           │       │   │       └── typeinference/
│           │       │   │           ├── PrimitiveConversionsTests.java
│           │       │   │           └── TypeCompareTest.java
│           │       │   ├── plugins/
│           │       │   │   └── versions/
│           │       │   │       ├── VerifyRequiredVersionTest.java
│           │       │   │       └── VersionComparatorTest.java
│           │       │   ├── utils/
│           │       │   │   ├── PassMergeTest.java
│           │       │   │   ├── TestBetterName.java
│           │       │   │   ├── TestGetBetterClassName.java
│           │       │   │   ├── TestGetBetterResourceName.java
│           │       │   │   ├── TypeUtilsTest.java
│           │       │   │   └── log/
│           │       │   │       └── LogUtilsTest.java
│           │       │   └── xmlgen/
│           │       │       ├── ResNameUtilsTest.java
│           │       │       ├── ResXmlGenTest.java
│           │       │       └── entry/
│           │       │           └── ValuesParserTest.java
│           │       └── tests/
│           │           ├── api/
│           │           │   ├── ExportGradleTest.java
│           │           │   ├── IntegrationTest.java
│           │           │   ├── RaungTest.java
│           │           │   ├── SmaliTest.java
│           │           │   ├── compiler/
│           │           │   │   ├── ClassFileManager.java
│           │           │   │   ├── CompilerOptions.java
│           │           │   │   ├── DynamicClassLoader.java
│           │           │   │   ├── EclipseCompilerUtils.java
│           │           │   │   ├── JavaClassObject.java
│           │           │   │   ├── JavaUtils.java
│           │           │   │   ├── StringJavaFileObject.java
│           │           │   │   └── TestCompiler.java
│           │           │   ├── extensions/
│           │           │   │   └── profiles/
│           │           │   │       ├── JadxTestProfilesExtension.java
│           │           │   │       ├── TestProfile.java
│           │           │   │       └── TestWithProfiles.java
│           │           │   └── utils/
│           │           │       ├── TestFilesGetter.java
│           │           │       ├── TestUtils.java
│           │           │       └── assertj/
│           │           │           ├── JadxAssertions.java
│           │           │           ├── JadxClassNodeAssertions.java
│           │           │           ├── JadxCodeAssertions.java
│           │           │           ├── JadxCodeInfoAssertions.java
│           │           │           └── JadxMethodNodeAssertions.java
│           │           ├── export/
│           │           │   ├── IllegalCharsForGradleWrapper.java
│           │           │   ├── OptionalTargetSdkVersion.java
│           │           │   ├── TestApacheHttpClient.java
│           │           │   ├── TestNonFinalResIds.java
│           │           │   └── VectorDrawablesUseSupportLibrary.java
│           │           ├── external/
│           │           │   └── BaseExternalTest.java
│           │           ├── functional/
│           │           │   ├── AttributeStorageTest.java
│           │           │   ├── JadxClasspathTest.java
│           │           │   ├── JadxVisitorsOrderTest.java
│           │           │   ├── NameMapperTest.java
│           │           │   ├── SignatureParserTest.java
│           │           │   ├── StringUtilsTest.java
│           │           │   ├── TemplateFileTest.java
│           │           │   └── TestIfCondition.java
│           │           └── integration/
│           │               ├── android/
│           │               │   ├── TestRFieldAccess.java
│           │               │   ├── TestRFieldRestore.java
│           │               │   ├── TestRFieldRestore2.java
│           │               │   ├── TestRFieldRestore3.java
│           │               │   ├── TestResConstReplace.java
│           │               │   ├── TestResConstReplace2.java
│           │               │   └── TestResConstReplace3.java
│           │               ├── annotations/
│           │               │   ├── TestAnnotations.java
│           │               │   ├── TestAnnotations2.java
│           │               │   ├── TestAnnotationsMix.java
│           │               │   ├── TestAnnotationsRename.java
│           │               │   ├── TestAnnotationsRenameDef.java
│           │               │   ├── TestAnnotationsUsage.java
│           │               │   └── TestParamAnnotations.java
│           │               ├── arith/
│           │               │   ├── TestArith.java
│           │               │   ├── TestArith2.java
│           │               │   ├── TestArith3.java
│           │               │   ├── TestArith4.java
│           │               │   ├── TestArithConst.java
│           │               │   ├── TestArithNot.java
│           │               │   ├── TestFieldIncrement.java
│           │               │   ├── TestFieldIncrement2.java
│           │               │   ├── TestFieldIncrement3.java
│           │               │   ├── TestNumbersFormat.java
│           │               │   ├── TestPrimitivesNegate.java
│           │               │   ├── TestSpecialValues.java
│           │               │   ├── TestSpecialValues2.java
│           │               │   └── TestXor.java
│           │               ├── arrays/
│           │               │   ├── TestArrayFill.java
│           │               │   ├── TestArrayFill2.java
│           │               │   ├── TestArrayFill3.java
│           │               │   ├── TestArrayFill4.java
│           │               │   ├── TestArrayFillConstReplace.java
│           │               │   ├── TestArrayFillNegative.java
│           │               │   ├── TestArrayFillWithMove.java
│           │               │   ├── TestArrayInit.java
│           │               │   ├── TestArrayInitField.java
│           │               │   ├── TestArrayInitField2.java
│           │               │   ├── TestArrays.java
│           │               │   ├── TestArrays2.java
│           │               │   ├── TestArrays3.java
│           │               │   ├── TestArrays4.java
│           │               │   ├── TestFillArrayData.java
│           │               │   └── TestMultiDimArrayFill.java
│           │               ├── code/
│           │               │   ├── TestArrayAccessReorder.java
│           │               │   └── TestCodeCommentStyle.java
│           │               ├── conditions/
│           │               │   ├── TestBitwiseAnd.java
│           │               │   ├── TestBitwiseOr.java
│           │               │   ├── TestBooleanToByte.java
│           │               │   ├── TestBooleanToChar.java
│           │               │   ├── TestBooleanToDouble.java
│           │               │   ├── TestBooleanToFloat.java
│           │               │   ├── TestBooleanToInt.java
│           │               │   ├── TestBooleanToInt2.java
│           │               │   ├── TestBooleanToLong.java
│           │               │   ├── TestBooleanToShort.java
│           │               │   ├── TestCast.java
│           │               │   ├── TestCmpOp.java
│           │               │   ├── TestCmpOp2.java
│           │               │   ├── TestComplexIf.java
│           │               │   ├── TestComplexIf2.java
│           │               │   ├── TestComplexIf3.java
│           │               │   ├── TestComplexIf4.java
│           │               │   ├── TestConditionInLoop.java
│           │               │   ├── TestConditions.java
│           │               │   ├── TestConditions10.java
│           │               │   ├── TestConditions11.java
│           │               │   ├── TestConditions12.java
│           │               │   ├── TestConditions13.java
│           │               │   ├── TestConditions14.java
│           │               │   ├── TestConditions15.java
│           │               │   ├── TestConditions16.java
│           │               │   ├── TestConditions17.java
│           │               │   ├── TestConditions18.java
│           │               │   ├── TestConditions2.java
│           │               │   ├── TestConditions21.java
│           │               │   ├── TestConditions3.java
│           │               │   ├── TestConditions4.java
│           │               │   ├── TestConditions5.java
│           │               │   ├── TestConditions6.java
│           │               │   ├── TestConditions7.java
│           │               │   ├── TestConditions8.java
│           │               │   ├── TestConditions9.java
│           │               │   ├── TestElseIf.java
│           │               │   ├── TestElseIfCodeStyle.java
│           │               │   ├── TestIfAndSwitch.java
│           │               │   ├── TestIfCodeStyle.java
│           │               │   ├── TestIfCodeStyle2.java
│           │               │   ├── TestIfElseAndConditionIntermediateInstruction.java
│           │               │   ├── TestInnerAssign.java
│           │               │   ├── TestInnerAssign2.java
│           │               │   ├── TestInnerAssign3.java
│           │               │   ├── TestNestedIf.java
│           │               │   ├── TestNestedIf2.java
│           │               │   ├── TestOutBlock.java
│           │               │   ├── TestSimpleConditions.java
│           │               │   ├── TestTernary.java
│           │               │   ├── TestTernary2.java
│           │               │   ├── TestTernary3.java
│           │               │   ├── TestTernary4.java
│           │               │   ├── TestTernaryInIf.java
│           │               │   ├── TestTernaryInIf2.java
│           │               │   ├── TestTernaryInIf3.java
│           │               │   ├── TestTernaryOneBranchInConstructor.java
│           │               │   └── TestTernaryOneBranchInConstructor2.java
│           │               ├── debuginfo/
│           │               │   ├── TestLineNumbers.java
│           │               │   ├── TestLineNumbers2.java
│           │               │   ├── TestLineNumbers3.java
│           │               │   ├── TestReturnSourceLine.java
│           │               │   └── TestVariablesNames.java
│           │               ├── deobf/
│           │               │   ├── TestDontRenameClspOverriddenMethod.java
│           │               │   ├── TestFieldFromInnerClass.java
│           │               │   ├── TestInheritedMethodRename.java
│           │               │   ├── TestMthRename.java
│           │               │   ├── TestRenameOverriddenMethod.java
│           │               │   ├── TestRenameOverriddenMethod2.java
│           │               │   ├── TestRenameOverriddenMethod3.java
│           │               │   └── a/
│           │               │       └── TestNegativeRenameCondition.java
│           │               ├── enums/
│           │               │   ├── TestEnumKotlinEntries.java
│           │               │   ├── TestEnumObfuscated.java
│           │               │   ├── TestEnumUsesOtherEnum.java
│           │               │   ├── TestEnumWithConstInlining.java
│           │               │   ├── TestEnumWithFields.java
│           │               │   ├── TestEnums.java
│           │               │   ├── TestEnums10.java
│           │               │   ├── TestEnums11.java
│           │               │   ├── TestEnums2.java
│           │               │   ├── TestEnums2a.java
│           │               │   ├── TestEnums3.java
│           │               │   ├── TestEnums4.java
│           │               │   ├── TestEnums5.java
│           │               │   ├── TestEnums6.java
│           │               │   ├── TestEnums7.java
│           │               │   ├── TestEnums8.java
│           │               │   ├── TestEnums9.java
│           │               │   ├── TestEnumsInterface.java
│           │               │   ├── TestEnumsWithAssert.java
│           │               │   ├── TestEnumsWithConsts.java
│           │               │   ├── TestEnumsWithCustomInit.java
│           │               │   ├── TestEnumsWithStaticFields.java
│           │               │   ├── TestEnumsWithTernary.java
│           │               │   ├── TestInnerEnums.java
│           │               │   ├── TestSwitchOverEnum.java
│           │               │   └── TestSwitchOverEnum2.java
│           │               ├── fallback/
│           │               │   ├── TestFallbackManyNops.java
│           │               │   └── TestFallbackMode.java
│           │               ├── generics/
│           │               │   ├── TestClassSignature.java
│           │               │   ├── TestConstructorGenerics.java
│           │               │   ├── TestGeneric8.java
│           │               │   ├── TestGenericFields.java
│           │               │   ├── TestGenerics.java
│           │               │   ├── TestGenerics2.java
│           │               │   ├── TestGenerics3.java
│           │               │   ├── TestGenerics4.java
│           │               │   ├── TestGenerics6.java
│           │               │   ├── TestGenerics7.java
│           │               │   ├── TestGenerics8.java
│           │               │   ├── TestGenericsInArgs.java
│           │               │   ├── TestGenericsMthOverride.java
│           │               │   ├── TestImportGenericMap.java
│           │               │   ├── TestMethodOverride.java
│           │               │   ├── TestMissingGenericsTypes2.java
│           │               │   ├── TestOuterGeneric.java
│           │               │   ├── TestSyntheticOverride.java
│           │               │   ├── TestTypeVarsFromOuterClass.java
│           │               │   ├── TestTypeVarsFromSuperClass.java
│           │               │   └── TestUsageInGenerics.java
│           │               ├── inline/
│           │               │   ├── TestConstInline.java
│           │               │   ├── TestGetterInlineNegative.java
│           │               │   ├── TestInline.java
│           │               │   ├── TestInline2.java
│           │               │   ├── TestInline3.java
│           │               │   ├── TestInline6.java
│           │               │   ├── TestInline7.java
│           │               │   ├── TestInstanceLambda.java
│           │               │   ├── TestIssue86.java
│           │               │   ├── TestMethodInline.java
│           │               │   ├── TestOverlapSyntheticMethods.java
│           │               │   ├── TestOverrideBridgeMerge.java
│           │               │   ├── TestSyntheticBridgeRename.java
│           │               │   ├── TestSyntheticClassInline.java
│           │               │   ├── TestSyntheticInline.java
│           │               │   ├── TestSyntheticInline2.java
│           │               │   ├── TestSyntheticInline3.java
│           │               │   └── TestTernaryCast.java
│           │               ├── inner/
│           │               │   ├── TestAnonymousClass.java
│           │               │   ├── TestAnonymousClass10.java
│           │               │   ├── TestAnonymousClass11.java
│           │               │   ├── TestAnonymousClass12.java
│           │               │   ├── TestAnonymousClass13.java
│           │               │   ├── TestAnonymousClass14.java
│           │               │   ├── TestAnonymousClass15.java
│           │               │   ├── TestAnonymousClass16.java
│           │               │   ├── TestAnonymousClass17.java
│           │               │   ├── TestAnonymousClass18.java
│           │               │   ├── TestAnonymousClass19.java
│           │               │   ├── TestAnonymousClass2.java
│           │               │   ├── TestAnonymousClass20.java
│           │               │   ├── TestAnonymousClass21.java
│           │               │   ├── TestAnonymousClass22.java
│           │               │   ├── TestAnonymousClass3.java
│           │               │   ├── TestAnonymousClass3a.java
│           │               │   ├── TestAnonymousClass4.java
│           │               │   ├── TestAnonymousClass5.java
│           │               │   ├── TestAnonymousClass6.java
│           │               │   ├── TestAnonymousClass7.java
│           │               │   ├── TestAnonymousClass8.java
│           │               │   ├── TestAnonymousClass9.java
│           │               │   ├── TestIncorrectAnonymousClass.java
│           │               │   ├── TestInner2Samples.java
│           │               │   ├── TestInnerClass.java
│           │               │   ├── TestInnerClass2.java
│           │               │   ├── TestInnerClass3.java
│           │               │   ├── TestInnerClass4.java
│           │               │   ├── TestInnerClass5.java
│           │               │   ├── TestInnerClassFakeSyntheticConstructor.java
│           │               │   ├── TestInnerClassSyntheticConstructor.java
│           │               │   ├── TestInnerClassSyntheticRename.java
│           │               │   ├── TestInnerConstructorCall.java
│           │               │   ├── TestNestedAnonymousClass.java
│           │               │   ├── TestOuterConstructorCall.java
│           │               │   ├── TestReplaceConstsInAnnotations.java
│           │               │   ├── TestReplaceConstsInAnnotations2.java
│           │               │   └── TestSyntheticMthRename.java
│           │               ├── invoke/
│           │               │   ├── TestCastInOverloadedAccessor.java
│           │               │   ├── TestCastInOverloadedInvoke.java
│           │               │   ├── TestCastInOverloadedInvoke2.java
│           │               │   ├── TestCastInOverloadedInvoke3.java
│           │               │   ├── TestCastInOverloadedInvoke4.java
│           │               │   ├── TestConstructorWithMoves.java
│           │               │   ├── TestHierarchyOverloadedInvoke.java
│           │               │   ├── TestInheritedStaticInvoke.java
│           │               │   ├── TestInvoke1.java
│           │               │   ├── TestInvokeInCatch.java
│           │               │   ├── TestInvokeWithWideVars.java
│           │               │   ├── TestOverloadedInvoke.java
│           │               │   ├── TestOverloadedMethodInvoke.java
│           │               │   ├── TestOverloadedMethodInvoke2.java
│           │               │   ├── TestPolymorphicInvoke.java
│           │               │   ├── TestPolymorphicRangeInvoke.java
│           │               │   ├── TestRawCustomInvoke.java
│           │               │   ├── TestSuperInvoke.java
│           │               │   ├── TestSuperInvoke2.java
│           │               │   ├── TestSuperInvokeUnknown.java
│           │               │   ├── TestSuperInvokeWithGenerics.java
│           │               │   ├── TestVarArg.java
│           │               │   └── TestVarArg2.java
│           │               ├── java8/
│           │               │   ├── TestLambdaArgs.java
│           │               │   ├── TestLambdaConstructor.java
│           │               │   ├── TestLambdaExtVar.java
│           │               │   ├── TestLambdaExtVar2.java
│           │               │   ├── TestLambdaInArray.java
│           │               │   ├── TestLambdaInstance.java
│           │               │   ├── TestLambdaInstance2.java
│           │               │   ├── TestLambdaInstance3.java
│           │               │   ├── TestLambdaResugar.java
│           │               │   ├── TestLambdaReturn.java
│           │               │   └── TestLambdaStatic.java
│           │               ├── jbc/
│           │               │   ├── TestDup2x1.java
│           │               │   └── TestStackConvert.java
│           │               ├── loops/
│           │               │   ├── TestArrayForEach.java
│           │               │   ├── TestArrayForEach2.java
│           │               │   ├── TestArrayForEach3.java
│           │               │   ├── TestArrayForEachNegative.java
│           │               │   ├── TestBreakInComplexIf.java
│           │               │   ├── TestBreakInComplexIf2.java
│           │               │   ├── TestBreakInLoop.java
│           │               │   ├── TestBreakInLoop2.java
│           │               │   ├── TestBreakInLoop3.java
│           │               │   ├── TestBreakInLoop4.java
│           │               │   ├── TestBreakInLoop5.java
│           │               │   ├── TestBreakInLoop6.java
│           │               │   ├── TestBreakWithLabel.java
│           │               │   ├── TestComplexWhileLoop.java
│           │               │   ├── TestContinueInLoop.java
│           │               │   ├── TestDoWhileBreak.java
│           │               │   ├── TestDoWhileBreak2.java
│           │               │   ├── TestDoWhileBreak3.java
│           │               │   ├── TestEndlessLoop.java
│           │               │   ├── TestEndlessLoop2.java
│           │               │   ├── TestIfInLoop2.java
│           │               │   ├── TestIfInLoop3.java
│           │               │   ├── TestIfInLoop4.java
│           │               │   ├── TestIndexForLoop.java
│           │               │   ├── TestIndexedLoop.java
│           │               │   ├── TestIterableForEach.java
│           │               │   ├── TestIterableForEach2.java
│           │               │   ├── TestIterableForEach3.java
│           │               │   ├── TestIterableForEach4.java
│           │               │   ├── TestLoopCondition.java
│           │               │   ├── TestLoopCondition2.java
│           │               │   ├── TestLoopCondition3.java
│           │               │   ├── TestLoopCondition4.java
│           │               │   ├── TestLoopCondition5.java
│           │               │   ├── TestLoopConditionInvoke.java
│           │               │   ├── TestLoopDetection.java
│           │               │   ├── TestLoopDetection2.java
│           │               │   ├── TestLoopDetection3.java
│           │               │   ├── TestLoopDetection4.java
│           │               │   ├── TestLoopDetection5.java
│           │               │   ├── TestLoopRestore.java
│           │               │   ├── TestLoopRestore2.java
│           │               │   ├── TestLoopRestore3.java
│           │               │   ├── TestMultiEntryLoop.java
│           │               │   ├── TestMultiEntryLoop2.java
│           │               │   ├── TestNestedLoops.java
│           │               │   ├── TestNestedLoops2.java
│           │               │   ├── TestNestedLoops3.java
│           │               │   ├── TestNestedLoops4.java
│           │               │   ├── TestNestedLoops5.java
│           │               │   ├── TestNotIndexedLoop.java
│           │               │   ├── TestSequentialLoops.java
│           │               │   ├── TestSequentialLoops2.java
│           │               │   ├── TestSynchronizedInEndlessLoop.java
│           │               │   ├── TestTryCatchInLoop.java
│           │               │   └── TestTryCatchInLoop2.java
│           │               ├── names/
│           │               │   ├── TestCaseSensitiveChecks.java
│           │               │   ├── TestClassNameWithInvalidChar.java
│           │               │   ├── TestClassNamesCollision.java
│           │               │   ├── TestClassNamesCollision2.java
│           │               │   ├── TestCollisionWithJavaLangClasses.java
│           │               │   ├── TestConstructorArgNames.java
│           │               │   ├── TestDefPkgRename.java
│           │               │   ├── TestDuplicateVarNames.java
│           │               │   ├── TestDuplicatedNames.java
│           │               │   ├── TestFieldCollideWithPackage.java
│           │               │   ├── TestLocalVarCollideWithPackage.java
│           │               │   ├── TestNameAssign2.java
│           │               │   ├── TestReservedClassNames.java
│           │               │   ├── TestReservedNames.java
│           │               │   ├── TestReservedPackageNames.java
│           │               │   ├── TestSameMethodsNames.java
│           │               │   ├── pkg/
│           │               │   │   ├── a.java
│           │               │   │   └── b.java
│           │               │   └── pkg2/
│           │               │       ├── System.java
│           │               │       └── TestCls.java
│           │               ├── others/
│           │               │   ├── TestAllNops.java
│           │               │   ├── TestArgInline.java
│           │               │   ├── TestBadClassAccessModifiers.java
│           │               │   ├── TestBadMethodAccessModifiers.java
│           │               │   ├── TestCastOfNull.java
│           │               │   ├── TestClassGen.java
│           │               │   ├── TestClassImplementsSignature.java
│           │               │   ├── TestClassReGen.java
│           │               │   ├── TestCodeComments.java
│           │               │   ├── TestCodeComments2.java
│           │               │   ├── TestCodeComments2a.java
│           │               │   ├── TestCodeCommentsMultiline.java
│           │               │   ├── TestCodeCommentsOverride.java
│           │               │   ├── TestCodeMetadata.java
│           │               │   ├── TestCodeMetadata2.java
│           │               │   ├── TestCodeMetadata3.java
│           │               │   ├── TestConstReplace.java
│           │               │   ├── TestConstStringConcat.java
│           │               │   ├── TestConstructor.java
│           │               │   ├── TestConstructor2.java
│           │               │   ├── TestConstructorBranched.java
│           │               │   ├── TestConstructorBranched2.java
│           │               │   ├── TestConstructorBranched3.java
│           │               │   ├── TestDeadBlockReferencesStart.java
│           │               │   ├── TestDeboxing.java
│           │               │   ├── TestDeboxing2.java
│           │               │   ├── TestDeboxing3.java
│           │               │   ├── TestDeboxing4.java
│           │               │   ├── TestDeboxing5.java
│           │               │   ├── TestDefConstructorNotRemoved.java
│           │               │   ├── TestDefConstructorWithAnnotation.java
│           │               │   ├── TestDuplicateCast.java
│           │               │   ├── TestExplicitOverride.java
│           │               │   ├── TestFieldAccessReorder.java
│           │               │   ├── TestFieldInit2.java
│           │               │   ├── TestFieldInit3.java
│           │               │   ├── TestFieldInitInTryCatch.java
│           │               │   ├── TestFieldInitNegative.java
│           │               │   ├── TestFieldInitOrder.java
│           │               │   ├── TestFieldInitOrder2.java
│           │               │   ├── TestFieldInitOrderStatic.java
│           │               │   ├── TestFieldUsageMove.java
│           │               │   ├── TestFixClassAccessModifiers.java
│           │               │   ├── TestFloatValue.java
│           │               │   ├── TestIfInTry.java
│           │               │   ├── TestIfTryInCatch.java
│           │               │   ├── TestIncorrectFieldSignature.java
│           │               │   ├── TestIncorrectMethodSignature.java
│           │               │   ├── TestInlineVarArg.java
│           │               │   ├── TestInsnsBeforeSuper.java
│           │               │   ├── TestInsnsBeforeSuper2.java
│           │               │   ├── TestInsnsBeforeThis.java
│           │               │   ├── TestInterfaceDefaultMethod.java
│           │               │   ├── TestInvalidExceptions.java
│           │               │   ├── TestInvalidExceptions2.java
│           │               │   ├── TestIssue13a.java
│           │               │   ├── TestIssue13b.java
│           │               │   ├── TestJavaDup2x2.java
│           │               │   ├── TestJavaDupInsn.java
│           │               │   ├── TestJavaJSR.java
│           │               │   ├── TestJavaSwap.java
│           │               │   ├── TestJsonOutput.java
│           │               │   ├── TestLoopInTry.java
│           │               │   ├── TestMethodParametersAttribute.java
│           │               │   ├── TestMissingExceptions.java
│           │               │   ├── TestMoveInline.java
│           │               │   ├── TestMultipleNOPs.java
│           │               │   ├── TestN21.java
│           │               │   ├── TestNullInline.java
│           │               │   ├── TestOverridePackagePrivateMethod.java
│           │               │   ├── TestOverridePrivateMethod.java
│           │               │   ├── TestOverrideStaticMethod.java
│           │               │   ├── TestOverrideWithSameName.java
│           │               │   ├── TestOverrideWithTwoBases.java
│           │               │   ├── TestOverrideWithTwoBases2.java
│           │               │   ├── TestPrimitiveCasts.java
│           │               │   ├── TestPrimitiveCasts2.java
│           │               │   ├── TestRedundantBrackets.java
│           │               │   ├── TestRedundantReturn.java
│           │               │   ├── TestReturnWrapping.java
│           │               │   ├── TestShadowingSuperMember.java
│           │               │   ├── TestStaticFieldsInit.java
│           │               │   ├── TestStaticMethod.java
│           │               │   ├── TestStringBuilderElimination.java
│           │               │   ├── TestStringBuilderElimination2.java
│           │               │   ├── TestStringBuilderElimination3.java
│           │               │   ├── TestStringBuilderElimination4Neg.java
│           │               │   ├── TestStringBuilderElimination5.java
│           │               │   ├── TestStringConcatJava11.java
│           │               │   ├── TestStringConcatWithoutResult.java
│           │               │   ├── TestStringConstructor.java
│           │               │   ├── TestSuperLoop.java
│           │               │   ├── TestSyntheticConstructor.java
│           │               │   ├── TestThrows.java
│           │               │   ├── TestUsageApacheHttpClient.java
│           │               │   ├── TestWrongCode.java
│           │               │   └── TestWrongCode2.java
│           │               ├── rename/
│           │               │   ├── TestAnonymousInline.java
│           │               │   ├── TestConstReplace.java
│           │               │   ├── TestFieldRenameFormat.java
│           │               │   ├── TestFieldWithGenericRename.java
│           │               │   ├── TestRenameEnum.java
│           │               │   ├── TestUserRenames.java
│           │               │   └── TestUsingSourceFileName.java
│           │               ├── special/
│           │               │   └── TestPackageInfoSupport.java
│           │               ├── switches/
│           │               │   ├── TestSwitch.java
│           │               │   ├── TestSwitch2.java
│           │               │   ├── TestSwitch3.java
│           │               │   ├── TestSwitch4.java
│           │               │   ├── TestSwitchBreak.java
│           │               │   ├── TestSwitchBreak2.java
│           │               │   ├── TestSwitchBreak3.java
│           │               │   ├── TestSwitchBreak4.java
│           │               │   ├── TestSwitchContinue.java
│           │               │   ├── TestSwitchFallThrough.java
│           │               │   ├── TestSwitchInLoop.java
│           │               │   ├── TestSwitchInLoop2.java
│           │               │   ├── TestSwitchInLoop3.java
│           │               │   ├── TestSwitchInLoop4.java
│           │               │   ├── TestSwitchInLoop5.java
│           │               │   ├── TestSwitchInLoop6.java
│           │               │   ├── TestSwitchInLoop7.java
│           │               │   ├── TestSwitchInLoop8.java
│           │               │   ├── TestSwitchInLoop9.java
│           │               │   ├── TestSwitchLabels.java
│           │               │   ├── TestSwitchNoDefault.java
│           │               │   ├── TestSwitchOverStrings.java
│           │               │   ├── TestSwitchOverStrings2.java
│           │               │   ├── TestSwitchOverStrings3.java
│           │               │   ├── TestSwitchReturnFromCase.java
│           │               │   ├── TestSwitchReturnFromCase2.java
│           │               │   ├── TestSwitchSimple.java
│           │               │   ├── TestSwitchWithFallThroughCase.java
│           │               │   ├── TestSwitchWithFallThroughCase2.java
│           │               │   ├── TestSwitchWithThrow.java
│           │               │   └── TestSwitchWithTryCatch.java
│           │               ├── synchronize/
│           │               │   ├── TestNestedSynchronize.java
│           │               │   ├── TestSynchronized.java
│           │               │   ├── TestSynchronized2.java
│           │               │   ├── TestSynchronized3.java
│           │               │   ├── TestSynchronized4.java
│           │               │   ├── TestSynchronized5.java
│           │               │   └── TestSynchronized6.java
│           │               ├── trycatch/
│           │               │   ├── TestEmptyCatch.java
│           │               │   ├── TestEmptyFinally.java
│           │               │   ├── TestFinally.java
│           │               │   ├── TestFinally2.java
│           │               │   ├── TestFinally3.java
│           │               │   ├── TestFinallyExtract.java
│           │               │   ├── TestIfInTryCatch.java
│           │               │   ├── TestInlineInCatch.java
│           │               │   ├── TestLoopInTryCatch.java
│           │               │   ├── TestMultiExceptionCatch.java
│           │               │   ├── TestMultiExceptionCatch2.java
│           │               │   ├── TestMultiExceptionCatchSameJump.java
│           │               │   ├── TestNestedTryCatch.java
│           │               │   ├── TestNestedTryCatch2.java
│           │               │   ├── TestNestedTryCatch3.java
│           │               │   ├── TestNestedTryCatch4.java
│           │               │   ├── TestNestedTryCatch5.java
│           │               │   ├── TestTryAfterDeclaration.java
│           │               │   ├── TestTryCatch.java
│           │               │   ├── TestTryCatch10.java
│           │               │   ├── TestTryCatch11.java
│           │               │   ├── TestTryCatch2.java
│           │               │   ├── TestTryCatch6.java
│           │               │   ├── TestTryCatch7.java
│           │               │   ├── TestTryCatch8.java
│           │               │   ├── TestTryCatch9.java
│           │               │   ├── TestTryCatchFinally.java
│           │               │   ├── TestTryCatchFinally10.java
│           │               │   ├── TestTryCatchFinally11.java
│           │               │   ├── TestTryCatchFinally12.java
│           │               │   ├── TestTryCatchFinally13.java
│           │               │   ├── TestTryCatchFinally14.java
│           │               │   ├── TestTryCatchFinally15.java
│           │               │   ├── TestTryCatchFinally16.java
│           │               │   ├── TestTryCatchFinally17.java
│           │               │   ├── TestTryCatchFinally18.java
│           │               │   ├── TestTryCatchFinally19.java
│           │               │   ├── TestTryCatchFinally2.java
│           │               │   ├── TestTryCatchFinally3.java
│           │               │   ├── TestTryCatchFinally4.java
│           │               │   ├── TestTryCatchFinally5.java
│           │               │   ├── TestTryCatchFinally6.java
│           │               │   ├── TestTryCatchFinally7.java
│           │               │   ├── TestTryCatchFinally8.java
│           │               │   ├── TestTryCatchFinally9.java
│           │               │   ├── TestTryCatchInIf.java
│           │               │   ├── TestTryCatchInIf2.java
│           │               │   ├── TestTryCatchLastInsn.java
│           │               │   ├── TestTryCatchMultiException.java
│           │               │   ├── TestTryCatchMultiException2.java
│           │               │   ├── TestTryCatchNoMoveExc.java
│           │               │   ├── TestTryCatchNoMoveExc2.java
│           │               │   ├── TestTryCatchStartOnMove.java
│           │               │   ├── TestTryWithEmptyCatch.java
│           │               │   ├── TestTryWithEmptyCatchTriple.java
│           │               │   ├── TestTryWithResources.java
│           │               │   ├── TestUnreachableCatch.java
│           │               │   └── TestUnreachableCatch2.java
│           │               ├── types/
│           │               │   ├── TestArrayTypes.java
│           │               │   ├── TestConstInline.java
│           │               │   ├── TestConstTypeInference.java
│           │               │   ├── TestFieldAccess.java
│           │               │   ├── TestFieldCast.java
│           │               │   ├── TestGenerics.java
│           │               │   ├── TestGenerics2.java
│           │               │   ├── TestGenerics3.java
│           │               │   ├── TestGenerics4.java
│           │               │   ├── TestGenerics5.java
│           │               │   ├── TestGenerics6.java
│           │               │   ├── TestGenerics7.java
│           │               │   ├── TestGenerics8.java
│           │               │   ├── TestGenericsInFullInnerCls.java
│           │               │   ├── TestInterfacesCast.java
│           │               │   ├── TestLongCast.java
│           │               │   ├── TestPrimitiveConversion.java
│           │               │   ├── TestPrimitiveConversion2.java
│           │               │   ├── TestPrimitivesInIf.java
│           │               │   ├── TestTypeInheritance.java
│           │               │   ├── TestTypeResolver.java
│           │               │   ├── TestTypeResolver10.java
│           │               │   ├── TestTypeResolver11.java
│           │               │   ├── TestTypeResolver12.java
│           │               │   ├── TestTypeResolver13.java
│           │               │   ├── TestTypeResolver14.java
│           │               │   ├── TestTypeResolver15.java
│           │               │   ├── TestTypeResolver16.java
│           │               │   ├── TestTypeResolver17.java
│           │               │   ├── TestTypeResolver18.java
│           │               │   ├── TestTypeResolver19.java
│           │               │   ├── TestTypeResolver2.java
│           │               │   ├── TestTypeResolver20.java
│           │               │   ├── TestTypeResolver21.java
│           │               │   ├── TestTypeResolver22.java
│           │               │   ├── TestTypeResolver23.java
│           │               │   ├── TestTypeResolver24.java
│           │               │   ├── TestTypeResolver25.java
│           │               │   ├── TestTypeResolver26.java
│           │               │   ├── TestTypeResolver3.java
│           │               │   ├── TestTypeResolver4.java
│           │               │   ├── TestTypeResolver5.java
│           │               │   ├── TestTypeResolver6.java
│           │               │   ├── TestTypeResolver6a.java
│           │               │   ├── TestTypeResolver7.java
│           │               │   ├── TestTypeResolver8.java
│           │               │   └── TestTypeResolver9.java
│           │               ├── usethis/
│           │               │   ├── TestDontInlineThis.java
│           │               │   ├── TestInlineThis.java
│           │               │   ├── TestInlineThis2.java
│           │               │   └── TestRedundantThis.java
│           │               └── variables/
│           │                   ├── TestThisBranchDup.java
│           │                   ├── TestVariables2.java
│           │                   ├── TestVariables3.java
│           │                   ├── TestVariables4.java
│           │                   ├── TestVariables5.java
│           │                   ├── TestVariables6.java
│           │                   ├── TestVariablesDeclAnnotation.java
│           │                   ├── TestVariablesDefinitions.java
│           │                   ├── TestVariablesDefinitions2.java
│           │                   ├── TestVariablesGeneric.java
│           │                   ├── TestVariablesIfElseChain.java
│           │                   ├── TestVariablesInInlinedAssign.java
│           │                   ├── TestVariablesInLoop.java
│           │                   └── TestVariablesUsageWithLoops.java
│           ├── raung/
│           │   ├── enums/
│           │   │   └── TestEnums11.raung
│           │   ├── java8/
│           │   │   └── TestLambdaInstance3.raung
│           │   ├── jbc/
│           │   │   └── TestStackConvert.raung
│           │   ├── loops/
│           │   │   └── TestLoopRestore2.raung
│           │   └── others/
│           │       ├── TestClassImplementsSignature.raung
│           │       ├── TestJavaDup2x2.raung
│           │       ├── TestJavaJSR.raung
│           │       ├── TestJavaSwap.raung
│           │       └── TestStringConcatJava11.raung
│           ├── resources/
│           │   ├── logback.xml
│           │   ├── manifest/
│           │   │   ├── IllegalCharsForGradleWrapper.xml
│           │   │   ├── MinSdkVersion25.xml
│           │   │   ├── OptionalTargetSdkVersion.xml
│           │   │   └── strings.xml
│           │   ├── mockito-extensions/
│           │   │   └── org.mockito.plugins.MockMaker
│           │   └── test-samples/
│           │       ├── app-with-fake-dex.apk
│           │       └── hello.dex
│           └── smali/
│               ├── arith/
│               │   ├── TestArithConst.smali
│               │   ├── TestArithNot.smali
│               │   └── TestXor.smali
│               ├── arrays/
│               │   ├── TestArrayFillWithMove/
│               │   │   └── TestCls.smali
│               │   ├── TestArrayInitField2.smali
│               │   └── TestFillArrayData/
│               │       └── TestCls.smali
│               ├── conditions/
│               │   ├── TestBooleanToByte.smali
│               │   ├── TestBooleanToChar.smali
│               │   ├── TestBooleanToDouble.smali
│               │   ├── TestBooleanToFloat.smali
│               │   ├── TestBooleanToInt.smali
│               │   ├── TestBooleanToInt2.smali
│               │   ├── TestBooleanToLong.smali
│               │   ├── TestBooleanToShort.smali
│               │   ├── TestComplexIf.smali
│               │   ├── TestComplexIf2.smali
│               │   ├── TestComplexIf3.smali
│               │   ├── TestComplexIf4.smali
│               │   ├── TestConditions18.smali
│               │   ├── TestConditions21.smali
│               │   ├── TestIfAndSwitch.smali
│               │   ├── TestIfCodeStyle.smali
│               │   ├── TestIfCodeStyle2.smali
│               │   ├── TestIfElseAndConditionIntermediateInstruction.smali
│               │   ├── TestInnerAssign3.smali
│               │   ├── TestOutBlock.smali
│               │   ├── TestTernary4.smali
│               │   ├── TestTernaryInIf2.smali
│               │   ├── TestTernaryInIf3.smali
│               │   └── TestTernaryOneBranchInConstructor2.smali
│               ├── debuginfo/
│               │   └── TestVariablesNames.smali
│               ├── enums/
│               │   ├── TestEnumKotlinEntries.smali
│               │   ├── TestEnumObfuscated.smali
│               │   ├── TestEnumUsesOtherEnum.smali
│               │   ├── TestEnumWithFields.smali
│               │   ├── TestEnums10.smali
│               │   ├── TestEnums5.smali
│               │   ├── TestEnums8.smali
│               │   ├── TestEnumsWithStaticFields.smali
│               │   └── TestSwitchOverEnum/
│               │       ├── Count.smali
│               │       └── TestSwitchOverEnum.smali
│               ├── fallback/
│               │   └── TestFallbackManyNops.smali
│               ├── generics/
│               │   ├── TestClassSignature.smali
│               │   ├── TestMethodOverride.smali
│               │   ├── TestMissingGenericsTypes2.smali
│               │   └── TestSyntheticOverride/
│               │       ├── KotlinFunction1.smali
│               │       └── TestSyntheticOverride.smali
│               ├── inline/
│               │   ├── TestGetterInlineNegative.smali
│               │   ├── TestInline7.smali
│               │   ├── TestInstanceLambda/
│               │   │   ├── Lambda.smali
│               │   │   └── TestCls.smali
│               │   ├── TestMethodInline/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   ├── TestOverlapSyntheticMethods.smali
│               │   ├── TestOverrideBridgeMerge.smali
│               │   ├── TestSyntheticClassInline/
│               │   │   ├── A.smali
│               │   │   └── B.smali
│               │   └── TestSyntheticInline3/
│               │       ├── KotlinFunction1.smali
│               │       ├── TestSyntheticInline3$onCreate$1.smali
│               │       └── TestSyntheticInline3.smali
│               ├── inner/
│               │   ├── TestAnonymousClass14/
│               │   │   ├── OuterCls$1.smali
│               │   │   ├── OuterCls$TestCls.smali
│               │   │   └── OuterCls.smali
│               │   ├── TestAnonymousClass19/
│               │   │   ├── ATestCls.smali
│               │   │   └── Lambda$TestCls$1.smali
│               │   ├── TestIncorrectAnonymousClass/
│               │   │   ├── TestCls$1.smali
│               │   │   └── TestCls.smali
│               │   ├── TestInnerClassFakeSyntheticConstructor.smali
│               │   ├── TestInnerClassSyntheticRename.smali
│               │   ├── TestNestedAnonymousClass/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   └── TestSyntheticMthRename/
│               │       ├── TestCls$A.smali
│               │       ├── TestCls$I.smali
│               │       └── TestCls.smali
│               ├── invoke/
│               │   ├── TestCastInOverloadedInvoke2.smali
│               │   ├── TestConstructorWithMoves.smali
│               │   ├── TestPolymorphicInvoke.smali
│               │   └── TestRawCustomInvoke.smali
│               ├── loops/
│               │   ├── TestBreakInLoop6.smali
│               │   ├── TestEndlessLoop2.smali
│               │   ├── TestIfInLoop4.smali
│               │   ├── TestLoopCondition5.smali
│               │   ├── TestLoopRestore.smali
│               │   ├── TestLoopRestore3.smali
│               │   ├── TestMultiEntryLoop.smali
│               │   └── TestMultiEntryLoop2.smali
│               ├── names/
│               │   ├── TestCaseSensitiveChecks/
│               │   │   ├── 1.smali
│               │   │   └── 2.smali
│               │   ├── TestClassNameWithInvalidChar/
│               │   │   ├── a.smali
│               │   │   └── b.smali
│               │   ├── TestDefPkgRename/
│               │   │   ├── a.smali
│               │   │   └── b.smali
│               │   ├── TestDuplicatedNames.smali
│               │   ├── TestFieldCollideWithPackage/
│               │   │   ├── 1.smali
│               │   │   └── 2.smali
│               │   ├── TestLocalVarCollideWithPackage/
│               │   │   ├── 1.smali
│               │   │   ├── 2.smali
│               │   │   └── 3.smali
│               │   ├── TestReservedClassNames.smali
│               │   ├── TestReservedNames.smali
│               │   └── TestReservedPackageNames/
│               │       └── a.smali
│               ├── others/
│               │   ├── TestAllNops.smali
│               │   ├── TestBadClassAccessModifiers/
│               │   │   ├── A.smali
│               │   │   ├── B$BB$BBB.smali
│               │   │   ├── B$BB.smali
│               │   │   └── B.smali
│               │   ├── TestBadMethodAccessModifiers/
│               │   │   ├── TestCls$A.smali
│               │   │   ├── TestCls$B.smali
│               │   │   └── TestCls.smali
│               │   ├── TestConstructor.smali
│               │   ├── TestConstructor2/
│               │   │   ├── A.smali
│               │   │   └── TestConstructor2.smali
│               │   ├── TestConstructorBranched.smali
│               │   ├── TestConstructorBranched2.smali
│               │   ├── TestConstructorBranched3.smali
│               │   ├── TestDeadBlockReferencesStart.smali
│               │   ├── TestExplicitOverride.smali
│               │   ├── TestFieldInitOrder2.smali
│               │   ├── TestFieldUsageMove.smali
│               │   ├── TestFixClassAccessModifiers/
│               │   │   ├── Cls.smali
│               │   │   ├── InnerCls.smali
│               │   │   └── TestCls.smali
│               │   ├── TestIncorrectFieldSignature.smali
│               │   ├── TestIncorrectMethodSignature.smali
│               │   ├── TestInlineVarArg.smali
│               │   ├── TestInsnsBeforeSuper/
│               │   │   ├── A.smali
│               │   │   └── B.smali
│               │   ├── TestInsnsBeforeSuper2.smali
│               │   ├── TestInsnsBeforeThis.smali
│               │   ├── TestInvalidExceptions.smali
│               │   ├── TestInvalidExceptions2.smali
│               │   ├── TestMissingExceptions.smali
│               │   ├── TestMoveInline.smali
│               │   ├── TestMultipleNOPs/
│               │   │   └── test.smali
│               │   ├── TestN21.smali
│               │   ├── TestOverridePackagePrivateMethod/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   ├── TestOverrideWithSameName/
│               │   │   ├── A.smali
│               │   │   ├── B.smali
│               │   │   └── C.smali
│               │   ├── TestSuperLoop/
│               │   │   ├── A.smali
│               │   │   └── B.smali
│               │   ├── TestSyntheticConstructor/
│               │   │   ├── BuggyConstructor.smali
│               │   │   └── Test.smali
│               │   └── TestUsageApacheHttpClient.smali
│               ├── rename/
│               │   └── TestUsingSourceFileName/
│               │       └── b.smali
│               ├── special/
│               │   └── TestPackageInfoSupport/
│               │       ├── pkg1.smali
│               │       ├── pkg2.smali
│               │       └── pkg3.smali
│               ├── switches/
│               │   ├── TestSwitchOverStrings3.smali
│               │   └── TestSwitchOverStrings4.smali
│               ├── synchronize/
│               │   ├── TestNestedSynchronize.smali
│               │   ├── TestSynchronized4.smali
│               │   ├── TestSynchronized5.smali
│               │   └── TestSynchronized6.smali
│               ├── trycatch/
│               │   ├── TestEmptyCatch.smali
│               │   ├── TestFinally3.smali
│               │   ├── TestLoopInTryCatch.smali
│               │   ├── TestMultiExceptionCatchSameJump.smali
│               │   ├── TestNestedTryCatch4.smali
│               │   ├── TestNestedTryCatch5.smali
│               │   ├── TestTryCatch10.smali
│               │   ├── TestTryCatchFinally10.smali
│               │   ├── TestTryCatchFinally15.smali
│               │   ├── TestTryCatchLastInsn.smali
│               │   ├── TestTryCatchMultiException2.smali
│               │   ├── TestTryCatchNoMoveExc.smali
│               │   ├── TestTryCatchNoMoveExc2.smali
│               │   ├── TestTryCatchStartOnMove.smali
│               │   ├── TestTryWithEmptyCatchTriple.smali
│               │   └── TestUnreachableCatch.smali
│               ├── types/
│               │   ├── TestConstInline.smali
│               │   ├── TestGenerics2.smali
│               │   ├── TestGenericsInFullInnerCls/
│               │   │   ├── FieldCls.smali
│               │   │   ├── ba.smali
│               │   │   ├── bb.smali
│               │   │   ├── bc.smali
│               │   │   └── n.smali
│               │   ├── TestPrimitiveConversion.smali
│               │   ├── TestPrimitiveConversion2.smali
│               │   ├── TestTypeResolver10.smali
│               │   ├── TestTypeResolver14.smali
│               │   ├── TestTypeResolver15.smali
│               │   ├── TestTypeResolver16.smali
│               │   ├── TestTypeResolver17.smali
│               │   ├── TestTypeResolver20/
│               │   │   ├── Sequence.smali
│               │   │   └── TestTypeResolver20.smali
│               │   ├── TestTypeResolver21.smali
│               │   ├── TestTypeResolver24/
│               │   │   ├── T1.smali
│               │   │   ├── T2.smali
│               │   │   └── Test1.smali
│               │   ├── TestTypeResolver25.smali
│               │   ├── TestTypeResolver5.smali
│               │   └── TestTypeResolver8/
│               │       ├── A.smali
│               │       ├── B.smali
│               │       └── TestCls.smali
│               └── variables/
│                   ├── TestThisBranchDup.smali
│                   ├── TestVariables6.smali
│                   ├── TestVariablesGeneric.smali
│                   └── TestVariablesInLoop.smali
├── jadx-gui/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jadx/
│       │   │       └── gui/
│       │   │           ├── JadxGUI.java
│       │   │           ├── JadxWrapper.java
│       │   │           ├── cache/
│       │   │           │   ├── code/
│       │   │           │   │   ├── CodeCacheMode.java
│       │   │           │   │   ├── CodeStringCache.java
│       │   │           │   │   ├── FixedCodeCache.java
│       │   │           │   │   └── disk/
│       │   │           │   │       ├── BufferCodeCache.java
│       │   │           │   │       ├── CodeMetadataAdapter.java
│       │   │           │   │       ├── DiskCodeCache.java
│       │   │           │   │       └── adapters/
│       │   │           │   │           ├── ArgTypeAdapter.java
│       │   │           │   │           ├── ClassNodeAdapter.java
│       │   │           │   │           ├── CodeAnnotationAdapter.java
│       │   │           │   │           ├── DataAdapter.java
│       │   │           │   │           ├── DataAdapterHelper.java
│       │   │           │   │           ├── FieldNodeAdapter.java
│       │   │           │   │           ├── InsnCodeOffsetAdapter.java
│       │   │           │   │           ├── MethodNodeAdapter.java
│       │   │           │   │           ├── NodeDeclareRefAdapter.java
│       │   │           │   │           ├── NodeEndAdapter.java
│       │   │           │   │           ├── VarNodeAdapter.java
│       │   │           │   │           └── VarRefAdapter.java
│       │   │           │   ├── manager/
│       │   │           │   │   ├── CacheEntry.java
│       │   │           │   │   └── CacheManager.java
│       │   │           │   └── usage/
│       │   │           │       ├── CachedMethodRef.java
│       │   │           │       ├── ClsUsageData.java
│       │   │           │       ├── CollectUsageData.java
│       │   │           │       ├── FldRef.java
│       │   │           │       ├── FldUsageData.java
│       │   │           │       ├── MthRef.java
│       │   │           │       ├── MthUsageData.java
│       │   │           │       ├── RawUsageData.java
│       │   │           │       ├── UsageCacheMode.java
│       │   │           │       ├── UsageData.java
│       │   │           │       ├── UsageFileAdapter.java
│       │   │           │       └── UsageInfoCache.java
│       │   │           ├── device/
│       │   │           │   ├── debugger/
│       │   │           │   │   ├── ArtAdapter.java
│       │   │           │   │   ├── BreakpointManager.java
│       │   │           │   │   ├── DbgUtils.java
│       │   │           │   │   ├── DebugController.java
│       │   │           │   │   ├── DebugSettings.java
│       │   │           │   │   ├── EventListenerAdapter.java
│       │   │           │   │   ├── LogcatController.java
│       │   │           │   │   ├── RegisterObserver.java
│       │   │           │   │   ├── RuntimeType.java
│       │   │           │   │   ├── SmaliDebugger.java
│       │   │           │   │   ├── SmaliDebuggerException.java
│       │   │           │   │   ├── SuspendInfo.java
│       │   │           │   │   └── smali/
│       │   │           │   │       ├── RegisterInfo.java
│       │   │           │   │       ├── Smali.java
│       │   │           │   │       ├── SmaliMethodNode.java
│       │   │           │   │       ├── SmaliRegister.java
│       │   │           │   │       └── SmaliWriter.java
│       │   │           │   └── protocol/
│       │   │           │       ├── ADB.java
│       │   │           │       ├── ADBDevice.java
│       │   │           │       └── ADBDeviceInfo.java
│       │   │           ├── events/
│       │   │           │   ├── JadxGuiEvents.java
│       │   │           │   ├── services/
│       │   │           │   │   └── RenameService.java
│       │   │           │   └── types/
│       │   │           │       ├── JadxGuiEventsImpl.java
│       │   │           │       └── TreeUpdate.java
│       │   │           ├── jobs/
│       │   │           │   ├── BackgroundExecutor.java
│       │   │           │   ├── Cancelable.java
│       │   │           │   ├── CancelableBackgroundTask.java
│       │   │           │   ├── DecompileTask.java
│       │   │           │   ├── ExportTask.java
│       │   │           │   ├── IBackgroundTask.java
│       │   │           │   ├── ITaskInfo.java
│       │   │           │   ├── ITaskProgress.java
│       │   │           │   ├── InternalTask.java
│       │   │           │   ├── LoadTask.java
│       │   │           │   ├── ProcessResult.java
│       │   │           │   ├── ProgressUpdater.java
│       │   │           │   ├── SilentTask.java
│       │   │           │   ├── SimpleTask.java
│       │   │           │   ├── TaskProgress.java
│       │   │           │   ├── TaskStatus.java
│       │   │           │   └── TaskWithExtraOnFinish.java
│       │   │           ├── logs/
│       │   │           │   ├── ILogListener.java
│       │   │           │   ├── IssuesListener.java
│       │   │           │   ├── LimitedQueue.java
│       │   │           │   ├── LogAppender.java
│       │   │           │   ├── LogCollector.java
│       │   │           │   ├── LogEvent.java
│       │   │           │   ├── LogMode.java
│       │   │           │   ├── LogOptions.java
│       │   │           │   └── LogPanel.java
│       │   │           ├── plugins/
│       │   │           │   ├── context/
│       │   │           │   │   ├── CodePopupAction.java
│       │   │           │   │   ├── CommonGuiPluginsContext.java
│       │   │           │   │   ├── GuiPluginContext.java
│       │   │           │   │   ├── GuiSettingsContext.java
│       │   │           │   │   ├── ITreeInputCategory.java
│       │   │           │   │   └── TreePopupMenuEntry.java
│       │   │           │   ├── mappings/
│       │   │           │   │   ├── JInputMapping.java
│       │   │           │   │   └── RenameMappingsGui.java
│       │   │           │   └── quark/
│       │   │           │       ├── QuarkDialog.java
│       │   │           │       ├── QuarkManager.java
│       │   │           │       ├── QuarkReportData.java
│       │   │           │       ├── QuarkReportNode.java
│       │   │           │       └── QuarkReportPanel.java
│       │   │           ├── report/
│       │   │           │   ├── ExceptionData.java
│       │   │           │   ├── ExceptionDialog.java
│       │   │           │   └── JadxExceptionHandler.java
│       │   │           ├── search/
│       │   │           │   ├── ISearchMethod.java
│       │   │           │   ├── ISearchProvider.java
│       │   │           │   ├── SearchJob.java
│       │   │           │   ├── SearchSettings.java
│       │   │           │   ├── SearchTask.java
│       │   │           │   └── providers/
│       │   │           │       ├── BaseSearchProvider.java
│       │   │           │       ├── ClassSearchProvider.java
│       │   │           │       ├── CodeSearchProvider.java
│       │   │           │       ├── CommentSearchProvider.java
│       │   │           │       ├── FieldSearchProvider.java
│       │   │           │       ├── MergedSearchProvider.java
│       │   │           │       ├── MethodSearchProvider.java
│       │   │           │       ├── ResourceFilter.java
│       │   │           │       └── ResourceSearchProvider.java
│       │   │           ├── settings/
│       │   │           │   ├── JadxConfigExcludeExport.java
│       │   │           │   ├── JadxGUIArgs.java
│       │   │           │   ├── JadxProject.java
│       │   │           │   ├── JadxSettings.java
│       │   │           │   ├── JadxSettingsData.java
│       │   │           │   ├── JadxUpdateChannel.java
│       │   │           │   ├── LineNumbersMode.java
│       │   │           │   ├── TabStateViewAdapter.java
│       │   │           │   ├── WindowLocation.java
│       │   │           │   ├── XposedCodegenLanguage.java
│       │   │           │   ├── data/
│       │   │           │   │   ├── ITabStatePersist.java
│       │   │           │   │   ├── ProjectData.java
│       │   │           │   │   ├── SaveOptionEnum.java
│       │   │           │   │   ├── ShortcutsWrapper.java
│       │   │           │   │   ├── TabViewState.java
│       │   │           │   │   └── ViewPoint.java
│       │   │           │   ├── font/
│       │   │           │   │   ├── FontAdapter.java
│       │   │           │   │   └── FontSettings.java
│       │   │           │   └── ui/
│       │   │           │       ├── JadxSettingsWindow.java
│       │   │           │       ├── SettingsGroup.java
│       │   │           │       ├── SettingsTree.java
│       │   │           │       ├── SettingsTreeNode.java
│       │   │           │       ├── SubSettingsGroup.java
│       │   │           │       ├── cache/
│       │   │           │       │   ├── CacheSettingsGroup.java
│       │   │           │       │   ├── CachesTable.java
│       │   │           │       │   ├── CachesTableModel.java
│       │   │           │       │   ├── CachesTableRenderer.java
│       │   │           │       │   └── TableRow.java
│       │   │           │       ├── font/
│       │   │           │       │   ├── FontChooserHack.java
│       │   │           │       │   └── JadxFontDialog.java
│       │   │           │       ├── plugins/
│       │   │           │       │   ├── AvailablePluginNode.java
│       │   │           │       │   ├── BasePluginListNode.java
│       │   │           │       │   ├── InstallPluginDialog.java
│       │   │           │       │   ├── InstalledPluginNode.java
│       │   │           │       │   ├── LoadedPluginNode.java
│       │   │           │       │   ├── PluginAction.java
│       │   │           │       │   ├── PluginSettings.java
│       │   │           │       │   ├── PluginSettingsGroup.java
│       │   │           │       │   └── TitleNode.java
│       │   │           │       └── shortcut/
│       │   │           │           ├── ShortcutEdit.java
│       │   │           │           └── ShortcutsSettingsGroup.java
│       │   │           ├── tree/
│       │   │           │   └── TreeExpansionService.java
│       │   │           ├── treemodel/
│       │   │           │   ├── ApkSignatureNode.java
│       │   │           │   ├── CodeNode.java
│       │   │           │   ├── JClass.java
│       │   │           │   ├── JEditableNode.java
│       │   │           │   ├── JField.java
│       │   │           │   ├── JInputFile.java
│       │   │           │   ├── JInputFiles.java
│       │   │           │   ├── JInputSmaliFile.java
│       │   │           │   ├── JInputs.java
│       │   │           │   ├── JLoadableNode.java
│       │   │           │   ├── JMethod.java
│       │   │           │   ├── JNode.java
│       │   │           │   ├── JPackage.java
│       │   │           │   ├── JRenameNode.java
│       │   │           │   ├── JResSearchNode.java
│       │   │           │   ├── JResource.java
│       │   │           │   ├── JRoot.java
│       │   │           │   ├── JSources.java
│       │   │           │   ├── JSubResource.java
│       │   │           │   ├── JVariable.java
│       │   │           │   └── TextNode.java
│       │   │           ├── ui/
│       │   │           │   ├── HeapUsageBar.java
│       │   │           │   ├── JadxEventQueue.java
│       │   │           │   ├── MainDropTarget.java
│       │   │           │   ├── MainWindow.java
│       │   │           │   ├── action/
│       │   │           │   │   ├── ActionCategory.java
│       │   │           │   │   ├── ActionModel.java
│       │   │           │   │   ├── CodeAreaAction.java
│       │   │           │   │   ├── CommentSearchAction.java
│       │   │           │   │   ├── FindUsageAction.java
│       │   │           │   │   ├── FridaAction.java
│       │   │           │   │   ├── GoToDeclarationAction.java
│       │   │           │   │   ├── IShortcutAction.java
│       │   │           │   │   ├── JNodeAction.java
│       │   │           │   │   ├── JadxAutoCompletion.java
│       │   │           │   │   ├── JadxGuiAction.java
│       │   │           │   │   ├── JsonPrettifyAction.java
│       │   │           │   │   ├── RenameAction.java
│       │   │           │   │   ├── ViewCallGraphAction.java
│       │   │           │   │   ├── ViewClassInheritanceGraphAction.java
│       │   │           │   │   ├── ViewClassMethodGraphAction.java
│       │   │           │   │   ├── ViewControlFlowGraphAction.java
│       │   │           │   │   ├── ViewRawControlFlowGraphAction.java
│       │   │           │   │   ├── ViewRegionControlFlowGraphAction.java
│       │   │           │   │   └── XposedAction.kt
│       │   │           │   ├── cellrenders/
│       │   │           │   │   ├── MethodRenderHelper.java
│       │   │           │   │   ├── MethodsListRenderer.java
│       │   │           │   │   └── PathHighlightTreeCellRenderer.java
│       │   │           │   ├── codearea/
│       │   │           │   │   ├── AbstractCodeArea.java
│       │   │           │   │   ├── AbstractCodeContentPanel.java
│       │   │           │   │   ├── BinaryContentPanel.java
│       │   │           │   │   ├── ClassCodeContentPanel.java
│       │   │           │   │   ├── CodeArea.java
│       │   │           │   │   ├── CodeContentPanel.java
│       │   │           │   │   ├── CodeLinkGenerator.java
│       │   │           │   │   ├── CodePanel.java
│       │   │           │   │   ├── CommentAction.java
│       │   │           │   │   ├── ConvertNumberAction.java
│       │   │           │   │   ├── EditorViewState.java
│       │   │           │   │   ├── JNodePopupBuilder.java
│       │   │           │   │   ├── JNodePopupListener.java
│       │   │           │   │   ├── JadxTokenMaker.java
│       │   │           │   │   ├── MouseHoverHighlighter.java
│       │   │           │   │   ├── SearchBar.java
│       │   │           │   │   ├── SimpleTokenMaker.java
│       │   │           │   │   ├── SmaliArea.java
│       │   │           │   │   ├── SmaliFoldParser.java
│       │   │           │   │   ├── SmaliTokenMaker.java
│       │   │           │   │   ├── SourceLineFormatter.java
│       │   │           │   │   ├── UsageDialogPlusAction.java
│       │   │           │   │   ├── mode/
│       │   │           │   │   │   └── JCodeMode.java
│       │   │           │   │   ├── sync/
│       │   │           │   │   │   ├── CodeMetadataRange.java
│       │   │           │   │   │   ├── CodePanelSyncee.java
│       │   │           │   │   │   ├── CodePanelSyncer.java
│       │   │           │   │   │   ├── CodePanelSyncerAbstractFactory.java
│       │   │           │   │   │   ├── CodeSyncHighlighter.java
│       │   │           │   │   │   ├── DebugLineJavaSyncer.java
│       │   │           │   │   │   ├── DebugLineSmaliSyncer.java
│       │   │           │   │   │   ├── IToJavaSyncStrategy.java
│       │   │           │   │   │   ├── IToSmaliSyncStrategy.java
│       │   │           │   │   │   ├── InsnOffsetJavaSyncer.java
│       │   │           │   │   │   ├── InsnOffsetSmaliSyncer.java
│       │   │           │   │   │   ├── JavaSyncer.java
│       │   │           │   │   │   ├── SmaliSyncer.java
│       │   │           │   │   │   └── fallback/
│       │   │           │   │   │       ├── AbstractCodeAreaLine.java
│       │   │           │   │   │       ├── AbstractCodeAreaToken.java
│       │   │           │   │   │       ├── ClassDeclaration.java
│       │   │           │   │   │       ├── FallbackSyncException.java
│       │   │           │   │   │       ├── FallbackSyncer.java
│       │   │           │   │   │       ├── IDeclaration.java
│       │   │           │   │   │       ├── JavaCodeAreaLine.java
│       │   │           │   │   │       ├── JavaCodeAreaToken.java
│       │   │           │   │   │       ├── MethodDeclaration.java
│       │   │           │   │   │       ├── SmaliAreaLine.java
│       │   │           │   │   │       └── SmaliAreaToken.java
│       │   │           │   │   └── theme/
│       │   │           │   │       ├── DynamicCodeAreaTheme.java
│       │   │           │   │       ├── EditorThemeManager.java
│       │   │           │   │       ├── FallbackEditorTheme.java
│       │   │           │   │       ├── IEditorTheme.java
│       │   │           │   │       ├── RSTABundledTheme.java
│       │   │           │   │       ├── RSTAThemeXML.java
│       │   │           │   │       └── ThemeIdAndName.java
│       │   │           │   ├── dialog/
│       │   │           │   │   ├── ADBDialog.java
│       │   │           │   │   ├── AboutDialog.java
│       │   │           │   │   ├── CallGraphDialog.java
│       │   │           │   │   ├── CharsetDialog.java
│       │   │           │   │   ├── ClassInheritanceGraphDialog.java
│       │   │           │   │   ├── ClassMethodGraphDialog.java
│       │   │           │   │   ├── CommentDialog.java
│       │   │           │   │   ├── CommonDialog.java
│       │   │           │   │   ├── CommonSearchDialog.java
│       │   │           │   │   ├── ControlFlowGraphDialog.java
│       │   │           │   │   ├── ExcludePkgDialog.java
│       │   │           │   │   ├── GotoAddressDialog.java
│       │   │           │   │   ├── GraphDialog.java
│       │   │           │   │   ├── LogViewerDialog.java
│       │   │           │   │   ├── MethodsDialog.java
│       │   │           │   │   ├── RenameDialog.java
│       │   │           │   │   ├── SearchDialog.java
│       │   │           │   │   ├── SetValueDialog.java
│       │   │           │   │   ├── UsageDialog.java
│       │   │           │   │   └── UsageDialogPlus.java
│       │   │           │   ├── export/
│       │   │           │   │   ├── ExportProjectDialog.java
│       │   │           │   │   └── ExportProjectProperties.java
│       │   │           │   ├── filedialog/
│       │   │           │   │   ├── CustomFileChooser.java
│       │   │           │   │   ├── CustomFileDialog.java
│       │   │           │   │   ├── FileDialogWrapper.java
│       │   │           │   │   ├── FileNameMultiExtensionFilter.java
│       │   │           │   │   └── FileOpenMode.java
│       │   │           │   ├── hexviewer/
│       │   │           │   │   ├── BinEdCodeAreaAssessor.java
│       │   │           │   │   ├── HexEditorHeader.java
│       │   │           │   │   ├── HexInspectorPanel.java
│       │   │           │   │   ├── HexPreviewPanel.java
│       │   │           │   │   ├── HexSearchBar.java
│       │   │           │   │   └── search/
│       │   │           │   │       ├── BinarySearch.java
│       │   │           │   │       ├── SearchCondition.java
│       │   │           │   │       ├── SearchParameters.java
│       │   │           │   │       └── service/
│       │   │           │   │           ├── BinarySearchService.java
│       │   │           │   │           └── BinarySearchServiceImpl.java
│       │   │           │   ├── menu/
│       │   │           │   │   ├── HiddenMenuItem.java
│       │   │           │   │   ├── JadxMenu.java
│       │   │           │   │   └── JadxMenuBar.java
│       │   │           │   ├── panel/
│       │   │           │   │   ├── ContentPanel.java
│       │   │           │   │   ├── FontPanel.java
│       │   │           │   │   ├── HtmlPanel.java
│       │   │           │   │   ├── IDebugController.java
│       │   │           │   │   ├── IViewStateSupport.java
│       │   │           │   │   ├── ImagePanel.java
│       │   │           │   │   ├── IssuesPanel.java
│       │   │           │   │   ├── JDebuggerPanel.java
│       │   │           │   │   ├── LogcatPanel.java
│       │   │           │   │   ├── ProgressPanel.java
│       │   │           │   │   ├── SimpleCodePanel.java
│       │   │           │   │   └── UndisplayedStringsPanel.java
│       │   │           │   ├── popupmenu/
│       │   │           │   │   ├── JClassExportType.java
│       │   │           │   │   ├── JClassPopupMenu.java
│       │   │           │   │   ├── JPackagePopupMenu.java
│       │   │           │   │   ├── JResourcePopupMenu.java
│       │   │           │   │   ├── RecentProjectsMenuListener.java
│       │   │           │   │   └── VarTreePopupMenu.java
│       │   │           │   ├── startpage/
│       │   │           │   │   ├── RecentProjectItem.java
│       │   │           │   │   ├── RecentProjectListCellRenderer.java
│       │   │           │   │   ├── StartPageNode.java
│       │   │           │   │   └── StartPagePanel.java
│       │   │           │   ├── tab/
│       │   │           │   │   ├── EditorSyncManager.java
│       │   │           │   │   ├── ITabStatesListener.java
│       │   │           │   │   ├── LogTabStates.java
│       │   │           │   │   ├── NavigationController.java
│       │   │           │   │   ├── QuickTabsBaseNode.java
│       │   │           │   │   ├── QuickTabsBookmarkParentNode.java
│       │   │           │   │   ├── QuickTabsChildNode.java
│       │   │           │   │   ├── QuickTabsOpenParentNode.java
│       │   │           │   │   ├── QuickTabsParentNode.java
│       │   │           │   │   ├── QuickTabsPinParentNode.java
│       │   │           │   │   ├── QuickTabsTree.java
│       │   │           │   │   ├── TabBlueprint.java
│       │   │           │   │   ├── TabComponent.java
│       │   │           │   │   ├── TabbedPane.java
│       │   │           │   │   ├── TabsController.java
│       │   │           │   │   └── dnd/
│       │   │           │   │       ├── TabDndController.java
│       │   │           │   │       ├── TabDndGestureListener.java
│       │   │           │   │       ├── TabDndGhostPane.java
│       │   │           │   │       ├── TabDndGhostType.java
│       │   │           │   │       ├── TabDndSourceListener.java
│       │   │           │   │       ├── TabDndTargetListener.java
│       │   │           │   │       └── TabDndTransferable.java
│       │   │           │   └── treenodes/
│       │   │           │       ├── SummaryNode.java
│       │   │           │       └── UndisplayedStringsNode.java
│       │   │           ├── update/
│       │   │           │   └── JadxUpdate.kt
│       │   │           └── utils/
│       │   │               ├── CacheObject.java
│       │   │               ├── CaretPositionFix.java
│       │   │               ├── CertificateManager.java
│       │   │               ├── DefaultPopupMenuListener.java
│       │   │               ├── DesktopEntryUtils.java
│       │   │               ├── FontUtils.java
│       │   │               ├── HexUtils.java
│       │   │               ├── ILoadListener.java
│       │   │               ├── IOUtils.java
│       │   │               ├── Icons.java
│       │   │               ├── IconsCache.java
│       │   │               ├── JNodeCache.java
│       │   │               ├── JumpManager.java
│       │   │               ├── JumpPosition.java
│       │   │               ├── LafManager.java
│       │   │               ├── LangLocale.java
│       │   │               ├── Link.java
│       │   │               ├── NLS.java
│       │   │               ├── ObjectPool.java
│       │   │               ├── OverlayIcon.java
│       │   │               ├── PathTypeAdapter.java
│       │   │               ├── RectangleTypeAdapter.java
│       │   │               ├── RelativePathTypeAdapter.java
│       │   │               ├── SimpleListener.java
│       │   │               ├── TextStandardActions.java
│       │   │               ├── UiUtils.java
│       │   │               ├── cache/
│       │   │               │   └── ValueCache.java
│       │   │               ├── dbg/
│       │   │               │   └── UIWatchDog.java
│       │   │               ├── files/
│       │   │               │   └── JadxFiles.java
│       │   │               ├── fileswatcher/
│       │   │               │   ├── FilesWatcher.java
│       │   │               │   └── LiveReloadWorker.java
│       │   │               ├── layout/
│       │   │               │   └── WrapLayout.java
│       │   │               ├── pkgs/
│       │   │               │   ├── JRenamePackage.java
│       │   │               │   └── PackageHelper.java
│       │   │               ├── plugins/
│       │   │               │   ├── CloseablePlugins.java
│       │   │               │   ├── CollectPlugins.java
│       │   │               │   ├── PluginWithOptions.java
│       │   │               │   ├── SettingsGroupPluginWrap.java
│       │   │               │   └── TreeInputsHelper.java
│       │   │               ├── res/
│       │   │               │   └── ResTableHelper.java
│       │   │               ├── rx/
│       │   │               │   ├── CustomDisposable.java
│       │   │               │   ├── DebounceUpdate.java
│       │   │               │   └── RxUtils.java
│       │   │               ├── shortcut/
│       │   │               │   ├── Shortcut.java
│       │   │               │   └── ShortcutsController.java
│       │   │               ├── tools/
│       │   │               │   └── SyncNLSLines.java
│       │   │               └── ui/
│       │   │                   ├── ActionHandler.java
│       │   │                   ├── DocumentUpdateListener.java
│       │   │                   ├── FileOpenerHelper.java
│       │   │                   ├── MousePressedHandler.java
│       │   │                   ├── NodeLabel.java
│       │   │                   ├── SimpleMenuItem.java
│       │   │                   └── ZoomActions.java
│       │   └── resources/
│       │       ├── files/
│       │       │   └── jadx-gui.desktop.tmpl
│       │       └── i18n/
│       │           ├── Messages_de_DE.properties
│       │           ├── Messages_en_US.properties
│       │           ├── Messages_es_ES.properties
│       │           ├── Messages_id_ID.properties
│       │           ├── Messages_ko_KR.properties
│       │           ├── Messages_pt_BR.properties
│       │           ├── Messages_ru_RU.properties
│       │           ├── Messages_zh_CN.properties
│       │           └── Messages_zh_TW.properties
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       └── gui/
│           │           ├── TestI18n.java
│           │           ├── device/
│           │           │   └── debugger/
│           │           │       └── smali/
│           │           │           └── DbgSmaliTest.java
│           │           ├── ui/
│           │           │   └── codearea/
│           │           │       └── ConvertNumberActionTest.java
│           │           ├── update/
│           │           │   └── TestJadxUpdate.kt
│           │           └── utils/
│           │               ├── CertificateManagerTest.java
│           │               ├── JumpManagerTest.java
│           │               ├── cache/
│           │               │   └── code/
│           │               │       ├── DiskCodeCacheTest.java
│           │               │       └── disk/
│           │               │           └── adapters/
│           │               │               └── DataAdapterHelperTest.java
│           │               └── pkgs/
│           │                   └── TestJRenamePackage.java
│           ├── resources/
│           │   ├── certificate-test/
│           │   │   ├── CERT.DSA
│           │   │   ├── CERT.RSA
│           │   │   └── EMPTY.txt
│           │   └── logback-test.xml
│           └── smali/
│               ├── params.smali
│               └── switch.smali
├── jadx-plugins/
│   ├── jadx-aab-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── aab/
│   │           │                   ├── AabInputPlugin.java
│   │           │                   ├── ResTableProtoParserProvider.java
│   │           │                   ├── factories/
│   │           │                   │   ├── ProtoAppDependenciesResContainerFactory.java
│   │           │                   │   ├── ProtoAssetsConfigResContainerFactory.java
│   │           │                   │   ├── ProtoBundleConfigResContainerFactory.java
│   │           │                   │   ├── ProtoNativeConfigResContainerFactory.java
│   │           │                   │   ├── ProtoTableResContainerFactory.java
│   │           │                   │   └── ProtoXmlResContainerFactory.java
│   │           │                   └── parsers/
│   │           │                       ├── CommonProtoParser.java
│   │           │                       ├── ResTableProtoParser.java
│   │           │                       └── ResXmlProtoParser.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-apkm-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── apkm/
│   │           │                   ├── ApkmCustomCodeInput.kt
│   │           │                   ├── ApkmCustomResourcesLoader.kt
│   │           │                   ├── ApkmInputPlugin.kt
│   │           │                   ├── ApkmManifest.kt
│   │           │                   └── ApkmUtils.kt
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-apks-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── apks/
│   │           │                   ├── ApksCustomCodeInput.kt
│   │           │                   ├── ApksCustomResourcesLoader.kt
│   │           │                   └── ApksInputPlugin.kt
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-dex-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── input/
│   │       │   │               └── dex/
│   │       │   │                   ├── DexException.java
│   │       │   │                   ├── DexFileLoader.java
│   │       │   │                   ├── DexInputOptions.java
│   │       │   │                   ├── DexInputPlugin.java
│   │       │   │                   ├── DexLoadResult.java
│   │       │   │                   ├── DexReader.java
│   │       │   │                   ├── insns/
│   │       │   │                   │   ├── DexInsnData.java
│   │       │   │                   │   ├── DexInsnFormat.java
│   │       │   │                   │   ├── DexInsnInfo.java
│   │       │   │                   │   ├── DexInsnMnemonics.java
│   │       │   │                   │   ├── DexOpcodes.java
│   │       │   │                   │   └── payloads/
│   │       │   │                   │       └── DexArrayPayload.java
│   │       │   │                   ├── sections/
│   │       │   │                   │   ├── DexAnnotationsConvert.java
│   │       │   │                   │   ├── DexClassData.java
│   │       │   │                   │   ├── DexCodeReader.java
│   │       │   │                   │   ├── DexConsts.java
│   │       │   │                   │   ├── DexFieldData.java
│   │       │   │                   │   ├── DexHeader.java
│   │       │   │                   │   ├── DexHeaderV41.java
│   │       │   │                   │   ├── DexMethodData.java
│   │       │   │                   │   ├── DexMethodProto.java
│   │       │   │                   │   ├── DexMethodRef.java
│   │       │   │                   │   ├── SectionReader.java
│   │       │   │                   │   ├── annotations/
│   │       │   │                   │   │   ├── AnnotationsParser.java
│   │       │   │                   │   │   ├── AnnotationsUtils.java
│   │       │   │                   │   │   └── EncodedValueParser.java
│   │       │   │                   │   └── debuginfo/
│   │       │   │                   │       ├── DebugInfoParser.java
│   │       │   │                   │       └── DexLocalVar.java
│   │       │   │                   ├── smali/
│   │       │   │                   │   ├── InsnFormatter.java
│   │       │   │                   │   ├── InsnFormatterInfo.java
│   │       │   │                   │   ├── SmaliCodeWriter.java
│   │       │   │                   │   ├── SmaliInsnFormat.java
│   │       │   │                   │   └── SmaliPrinter.java
│   │       │   │                   └── utils/
│   │       │   │                       ├── DataReader.java
│   │       │   │                       ├── DexCheckSum.java
│   │       │   │                       ├── IDexData.java
│   │       │   │                       ├── Leb128.java
│   │       │   │                       ├── MUtf8.java
│   │       │   │                       ├── SimpleDexData.java
│   │       │   │                       └── SmaliUtils.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── dex/
│   │           │                   ├── DexInputPluginTest.java
│   │           │                   └── utils/
│   │           │                       └── SmaliTestUtils.java
│   │           └── resources/
│   │               └── samples/
│   │                   ├── app-with-fake-dex.apk
│   │                   ├── hello.dex
│   │                   └── test.smali
│   ├── jadx-input-api/
│   │   ├── README.md
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── jadx/
│   │                   └── api/
│   │                       └── plugins/
│   │                           └── input/
│   │                               ├── ICodeLoader.java
│   │                               ├── JadxCodeInput.java
│   │                               ├── data/
│   │                               │   ├── AccessFlags.java
│   │                               │   ├── AccessFlagsScope.java
│   │                               │   ├── ICallSite.java
│   │                               │   ├── ICatch.java
│   │                               │   ├── IClassData.java
│   │                               │   ├── ICodeReader.java
│   │                               │   ├── IDebugInfo.java
│   │                               │   ├── IFieldData.java
│   │                               │   ├── IFieldRef.java
│   │                               │   ├── ILocalVar.java
│   │                               │   ├── IMethodData.java
│   │                               │   ├── IMethodHandle.java
│   │                               │   ├── IMethodProto.java
│   │                               │   ├── IMethodRef.java
│   │                               │   ├── IResourceData.java
│   │                               │   ├── ISeqConsumer.java
│   │                               │   ├── ITry.java
│   │                               │   ├── MethodHandleType.java
│   │                               │   ├── annotations/
│   │                               │   │   ├── AnnotationVisibility.java
│   │                               │   │   ├── EncodedType.java
│   │                               │   │   ├── EncodedValue.java
│   │                               │   │   ├── IAnnotation.java
│   │                               │   │   └── JadxAnnotation.java
│   │                               │   ├── attributes/
│   │                               │   │   ├── IJadxAttrType.java
│   │                               │   │   ├── IJadxAttribute.java
│   │                               │   │   ├── JadxAttrType.java
│   │                               │   │   ├── PinnedAttribute.java
│   │                               │   │   └── types/
│   │                               │   │       ├── AnnotationDefaultAttr.java
│   │                               │   │       ├── AnnotationDefaultClassAttr.java
│   │                               │   │       ├── AnnotationMethodParamsAttr.java
│   │                               │   │       ├── AnnotationsAttr.java
│   │                               │   │       ├── ExceptionsAttr.java
│   │                               │   │       ├── InnerClassesAttr.java
│   │                               │   │       ├── InnerClsInfo.java
│   │                               │   │       ├── MethodParametersAttr.java
│   │                               │   │       ├── SignatureAttr.java
│   │                               │   │       └── SourceFileAttr.java
│   │                               │   └── impl/
│   │                               │       ├── CallSite.java
│   │                               │       ├── CatchData.java
│   │                               │       ├── DebugInfo.java
│   │                               │       ├── EmptyCodeLoader.java
│   │                               │       ├── FieldRefHandle.java
│   │                               │       ├── InputUtils.java
│   │                               │       ├── JadxFieldRef.java
│   │                               │       ├── ListConsumer.java
│   │                               │       ├── MergeCodeLoader.java
│   │                               │       ├── MethodRefHandle.java
│   │                               │       └── TryData.java
│   │                               └── insns/
│   │                                   ├── InsnData.java
│   │                                   ├── InsnIndexType.java
│   │                                   ├── Opcode.java
│   │                                   └── custom/
│   │                                       ├── IArrayPayload.java
│   │                                       ├── ICustomPayload.java
│   │                                       ├── ISwitchPayload.java
│   │                                       └── impl/
│   │                                           └── SwitchPayload.java
│   ├── jadx-java-convert/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── javaconvert/
│   │           │                   ├── AsmUtils.java
│   │           │                   ├── ConvertResult.java
│   │           │                   ├── D8Converter.java
│   │           │                   ├── DxConverter.java
│   │           │                   ├── JavaConvertLoader.java
│   │           │                   ├── JavaConvertOptions.java
│   │           │                   └── JavaConvertPlugin.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-java-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── input/
│   │       │   │               └── java/
│   │       │   │                   ├── JavaClassReader.java
│   │       │   │                   ├── JavaInputLoader.java
│   │       │   │                   ├── JavaInputPlugin.java
│   │       │   │                   ├── JavaLoadResult.java
│   │       │   │                   ├── data/
│   │       │   │                   │   ├── ClassOffsets.java
│   │       │   │                   │   ├── ConstPoolReader.java
│   │       │   │                   │   ├── ConstantType.java
│   │       │   │                   │   ├── DataReader.java
│   │       │   │                   │   ├── JavaClassData.java
│   │       │   │                   │   ├── JavaFieldData.java
│   │       │   │                   │   ├── JavaMethodData.java
│   │       │   │                   │   ├── JavaMethodProto.java
│   │       │   │                   │   ├── JavaMethodRef.java
│   │       │   │                   │   ├── attributes/
│   │       │   │                   │   │   ├── AttributesReader.java
│   │       │   │                   │   │   ├── EncodedValueReader.java
│   │       │   │                   │   │   ├── IJavaAttribute.java
│   │       │   │                   │   │   ├── IJavaAttributeReader.java
│   │       │   │                   │   │   ├── JavaAttrStorage.java
│   │       │   │                   │   │   ├── JavaAttrType.java
│   │       │   │                   │   │   ├── debuginfo/
│   │       │   │                   │   │   │   ├── JavaLocalVar.java
│   │       │   │                   │   │   │   ├── LineNumberTableAttr.java
│   │       │   │                   │   │   │   ├── LocalVarTypesAttr.java
│   │       │   │                   │   │   │   └── LocalVarsAttr.java
│   │       │   │                   │   │   ├── stack/
│   │       │   │                   │   │   │   ├── StackFrame.java
│   │       │   │                   │   │   │   ├── StackFrameType.java
│   │       │   │                   │   │   │   ├── StackMapTableReader.java
│   │       │   │                   │   │   │   ├── StackValueType.java
│   │       │   │                   │   │   │   └── TypeInfoReader.java
│   │       │   │                   │   │   └── types/
│   │       │   │                   │   │       ├── CodeAttr.java
│   │       │   │                   │   │       ├── ConstValueAttr.java
│   │       │   │                   │   │       ├── IgnoredAttr.java
│   │       │   │                   │   │       ├── JavaAnnotationDefaultAttr.java
│   │       │   │                   │   │       ├── JavaAnnotationsAttr.java
│   │       │   │                   │   │       ├── JavaBootstrapMethodsAttr.java
│   │       │   │                   │   │       ├── JavaExceptionsAttr.java
│   │       │   │                   │   │       ├── JavaInnerClsAttr.java
│   │       │   │                   │   │       ├── JavaMethodParametersAttr.java
│   │       │   │                   │   │       ├── JavaParamAnnsAttr.java
│   │       │   │                   │   │       ├── JavaSignatureAttr.java
│   │       │   │                   │   │       ├── JavaSourceFileAttr.java
│   │       │   │                   │   │       ├── StackMapTableAttr.java
│   │       │   │                   │   │       └── data/
│   │       │   │                   │   │           └── RawBootstrapMethod.java
│   │       │   │                   │   └── code/
│   │       │   │                   │       ├── ArrayType.java
│   │       │   │                   │       ├── CodeDecodeState.java
│   │       │   │                   │       ├── JavaCodeReader.java
│   │       │   │                   │       ├── JavaInsnData.java
│   │       │   │                   │       ├── JavaInsnInfo.java
│   │       │   │                   │       ├── JavaInsnsRegister.java
│   │       │   │                   │       ├── StackState.java
│   │       │   │                   │       ├── decoders/
│   │       │   │                   │       │   ├── IJavaInsnDecoder.java
│   │       │   │                   │       │   ├── InvokeDecoder.java
│   │       │   │                   │       │   ├── LoadConstDecoder.java
│   │       │   │                   │       │   ├── LookupSwitchDecoder.java
│   │       │   │                   │       │   ├── TableSwitchDecoder.java
│   │       │   │                   │       │   └── WideDecoder.java
│   │       │   │                   │       └── trycatch/
│   │       │   │                   │           ├── JavaSingleCatch.java
│   │       │   │                   │           └── JavaTryData.java
│   │       │   │                   └── utils/
│   │       │   │                       ├── DescriptorParser.java
│   │       │   │                       ├── DisasmUtils.java
│   │       │   │                       ├── JavaClassParseException.java
│   │       │   │                       └── ModifiedUTF8Decoder.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           └── java/
│   │               └── jadx/
│   │                   └── plugins/
│   │                       └── input/
│   │                           └── java/
│   │                               ├── CustomLoadTest.java
│   │                               └── utils/
│   │                                   ├── DescriptorParserTest.java
│   │                                   └── ModifiedUTF8DecoderTest.java
│   ├── jadx-kotlin-metadata/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── kotlin/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── kotlin/
│   │       │   │               └── metadata/
│   │       │   │                   ├── KotlinMetadataOptions.kt
│   │       │   │                   ├── KotlinMetadataPlugin.kt
│   │       │   │                   ├── model/
│   │       │   │                   │   ├── KotlinMetadataConsts.kt
│   │       │   │                   │   └── KotlinRenameResults.kt
│   │       │   │                   ├── pass/
│   │       │   │                   │   ├── KotlinMetadataDecompilePass.kt
│   │       │   │                   │   └── KotlinMetadataPreparePass.kt
│   │       │   │                   └── utils/
│   │       │   │                       ├── KmClassWrapper.kt
│   │       │   │                       ├── KmExt.kt
│   │       │   │                       ├── KotlinMetadataExt.kt
│   │       │   │                       ├── KotlinMetadataUtils.kt
│   │       │   │                       ├── KotlinUtils.kt
│   │       │   │                       ├── LogExt.kt
│   │       │   │                       └── ToStringParser.kt
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── kotlin/
│   │           │   ├── TestJavaParser.kt
│   │           │   └── TestKotlinMetadata.kt
│   │           └── smali/
│   │               └── deobf/
│   │                   └── TestKotlinMetadata/
│   │                       ├── a$b.smali
│   │                       └── a.smali
│   ├── jadx-kotlin-source-debug-extension/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── kotlin/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── kotlin/
│   │       │   │               └── smap/
│   │       │   │                   ├── KotlinSmapOptions.kt
│   │       │   │                   ├── KotlinSmapPlugin.kt
│   │       │   │                   ├── model/
│   │       │   │                   │   ├── ClassAliasRename.kt
│   │       │   │                   │   ├── Constants.kt
│   │       │   │                   │   ├── SMAP.kt
│   │       │   │                   │   └── SourceInfo.kt
│   │       │   │                   ├── pass/
│   │       │   │                   │   └── KotlinSourceDebugExtensionPass.kt
│   │       │   │                   └── utils/
│   │       │   │                       ├── Extensions.kt
│   │       │   │                       ├── KotlinSmapUtils.kt
│   │       │   │                       └── SMAPParser.kt
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── kotlin/
│   │           │   └── TestSourceDebugExtension.kt
│   │           └── smali/
│   │               └── deobf/
│   │                   └── TestKotlinSourceDebugExtension/
│   │                       └── C6.smali
│   ├── jadx-raung-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── raung/
│   │           │                   ├── RaungConvert.java
│   │           │                   └── RaungInputPlugin.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   ├── jadx-rename-mappings/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── jadx/
│   │       │   │       └── plugins/
│   │       │   │           └── mappings/
│   │       │   │               ├── RenameMappingsData.java
│   │       │   │               ├── RenameMappingsOptions.java
│   │       │   │               ├── RenameMappingsPlugin.java
│   │       │   │               ├── load/
│   │       │   │               │   ├── ApplyMappingsPass.java
│   │       │   │               │   ├── CodeMappingsPass.java
│   │       │   │               │   └── LoadMappingsPass.java
│   │       │   │               ├── save/
│   │       │   │               │   └── MappingExporter.java
│   │       │   │               └── utils/
│   │       │   │                   ├── DalvikToJavaBytecodeUtils.java
│   │       │   │                   └── VariablesUtils.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jadx.api.plugins.JadxPlugin
│   │       └── test/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── mappings/
│   │           │               ├── BaseRenameMappingsTest.java
│   │           │               └── TestInnerClassRename.java
│   │           └── resources/
│   │               ├── inner-cls-rename/
│   │               │   ├── base.smali
│   │               │   ├── enigma.mapping
│   │               │   └── inner.smali
│   │               └── logback-test.xml
│   ├── jadx-smali-input/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── jadx/
│   │           │       └── plugins/
│   │           │           └── input/
│   │           │               └── smali/
│   │           │                   ├── SmaliConvert.java
│   │           │                   ├── SmaliInputOptions.java
│   │           │                   ├── SmaliInputPlugin.java
│   │           │                   └── SmaliUtils.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jadx.api.plugins.JadxPlugin
│   └── jadx-xapk-input/
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               ├── java/
│               │   └── jadx/
│               │       └── plugins/
│               │           └── input/
│               │               └── xapk/
│               │                   ├── XApkCustomInput.java
│               │                   ├── XApkInputPlugin.java
│               │                   ├── XApkLoader.java
│               │                   └── data/
│               │                       ├── SplitApk.java
│               │                       ├── XApkData.java
│               │                       └── XApkManifest.java
│               └── resources/
│                   └── META-INF/
│                       └── services/
│                           └── jadx.api.plugins.JadxPlugin
├── jadx-plugins-tools/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── jadx/
│       │           └── plugins/
│       │               └── tools/
│       │                   ├── JadxExternalPluginsLoader.java
│       │                   ├── JadxPluginsList.java
│       │                   ├── JadxPluginsTools.java
│       │                   ├── data/
│       │                   │   ├── JadxInstalledPlugins.java
│       │                   │   ├── JadxPluginListCache.java
│       │                   │   ├── JadxPluginListEntry.java
│       │                   │   ├── JadxPluginMetadata.java
│       │                   │   └── JadxPluginUpdate.java
│       │                   ├── resolvers/
│       │                   │   ├── IJadxPluginResolver.java
│       │                   │   ├── README.md
│       │                   │   ├── ResolversRegistry.java
│       │                   │   ├── file/
│       │                   │   │   └── LocalFileResolver.java
│       │                   │   └── github/
│       │                   │       ├── GithubReleaseResolver.java
│       │                   │       ├── GithubTools.java
│       │                   │       ├── LocationInfo.java
│       │                   │       └── data/
│       │                   │           ├── Asset.java
│       │                   │           └── Release.java
│       │                   └── utils/
│       │                       ├── PluginFiles.java
│       │                       └── PluginUtils.java
│       └── test/
│           ├── java/
│           │   └── jadx/
│           │       └── plugins/
│           │           └── tools/
│           │               └── resolvers/
│           │                   └── github/
│           │                       └── GithubToolsTest.java
│           └── resources/
│               └── github/
│                   └── plugins-list-good.json
└── settings.gradle.kts
Download .txt
Showing preview only (1,429K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (17124 symbols across 1888 files)

FILE: jadx-cli/src/main/java/jadx/cli/JCommanderWrapper.java
  class JCommanderWrapper (line 29) | public class JCommanderWrapper {
    method JCommanderWrapper (line 33) | public JCommanderWrapper(JadxCLIArgs argsObj) {
    method parse (line 41) | public boolean parse(String[] args) {
    method overrideProvided (line 53) | public void overrideProvided(JadxCLIArgs obj) {
    method processCommands (line 62) | public boolean processCommands() {
    method applyFiles (line 73) | private void applyFiles(JadxCLIArgs argsObj) {
    method overrideProperty (line 80) | private static void overrideProperty(JadxCLIArgs obj, ParameterDescrip...
    method mergeValues (line 87) | @SuppressWarnings({ "rawtypes", "unchecked" })
    method fixArgsForEmptySaveConfig (line 102) | private String[] fixArgsForEmptySaveConfig(String[] args) {
    method insertEmptyArg (line 123) | private static String[] insertEmptyArg(String[] args, int i, boolean a...
    method printUsage (line 133) | public void printUsage() {
    method printUsage (line 168) | public void printUsage(JCommander subCommander) {
    method printOptions (line 174) | private static int printOptions(JCommander jc, PrintStream out, boolea...
    method getValueDesc (line 230) | private static @Nullable String getValueDesc(ParameterDescription p) {
    method getFields (line 238) | private static List<Field> getFields(Class<?> clazz) {
    method getDefaultValue (line 247) | @Nullable
    method addSpaces (line 269) | private static void addSpaces(StringBuilder str, int count) {
    method appendPluginOptions (line 275) | private String appendPluginOptions(int maxNamesLen) {
    method appendPlugin (line 299) | private boolean appendPlugin(JadxPluginInfo pluginInfo, JadxPluginOpti...

FILE: jadx-cli/src/main/java/jadx/cli/JadxAppCommon.java
  class JadxAppCommon (line 13) | public class JadxAppCommon {
    method applyEnvVars (line 15) | public static void applyEnvVars(JadxArgs jadxArgs) {

FILE: jadx-cli/src/main/java/jadx/cli/JadxCLI.java
  class JadxCLI (line 21) | public class JadxCLI {
    method main (line 24) | public static void main(String[] args) {
    method execute (line 33) | public static int execute(String[] args) {
    method execute (line 37) | public static int execute(String[] args, @Nullable Consumer<JadxArgs> ...
    method buildArgs (line 59) | private static JadxArgs buildArgs(JadxCLIArgs cliArgs) {
    method runSave (line 70) | private static int runSave(JadxArgs jadxArgs, JadxCLIArgs cliArgs) {
    method initCodeWriterProvider (line 90) | private static void initCodeWriterProvider(JadxArgs jadxArgs) {
    method checkForErrors (line 102) | private static boolean checkForErrors(JadxDecompiler jadx) {
    method save (line 121) | private static void save(JadxDecompiler jadx) {

FILE: jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java
  class JadxCLIArgs (line 47) | public class JadxCLIArgs implements IJadxConfig {
    method processArgs (line 359) | public boolean processArgs(String[] args) {
    method processArgs (line 363) | public static <T extends JadxCLIArgs> @Nullable T processArgs(
    method applyArgs (line 406) | private static <T extends JadxCLIArgs> void applyArgs(T argsObj) {
    method process (line 412) | public boolean process(JCommanderWrapper jcw) {
    method printFilesAndDirs (line 433) | private static void printFilesAndDirs(String defaultConfigFileName) {
    method verify (line 441) | public void verify() {
    method saveConfig (line 447) | private static <T extends JadxCLIArgs> void saveConfig(T argsObj, @Nul...
    method toJadxArgs (line 456) | public JadxArgs toJadxArgs() {
    method buildEnumSetForRenameFlags (line 517) | private EnumSet<RenameEnum> buildEnumSetForRenameFlags() {
    method getFiles (line 523) | public List<String> getFiles() {
    method setFiles (line 527) | public void setFiles(List<String> files) {
    method getOutDir (line 531) | public String getOutDir() {
    method getOutDirSrc (line 535) | public String getOutDirSrc() {
    method getOutDirRes (line 539) | public String getOutDirRes() {
    method getSingleClass (line 543) | public String getSingleClass() {
    method getSingleClassOutput (line 547) | public String getSingleClassOutput() {
    method isSkipResources (line 551) | public boolean isSkipResources() {
    method setSkipResources (line 555) | public void setSkipResources(boolean skipResources) {
    method isSkipSources (line 559) | public boolean isSkipSources() {
    method setSkipSources (line 563) | public void setSkipSources(boolean skipSources) {
    method getThreadsCount (line 567) | public int getThreadsCount() {
    method setThreadsCount (line 571) | public void setThreadsCount(int threadsCount) {
    method isFallbackMode (line 575) | public boolean isFallbackMode() {
    method isUseDx (line 579) | public boolean isUseDx() {
    method setUseDx (line 583) | public void setUseDx(boolean useDx) {
    method getDecompilationMode (line 587) | public DecompilationMode getDecompilationMode() {
    method setDecompilationMode (line 591) | public void setDecompilationMode(DecompilationMode decompilationMode) {
    method isShowInconsistentCode (line 595) | public boolean isShowInconsistentCode() {
    method setShowInconsistentCode (line 599) | public void setShowInconsistentCode(boolean showInconsistentCode) {
    method isUseImports (line 603) | public boolean isUseImports() {
    method setUseImports (line 607) | public void setUseImports(boolean useImports) {
    method isDebugInfo (line 611) | public boolean isDebugInfo() {
    method setDebugInfo (line 615) | public void setDebugInfo(boolean debugInfo) {
    method isAddDebugLines (line 619) | public boolean isAddDebugLines() {
    method setAddDebugLines (line 623) | public void setAddDebugLines(boolean addDebugLines) {
    method isInlineAnonymousClasses (line 627) | public boolean isInlineAnonymousClasses() {
    method setInlineAnonymousClasses (line 631) | public void setInlineAnonymousClasses(boolean inlineAnonymousClasses) {
    method isInlineMethods (line 635) | public boolean isInlineMethods() {
    method setInlineMethods (line 639) | public void setInlineMethods(boolean inlineMethods) {
    method isMoveInnerClasses (line 643) | public boolean isMoveInnerClasses() {
    method setMoveInnerClasses (line 647) | public void setMoveInnerClasses(boolean moveInnerClasses) {
    method isAllowInlineKotlinLambda (line 651) | public boolean isAllowInlineKotlinLambda() {
    method setAllowInlineKotlinLambda (line 655) | public void setAllowInlineKotlinLambda(boolean allowInlineKotlinLambda) {
    method isExtractFinally (line 659) | public boolean isExtractFinally() {
    method setExtractFinally (line 663) | public void setExtractFinally(boolean extractFinally) {
    method isRestoreSwitchOverString (line 667) | public boolean isRestoreSwitchOverString() {
    method setRestoreSwitchOverString (line 671) | public void setRestoreSwitchOverString(boolean restoreSwitchOverString) {
    method getUserRenamesMappingsPath (line 675) | public Path getUserRenamesMappingsPath() {
    method setUserRenamesMappingsPath (line 679) | public void setUserRenamesMappingsPath(Path userRenamesMappingsPath) {
    method getUserRenamesMappingsMode (line 683) | public UserRenamesMappingsMode getUserRenamesMappingsMode() {
    method setUserRenamesMappingsMode (line 687) | public void setUserRenamesMappingsMode(UserRenamesMappingsMode userRen...
    method isDeobfuscationOn (line 691) | public boolean isDeobfuscationOn() {
    method setDeobfuscationOn (line 695) | public void setDeobfuscationOn(boolean deobfuscationOn) {
    method getDeobfuscationMinLength (line 699) | public int getDeobfuscationMinLength() {
    method setDeobfuscationMinLength (line 703) | public void setDeobfuscationMinLength(int deobfuscationMinLength) {
    method getDeobfuscationMaxLength (line 707) | public int getDeobfuscationMaxLength() {
    method setDeobfuscationMaxLength (line 711) | public void setDeobfuscationMaxLength(int deobfuscationMaxLength) {
    method getDeobfuscationWhitelistStr (line 715) | public String getDeobfuscationWhitelistStr() {
    method setDeobfuscationWhitelistStr (line 719) | public void setDeobfuscationWhitelistStr(String deobfuscationWhitelist...
    method getGeneratedRenamesMappingFile (line 723) | public String getGeneratedRenamesMappingFile() {
    method setGeneratedRenamesMappingFile (line 727) | public void setGeneratedRenamesMappingFile(String generatedRenamesMapp...
    method getGeneratedRenamesMappingFileMode (line 731) | public GeneratedRenamesMappingFileMode getGeneratedRenamesMappingFileM...
    method setGeneratedRenamesMappingFileMode (line 735) | public void setGeneratedRenamesMappingFileMode(GeneratedRenamesMapping...
    method getSourceNameRepeatLimit (line 739) | public int getSourceNameRepeatLimit() {
    method setSourceNameRepeatLimit (line 743) | public void setSourceNameRepeatLimit(int sourceNameRepeatLimit) {
    method getUseSourceNameAsClassNameAlias (line 747) | public UseSourceNameAsClassNameAlias getUseSourceNameAsClassNameAlias() {
    method setUseSourceNameAsClassNameAlias (line 758) | public void setUseSourceNameAsClassNameAlias(UseSourceNameAsClassNameA...
    method isDeobfuscationUseSourceNameAsAlias (line 765) | @Deprecated
    method setDeobfuscationUseSourceNameAsAlias (line 770) | public void setDeobfuscationUseSourceNameAsAlias(Boolean deobfuscation...
    method getResourceNameSource (line 774) | public ResourceNameSource getResourceNameSource() {
    method setResourceNameSource (line 778) | public void setResourceNameSource(ResourceNameSource resourceNameSourc...
    method getUseKotlinMethodsForVarNames (line 782) | public UseKotlinMethodsForVarNames getUseKotlinMethodsForVarNames() {
    method setUseKotlinMethodsForVarNames (line 786) | public void setUseKotlinMethodsForVarNames(UseKotlinMethodsForVarNames...
    method getIntegerFormat (line 790) | public IntegerFormat getIntegerFormat() {
    method setIntegerFormat (line 794) | public void setIntegerFormat(IntegerFormat integerFormat) {
    method getTypeUpdatesLimitCount (line 798) | public int getTypeUpdatesLimitCount() {
    method setTypeUpdatesLimitCount (line 802) | public void setTypeUpdatesLimitCount(int typeUpdatesLimitCount) {
    method isEscapeUnicode (line 806) | public boolean isEscapeUnicode() {
    method setEscapeUnicode (line 810) | public void setEscapeUnicode(boolean escapeUnicode) {
    method isCfgOutput (line 814) | public boolean isCfgOutput() {
    method setCfgOutput (line 818) | public void setCfgOutput(boolean cfgOutput) {
    method isRawCfgOutput (line 822) | public boolean isRawCfgOutput() {
    method setRawCfgOutput (line 826) | public void setRawCfgOutput(boolean rawCfgOutput) {
    method isReplaceConsts (line 830) | public boolean isReplaceConsts() {
    method setReplaceConsts (line 834) | public void setReplaceConsts(boolean replaceConsts) {
    method isRespectBytecodeAccessModifiers (line 838) | public boolean isRespectBytecodeAccessModifiers() {
    method setRespectBytecodeAccessModifiers (line 842) | public void setRespectBytecodeAccessModifiers(boolean respectBytecodeA...
    method isExportAsGradleProject (line 846) | public boolean isExportAsGradleProject() {
    method setExportAsGradleProject (line 850) | public void setExportAsGradleProject(boolean exportAsGradleProject) {
    method isSkipXmlPrettyPrint (line 854) | public boolean isSkipXmlPrettyPrint() {
    method setSkipXmlPrettyPrint (line 858) | public void setSkipXmlPrettyPrint(boolean skipXmlPrettyPrint) {
    method isRenameCaseSensitive (line 862) | public boolean isRenameCaseSensitive() {
    method isRenameValid (line 866) | public boolean isRenameValid() {
    method isRenamePrintable (line 870) | public boolean isRenamePrintable() {
    method isFsCaseSensitive (line 874) | public boolean isFsCaseSensitive() {
    method setFsCaseSensitive (line 878) | public void setFsCaseSensitive(boolean fsCaseSensitive) {
    method isUseHeadersForDetectResourceExtensions (line 882) | public boolean isUseHeadersForDetectResourceExtensions() {
    method setUseHeadersForDetectResourceExtensions (line 886) | public void setUseHeadersForDetectResourceExtensions(boolean useHeader...
    method getCommentsLevel (line 890) | public CommentsLevel getCommentsLevel() {
    method setCommentsLevel (line 894) | public void setCommentsLevel(CommentsLevel commentsLevel) {
    method getLogLevel (line 898) | public LogHelper.LogLevelEnum getLogLevel() {
    method setLogLevel (line 902) | public void setLogLevel(LogHelper.LogLevelEnum logLevel) {
    method getPluginOptions (line 906) | public Map<String, String> getPluginOptions() {
    method setPluginOptions (line 910) | public void setPluginOptions(Map<String, String> pluginOptions) {
    method getDisablePlugins (line 914) | public String getDisablePlugins() {
    method setDisablePlugins (line 918) | public void setDisablePlugins(String disablePlugins) {
    method setExportGradleType (line 922) | public void setExportGradleType(@Nullable ExportGradleType exportGradl...
    method setOutputFormat (line 926) | public void setOutputFormat(String outputFormat) {
    method getRenameFlags (line 930) | public Set<RenameEnum> getRenameFlags() {
    method setRenameFlags (line 934) | public void setRenameFlags(Set<RenameEnum> renameFlags) {
    method getConfig (line 938) | public String getConfig() {
    class RenameConverter (line 942) | static class RenameConverter implements IStringConverter<Set<RenameEnu...
      method RenameConverter (line 945) | RenameConverter(String paramName) {
      method convert (line 949) | @Override
    class CommentsLevelConverter (line 971) | public static class CommentsLevelConverter extends BaseEnumConverter<C...
      method CommentsLevelConverter (line 972) | public CommentsLevelConverter() {
    class UseKotlinMethodsForVarNamesConverter (line 977) | public static class UseKotlinMethodsForVarNamesConverter extends BaseE...
      method UseKotlinMethodsForVarNamesConverter (line 978) | public UseKotlinMethodsForVarNamesConverter() {
    class DeobfuscationMapFileModeConverter (line 983) | public static class DeobfuscationMapFileModeConverter extends BaseEnum...
      method DeobfuscationMapFileModeConverter (line 984) | public DeobfuscationMapFileModeConverter() {
    class ResourceNameSourceConverter (line 989) | public static class ResourceNameSourceConverter extends BaseEnumConver...
      method ResourceNameSourceConverter (line 990) | public ResourceNameSourceConverter() {
    class UseSourceNameAsClassNameConverter (line 995) | public static class UseSourceNameAsClassNameConverter extends BaseEnum...
      method UseSourceNameAsClassNameConverter (line 996) | public UseSourceNameAsClassNameConverter() {
    class DecompilationModeConverter (line 1001) | public static class DecompilationModeConverter extends BaseEnumConvert...
      method DecompilationModeConverter (line 1002) | public DecompilationModeConverter() {
    class ExportGradleTypeConverter (line 1007) | public static class ExportGradleTypeConverter extends BaseEnumConverte...
      method ExportGradleTypeConverter (line 1008) | public ExportGradleTypeConverter() {
    class LogLevelConverter (line 1013) | public static class LogLevelConverter extends BaseEnumConverter<LogHel...
      method LogLevelConverter (line 1014) | public LogLevelConverter() {
    class IntegerFormatConverter (line 1019) | public static class IntegerFormatConverter extends BaseEnumConverter<I...
      method IntegerFormatConverter (line 1020) | public IntegerFormatConverter() {
    class BaseEnumConverter (line 1025) | public abstract static class BaseEnumConverter<E extends Enum<E>> impl...
      method BaseEnumConverter (line 1029) | public BaseEnumConverter(Function<String, E> parse, Supplier<E[]> va...
      method convert (line 1034) | @Override
    method enumValuesString (line 1045) | public static String enumValuesString(Enum<?>[] values) {
    method stringAsEnumName (line 1051) | private static String stringAsEnumName(String value) {

FILE: jadx-cli/src/main/java/jadx/cli/JadxCLICommands.java
  class JadxCLICommands (line 12) | public class JadxCLICommands {
    method register (line 19) | public static void register(ICommand command) {
    method append (line 23) | public static void append(JCommander.Builder builder) {
    method process (line 27) | public static boolean process(JCommanderWrapper jcw, JCommander jc, St...

FILE: jadx-cli/src/main/java/jadx/cli/LogHelper.java
  class LogHelper (line 12) | public class LogHelper {
    type LogLevelEnum (line 15) | public enum LogLevelEnum {
      method LogLevelEnum (line 25) | LogLevelEnum(Level level) {
      method getLevel (line 29) | public Level getLevel() {
    method initLogLevel (line 37) | public static void initLogLevel(JadxCLIArgs args) {
    method getLogLevelFromArgs (line 41) | private static LogLevelEnum getLogLevelFromArgs(JadxCLIArgs args) {
    method setLogLevel (line 53) | public static void setLogLevel(LogLevelEnum newLogLevel) {
    method applyLogLevels (line 58) | public static void applyLogLevels() {
    method fixForShowProgress (line 71) | private static void fixForShowProgress() {
    method applyLogLevel (line 80) | private static void applyLogLevel(@NotNull LogLevelEnum logLevel) {
    method getLogLevel (line 85) | @Nullable
    method setLevelForClass (line 90) | public static void setLevelForClass(Class<?> cls, Level level) {
    method setLevelForPackage (line 94) | public static void setLevelForPackage(String pkgName, Level level) {
    method isCustomLogConfig (line 101) | private static boolean isCustomLogConfig() {

FILE: jadx-cli/src/main/java/jadx/cli/SingleClassMode.java
  class SingleClassMode (line 19) | public class SingleClassMode {
    method process (line 22) | public static boolean process(JadxDecompiler jadx, JadxCLIArgs cliArgs) {

FILE: jadx-cli/src/main/java/jadx/cli/clst/ConvertToClsSet.java
  class ConvertToClsSet (line 23) | public class ConvertToClsSet {
    method usage (line 26) | public static void usage() {
    method main (line 36) | public static void main(String[] args) {

FILE: jadx-cli/src/main/java/jadx/cli/commands/CommandPlugins.java
  class CommandPlugins (line 22) | @Parameters(commandDescription = "manage jadx plugins")
    method name (line 62) | @Override
    method process (line 67) | @SuppressWarnings("UnnecessaryReturnStatement")
    method printPlugins (line 147) | private static void printPlugins(List<JadxPluginMetadata> installed) {
    method printVersions (line 165) | private void printVersions(String locationId, int limit) {
    method printAllPlugins (line 185) | private static void printAllPlugins() {
    method formatDescription (line 201) | private static String formatDescription(String desc) {
    method installPlugin (line 214) | private void installPlugin(String locationId) {

FILE: jadx-cli/src/main/java/jadx/cli/commands/ICommand.java
  type ICommand (line 7) | public interface ICommand {
    method name (line 8) | String name();
    method process (line 10) | void process(JCommanderWrapper jcw, JCommander subCommander);

FILE: jadx-cli/src/main/java/jadx/cli/config/IJadxConfig.java
  type IJadxConfig (line 6) | public interface IJadxConfig {

FILE: jadx-cli/src/main/java/jadx/cli/config/JadxConfigAdapter.java
  class JadxConfigAdapter (line 20) | public class JadxConfigAdapter<T extends IJadxConfig> {
    method shouldSkipField (line 22) | @Override
    method shouldSkipClass (line 27) | @Override
    method JadxConfigAdapter (line 39) | public JadxConfigAdapter(Class<T> configCls, String defaultConfigName) {
    method JadxConfigAdapter (line 44) | public JadxConfigAdapter(Class<T> configCls, String defaultConfigName,...
    method useConfigRef (line 53) | public void useConfigRef(String configRef) {
    method getConfigPath (line 57) | public Path getConfigPath() {
    method getDefaultConfigFileName (line 61) | public String getDefaultConfigFileName() {
    method load (line 65) | public @Nullable T load() {
    method save (line 77) | public void save(T configObject) {
    method objectToJsonString (line 87) | public String objectToJsonString(T configObject) {
    method jsonStringToObject (line 91) | public T jsonStringToObject(String jsonStr) {
    method resolveConfigRef (line 95) | private Path resolveConfigRef(String configRef) {

FILE: jadx-cli/src/main/java/jadx/cli/plugins/JadxFilesGetter.java
  class JadxFilesGetter (line 9) | public class JadxFilesGetter implements IJadxFilesGetter {
    method getConfigDir (line 13) | @Override
    method getCacheDir (line 18) | @Override
    method getTempDir (line 23) | @Override
    method JadxFilesGetter (line 28) | private JadxFilesGetter() {

FILE: jadx-cli/src/main/java/jadx/cli/tools/ConvertArscFile.java
  class ConvertArscFile (line 30) | public class ConvertArscFile {
    method usage (line 34) | public static void usage() {
    method main (line 40) | public static void main(String[] args) throws IOException {
    method filterAndSort (line 90) | private static List<Path> filterAndSort(List<Path> inputPaths) {
    method mergeResMaps (line 100) | private static void mergeResMaps(Map<Integer, String> mainResMap, Map<...

FILE: jadx-cli/src/test/java/jadx/cli/BaseCliIntegrationTest.java
  class BaseCliIntegrationTest (line 27) | public class BaseCliIntegrationTest {
    method setUp (line 40) | @BeforeEach
    method execJadxCli (line 45) | int execJadxCli(String sampleName, String... options) {
    method execJadxCli (line 49) | int execJadxCli(String[] args) {
    method buildArgs (line 57) | String[] buildArgs(List<String> options, String... inputSamples) {
    method decompile (line 76) | void decompile(String... inputSamples) throws IOException {
    method printFiles (line 90) | static void printFiles(List<Path> files) {
    method pathToUniformString (line 98) | String pathToUniformString(Path path) {
    method printFileContent (line 102) | Path printFileContent(Path file) {
    method collectJavaFilesInDir (line 113) | static List<Path> collectJavaFilesInDir(Path dir) throws IOException {
    method collectAllFilesInDir (line 118) | static List<Path> collectAllFilesInDir(Path dir) throws IOException {
    method collectFilesInDir (line 129) | static List<Path> collectFilesInDir(Path dir, PathMatcher matcher) thr...

FILE: jadx-cli/src/test/java/jadx/cli/JadxCLIArgsTest.java
  class JadxCLIArgsTest (line 13) | public class JadxCLIArgsTest {
    method testInvertedBooleanOption (line 17) | @Test
    method testEscapeUnicodeOption (line 23) | @Test
    method testSrcOption (line 29) | @Test
    method testOptionsOverride (line 36) | @Test
    method testPluginOptionsOverride (line 53) | @Test
    method checkPluginOptionsMerge (line 80) | private void checkPluginOptionsMerge(Map<String, String> baseMap, Stri...
    method parse (line 87) | private JadxCLIArgs parse(String... args) {
    method parse (line 91) | private JadxCLIArgs parse(JadxCLIArgs jadxArgs, String... args) {
    method override (line 95) | private JadxCLIArgs override(JadxCLIArgs jadxArgs, String... args) {
    method overrideProvided (line 99) | private static boolean overrideProvided(JadxCLIArgs jadxArgs, String[]...
    method check (line 108) | private static JadxCLIArgs check(JadxCLIArgs jadxArgs, boolean res) {

FILE: jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java
  class RenameConverterTest (line 15) | public class RenameConverterTest {
    method init (line 19) | @BeforeEach
    method all (line 24) | @Test
    method none (line 33) | @Test
    method wrong (line 39) | @Test

FILE: jadx-cli/src/test/java/jadx/cli/TestExport.java
  class TestExport (line 8) | public class TestExport extends BaseCliIntegrationTest {
    method testBasicExport (line 10) | @Test
    method testGradleExportApk (line 22) | @Test
    method testGradleExportAAR (line 34) | @Test
    method testGradleExportSimpleJava (line 47) | @Test
    method testGradleExportInvalidType (line 62) | @Test

FILE: jadx-cli/src/test/java/jadx/cli/TestInput.java
  class TestInput (line 11) | public class TestInput extends BaseCliIntegrationTest {
    method testHelp (line 13) | @Test
    method testApkInput (line 19) | @Test
    method testDexInput (line 32) | @Test
    method testSmaliInput (line 37) | @Test
    method testClassInput (line 42) | @Test
    method testMultipleInput (line 47) | @Test
    method testFallbackMode (line 52) | @Test
    method testSimpleMode (line 60) | @Test
    method testResourceOnly (line 68) | @Test

FILE: jadx-cli/src/test/java/jadx/plugins/tools/utils/PluginUtilsTest.java
  class PluginUtilsTest (line 8) | class PluginUtilsTest {
    method testExtractVersion (line 10) | @Test

FILE: jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonEnv.java
  class JadxCommonEnv (line 3) | public class JadxCommonEnv {
    method get (line 5) | public static String get(String varName, String defValue) {
    method getBool (line 10) | public static boolean getBool(String varName, boolean defValue) {
    method getInt (line 18) | public static int getInt(String varName, int defValue) {
    method isNullOrEmpty (line 26) | private static boolean isNullOrEmpty(String value) {

FILE: jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonFiles.java
  class JadxCommonFiles (line 17) | public class JadxCommonFiles {
    method getConfigDir (line 23) | public static Path getConfigDir() {
    method getCacheDir (line 27) | public static Path getCacheDir() {
    class DirsLoader (line 38) | private static final class DirsLoader {
      method init (line 43) | public void init() {
      method loadEnvDir (line 52) | private Path loadEnvDir(String envVar, Function<ProjectDirectories, ...
      method loadDirs (line 65) | private synchronized ProjectDirectories loadDirs() {
      method getWinDirs (line 86) | private static Windows getWinDirs() {
      method getCacheDir (line 97) | public Path getCacheDir() {
      method getConfigDir (line 101) | public Path getConfigDir() {

FILE: jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxSystemInfo.java
  class JadxSystemInfo (line 5) | public class JadxSystemInfo {
    method JadxSystemInfo (line 23) | private JadxSystemInfo() {

FILE: jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxTempFiles.java
  class JadxTempFiles (line 7) | public class JadxTempFiles {
    method getTempRootDir (line 12) | public static Path getTempRootDir() {
    method createTempRootDir (line 16) | private static Path createTempRootDir() {

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/IZipEntry.java
  type IZipEntry (line 6) | public interface IZipEntry {
    method getName (line 11) | String getName();
    method getBytes (line 16) | byte[] getBytes();
    method getInputStream (line 21) | InputStream getInputStream();
    method getCompressedSize (line 23) | long getCompressedSize();
    method getUncompressedSize (line 25) | long getUncompressedSize();
    method isDirectory (line 27) | boolean isDirectory();
    method getZipFile (line 29) | File getZipFile();
    method preferBytes (line 35) | boolean preferBytes();

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/IZipParser.java
  type IZipParser (line 6) | public interface IZipParser extends Closeable {
    method open (line 8) | ZipContent open() throws IOException;

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipContent.java
  class ZipContent (line 13) | public class ZipContent implements Closeable {
    method ZipContent (line 20) | public ZipContent(IZipParser zipParser, List<IZipEntry> entries) {
    method buildNameMap (line 26) | private static Map<String, IZipEntry> buildNameMap(IZipParser zipParse...
    method getEntries (line 38) | public List<IZipEntry> getEntries() {
    method searchEntry (line 42) | public @Nullable IZipEntry searchEntry(String fileName) {
    method close (line 46) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipReader.java
  class ZipReader (line 21) | public class ZipReader {
    method ZipReader (line 24) | public ZipReader() {
    method ZipReader (line 28) | public ZipReader(Set<ZipReaderFlags> flags) {
    method ZipReader (line 32) | public ZipReader(IJadxZipSecurity security) {
    method ZipReader (line 36) | public ZipReader(ZipReaderOptions options) {
    method open (line 40) | @SuppressWarnings("resource")
    method visitEntries (line 62) | public <R> @Nullable R visitEntries(File file, Function<IZipEntry, R> ...
    method readEntries (line 76) | public void readEntries(File file, BiConsumer<IZipEntry, InputStream> ...
    method getOptions (line 89) | public ZipReaderOptions getOptions() {
    method detectParser (line 93) | private IZipParser detectParser(File zipFile, JadxZipParser jadxParser) {
    method buildFallbackParser (line 108) | private FallbackZipParser buildFallbackParser(File zipFile) {

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipReaderFlags.java
  type ZipReaderFlags (line 6) | public enum ZipReaderFlags {
    method none (line 29) | public static Set<ZipReaderFlags> none() {

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipReaderOptions.java
  class ZipReaderOptions (line 8) | public class ZipReaderOptions {
    method getDefault (line 10) | public static ZipReaderOptions getDefault() {
    method ZipReaderOptions (line 17) | public ZipReaderOptions(IJadxZipSecurity zipSecurity, Set<ZipReaderFla...
    method getZipSecurity (line 22) | public IJadxZipSecurity getZipSecurity() {
    method getFlags (line 26) | public Set<ZipReaderFlags> getFlags() {

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/fallback/FallbackZipEntry.java
  class FallbackZipEntry (line 9) | public class FallbackZipEntry implements IZipEntry {
    method FallbackZipEntry (line 13) | public FallbackZipEntry(FallbackZipParser parser, ZipEntry zipEntry) {
    method getZipEntry (line 18) | public ZipEntry getZipEntry() {
    method getName (line 22) | @Override
    method preferBytes (line 27) | @Override
    method getBytes (line 32) | @Override
    method getInputStream (line 37) | @Override
    method getCompressedSize (line 42) | @Override
    method getUncompressedSize (line 47) | @Override
    method isDirectory (line 52) | @Override
    method getZipFile (line 57) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/fallback/FallbackZipParser.java
  class FallbackZipParser (line 23) | public class FallbackZipParser implements IZipParser {
    method FallbackZipParser (line 31) | public FallbackZipParser(File file, ZipReaderOptions options) {
    method open (line 37) | @Override
    method isValidEntry (line 60) | private boolean isValidEntry(IZipEntry zipEntry) {
    method getBytes (line 68) | public byte[] getBytes(FallbackZipEntry entry) {
    method getInputStream (line 76) | public InputStream getInputStream(FallbackZipEntry entry) {
    method getEntryStream (line 84) | private InputStream getEntryStream(FallbackZipEntry entry) throws IOEx...
    method getZipFile (line 95) | public File getZipFile() {
    method close (line 99) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/io/ByteBufferBackedInputStream.java
  class ByteBufferBackedInputStream (line 7) | public class ByteBufferBackedInputStream extends InputStream {
    method ByteBufferBackedInputStream (line 11) | public ByteBufferBackedInputStream(ByteBuffer buf) {
    method read (line 15) | public int read() throws IOException {
    method read (line 22) | @SuppressWarnings("NullableProblems")
    method markSupported (line 32) | @Override
    method mark (line 37) | @Override
    method reset (line 42) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/io/LimitedInputStream.java
  class LimitedInputStream (line 7) | public class LimitedInputStream extends FilterInputStream {
    method LimitedInputStream (line 13) | public LimitedInputStream(InputStream in, long maxSize) {
    method addAndCheckPos (line 18) | private void addAndCheckPos(long count) {
    method read (line 25) | @Override
    method read (line 34) | @SuppressWarnings("NullableProblems")
    method skip (line 44) | @Override
    method mark (line 53) | @Override
    method reset (line 59) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/parser/JadxZipEntry.java
  class JadxZipEntry (line 8) | public final class JadxZipEntry implements IZipEntry {
    method JadxZipEntry (line 17) | JadxZipEntry(JadxZipParser parser, String fileName, int entryStart, in...
    method isSizesValid (line 28) | public boolean isSizesValid() {
    method getName (line 38) | public String getName() {
    method getCompressedSize (line 42) | @Override
    method getUncompressedSize (line 47) | @Override
    method isDirectory (line 52) | @Override
    method preferBytes (line 57) | @Override
    method getBytes (line 62) | @Override
    method getInputStream (line 67) | @Override
    method getEntryStart (line 72) | public int getEntryStart() {
    method getDataStart (line 76) | public int getDataStart() {
    method getCompressMethod (line 80) | public int getCompressMethod() {
    method getZipFile (line 84) | @Override
    method toString (line 89) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/parser/JadxZipParser.java
  class JadxZipParser (line 37) | public final class JadxZipParser implements IZipParser {
    method JadxZipParser (line 60) | public JadxZipParser(File zipFile, ZipReaderOptions options) {
    method open (line 69) | @Override
    method canOpen (line 93) | @SuppressWarnings("RedundantIfStatement")
    method isValidEntry (line 112) | private boolean isValidEntry(JadxZipEntry zipEntry) {
    method load (line 120) | private void load() throws IOException {
    method searchLocalFileHeaders (line 146) | private List<IZipEntry> searchLocalFileHeaders(int maxEntriesCount) {
    method loadFromCentralDirs (line 163) | private List<IZipEntry> loadFromCentralDirs(int maxEntriesCount) throw...
    method loadCDEntry (line 188) | private JadxZipEntry loadCDEntry() {
    method fixEntryFromCD (line 209) | private JadxZipEntry fixEntryFromCD(JadxZipEntry entry, int start) {
    method compareCDAndLFH (line 219) | private static void compareCDAndLFH(ByteBuffer buf, int start, JadxZip...
    method loadFileEntry (line 239) | private JadxZipEntry loadFileEntry(int start) {
    method searchEndOfCDStart (line 254) | private int searchEndOfCDStart() throws IOException {
    method searchEntryStart (line 275) | private int searchEntryStart() {
    method getInputStream (line 293) | synchronized InputStream getInputStream(JadxZipEntry entry) {
    method getBytes (line 315) | synchronized byte[] getBytes(JadxZipEntry entry) {
    method verifyEntry (line 331) | private static void verifyEntry(JadxZipEntry entry) {
    method entryParseFailed (line 343) | private void entryParseFailed(JadxZipEntry entry, Exception e) {
    method useFallbackParser (line 353) | @SuppressWarnings("resource")
    method initFallbackParser (line 363) | @SuppressWarnings("resource")
    method isEncrypted (line 375) | private boolean isEncrypted(JadxZipEntry entry) {
    method readFlags (line 380) | private int readFlags(JadxZipEntry entry) {
    method bufferToBytes (line 386) | static byte[] bufferToBytes(ByteBuffer buf, int start, int size) {
    method bufferToStream (line 393) | static InputStream bufferToStream(ByteBuffer buf, int start, int size) {
    method readU2 (line 400) | private static int readU2(ByteBuffer buf) {
    method readString (line 404) | private static String readString(ByteBuffer buf, int fileNameLen) {
    method close (line 410) | @Override
    method getZipFile (line 431) | public File getZipFile() {
    method toString (line 435) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/parser/ZipDeflate.java
  class ZipDeflate (line 11) | final class ZipDeflate {
    method decompressEntryToBytes (line 14) | static byte[] decompressEntryToBytes(ByteBuffer buf, JadxZipEntry entr...
    method decompressEntryToStream (line 33) | static InputStream decompressEntryToStream(ByteBuffer buf, JadxZipEntr...

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/security/DisabledZipSecurity.java
  class DisabledZipSecurity (line 7) | public class DisabledZipSecurity implements IJadxZipSecurity {
    method isValidEntry (line 11) | @Override
    method isValidEntryName (line 16) | @Override
    method isInSubDirectory (line 21) | @Override
    method useLimitedDataStream (line 26) | @Override
    method getMaxEntriesCount (line 31) | @Override

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/security/IJadxZipSecurity.java
  type IJadxZipSecurity (line 7) | public interface IJadxZipSecurity {
    method isValidEntry (line 12) | boolean isValidEntry(IZipEntry entry);
    method isValidEntryName (line 18) | boolean isValidEntryName(String entryName);
    method useLimitedDataStream (line 23) | boolean useLimitedDataStream();
    method getMaxEntriesCount (line 29) | int getMaxEntriesCount();
    method isInSubDirectory (line 34) | boolean isInSubDirectory(File baseDir, File file);

FILE: jadx-commons/jadx-zip/src/main/java/jadx/zip/security/JadxZipSecurity.java
  class JadxZipSecurity (line 13) | public class JadxZipSecurity implements IJadxZipSecurity {
    method isValidEntry (line 34) | @Override
    method useLimitedDataStream (line 39) | @Override
    method getMaxEntriesCount (line 44) | @Override
    method isValidEntryName (line 53) | @Override
    method isInSubDirectory (line 77) | @Override
    method isZipBomb (line 86) | public boolean isZipBomb(IZipEntry entry) {
    method isInSubDirectoryInternal (line 100) | private static boolean isInSubDirectoryInternal(File baseDir, File fil...
    method setMaxEntriesCount (line 113) | public void setMaxEntriesCount(int maxEntriesCount) {
    method setZipBombDetectionFactor (line 117) | public void setZipBombDetectionFactor(int zipBombDetectionFactor) {
    method setZipBombMinUncompressedSize (line 121) | public void setZipBombMinUncompressedSize(int zipBombMinUncompressedSi...
    method setUseLimitedDataStream (line 125) | public void setUseLimitedDataStream(boolean useLimitedDataStream) {

FILE: jadx-core/src/main/java/jadx/api/CommentsLevel.java
  type CommentsLevel (line 3) | public enum CommentsLevel {
    method filter (line 11) | public boolean filter(CommentsLevel limit) {

FILE: jadx-core/src/main/java/jadx/api/DecompilationMode.java
  type DecompilationMode (line 3) | public enum DecompilationMode {
    method isSpecial (line 24) | public boolean isSpecial() {

FILE: jadx-core/src/main/java/jadx/api/ICodeCache.java
  type ICodeCache (line 8) | public interface ICodeCache extends Closeable {
    method add (line 10) | void add(String clsFullName, ICodeInfo codeInfo);
    method remove (line 12) | void remove(String clsFullName);
    method get (line 14) | @NotNull
    method getCode (line 17) | @Nullable
    method contains (line 20) | boolean contains(String clsFullName);

FILE: jadx-core/src/main/java/jadx/api/ICodeInfo.java
  type ICodeInfo (line 6) | public interface ICodeInfo {
    method getCodeStr (line 10) | String getCodeStr();
    method getCodeMetadata (line 12) | ICodeMetadata getCodeMetadata();
    method hasMetadata (line 14) | boolean hasMetadata();

FILE: jadx-core/src/main/java/jadx/api/ICodeWriter.java
  type ICodeWriter (line 10) | public interface ICodeWriter {
    method isMetadataSupported (line 12) | boolean isMetadataSupported();
    method startLine (line 14) | ICodeWriter startLine();
    method startLine (line 16) | ICodeWriter startLine(char c);
    method startLine (line 18) | ICodeWriter startLine(String str);
    method startLineWithNum (line 20) | ICodeWriter startLineWithNum(int sourceLine);
    method addMultiLine (line 22) | ICodeWriter addMultiLine(String str);
    method add (line 24) | ICodeWriter add(String str);
    method add (line 26) | ICodeWriter add(char c);
    method add (line 28) | ICodeWriter add(ICodeWriter code);
    method newLine (line 30) | ICodeWriter newLine();
    method addIndent (line 32) | ICodeWriter addIndent();
    method incIndent (line 34) | void incIndent();
    method decIndent (line 36) | void decIndent();
    method getIndent (line 38) | int getIndent();
    method setIndent (line 40) | void setIndent(int indent);
    method getLine (line 45) | int getLine();
    method getLineStartPos (line 50) | int getLineStartPos();
    method attachDefinition (line 52) | void attachDefinition(ICodeNodeRef obj);
    method attachAnnotation (line 54) | void attachAnnotation(ICodeAnnotation obj);
    method attachLineAnnotation (line 56) | void attachLineAnnotation(ICodeAnnotation obj);
    method attachSourceLine (line 58) | void attachSourceLine(int sourceLine);
    method finish (line 60) | ICodeInfo finish();
    method getCodeStr (line 62) | String getCodeStr();
    method getLength (line 64) | int getLength();
    method getRawBuf (line 66) | StringBuilder getRawBuf();
    method getRawAnnotations (line 68) | @ApiStatus.Internal

FILE: jadx-core/src/main/java/jadx/api/IDecompileScheduler.java
  type IDecompileScheduler (line 5) | public interface IDecompileScheduler {
    method buildBatches (line 6) | List<List<JavaClass>> buildBatches(List<JavaClass> classes);

FILE: jadx-core/src/main/java/jadx/api/JadxArgs.java
  class JadxArgs (line 47) | public class JadxArgs implements Closeable {
    type RenameEnum (line 145) | public enum RenameEnum {
    type OutputFormatEnum (line 151) | public enum OutputFormatEnum {
    type UseKotlinMethodsForVarNames (line 177) | public enum UseKotlinMethodsForVarNames {
    method JadxArgs (line 217) | public JadxArgs() {
    method setRootDir (line 221) | public void setRootDir(File rootDir) {
    method close (line 227) | @Override
    method getInputFiles (line 248) | public List<File> getInputFiles() {
    method addInputFile (line 252) | public void addInputFile(File inputFile) {
    method setInputFile (line 256) | public void setInputFile(File inputFile) {
    method setInputFiles (line 260) | public void setInputFiles(List<File> inputFiles) {
    method getOutDir (line 264) | public File getOutDir() {
    method setOutDir (line 268) | public void setOutDir(File outDir) {
    method getOutDirSrc (line 272) | public File getOutDirSrc() {
    method setOutDirSrc (line 276) | public void setOutDirSrc(File outDirSrc) {
    method getOutDirRes (line 280) | public File getOutDirRes() {
    method setOutDirRes (line 284) | public void setOutDirRes(File outDirRes) {
    method getThreadsCount (line 288) | public int getThreadsCount() {
    method setThreadsCount (line 292) | public void setThreadsCount(int threadsCount) {
    method isCfgOutput (line 296) | public boolean isCfgOutput() {
    method setCfgOutput (line 300) | public void setCfgOutput(boolean cfgOutput) {
    method isRawCFGOutput (line 304) | public boolean isRawCFGOutput() {
    method setRawCFGOutput (line 308) | public void setRawCFGOutput(boolean rawCFGOutput) {
    method isFallbackMode (line 312) | public boolean isFallbackMode() {
    method setFallbackMode (line 319) | @Deprecated
    method isShowInconsistentCode (line 326) | public boolean isShowInconsistentCode() {
    method setShowInconsistentCode (line 330) | public void setShowInconsistentCode(boolean showInconsistentCode) {
    method isUseImports (line 334) | public boolean isUseImports() {
    method setUseImports (line 338) | public void setUseImports(boolean useImports) {
    method isDebugInfo (line 342) | public boolean isDebugInfo() {
    method setDebugInfo (line 346) | public void setDebugInfo(boolean debugInfo) {
    method isInsertDebugLines (line 350) | public boolean isInsertDebugLines() {
    method setInsertDebugLines (line 354) | public void setInsertDebugLines(boolean insertDebugLines) {
    method isInlineAnonymousClasses (line 358) | public boolean isInlineAnonymousClasses() {
    method setInlineAnonymousClasses (line 362) | public void setInlineAnonymousClasses(boolean inlineAnonymousClasses) {
    method isInlineMethods (line 366) | public boolean isInlineMethods() {
    method setInlineMethods (line 370) | public void setInlineMethods(boolean inlineMethods) {
    method isAllowInlineKotlinLambda (line 374) | public boolean isAllowInlineKotlinLambda() {
    method setAllowInlineKotlinLambda (line 378) | public void setAllowInlineKotlinLambda(boolean allowInlineKotlinLambda) {
    method isMoveInnerClasses (line 382) | public boolean isMoveInnerClasses() {
    method setMoveInnerClasses (line 386) | public void setMoveInnerClasses(boolean moveInnerClasses) {
    method isExtractFinally (line 390) | public boolean isExtractFinally() {
    method setExtractFinally (line 394) | public void setExtractFinally(boolean extractFinally) {
    method isSkipResources (line 398) | public boolean isSkipResources() {
    method setSkipResources (line 402) | public void setSkipResources(boolean skipResources) {
    method isSkipSources (line 406) | public boolean isSkipSources() {
    method setSkipSources (line 410) | public void setSkipSources(boolean skipSources) {
    method setIncludeDependencies (line 414) | public void setIncludeDependencies(boolean includeDependencies) {
    method isIncludeDependencies (line 418) | public boolean isIncludeDependencies() {
    method getClassFilter (line 422) | public Predicate<String> getClassFilter() {
    method setClassFilter (line 426) | public void setClassFilter(Predicate<String> classFilter) {
    method getUserRenamesMappingsPath (line 430) | public Path getUserRenamesMappingsPath() {
    method setUserRenamesMappingsPath (line 434) | public void setUserRenamesMappingsPath(Path path) {
    method getUserRenamesMappingsMode (line 438) | public UserRenamesMappingsMode getUserRenamesMappingsMode() {
    method setUserRenamesMappingsMode (line 442) | public void setUserRenamesMappingsMode(UserRenamesMappingsMode mode) {
    method isDeobfuscationOn (line 446) | public boolean isDeobfuscationOn() {
    method setDeobfuscationOn (line 450) | public void setDeobfuscationOn(boolean deobfuscationOn) {
    method isDeobfuscationForceSave (line 454) | public boolean isDeobfuscationForceSave() {
    method setDeobfuscationForceSave (line 458) | public void setDeobfuscationForceSave(boolean deobfuscationForceSave) {
    method getGeneratedRenamesMappingFileMode (line 464) | public GeneratedRenamesMappingFileMode getGeneratedRenamesMappingFileM...
    method setGeneratedRenamesMappingFileMode (line 468) | public void setGeneratedRenamesMappingFileMode(GeneratedRenamesMapping...
    method getUseSourceNameAsClassNameAlias (line 472) | public UseSourceNameAsClassNameAlias getUseSourceNameAsClassNameAlias() {
    method setUseSourceNameAsClassNameAlias (line 476) | public void setUseSourceNameAsClassNameAlias(UseSourceNameAsClassNameA...
    method getSourceNameRepeatLimit (line 480) | public int getSourceNameRepeatLimit() {
    method setSourceNameRepeatLimit (line 484) | public void setSourceNameRepeatLimit(int sourceNameRepeatLimit) {
    method isUseSourceNameAsClassAlias (line 491) | @Deprecated
    method setUseSourceNameAsClassAlias (line 499) | @Deprecated
    method getDeobfuscationMinLength (line 505) | public int getDeobfuscationMinLength() {
    method setDeobfuscationMinLength (line 509) | public void setDeobfuscationMinLength(int deobfuscationMinLength) {
    method getDeobfuscationMaxLength (line 513) | public int getDeobfuscationMaxLength() {
    method setDeobfuscationMaxLength (line 517) | public void setDeobfuscationMaxLength(int deobfuscationMaxLength) {
    method getDeobfuscationWhitelist (line 521) | public List<String> getDeobfuscationWhitelist() {
    method setDeobfuscationWhitelist (line 525) | public void setDeobfuscationWhitelist(List<String> deobfuscationWhitel...
    method getGeneratedRenamesMappingFile (line 529) | public File getGeneratedRenamesMappingFile() {
    method setGeneratedRenamesMappingFile (line 533) | public void setGeneratedRenamesMappingFile(File file) {
    method getResourceNameSource (line 537) | public ResourceNameSource getResourceNameSource() {
    method setResourceNameSource (line 541) | public void setResourceNameSource(ResourceNameSource resourceNameSourc...
    method getAliasProvider (line 545) | public IAliasProvider getAliasProvider() {
    method setAliasProvider (line 549) | public void setAliasProvider(IAliasProvider aliasProvider) {
    method getRenameCondition (line 553) | public IRenameCondition getRenameCondition() {
    method setRenameCondition (line 557) | public void setRenameCondition(IRenameCondition renameCondition) {
    method isEscapeUnicode (line 561) | public boolean isEscapeUnicode() {
    method setEscapeUnicode (line 565) | public void setEscapeUnicode(boolean escapeUnicode) {
    method isReplaceConsts (line 569) | public boolean isReplaceConsts() {
    method setReplaceConsts (line 573) | public void setReplaceConsts(boolean replaceConsts) {
    method isRespectBytecodeAccModifiers (line 577) | public boolean isRespectBytecodeAccModifiers() {
    method setRespectBytecodeAccModifiers (line 581) | public void setRespectBytecodeAccModifiers(boolean respectBytecodeAccM...
    method isExportAsGradleProject (line 585) | public boolean isExportAsGradleProject() {
    method setExportAsGradleProject (line 589) | public void setExportAsGradleProject(boolean exportAsGradleProject) {
    method getExportGradleType (line 599) | public @Nullable ExportGradleType getExportGradleType() {
    method setExportGradleType (line 603) | public void setExportGradleType(@Nullable ExportGradleType exportGradl...
    method isRestoreSwitchOverString (line 607) | public boolean isRestoreSwitchOverString() {
    method setRestoreSwitchOverString (line 611) | public void setRestoreSwitchOverString(boolean restoreSwitchOverString) {
    method isSkipXmlPrettyPrint (line 615) | public boolean isSkipXmlPrettyPrint() {
    method setSkipXmlPrettyPrint (line 619) | public void setSkipXmlPrettyPrint(boolean skipXmlPrettyPrint) {
    method isFsCaseSensitive (line 623) | public boolean isFsCaseSensitive() {
    method setFsCaseSensitive (line 627) | public void setFsCaseSensitive(boolean fsCaseSensitive) {
    method isRenameCaseSensitive (line 631) | public boolean isRenameCaseSensitive() {
    method setRenameCaseSensitive (line 635) | public void setRenameCaseSensitive(boolean renameCaseSensitive) {
    method isRenameValid (line 639) | public boolean isRenameValid() {
    method setRenameValid (line 643) | public void setRenameValid(boolean renameValid) {
    method isRenamePrintable (line 647) | public boolean isRenamePrintable() {
    method setRenamePrintable (line 651) | public void setRenamePrintable(boolean renamePrintable) {
    method updateRenameFlag (line 655) | private void updateRenameFlag(boolean enabled, RenameEnum flag) {
    method setRenameFlags (line 663) | public void setRenameFlags(Set<RenameEnum> renameFlags) {
    method getRenameFlags (line 667) | public Set<RenameEnum> getRenameFlags() {
    method getOutputFormat (line 671) | public OutputFormatEnum getOutputFormat() {
    method isJsonOutput (line 675) | public boolean isJsonOutput() {
    method setOutputFormat (line 679) | public void setOutputFormat(OutputFormatEnum outputFormat) {
    method getDecompilationMode (line 683) | public DecompilationMode getDecompilationMode() {
    method setDecompilationMode (line 687) | public void setDecompilationMode(DecompilationMode decompilationMode) {
    method getCodeCache (line 691) | public ICodeCache getCodeCache() {
    method setCodeCache (line 695) | public void setCodeCache(ICodeCache codeCache) {
    method getCodeWriterProvider (line 699) | public Function<JadxArgs, ICodeWriter> getCodeWriterProvider() {
    method setCodeWriterProvider (line 703) | public void setCodeWriterProvider(Function<JadxArgs, ICodeWriter> code...
    method getUsageInfoCache (line 707) | public IUsageInfoCache getUsageInfoCache() {
    method setUsageInfoCache (line 711) | public void setUsageInfoCache(IUsageInfoCache usageInfoCache) {
    method getCodeData (line 715) | public ICodeData getCodeData() {
    method setCodeData (line 719) | public void setCodeData(ICodeData codeData) {
    method getCodeIndentStr (line 723) | public String getCodeIndentStr() {
    method setCodeIndentStr (line 727) | public void setCodeIndentStr(String codeIndentStr) {
    method getCodeNewLineStr (line 731) | public String getCodeNewLineStr() {
    method setCodeNewLineStr (line 735) | public void setCodeNewLineStr(String codeNewLineStr) {
    method getCommentsLevel (line 739) | public CommentsLevel getCommentsLevel() {
    method setCommentsLevel (line 743) | public void setCommentsLevel(CommentsLevel commentsLevel) {
    method getIntegerFormat (line 747) | public IntegerFormat getIntegerFormat() {
    method setIntegerFormat (line 751) | public void setIntegerFormat(IntegerFormat format) {
    method getTypeUpdatesLimitCount (line 755) | public int getTypeUpdatesLimitCount() {
    method setTypeUpdatesLimitCount (line 759) | public void setTypeUpdatesLimitCount(int typeUpdatesLimitCount) {
    method isUseDxInput (line 763) | public boolean isUseDxInput() {
    method setUseDxInput (line 767) | public void setUseDxInput(boolean useDxInput) {
    method getUseKotlinMethodsForVarNames (line 771) | public UseKotlinMethodsForVarNames getUseKotlinMethodsForVarNames() {
    method setUseKotlinMethodsForVarNames (line 775) | public void setUseKotlinMethodsForVarNames(UseKotlinMethodsForVarNames...
    method getFilesGetter (line 779) | public IJadxFilesGetter getFilesGetter() {
    method setFilesGetter (line 783) | public void setFilesGetter(IJadxFilesGetter filesGetter) {
    method getSecurity (line 787) | public IJadxSecurity getSecurity() {
    method setSecurity (line 791) | public void setSecurity(IJadxSecurity security) {
    method isSkipFilesSave (line 795) | public boolean isSkipFilesSave() {
    method setSkipFilesSave (line 799) | public void setSkipFilesSave(boolean skipFilesSave) {
    method isRunDebugChecks (line 803) | public boolean isRunDebugChecks() {
    method setRunDebugChecks (line 807) | public void setRunDebugChecks(boolean runDebugChecks) {
    method getDisabledPasses (line 811) | public List<String> getDisabledPasses() {
    method getPluginOptions (line 815) | public Map<String, String> getPluginOptions() {
    method setPluginOptions (line 819) | public void setPluginOptions(Map<String, String> pluginOptions) {
    method getDisabledPlugins (line 823) | public Set<String> getDisabledPlugins() {
    method setDisabledPlugins (line 827) | public void setDisabledPlugins(Set<String> disabledPlugins) {
    method getPluginLoader (line 831) | public JadxPluginLoader getPluginLoader() {
    method setPluginLoader (line 835) | public void setPluginLoader(JadxPluginLoader pluginLoader) {
    method isLoadJadxClsSetFile (line 839) | public boolean isLoadJadxClsSetFile() {
    method setLoadJadxClsSetFile (line 843) | public void setLoadJadxClsSetFile(boolean loadJadxClsSetFile) {
    method setUseHeadersForDetectResourceExtensions (line 847) | public void setUseHeadersForDetectResourceExtensions(boolean useHeader...
    method isUseHeadersForDetectResourceExtensions (line 851) | public boolean isUseHeadersForDetectResourceExtensions() {
    method makeCodeArgsHash (line 858) | public String makeCodeArgsHash(@Nullable JadxDecompiler decompiler) {
    method buildPluginsHash (line 873) | private static String buildPluginsHash(@Nullable JadxDecompiler decomp...
    method toString (line 883) | @Override

FILE: jadx-core/src/main/java/jadx/api/JadxArgsValidator.java
  class JadxArgsValidator (line 12) | public class JadxArgsValidator {
    method validate (line 16) | public static void validate(JadxDecompiler jadx) {
    method checkInputFiles (line 26) | private static void checkInputFiles(JadxDecompiler jadx, JadxArgs args) {
    method validateOutDirs (line 36) | private static void validateOutDirs(JadxArgs args) {
    method makeDirFromInput (line 62) | @NotNull
    method checkFile (line 82) | private static void checkFile(File file) {
    method checkDir (line 88) | private static void checkDir(File dir, String desc) {
    method JadxArgsValidator (line 94) | private JadxArgsValidator() {

FILE: jadx-core/src/main/java/jadx/api/JadxDecompiler.java
  class JadxDecompiler (line 86) | public final class JadxDecompiler implements Closeable {
    method JadxDecompiler (line 108) | public JadxDecompiler() {
    method JadxDecompiler (line 112) | public JadxDecompiler(JadxArgs args) {
    method load (line 119) | public void load() {
    method reloadPasses (line 144) | public void reloadPasses() {
    method loadInputFiles (line 158) | private void loadInputFiles() {
    method reset (line 181) | private void reset() {
    method close (line 189) | @Override
    method closeAll (line 201) | private void closeAll(List<? extends Closeable> list) {
    method loadPlugins (line 215) | private void loadPlugins() {
    method unloadPlugins (line 229) | private void unloadPlugins() {
    method loadFinished (line 233) | private void loadFinished() {
    method registerPlugin (line 243) | @SuppressWarnings("unused")
    method getVersion (line 248) | public static String getVersion() {
    method save (line 252) | public void save() {
    type ProgressListener (line 256) | public interface ProgressListener {
      method progress (line 257) | void progress(long done, long total);
    method save (line 260) | @SuppressWarnings("BusyWait")
    method saveSources (line 276) | public void saveSources() {
    method saveResources (line 280) | public void saveResources() {
    method save (line 284) | private void save(boolean saveSources, boolean saveResources) {
    method getSaveTaskExecutor (line 290) | public ITaskExecutor getSaveTaskExecutor() {
    method getSaveExecutor (line 294) | @Deprecated(forRemoval = true)
    method getSaveTasks (line 301) | @Deprecated(forRemoval = true)
    method getSaveTasks (line 306) | private TaskExecutor getSaveTasks(boolean saveSources, boolean saveRes...
    method appendResourcesSaveTasks (line 336) | private void appendResourcesSaveTasks(ITaskExecutor executor, File out...
    method collectCodeSources (line 374) | private Set<String> collectCodeSources() {
    method appendSourcesSave (line 397) | private void appendSourcesSave(ITaskExecutor executor, File outDir) {
    method filterClasses (line 424) | private List<JavaClass> filterClasses(List<JavaClass> classes) {
    method getClasses (line 443) | public synchronized List<JavaClass> getClasses() {
    method getClassesWithInners (line 460) | public List<JavaClass> getClassesWithInners() {
    method getResources (line 464) | public synchronized List<ResourceFile> getResources() {
    method getPackages (line 474) | public List<JavaPackage> getPackages() {
    method getErrorsCount (line 478) | public int getErrorsCount() {
    method getWarnsCount (line 485) | public int getWarnsCount() {
    method printErrorsReport (line 492) | public void printErrorsReport() {
    method getRoot (line 503) | @ApiStatus.Internal
    method convertClassNode (line 511) | @ApiStatus.Internal
    method convertFieldNode (line 523) | @ApiStatus.Internal
    method convertMethodNode (line 534) | @ApiStatus.Internal
    method convertPackageNode (line 544) | @ApiStatus.Internal
    method searchJavaClassByOrigFullName (line 565) | @Nullable
    method searchClassNodeByOrigFullName (line 574) | @Nullable
    method searchJavaClassOrItsParentByOrigFullName (line 583) | @Nullable
    method searchJavaClassByAliasFullName (line 599) | @Nullable
    method getJavaNodeByRef (line 608) | @Nullable
    method getJavaNodeByCodeAnnotation (line 613) | @Nullable
    method resolveVarNode (line 641) | private JavaVariable resolveVarNode(VarNode varNode) {
    method resolveVarRef (line 646) | @Nullable
    method convertNodes (line 661) | List<JavaNode> convertNodes(Collection<? extends ICodeNodeRef> nodesLi...
    method getJavaNodeAtPosition (line 668) | @Nullable
    method getClosestJavaNode (line 674) | @Nullable
    method getEnclosingNode (line 680) | @Nullable
    method reloadCodeData (line 689) | public void reloadCodeData() {
    method getArgs (line 693) | public JadxArgs getArgs() {
    method getPluginManager (line 697) | public JadxPluginManager getPluginManager() {
    method getDecompileScheduler (line 701) | public IDecompileScheduler getDecompileScheduler() {
    method events (line 705) | public IJadxEvents events() {
    method setEventsImpl (line 709) | public void setEventsImpl(IJadxEvents eventsImpl) {
    method addCustomCodeLoader (line 713) | public void addCustomCodeLoader(ICodeLoader customCodeLoader) {
    method getCustomCodeLoaders (line 717) | public List<ICodeLoader> getCustomCodeLoaders() {
    method addCustomResourcesLoader (line 721) | public void addCustomResourcesLoader(CustomResourcesLoader loader) {
    method getCustomResourcesLoaders (line 728) | public List<CustomResourcesLoader> getCustomResourcesLoaders() {
    method addCustomPass (line 732) | public void addCustomPass(JadxPass pass) {
    method getResourcesLoader (line 736) | public ResourcesLoader getResourcesLoader() {
    method getZipReader (line 740) | public ZipReader getZipReader() {
    method addCloseable (line 744) | public void addCloseable(Closeable closeable) {
    method toString (line 748) | @Override

FILE: jadx-core/src/main/java/jadx/api/JavaClass.java
  class JavaClass (line 28) | public final class JavaClass implements JavaNode {
    method JavaClass (line 41) | JavaClass(ClassNode classNode, JadxDecompiler decompiler) {
    method JavaClass (line 50) | JavaClass(ClassNode classNode, JavaClass parent) {
    method getCode (line 56) | public String getCode() {
    method getCodeInfo (line 60) | public @NotNull ICodeInfo getCodeInfo() {
    method decompile (line 68) | public void decompile() {
    method reload (line 72) | public synchronized ICodeInfo reload() {
    method unload (line 77) | public void unload() {
    method isNoCode (line 82) | public boolean isNoCode() {
    method isInner (line 86) | public boolean isInner() {
    method getSmali (line 90) | public synchronized String getSmali() {
    method isOwnCodeAnnotation (line 94) | @Override
    method getCodeNodeRef (line 102) | @Override
    method getClassNode (line 110) | @ApiStatus.Internal
    method load (line 121) | private synchronized @Nullable ICodeInfo load() {
    method loadLists (line 136) | private void loadLists() {
    method getRootDecompiler (line 186) | JadxDecompiler getRootDecompiler() {
    method getAnnotationAt (line 193) | public ICodeAnnotation getAnnotationAt(int pos) {
    method getUsageMap (line 197) | public Map<Integer, JavaNode> getUsageMap() {
    method getUsePlacesFor (line 216) | public List<Integer> getUsePlacesFor(ICodeInfo codeInfo, JavaNode java...
    method getUseIn (line 230) | @Override
    method getSourceLine (line 235) | public Integer getSourceLine(int decompiledLine) {
    method getName (line 239) | @Override
    method getFullName (line 244) | @Override
    method getRawName (line 249) | public String getRawName() {
    method getPackage (line 253) | public String getPackage() {
    method getJavaPackage (line 257) | public JavaPackage getJavaPackage() {
    method getDeclaringClass (line 261) | @Override
    method getOriginalTopParentClass (line 266) | public JavaClass getOriginalTopParentClass() {
    method getTopParentClass (line 276) | @Override
    method getCodeParent (line 286) | public @Nullable JavaClass getCodeParent() {
    method getAccessInfo (line 299) | public AccessInfo getAccessInfo() {
    method getInnerClasses (line 303) | public List<JavaClass> getInnerClasses() {
    method getInlinedClasses (line 308) | public List<JavaClass> getInlinedClasses() {
    method getFields (line 313) | public List<JavaField> getFields() {
    method getMethods (line 318) | public List<JavaMethod> getMethods() {
    method searchMethodByShortId (line 323) | @Nullable
    method getDependencies (line 332) | public List<JavaClass> getDependencies() {
    method getTotalDepsCount (line 337) | public int getTotalDepsCount() {
    method removeAlias (line 341) | @Override
    method getDefPos (line 346) | @Override
    method equals (line 351) | @Override
    method hashCode (line 356) | @Override
    method toString (line 361) | @Override
    method loadingWouldRequireDecompilation (line 369) | public boolean loadingWouldRequireDecompilation() {

FILE: jadx-core/src/main/java/jadx/api/JavaField.java
  class JavaField (line 13) | public final class JavaField implements JavaNode {
    method JavaField (line 18) | JavaField(JavaClass cls, FieldNode f) {
    method getName (line 23) | @Override
    method getFullName (line 28) | @Override
    method getRawName (line 33) | public String getRawName() {
    method getDeclaringClass (line 37) | @Override
    method getTopParentClass (line 42) | @Override
    method getAccessFlags (line 47) | public AccessInfo getAccessFlags() {
    method getType (line 51) | public ArgType getType() {
    method getDefPos (line 55) | @Override
    method getUseIn (line 60) | @Override
    method removeAlias (line 65) | @Override
    method isOwnCodeAnnotation (line 70) | @Override
    method getCodeNodeRef (line 78) | @Override
    method getFieldNode (line 86) | @ApiStatus.Internal
    method hashCode (line 91) | @Override
    method equals (line 96) | @Override
    method toString (line 101) | @Override

FILE: jadx-core/src/main/java/jadx/api/JavaMethod.java
  class JavaMethod (line 21) | public final class JavaMethod implements JavaNode {
    method JavaMethod (line 27) | JavaMethod(JavaClass cls, MethodNode m) {
    method getName (line 32) | @Override
    method getFullName (line 37) | @Override
    method getDeclaringClass (line 42) | @Override
    method getTopParentClass (line 47) | @Override
    method getAccessFlags (line 52) | public AccessInfo getAccessFlags() {
    method getArguments (line 56) | public List<ArgType> getArguments() {
    method getReturnType (line 66) | public ArgType getReturnType() {
    method getUseIn (line 71) | @Override
    method getUsed (line 76) | public List<JavaNode> getUsed() {
    method getUnresolvedUsed (line 80) | public List<IMethodRef> getUnresolvedUsed() {
    method callsSelf (line 84) | public boolean callsSelf() {
    method getOverrideRelatedMethods (line 88) | public List<JavaMethod> getOverrideRelatedMethods() {
    method isConstructor (line 100) | public boolean isConstructor() {
    method isClassInit (line 104) | public boolean isClassInit() {
    method getDefPos (line 108) | @Override
    method getCodeStr (line 113) | public String getCodeStr() {
    method removeAlias (line 117) | @Override
    method isOwnCodeAnnotation (line 122) | @Override
    method getCodeNodeRef (line 130) | @Override
    method getMethodNode (line 138) | @ApiStatus.Internal
    method hashCode (line 143) | @Override
    method equals (line 148) | @Override
    method toString (line 153) | @Override

FILE: jadx-core/src/main/java/jadx/api/JavaNode.java
  type JavaNode (line 8) | public interface JavaNode {
    method getCodeNodeRef (line 10) | ICodeNodeRef getCodeNodeRef();
    method getName (line 12) | String getName();
    method getFullName (line 14) | String getFullName();
    method getDeclaringClass (line 16) | JavaClass getDeclaringClass();
    method getTopParentClass (line 18) | JavaClass getTopParentClass();
    method getDefPos (line 20) | int getDefPos();
    method getUseIn (line 22) | List<JavaNode> getUseIn();
    method removeAlias (line 24) | void removeAlias();
    method isOwnCodeAnnotation (line 26) | boolean isOwnCodeAnnotation(ICodeAnnotation ann);

FILE: jadx-core/src/main/java/jadx/api/JavaPackage.java
  class JavaPackage (line 15) | public final class JavaPackage implements JavaNode, Comparable<JavaPacka...
    method JavaPackage (line 21) | JavaPackage(PackageNode pkgNode, List<JavaClass> classes, List<JavaPac...
    method JavaPackage (line 25) | JavaPackage(PackageNode pkgNode, List<JavaClass> classes, List<JavaCla...
    method getName (line 32) | @Override
    method getFullName (line 37) | @Override
    method getRawName (line 42) | public String getRawName() {
    method getRawFullName (line 46) | public String getRawFullName() {
    method getSubPackages (line 50) | public List<JavaPackage> getSubPackages() {
    method getClasses (line 54) | public List<JavaClass> getClasses() {
    method getClassesNoDup (line 58) | public List<JavaClass> getClassesNoDup() {
    method isRoot (line 62) | public boolean isRoot() {
    method isLeaf (line 66) | public boolean isLeaf() {
    method isDefault (line 70) | public boolean isDefault() {
    method rename (line 74) | public void rename(String alias) {
    method removeAlias (line 78) | @Override
    method isParentRenamed (line 83) | public boolean isParentRenamed() {
    method isDescendantOf (line 89) | public boolean isDescendantOf(JavaPackage ancestor) {
    method getCodeNodeRef (line 105) | @Override
    method getPkgNode (line 110) | @Internal
    method getDeclaringClass (line 115) | @Override
    method getTopParentClass (line 120) | @Override
    method getDefPos (line 125) | @Override
    method getUseIn (line 130) | @Override
    method addUseIn (line 137) | public void addUseIn(List<JavaNode> list) {
    method isOwnCodeAnnotation (line 144) | @Override
    method compareTo (line 149) | @Override
    method equals (line 154) | @Override
    method hashCode (line 166) | @Override
    method toString (line 171) | @Override

FILE: jadx-core/src/main/java/jadx/api/JavaVariable.java
  class JavaVariable (line 15) | public class JavaVariable implements JavaNode {
    method JavaVariable (line 19) | public JavaVariable(JavaMethod mth, VarNode varNode) {
    method getMth (line 24) | public JavaMethod getMth() {
    method getReg (line 28) | public int getReg() {
    method getSsa (line 32) | public int getSsa() {
    method getName (line 36) | @Override
    method getCodeNodeRef (line 41) | @Override
    method getVarNode (line 46) | @ApiStatus.Internal
    method getFullName (line 51) | @Override
    method getType (line 56) | public ArgType getType() {
    method getDeclaringClass (line 60) | @Override
    method getTopParentClass (line 65) | @Override
    method getDefPos (line 70) | @Override
    method getUseIn (line 75) | @Override
    method removeAlias (line 80) | @Override
    method isOwnCodeAnnotation (line 85) | @Override
    method hashCode (line 94) | @Override
    method equals (line 99) | @Override

FILE: jadx-core/src/main/java/jadx/api/ResourceFile.java
  class ResourceFile (line 14) | public class ResourceFile {
    method createResourceFile (line 22) | public static ResourceFile createResourceFile(JadxDecompiler decompile...
    method createResourceFile (line 26) | public static ResourceFile createResourceFile(JadxDecompiler decompile...
    method ResourceFile (line 33) | protected ResourceFile(JadxDecompiler decompiler, String name, Resourc...
    method getOriginalName (line 39) | public String getOriginalName() {
    method getDeobfName (line 43) | public String getDeobfName() {
    method setDeobfName (line 47) | public void setDeobfName(String resFullName) {
    method getType (line 51) | public ResourceType getType() {
    method loadContent (line 55) | public ResContainer loadContent() {
    method setAlias (line 59) | public boolean setAlias(ResourceEntry entry, boolean useHeaders) {
    method getExtFromName (line 102) | private String getExtFromName(String name) {
    method getZipEntry (line 116) | public @Nullable IZipEntry getZipEntry() {
    method setZipEntry (line 120) | void setZipEntry(@Nullable IZipEntry zipEntry) {
    method getDecompiler (line 124) | public JadxDecompiler getDecompiler() {
    method toString (line 128) | @Override

FILE: jadx-core/src/main/java/jadx/api/ResourceFileContainer.java
  class ResourceFileContainer (line 5) | public class ResourceFileContainer extends ResourceFile {
    method ResourceFileContainer (line 8) | public ResourceFileContainer(String name, ResourceType type, ResContai...
    method loadContent (line 13) | @Override

FILE: jadx-core/src/main/java/jadx/api/ResourceFileContent.java
  class ResourceFileContent (line 5) | public class ResourceFileContent extends ResourceFile {
    method ResourceFileContent (line 8) | public ResourceFileContent(String name, ResourceType type, ICodeInfo c...
    method loadContent (line 13) | @Override

FILE: jadx-core/src/main/java/jadx/api/ResourceType.java
  type ResourceType (line 14) | public enum ResourceType {
    method ResourceType (line 36) | ResourceType(ResourceContentType contentType, String... exts) {
    method getContentType (line 41) | public ResourceContentType getContentType() {
    method getExts (line 45) | public String[] getExts() {
    method getFileType (line 62) | public static ResourceType getFileType(String fileName) {

FILE: jadx-core/src/main/java/jadx/api/ResourcesLoader.java
  class ResourcesLoader (line 39) | public final class ResourcesLoader implements IResourcesLoader {
    method ResourcesLoader (line 49) | ResourcesLoader(JadxDecompiler decompiler) {
    method load (line 54) | List<ResourceFile> load(RootNode root) {
    method init (line 64) | private void init(RootNode root) {
    type ResourceDecoder (line 81) | public interface ResourceDecoder<T> {
      method decode (line 82) | T decode(long size, InputStream is) throws IOException;
    method addResContainerFactory (line 85) | @Override
    method addResTableParserProvider (line 90) | @Override
    method decodeStream (line 95) | public static <T> T decodeStream(ResourceFile rf, ResourceDecoder<T> d...
    method loadContent (line 113) | static ResContainer loadContent(JadxDecompiler jadxRef, ResourceFile r...
    method loadContent (line 126) | private ResContainer loadContent(ResourceFile resFile, InputStream inp...
    method decodeTable (line 150) | public IResTableParser decodeTable(ResourceFile resFile, InputStream i...
    method decodeImage (line 169) | private static ResContainer decodeImage(ResourceFile rf, InputStream i...
    method loadFile (line 184) | private void loadFile(List<ResourceFile> list, File file) {
    method defaultLoadFile (line 201) | public void defaultLoadFile(List<ResourceFile> list, File file, String...
    method addEntry (line 219) | public void addEntry(List<ResourceFile> list, File zipFile, IZipEntry ...
    method loadToCodeWriter (line 232) | public static ICodeInfo loadToCodeWriter(InputStream is) throws IOExce...
    method loadToCodeWriter (line 236) | public static ICodeInfo loadToCodeWriter(InputStream is, Charset chars...
    method loadBinaryXmlParser (line 242) | private synchronized BinaryXMLParser loadBinaryXmlParser() {

FILE: jadx-core/src/main/java/jadx/api/args/GeneratedRenamesMappingFileMode.java
  type GeneratedRenamesMappingFileMode (line 3) | public enum GeneratedRenamesMappingFileMode {
    method getDefault (line 25) | public static GeneratedRenamesMappingFileMode getDefault() {
    method shouldRead (line 29) | public boolean shouldRead() {
    method shouldWrite (line 33) | public boolean shouldWrite() {

FILE: jadx-core/src/main/java/jadx/api/args/IntegerFormat.java
  type IntegerFormat (line 3) | public enum IntegerFormat {
    method isHexadecimal (line 8) | public boolean isHexadecimal() {

FILE: jadx-core/src/main/java/jadx/api/args/ResourceNameSource.java
  type ResourceNameSource (line 6) | public enum ResourceNameSource {

FILE: jadx-core/src/main/java/jadx/api/args/UseSourceNameAsClassNameAlias.java
  type UseSourceNameAsClassNameAlias (line 5) | public enum UseSourceNameAsClassNameAlias {
    method getDefault (line 10) | public static UseSourceNameAsClassNameAlias getDefault() {
    method toBoolean (line 17) | @Deprecated
    method create (line 34) | @Deprecated

FILE: jadx-core/src/main/java/jadx/api/args/UserRenamesMappingsMode.java
  type UserRenamesMappingsMode (line 3) | public enum UserRenamesMappingsMode {
    method getDefault (line 25) | public static UserRenamesMappingsMode getDefault() {
    method shouldRead (line 29) | public boolean shouldRead() {
    method shouldWrite (line 33) | public boolean shouldWrite() {

FILE: jadx-core/src/main/java/jadx/api/data/CodeRefType.java
  type CodeRefType (line 3) | public enum CodeRefType {

FILE: jadx-core/src/main/java/jadx/api/data/CommentStyle.java
  type CommentStyle (line 3) | public enum CommentStyle {
    method CommentStyle (line 52) | CommentStyle(String start, String onNewLine, String end) {
    method getStart (line 58) | public String getStart() {
    method getOnNewLine (line 62) | public String getOnNewLine() {
    method getEnd (line 66) | public String getEnd() {

FILE: jadx-core/src/main/java/jadx/api/data/ICodeComment.java
  type ICodeComment (line 5) | public interface ICodeComment extends Comparable<ICodeComment> {
    method getNodeRef (line 7) | IJavaNodeRef getNodeRef();
    method getCodeRef (line 9) | @Nullable
    method getComment (line 12) | String getComment();
    method getStyle (line 14) | CommentStyle getStyle();

FILE: jadx-core/src/main/java/jadx/api/data/ICodeData.java
  type ICodeData (line 5) | public interface ICodeData {
    method getComments (line 7) | List<ICodeComment> getComments();
    method getRenames (line 9) | List<ICodeRename> getRenames();
    method isEmpty (line 11) | boolean isEmpty();

FILE: jadx-core/src/main/java/jadx/api/data/ICodeRename.java
  type ICodeRename (line 5) | public interface ICodeRename extends Comparable<ICodeRename> {
    method getNodeRef (line 7) | IJavaNodeRef getNodeRef();
    method getCodeRef (line 9) | @Nullable
    method getNewName (line 12) | String getNewName();

FILE: jadx-core/src/main/java/jadx/api/data/IJavaCodeRef.java
  type IJavaCodeRef (line 5) | public interface IJavaCodeRef extends Comparable<IJavaCodeRef> {
    method getAttachType (line 7) | CodeRefType getAttachType();
    method getIndex (line 9) | int getIndex();
    method compareTo (line 11) | @Override

FILE: jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java
  type IJavaNodeRef (line 3) | public interface IJavaNodeRef extends Comparable<IJavaNodeRef> {
    type RefType (line 5) | enum RefType {
    method getType (line 9) | RefType getType();
    method getDeclaringClass (line 11) | String getDeclaringClass();
    method getShortId (line 13) | String getShortId();

FILE: jadx-core/src/main/java/jadx/api/data/IRenameNode.java
  type IRenameNode (line 3) | public interface IRenameNode {
    method rename (line 5) | void rename(String newName);

FILE: jadx-core/src/main/java/jadx/api/data/impl/JadxCodeComment.java
  class JadxCodeComment (line 11) | public class JadxCodeComment implements ICodeComment {
    method JadxCodeComment (line 19) | public JadxCodeComment(IJavaNodeRef nodeRef, String comment) {
    method JadxCodeComment (line 23) | public JadxCodeComment(IJavaNodeRef nodeRef, String comment, CommentSt...
    method JadxCodeComment (line 27) | public JadxCodeComment(IJavaNodeRef nodeRef, @Nullable IJavaCodeRef co...
    method JadxCodeComment (line 31) | public JadxCodeComment(IJavaNodeRef nodeRef, @Nullable IJavaCodeRef co...
    method JadxCodeComment (line 38) | public JadxCodeComment() {
    method getNodeRef (line 42) | @Override
    method setNodeRef (line 47) | public void setNodeRef(IJavaNodeRef nodeRef) {
    method getCodeRef (line 51) | @Nullable
    method setCodeRef (line 57) | public void setCodeRef(@Nullable IJavaCodeRef codeRef) {
    method getComment (line 61) | @Override
    method setComment (line 66) | public void setComment(String comment) {
    method getStyle (line 70) | @Override
    method setStyle (line 75) | public void setStyle(CommentStyle style) {
    method compareTo (line 79) | @Override
    method toString (line 91) | @Override

FILE: jadx-core/src/main/java/jadx/api/data/impl/JadxCodeData.java
  class JadxCodeData (line 10) | public class JadxCodeData implements ICodeData {
    method getComments (line 14) | @Override
    method setComments (line 19) | public void setComments(List<ICodeComment> comments) {
    method getRenames (line 23) | @Override
    method setRenames (line 28) | public void setRenames(List<ICodeRename> renames) {
    method isEmpty (line 32) | @Override

FILE: jadx-core/src/main/java/jadx/api/data/impl/JadxCodeRef.java
  class JadxCodeRef (line 8) | public class JadxCodeRef implements IJavaCodeRef {
    method forInsn (line 10) | public static JadxCodeRef forInsn(int offset) {
    method forMthArg (line 14) | public static JadxCodeRef forMthArg(int argIndex) {
    method forVar (line 18) | public static JadxCodeRef forVar(int regNum, int ssaVersion) {
    method forVar (line 22) | public static JadxCodeRef forVar(JavaVariable javaVariable) {
    method forVar (line 26) | public static JadxCodeRef forVar(VarNode varNode) {
    method forCatch (line 30) | public static JadxCodeRef forCatch(int handlerOffset) {
    method JadxCodeRef (line 37) | public JadxCodeRef(CodeRefType attachType, int index) {
    method JadxCodeRef (line 42) | public JadxCodeRef() {
    method getAttachType (line 46) | public CodeRefType getAttachType() {
    method setAttachType (line 50) | public void setAttachType(CodeRefType attachType) {
    method getIndex (line 54) | @Override
    method setIndex (line 59) | public void setIndex(int index) {
    method equals (line 63) | @Override
    method hashCode (line 76) | @Override
    method toString (line 81) | @Override

FILE: jadx-core/src/main/java/jadx/api/data/impl/JadxCodeRename.java
  class JadxCodeRename (line 12) | public class JadxCodeRename implements ICodeRename {
    method JadxCodeRename (line 18) | public JadxCodeRename(IJavaNodeRef nodeRef, String newName) {
    method JadxCodeRename (line 22) | public JadxCodeRename(IJavaNodeRef nodeRef, @Nullable IJavaCodeRef cod...
    method JadxCodeRename (line 28) | public JadxCodeRename() {
    method getNodeRef (line 32) | @Override
    method setNodeRef (line 37) | public void setNodeRef(IJavaNodeRef nodeRef) {
    method getCodeRef (line 41) | @Override
    method setCodeRef (line 46) | public void setCodeRef(IJavaCodeRef codeRef) {
    method getNewName (line 50) | @Override
    method setNewName (line 55) | public void setNewName(String newName) {
    method compareTo (line 59) | @Override
    method equals (line 71) | @Override
    method hashCode (line 84) | @Override
    method toString (line 89) | @Override

FILE: jadx-core/src/main/java/jadx/api/data/impl/JadxNodeRef.java
  class JadxNodeRef (line 15) | public class JadxNodeRef implements IJavaNodeRef {
    method forJavaNode (line 17) | @Nullable
    method forCls (line 31) | public static JadxNodeRef forCls(JavaClass cls) {
    method forCls (line 35) | public static JadxNodeRef forCls(String clsFullName) {
    method forMth (line 39) | public static JadxNodeRef forMth(JavaMethod mth) {
    method forFld (line 45) | public static JadxNodeRef forFld(JavaField fld) {
    method forPkg (line 51) | public static JadxNodeRef forPkg(String pkgFullName) {
    method getClassRefStr (line 55) | private static String getClassRefStr(JavaClass cls) {
    method JadxNodeRef (line 64) | public JadxNodeRef(RefType refType, String declClass, @Nullable String...
    method JadxNodeRef (line 70) | public JadxNodeRef() {
    method getType (line 74) | @Override
    method setRefType (line 79) | public void setRefType(RefType refType) {
    method getDeclaringClass (line 83) | @Override
    method setDeclClass (line 88) | public void setDeclClass(String declClass) {
    method getShortId (line 92) | @Nullable
    method setShortId (line 98) | public void setShortId(@Nullable String shortId) {
    method compareTo (line 107) | @Override
    method hashCode (line 112) | @Override
    method equals (line 117) | @Override
    method toString (line 131) | @Override

FILE: jadx-core/src/main/java/jadx/api/deobf/IAliasProvider.java
  type IAliasProvider (line 9) | public interface IAliasProvider {
    method init (line 11) | default void init(RootNode root) {
    method forPackage (line 15) | String forPackage(PackageNode pkg);
    method forClass (line 17) | String forClass(ClassNode cls);
    method forField (line 19) | String forField(FieldNode fld);
    method forMethod (line 21) | String forMethod(MethodNode mth);
    method initIndexes (line 26) | default void initIndexes(int pkg, int cls, int fld, int mth) {

FILE: jadx-core/src/main/java/jadx/api/deobf/IDeobfCondition.java
  type IDeobfCondition (line 14) | public interface IDeobfCondition {
    type Action (line 16) | enum Action {
    method init (line 22) | void init(RootNode root);
    method check (line 24) | Action check(PackageNode pkg);
    method check (line 26) | Action check(ClassNode cls);
    method check (line 28) | Action check(FieldNode fld);
    method check (line 30) | Action check(MethodNode mth);

FILE: jadx-core/src/main/java/jadx/api/deobf/IRenameCondition.java
  type IRenameCondition (line 9) | public interface IRenameCondition {
    method init (line 11) | void init(RootNode root);
    method shouldRename (line 13) | boolean shouldRename(PackageNode pkg);
    method shouldRename (line 15) | boolean shouldRename(ClassNode cls);
    method shouldRename (line 17) | boolean shouldRename(FieldNode fld);
    method shouldRename (line 19) | boolean shouldRename(MethodNode mth);

FILE: jadx-core/src/main/java/jadx/api/deobf/impl/AlwaysRename.java
  class AlwaysRename (line 10) | public class AlwaysRename implements IRenameCondition {
    method AlwaysRename (line 14) | private AlwaysRename() {
    method init (line 17) | @Override
    method shouldRename (line 21) | @Override
    method shouldRename (line 26) | @Override
    method shouldRename (line 31) | @Override
    method shouldRename (line 36) | @Override

FILE: jadx-core/src/main/java/jadx/api/deobf/impl/AnyRenameCondition.java
  class AnyRenameCondition (line 13) | public class AnyRenameCondition implements IRenameCondition {
    method AnyRenameCondition (line 17) | public AnyRenameCondition(BiPredicate<String, IDexNode> predicate) {
    method init (line 21) | @Override
    method shouldRename (line 25) | @Override
    method shouldRename (line 30) | @Override
    method shouldRename (line 35) | @Override
    method shouldRename (line 40) | @Override

FILE: jadx-core/src/main/java/jadx/api/deobf/impl/CombineDeobfConditions.java
  class CombineDeobfConditions (line 15) | public class CombineDeobfConditions implements IRenameCondition {
    method combine (line 17) | public static IRenameCondition combine(List<IDeobfCondition> condition...
    method combine (line 21) | public static IRenameCondition combine(IDeobfCondition... conditions) {
    method CombineDeobfConditions (line 27) | private CombineDeobfConditions(List<IDeobfCondition> conditions) {
    method combineFunc (line 34) | private boolean combineFunc(Function<IDeobfCondition, IDeobfCondition....
    method init (line 49) | @Override
    method shouldRename (line 54) | @Override
    method shouldRename (line 59) | @Override
    method shouldRename (line 64) | @Override
    method shouldRename (line 69) | @Override

FILE: jadx-core/src/main/java/jadx/api/gui/tree/ITreeNode.java
  type ITreeNode (line 10) | public interface ITreeNode extends TreeNode {
    method getID (line 15) | String getID();
    method getName (line 20) | String getName();
    method getIcon (line 25) | Icon getIcon();
    method getCodeNodeRef (line 30) | @Nullable

FILE: jadx-core/src/main/java/jadx/api/impl/AnnotatedCodeInfo.java
  class AnnotatedCodeInfo (line 10) | public class AnnotatedCodeInfo implements ICodeInfo {
    method AnnotatedCodeInfo (line 15) | public AnnotatedCodeInfo(String code, Map<Integer, Integer> lineMappin...
    method getCodeStr (line 20) | @Override
    method getCodeMetadata (line 25) | @Override
    method hasMetadata (line 30) | @Override
    method toString (line 35) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/AnnotatedCodeWriter.java
  class AnnotatedCodeWriter (line 16) | public class AnnotatedCodeWriter extends SimpleCodeWriter implements ICo...
    method AnnotatedCodeWriter (line 23) | public AnnotatedCodeWriter(JadxArgs args) {
    method isMetadataSupported (line 27) | @Override
    method addMultiLine (line 32) | @Override
    method add (line 44) | @Override
    method add (line 51) | @Override
    method add (line 58) | @Override
    method addLine (line 81) | @Override
    method addLineIndent (line 88) | @Override
    method getLine (line 95) | @Override
    method getLineStartPos (line 100) | @Override
    method attachDefinition (line 105) | @Override
    method attachAnnotation (line 113) | @Override
    method attachLineAnnotation (line 121) | @Override
    method attachAnnotation (line 129) | private void attachAnnotation(ICodeAnnotation obj, int pos) {
    method attachSourceLine (line 136) | @Override
    method attachSourceLine (line 144) | private void attachSourceLine(int decompiledLine, int sourceLine) {
    method finish (line 151) | @Override
    method getRawAnnotations (line 158) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/DelegateCodeCache.java
  class DelegateCodeCache (line 11) | public abstract class DelegateCodeCache implements ICodeCache {
    method DelegateCodeCache (line 15) | public DelegateCodeCache(ICodeCache backCache) {
    method add (line 19) | @Override
    method remove (line 24) | @Override
    method get (line 29) | @Override
    method getCode (line 34) | @Override
    method contains (line 40) | @Override
    method close (line 45) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/InMemoryCodeCache.java
  class InMemoryCodeCache (line 13) | public class InMemoryCodeCache implements ICodeCache {
    method add (line 17) | @Override
    method remove (line 22) | @Override
    method get (line 27) | @NotNull
    method getCode (line 37) | @Override
    method contains (line 46) | @Override
    method close (line 51) | @Override
    method toString (line 56) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/NoOpCodeCache.java
  class NoOpCodeCache (line 9) | public class NoOpCodeCache implements ICodeCache {
    method add (line 13) | @Override
    method remove (line 18) | @Override
    method get (line 23) | @Override
    method getCode (line 29) | @Override
    method contains (line 34) | @Override
    method close (line 39) | @Override
    method toString (line 44) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/SimpleCodeInfo.java
  class SimpleCodeInfo (line 6) | public class SimpleCodeInfo implements ICodeInfo {
    method SimpleCodeInfo (line 10) | public SimpleCodeInfo(String code) {
    method getCodeStr (line 14) | @Override
    method getCodeMetadata (line 19) | @Override
    method hasMetadata (line 24) | @Override
    method toString (line 29) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/SimpleCodeWriter.java
  class SimpleCodeWriter (line 19) | public class SimpleCodeWriter implements ICodeWriter {
    method SimpleCodeWriter (line 30) | public SimpleCodeWriter(JadxArgs args) {
    method SimpleCodeWriter (line 43) | @Deprecated
    method isMetadataSupported (line 50) | @Override
    method startLine (line 55) | @Override
    method startLine (line 62) | @Override
    method startLine (line 69) | @Override
    method startLineWithNum (line 76) | @Override
    method addMultiLine (line 98) | @Override
    method add (line 108) | @Override
    method add (line 114) | @Override
    method add (line 120) | @Override
    method newLine (line 126) | @Override
    method addIndent (line 132) | @Override
    method addLine (line 138) | protected void addLine() {
    method addLineIndent (line 142) | protected SimpleCodeWriter addLineIndent() {
    method updateIndent (line 147) | private void updateIndent() {
    method incIndent (line 151) | @Override
    method decIndent (line 156) | @Override
    method incIndent (line 161) | private void incIndent(int c) {
    method decIndent (line 166) | private void decIndent(int c) {
    method getIndent (line 175) | @Override
    method setIndent (line 180) | @Override
    method getLine (line 186) | @Override
    method getLineStartPos (line 191) | @Override
    method attachDefinition (line 196) | @Override
    method attachAnnotation (line 201) | @Override
    method attachLineAnnotation (line 206) | @Override
    method attachSourceLine (line 211) | @Override
    method finish (line 216) | @Override
    method getStringWithoutFirstEmptyLine (line 223) | private String getStringWithoutFirstEmptyLine() {
    method getLength (line 231) | @Override
    method getRawBuf (line 236) | @Override
    method getRawAnnotations (line 241) | @Override
    method getCodeStr (line 246) | @Override
    method toString (line 251) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/passes/DecompilePassWrapper.java
  class DecompilePassWrapper (line 14) | public class DecompilePassWrapper extends AbstractVisitor implements IPa...
    method DecompilePassWrapper (line 19) | public DecompilePassWrapper(JadxDecompilePass decompilePass) {
    method getPass (line 23) | @Override
    method init (line 28) | @Override
    method visit (line 37) | @Override
    method visit (line 47) | @Override
    method getName (line 56) | @Override

FILE: jadx-core/src/main/java/jadx/api/impl/passes/IPassWrapperVisitor.java
  type IPassWrapperVisitor (line 6) | public interface IPassWrapperVisitor extends IDexTreeVisitor {
    method getPass (line 8) | JadxPass getPass();

FILE: jadx-core/src/main/java/jadx/api/impl/passes/PreparePassWrapper.java
  class PreparePassWrapper (line 12) | public class PreparePassWrapper extends AbstractVisitor implements IPass...
    method PreparePassWrapper (line 17) | public PreparePassWrapper(JadxPreparePass preparePass) {
    method getPass (line 21) | @Override
    method init (line 26) | @Override
    method getName (line 35) | @Override

FILE: jadx-core/src/main/java/jadx/api/metadata/ICodeAnnotation.java
  type ICodeAnnotation (line 3) | public interface ICodeAnnotation {
    type AnnType (line 5) | enum AnnType {
    method getAnnType (line 17) | AnnType getAnnType();

FILE: jadx-core/src/main/java/jadx/api/metadata/ICodeMetadata.java
  type ICodeMetadata (line 10) | public interface ICodeMetadata {
    method getAt (line 14) | @Nullable
    method getClosestUp (line 17) | @Nullable
    method searchUp (line 20) | @Nullable
    method searchUp (line 23) | @Nullable
    method searchUp (line 32) | @Nullable
    method searchDown (line 41) | @Nullable
    method getNodeAt (line 47) | @Nullable
    method getNodeBelow (line 53) | @Nullable
    method getAsMap (line 56) | Map<Integer, ICodeAnnotation> getAsMap();
    method getLineMapping (line 58) | Map<Integer, Integer> getLineMapping();

FILE: jadx-core/src/main/java/jadx/api/metadata/ICodeNodeRef.java
  type ICodeNodeRef (line 3) | public interface ICodeNodeRef extends ICodeAnnotation {
    method getDefPosition (line 4) | int getDefPosition();
    method setDefPosition (line 6) | void setDefPosition(int pos);

FILE: jadx-core/src/main/java/jadx/api/metadata/annotations/InsnCodeOffset.java
  class InsnCodeOffset (line 9) | public class InsnCodeOffset implements ICodeAnnotation {
    method attach (line 11) | public static void attach(ICodeWriter code, InsnNode insn) {
    method attach (line 23) | public static void attach(ICodeWriter code, int offset) {
    method from (line 29) | @Nullable
    method InsnCodeOffset (line 40) | public InsnCodeOffset(int offset) {
    method getOffset (line 44) | public int getOffset() {
    method getAnnType (line 48) | @Override
    method toString (line 53) | @Override

FILE: jadx-core/src/main/java/jadx/api/metadata/annotations/NodeDeclareRef.java
  class NodeDeclareRef (line 8) | public class NodeDeclareRef implements ICodeAnnotation {
    method NodeDeclareRef (line 14) | public NodeDeclareRef(ICodeNodeRef node) {
    method getNode (line 18) | public ICodeNodeRef getNode() {
    method getDefPos (line 22) | public int getDefPos() {
    method setDefPos (line 26) | public void setDefPos(int defPos) {
    method getAnnType (line 30) | @Override
    method equals (line 35) | @Override
    method hashCode (line 46) | @Override
    method toString (line 51) | @Override

FILE: jadx-core/src/main/java/jadx/api/metadata/annotations/NodeEnd.java
  class NodeEnd (line 5) | public class NodeEnd implements ICodeAnnotation {
    method NodeEnd (line 9) | private NodeEnd() {
    method getAnnType (line 12) | @Override
    method toString (line 17) | @Override

FILE: jadx-core/src/main/java/jadx/api/metadata/annotations/VarNode.java
  class VarNode (line 16) | public class VarNode implements ICodeNodeRef {
    method get (line 18) | @Nullable
    method get (line 27) | @Nullable
    method get (line 32) | @Nullable
    method getRef (line 47) | @Nullable
    method VarNode (line 65) | protected VarNode(MethodNode mth, SSAVar ssaVar) {
    method VarNode (line 70) | public VarNode(MethodNode mth, int reg, int ssa, ArgType type, String ...
    method getMth (line 79) | public MethodNode getMth() {
    method getReg (line 83) | public int getReg() {
    method getSsa (line 87) | public int getSsa() {
    method getType (line 91) | public ArgType getType() {
    method getName (line 95) | @Nullable
    method setName (line 100) | public void setName(String name) {
    method getVarRef (line 104) | public VarRef getVarRef() {
    method getDefPosition (line 108) | @Override
    method setDefPosition (line 113) | @Override
    method getAnnType (line 118) | @Override
    method hashCode (line 123) | @Override
    method equals (line 129) | @Override
    method toString (line 143) | @Override

FILE: jadx-core/src/main/java/jadx/api/metadata/annotations/VarRef.java
  class VarRef (line 13) | public abstract class VarRef implements ICodeAnnotation {
    method fromPos (line 15) | public static VarRef fromPos(int refPos) {
    method fromVarNode (line 22) | public static VarRef fromVarNode(VarNode varNode) {
    method getRefPos (line 26) | public abstract int getRefPos();
    method getAnnType (line 28) | @Override
    class FixedVarRef (line 33) | public static final class FixedVarRef extends VarRef {
      method FixedVarRef (line 36) | public FixedVarRef(int refPos) {
      method getRefPos (line 40) | @Override
    class RelatedVarRef (line 46) | public static final class RelatedVarRef extends VarRef {
      method RelatedVarRef (line 49) | public RelatedVarRef(VarNode varNode) {
      method getRefPos (line 53) | @Override
      method toString (line 58) | @Override
    method toString (line 64) | @Override

FILE: jadx-core/src/main/java/jadx/api/metadata/impl/CodeMetadataStorage.java
  class CodeMetadataStorage (line 19) | public class CodeMetadataStorage implements ICodeMetadata {
    method build (line 21) | public static ICodeMetadata build(Map<Integer, Integer> lines, Map<Int...
    method empty (line 31) | public static ICodeMetadata empty() {
    method CodeMetadataStorage (line 42) | private CodeMetadataStorage(Map<Integer, Integer> lines, NavigableMap<...
    method getAt (line 47) | @Override
    method getClosestUp (line 52) | @Override
    method searchUp (line 58) | @Override
    method searchUp (line 68) | @Override
    method searchUp (line 78) | @Override
    method searchDown (line 89) | @Override
    method getNodeAt (line 101) | @Override
    method getNodeBelow (line 125) | @Override
    method getAsMap (line 139) | @Override
    method getLineMapping (line 144) | @Override
    method toString (line 149) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/CustomResourcesLoader.java
  type CustomResourcesLoader (line 10) | public interface CustomResourcesLoader extends Closeable {
    method load (line 18) | boolean load(ResourcesLoader loader, List<ResourceFile> list, File file);

FILE: jadx-core/src/main/java/jadx/api/plugins/JadxPlugin.java
  type JadxPlugin (line 12) | public interface JadxPlugin {
    method getPluginInfo (line 18) | JadxPluginInfo getPluginInfo();
    method init (line 25) | void init(JadxPluginContext context);
    method unload (line 31) | default void unload() {

FILE: jadx-core/src/main/java/jadx/api/plugins/JadxPluginContext.java
  type JadxPluginContext (line 19) | public interface JadxPluginContext {
    method getArgs (line 21) | JadxArgs getArgs();
    method getDecompiler (line 23) | JadxDecompiler getDecompiler();
    method addPass (line 25) | void addPass(JadxPass pass);
    method addCodeInput (line 27) | void addCodeInput(JadxCodeInput codeInput);
    method registerOptions (line 29) | void registerOptions(JadxPluginOptions options);
    method registerInputsHashSupplier (line 36) | void registerInputsHashSupplier(Supplier<String> supplier);
    method getResourcesLoader (line 41) | IResourcesLoader getResourcesLoader();
    method getGuiContext (line 46) | @Nullable
    method events (line 52) | IJadxEvents events();
    method plugins (line 57) | IJadxPlugins plugins();
    method files (line 62) | IJadxFiles files();
    method getZipReader (line 67) | ZipReader getZipReader();

FILE: jadx-core/src/main/java/jadx/api/plugins/JadxPluginInfo.java
  class JadxPluginInfo (line 5) | public class JadxPluginInfo {
    method JadxPluginInfo (line 28) | public JadxPluginInfo(String id, String name, String description) {
    method JadxPluginInfo (line 32) | public JadxPluginInfo(String pluginId, String name, String description...
    method JadxPluginInfo (line 36) | public JadxPluginInfo(String pluginId, String name, String description...
    method getPluginId (line 44) | public String getPluginId() {
    method getName (line 48) | public String getName() {
    method getDescription (line 52) | public String getDescription() {
    method getHomepage (line 56) | public String getHomepage() {
    method setHomepage (line 60) | public void setHomepage(String homepage) {
    method getProvides (line 64) | public String getProvides() {
    method setProvides (line 68) | public void setProvides(String provides) {
    method getRequiredJadxVersion (line 72) | public @Nullable String getRequiredJadxVersion() {
    method setRequiredJadxVersion (line 76) | public void setRequiredJadxVersion(@Nullable String requiredJadxVersio...
    method toString (line 80) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/JadxPluginInfoBuilder.java
  class JadxPluginInfoBuilder (line 9) | public class JadxPluginInfoBuilder {
    method pluginId (line 20) | public static JadxPluginInfoBuilder pluginId(String pluginId) {
    method JadxPluginInfoBuilder (line 26) | private JadxPluginInfoBuilder() {
    method name (line 29) | public JadxPluginInfoBuilder name(String name) {
    method description (line 34) | public JadxPluginInfoBuilder description(String description) {
    method homepage (line 39) | public JadxPluginInfoBuilder homepage(String homepage) {
    method provides (line 44) | public JadxPluginInfoBuilder provides(String provides) {
    method requiredJadxVersion (line 49) | public JadxPluginInfoBuilder requiredJadxVersion(String versions) {
    method build (line 54) | public JadxPluginInfo build() {

FILE: jadx-core/src/main/java/jadx/api/plugins/data/IJadxFiles.java
  type IJadxFiles (line 5) | public interface IJadxFiles {
    method getPluginCacheDir (line 10) | Path getPluginCacheDir();
    method getPluginConfigDir (line 15) | Path getPluginConfigDir();
    method getPluginTempDir (line 20) | Path getPluginTempDir();

FILE: jadx-core/src/main/java/jadx/api/plugins/data/IJadxPlugins.java
  type IJadxPlugins (line 5) | public interface IJadxPlugins {
    method getById (line 7) | JadxPluginRuntimeData getById(String pluginId);
    method getProviding (line 9) | JadxPluginRuntimeData getProviding(String provideId);
    method getInstance (line 11) | <P extends JadxPlugin> P getInstance(Class<P> pluginCls);

FILE: jadx-core/src/main/java/jadx/api/plugins/data/JadxPluginRuntimeData.java
  type JadxPluginRuntimeData (line 18) | public interface JadxPluginRuntimeData {
    method isInitialized (line 19) | boolean isInitialized();
    method getPluginId (line 21) | String getPluginId();
    method getPluginInstance (line 23) | JadxPlugin getPluginInstance();
    method getPluginInfo (line 25) | JadxPluginInfo getPluginInfo();
    method getCodeInputs (line 27) | List<JadxCodeInput> getCodeInputs();
    method getOptions (line 29) | @Nullable
    method getInputsHash (line 32) | String getInputsHash();
    method loadCodeFiles (line 37) | ICodeLoader loadCodeFiles(List<Path> files, @Nullable Closeable closea...

FILE: jadx-core/src/main/java/jadx/api/plugins/events/IJadxEvent.java
  type IJadxEvent (line 3) | public interface IJadxEvent {
    method getType (line 5) | JadxEventType<? extends IJadxEvent> getType();

FILE: jadx-core/src/main/java/jadx/api/plugins/events/IJadxEvents.java
  type IJadxEvents (line 5) | public interface IJadxEvents {
    method send (line 11) | void send(IJadxEvent event);
    method addListener (line 17) | <E extends IJadxEvent> void addListener(JadxEventType<E> eventType, Co...
    method removeListener (line 23) | <E extends IJadxEvent> void removeListener(JadxEventType<E> eventType,...
    method reset (line 28) | void reset();

FILE: jadx-core/src/main/java/jadx/api/plugins/events/JadxEventType.java
  class JadxEventType (line 3) | public abstract class JadxEventType<T extends IJadxEvent> {
    method create (line 5) | public static <E extends IJadxEvent> JadxEventType<E> create() {
    method create (line 10) | public static <E extends IJadxEvent> JadxEventType<E> create(String na...

FILE: jadx-core/src/main/java/jadx/api/plugins/events/JadxEvents.java
  class JadxEvents (line 14) | public class JadxEvents {

FILE: jadx-core/src/main/java/jadx/api/plugins/events/types/NodeRenamedByUser.java
  class NodeRenamedByUser (line 10) | public class NodeRenamedByUser implements IJadxEvent {
    method NodeRenamedByUser (line 26) | public NodeRenamedByUser(ICodeNodeRef node, String oldName, String new...
    method getNode (line 32) | public ICodeNodeRef getNode() {
    method getOldName (line 36) | public String getOldName() {
    method getNewName (line 40) | public String getNewName() {
    method getRenameNode (line 44) | public Object getRenameNode() {
    method setRenameNode (line 48) | public void setRenameNode(Object renameNode) {
    method isResetName (line 52) | public boolean isResetName() {
    method setResetName (line 56) | public void setResetName(boolean resetName) {
    method getType (line 60) | @Override
    method toString (line 65) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/events/types/ReloadProject.java
  class ReloadProject (line 7) | public class ReloadProject implements IJadxEvent {
    method ReloadProject (line 11) | private ReloadProject() {
    method getType (line 15) | @Override
    method toString (line 20) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/events/types/ReloadSettingsWindow.java
  class ReloadSettingsWindow (line 7) | public class ReloadSettingsWindow implements IJadxEvent {
    method ReloadSettingsWindow (line 11) | private ReloadSettingsWindow() {
    method getType (line 15) | @Override
    method toString (line 20) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/gui/ISettingsGroup.java
  type ISettingsGroup (line 11) | public interface ISettingsGroup {
    method getTitle (line 16) | String getTitle();
    method buildComponent (line 21) | JComponent buildComponent();
    method getSubGroups (line 26) | default List<ISettingsGroup> getSubGroups() {
    method close (line 35) | default void close(boolean save) {

FILE: jadx-core/src/main/java/jadx/api/plugins/gui/JadxGuiContext.java
  type JadxGuiContext (line 17) | public interface JadxGuiContext {
    method uiRun (line 22) | void uiRun(Runnable runnable);
    method addMenuAction (line 27) | void addMenuAction(String name, Runnable action);
    method addPopupMenuAction (line 36) | void addPopupMenuAction(String name,
    method addTreePopupMenuEntry (line 47) | @ApiStatus.Experimental
    method registerGlobalKeyBinding (line 58) | boolean registerGlobalKeyBinding(String id, String keyBinding, Runnabl...
    method copyToClipboard (line 60) | void copyToClipboard(String str);
    method settings (line 65) | JadxGuiSettings settings();
    method getMainFrame (line 71) | JFrame getMainFrame();
    method getSVGIcon (line 81) | ImageIcon getSVGIcon(String name);
    method getNodeUnderCaret (line 83) | ICodeNodeRef getNodeUnderCaret();
    method getNodeUnderMouse (line 85) | ICodeNodeRef getNodeUnderMouse();
    method getEnclosingNodeUnderCaret (line 87) | ICodeNodeRef getEnclosingNodeUnderCaret();
    method getEnclosingNodeUnderMouse (line 89) | ICodeNodeRef getEnclosingNodeUnderMouse();
    method open (line 96) | boolean open(ICodeNodeRef ref);
    method openUsageDialog (line 101) | void openUsageDialog(ICodeNodeRef ref);
    method reloadActiveTab (line 106) | void reloadActiveTab();
    method reloadAllTabs (line 111) | void reloadAllTabs();
    method applyNodeRename (line 116) | void applyNodeRename(ICodeNodeRef node);

FILE: jadx-core/src/main/java/jadx/api/plugins/gui/JadxGuiSettings.java
  type JadxGuiSettings (line 7) | public interface JadxGuiSettings {
    method setCustomSettingsGroup (line 12) | void setCustomSettingsGroup(ISettingsGroup group);
    method buildSettingsGroupForOptions (line 17) | ISettingsGroup buildSettingsGroupForOptions(String title, List<OptionD...

FILE: jadx-core/src/main/java/jadx/api/plugins/loader/JadxBasePluginLoader.java
  class JadxBasePluginLoader (line 13) | public class JadxBasePluginLoader implements JadxPluginLoader {
    method load (line 15) | @Override
    method close (line 25) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/loader/JadxPluginLoader.java
  type JadxPluginLoader (line 8) | public interface JadxPluginLoader extends Closeable {
    method load (line 10) | List<JadxPlugin> load();

FILE: jadx-core/src/main/java/jadx/api/plugins/options/JadxPluginOptions.java
  type JadxPluginOptions (line 6) | public interface JadxPluginOptions {
    method setOptions (line 8) | void setOptions(Map<String, String> options);
    method getOptionsDescriptions (line 10) | List<OptionDescription> getOptionsDescriptions();

FILE: jadx-core/src/main/java/jadx/api/plugins/options/OptionDescription.java
  type OptionDescription (line 9) | public interface OptionDescription {
    method name (line 11) | String name();
    method description (line 13) | String description();
    method values (line 19) | List<String> values();
    method defaultValue (line 25) | @Nullable
    method getType (line 28) | default OptionType getType() {
    method getFlags (line 32) | default Set<OptionFlag> getFlags() {

FILE: jadx-core/src/main/java/jadx/api/plugins/options/OptionFlag.java
  type OptionFlag (line 3) | public enum OptionFlag {

FILE: jadx-core/src/main/java/jadx/api/plugins/options/OptionType.java
  type OptionType (line 3) | public enum OptionType {

FILE: jadx-core/src/main/java/jadx/api/plugins/options/impl/BaseOptionsParser.java
  class BaseOptionsParser (line 12) | @Deprecated
    method setOptions (line 17) | @Override
    method parseOptions (line 23) | public abstract void parseOptions();
    method getBooleanOption (line 25) | public boolean getBooleanOption(String key, boolean defValue) {
    method getOption (line 41) | public <T> T getOption(String key, Function<String, T> parse, T defVal...

FILE: jadx-core/src/main/java/jadx/api/plugins/options/impl/BasePluginOptionsBuilder.java
  class BasePluginOptionsBuilder (line 28) | @SuppressWarnings("unused")
    method registerOptions (line 33) | public abstract void registerOptions();
    method BasePluginOptionsBuilder (line 35) | public BasePluginOptionsBuilder() {
    method option (line 42) | public <T> OptionBuilder<T> option(String name) {
    method option (line 46) | public <T> OptionBuilder<T> option(String name, Class<T> optionType) {
    method boolOption (line 50) | public OptionBuilder<Boolean> boolOption(String name) {
    method strOption (line 59) | public OptionBuilder<String> strOption(String name) {
    method intOption (line 67) | public OptionBuilder<Integer> intOption(String name) {
    method enumOption (line 75) | public <E extends Enum<?>> OptionBuilder<E> enumOption(String name, E[...
    method setOptions (line 84) | @Override
    method getOptionsDescriptions (line 91) | @Override
    method parseOption (line 96) | private static <T> void parseOption(OptionData<T> option, @Nullable St...
    method parseBoolOption (line 114) | private static boolean parseBoolOption(String name, String val) {
    method addOption (line 125) | private <T> OptionBuilder<T> addOption(OptionBuilder<T> optionData) {
    class OptionData (line 130) | protected static class OptionData<T> implements OptionDescription, Opt...
      method OptionData (line 141) | public OptionData(String name) {
      method name (line 145) | @Override
      method description (line 150) | @Override
      method values (line 155) | @Override
      method defaultValue (line 160) | @Override
      method getType (line 165) | @Override
      method getFlags (line 170) | @Override
      method description (line 175) | @Override
      method defaultValue (line 181) | @Override
      method parser (line 187) | @Override
      method formatter (line 193) | @Override
      method setter (line 199) | @Override
      method type (line 205) | @Override
      method flags (line 211) | @Override
      method values (line 217) | @Override
      method getParser (line 223) | public Function<String, T> getParser() {
      method getFormatter (line 227) | public Function<T, String> getFormatter() {
      method getSetter (line 231) | public Consumer<T> getSetter() {
      method validate (line 235) | public void validate() {

FILE: jadx-core/src/main/java/jadx/api/plugins/options/impl/JadxOptionDescription.java
  class JadxOptionDescription (line 15) | public class JadxOptionDescription implements OptionDescription {
    method booleanOption (line 17) | public static JadxOptionDescription booleanOption(String name, String ...
    method JadxOptionDescription (line 31) | public JadxOptionDescription(String name, String desc, @Nullable Strin...
    method JadxOptionDescription (line 35) | public JadxOptionDescription(String name, String desc, @Nullable Strin...
    method name (line 43) | @Override
    method description (line 48) | @Override
    method defaultValue (line 53) | @Override
    method values (line 58) | @Override
    method getType (line 63) | @Override
    method getFlags (line 68) | @Override
    method withFlag (line 73) | public JadxOptionDescription withFlag(OptionFlag flag) {
    method withFlags (line 78) | public JadxOptionDescription withFlags(OptionFlag... flags) {
    method toString (line 83) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/options/impl/OptionBuilder.java
  type OptionBuilder (line 10) | public interface OptionBuilder<T> {
    method description (line 15) | OptionBuilder<T> description(String desc);
    method defaultValue (line 17) | OptionBuilder<T> defaultValue(T defValue);
    method parser (line 22) | OptionBuilder<T> parser(Function<String, T> parser);
    method formatter (line 27) | OptionBuilder<T> formatter(Function<T, String> formatter);
    method setter (line 32) | OptionBuilder<T> setter(Consumer<T> setter);
    method values (line 37) | OptionBuilder<T> values(List<T> values);
    method type (line 39) | OptionBuilder<T> type(OptionType optionType);
    method flags (line 41) | OptionBuilder<T> flags(OptionFlag... flags);

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/JadxPass.java
  type JadxPass (line 5) | public interface JadxPass {
    method getInfo (line 6) | JadxPassInfo getInfo();
    method getPassType (line 8) | JadxPassType getPassType();

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/JadxPassInfo.java
  type JadxPassInfo (line 5) | public interface JadxPassInfo {
    method getName (line 20) | String getName();
    method getDescription (line 25) | String getDescription();
    method runAfter (line 31) | List<String> runAfter();
    method runBefore (line 37) | List<String> runBefore();

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/impl/OrderedJadxPassInfo.java
  class OrderedJadxPassInfo (line 8) | public class OrderedJadxPassInfo implements JadxPassInfo {
    method OrderedJadxPassInfo (line 15) | public OrderedJadxPassInfo(String name, String desc) {
    method OrderedJadxPassInfo (line 19) | public OrderedJadxPassInfo(String name, String desc, List<String> runA...
    method after (line 26) | public OrderedJadxPassInfo after(String pass) {
    method before (line 31) | public OrderedJadxPassInfo before(String pass) {
    method getName (line 36) | @Override
    method getDescription (line 41) | @Override
    method runAfter (line 46) | @Override
    method runBefore (line 51) | @Override
    method toString (line 56) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/impl/SimpleAfterLoadPass.java
  class SimpleAfterLoadPass (line 9) | public class SimpleAfterLoadPass implements JadxAfterLoadPass {
    method SimpleAfterLoadPass (line 14) | public SimpleAfterLoadPass(String name, Consumer<JadxDecompiler> init) {
    method getInfo (line 19) | @Override
    method init (line 24) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/impl/SimpleJadxPassInfo.java
  class SimpleJadxPassInfo (line 8) | public class SimpleJadxPassInfo implements JadxPassInfo {
    method SimpleJadxPassInfo (line 13) | public SimpleJadxPassInfo(String name) {
    method SimpleJadxPassInfo (line 17) | public SimpleJadxPassInfo(String name, String desc) {
    method getName (line 22) | @Override
    method getDescription (line 27) | @Override
    method runAfter (line 32) | @Override
    method runBefore (line 37) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxAfterLoadPass.java
  type JadxAfterLoadPass (line 6) | public interface JadxAfterLoadPass extends JadxPass {
    method init (line 9) | void init(JadxDecompiler decompiler);
    method getPassType (line 11) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxDecompilePass.java
  type JadxDecompilePass (line 8) | public interface JadxDecompilePass extends JadxPass {
    method init (line 11) | void init(RootNode root);
    method visit (line 18) | boolean visit(ClassNode cls);
    method visit (line 23) | void visit(MethodNode mth);
    method getPassType (line 25) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxPassType.java
  class JadxPassType (line 3) | public class JadxPassType {
    method JadxPassType (line 6) | public JadxPassType(String clsName) {
    method equals (line 10) | @Override
    method hashCode (line 21) | @Override
    method toString (line 26) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxPreparePass.java
  type JadxPreparePass (line 6) | public interface JadxPreparePass extends JadxPass {
    method init (line 9) | void init(RootNode root);
    method getPassType (line 11) | @Override

FILE: jadx-core/src/main/java/jadx/api/plugins/resources/IResContainerFactory.java
  type IResContainerFactory (line 18) | public interface IResContainerFactory {
    method init (line 23) | default void init(RootNode root) {
    method create (line 31) | @Nullable

FILE: jadx-core/src/main/java/jadx/api/plugins/resources/IResTableParserProvider.java
  type IResTableParserProvider (line 15) | public interface IResTableParserProvider {
    method init (line 20) | default void init(RootNode root) {
    method getParser (line 28) | @Nullable

FILE: jadx-core/src/main/java/jadx/api/plugins/resources/IResourcesLoader.java
  type IResourcesLoader (line 3) | public interface IResourcesLoader {
    method addResContainerFactory (line 5) | void addResContainerFactory(IResContainerFactory resContainerFactory);
    method addResTableParserProvider (line 7) | void addResTableParserProvider(IResTableParserProvider resTableParserP...

FILE: jadx-core/src/main/java/jadx/api/plugins/utils/CommonFileUtils.java
  class CommonFileUtils (line 16) | public class CommonFileUtils {
    method getCWD (line 22) | private static File getCWD() {
    method saveToTempFile (line 30) | public static Path saveToTempFile(InputStream in, String suffix) throw...
    method saveToTempFile (line 34) | public static Path saveToTempFile(byte[] dataPrefix, InputStream in, S...
    method safeDeleteFile (line 47) | public static boolean safeDeleteFile(File file) {
    method loadBytes (line 56) | public static byte[] loadBytes(InputStream input) throws IOException {
    method loadBytes (line 60) | public static byte[] loadBytes(byte[] dataPrefix, InputStream in) thro...
    method copyStream (line 73) | public static void copyStream(InputStream input, OutputStream output) ...
    method getFileExtension (line 84) | @Nullable
    method removeFileExtension (line 93) | public static String removeFileExtension(String fileName) {
    method isZipFileExt (line 103) | public static boolean isZipFileExt(String fileName) {

FILE: jadx-core/src/main/java/jadx/api/plugins/utils/Utils.java
  class Utils (line 17) | public class Utils {
    method addToList (line 19) | public static <T> void addToList(Collection<T> list, @Nullable T item) {
    method addToList (line 25) | public static <T, I> void addToList(Collection<T> list, @Nullable I it...
    method concat (line 34) | public static <T> List<T> concat(List<T> a, List<T> b) {
    method concatDistinct (line 52) | public static <T> List<T> concatDistinct(List<T> a, List<T> b) {
    method listToStr (line 70) | public static <T> String listToStr(List<T> list) {
    method formatOffset (line 89) | public static String formatOffset(int offset) {
    method constSet (line 93) | @SafeVarargs

FILE: jadx-core/src/main/java/jadx/api/plugins/utils/ZipSecurity.java
  class ZipSecurity (line 29) | @Deprecated
    method buildZipSecurity (line 39) | private static IJadxZipSecurity buildZipSecurity() {
    method ZipSecurity (line 48) | private ZipSecurity() {
    method isInSubDirectory (line 51) | public static boolean isInSubDirectory(File baseDir, File file) {
    method isValidZipEntryName (line 59) | public static boolean isValidZipEntryName(String entryName) {
    method isZipBomb (line 63) | public static boolean isZipBomb(IZipEntry entry) {
    method isValidZipEntry (line 67) | public static boolean isValidZipEntry(IZipEntry entry) {
    method getInputStreamForEntry (line 71) | public static InputStream getInputStreamForEntry(ZipFile zipFile, ZipE...
    method visitZipEntries (line 84) | @Nullable
    method readZipEntries (line 89) | public static void readZipEntries(File file, BiConsumer<IZipEntry, Inp...

FILE: jadx-core/src/main/java/jadx/api/resources/ResourceContentType.java
  type ResourceContentType (line 3) | public enum ResourceContentType {

FILE: jadx-core/src/main/java/jadx/api/security/IJadxSecurity.java
  type IJadxSecurity (line 9) | public interface IJadxSecurity extends IJadxZipSecurity {
    method verifyAppPackage (line 16) | String verifyAppPackage(String appPackage);
    method parseXml (line 21) | Document parseXml(InputStream in);

FILE: jadx-core/src/main/java/jadx/api/security/JadxSecurityFlag.java
  type JadxSecurityFlag (line 6) | public enum JadxSecurityFlag {
    method all (line 12) | public static Set<JadxSecurityFlag> all() {
    method none (line 16) | public static Set<JadxSecurityFlag> none() {

FILE: jadx-core/src/main/java/jadx/api/security/impl/JadxSecurity.java
  class JadxSecurity (line 23) | public class JadxSecurity implements IJadxSecurity {
    method JadxSecurity (line 29) | public JadxSecurity(Set<JadxSecurityFlag> flags) {
    method JadxSecurity (line 34) | public JadxSecurity(Set<JadxSecurityFlag> flags, IJadxZipSecurity zipS...
    method isValidEntry (line 39) | @Override
    method isValidEntryName (line 44) | @Override
    method isInSubDirectory (line 49) | @Override
    method useLimitedDataStream (line 54) | @Override
    method getMaxEntriesCount (line 59) | @Override
    method verifyAppPackage (line 64) | @Override
    method parseXml (line 74) | @Override
    class SimpleDBFHolder (line 89) | private static final class SimpleDBFHolder {
    class SecureDBFHolder (line 93) | private static final class SecureDBFHolder {
      method buildSecureDBF (line 96) | private static DocumentBuilderFactory buildSecureDBF() {

FILE: jadx-core/src/main/java/jadx/api/usage/IUsageInfoCache.java
  type IUsageInfoCache (line 9) | public interface IUsageInfoCache extends Closeable {
    method get (line 11) | @Nullable
    method set (line 14) | void set(RootNode root, IUsageInfoData data);

FILE: jadx-core/src/main/java/jadx/api/usage/IUsageInfoData.java
  type IUsageInfoData (line 5) | public interface IUsageInfoData {
    method apply (line 7) | void apply();
    method applyForClass (line 9) | void applyForClass(ClassNode cls);
    method visitUsageData (line 11) | void visitUsageData(IUsageInfoVisitor visitor);

FILE: jadx-core/src/main/java/jadx/api/usage/IUsageInfoVisitor.java
  type IUsageInfoVisitor (line 10) | public interface IUsageInfoVisitor {
    method visitClassDeps (line 12) | void visitClassDeps(ClassNode cls, List<ClassNode> deps);
    method visitClassUsage (line 14) | void visitClassUsage(ClassNode cls, List<ClassNode> usage);
    method visitClassUseInMethods (line 16) | void visitClassUseInMethods(ClassNode cls, List<MethodNode> methods);
    method visitFieldsUsage (line 18) | void visitFieldsUsage(FieldNode fld, List<MethodNode> methods);
    method visitMethodsUsage (line 20) | void visitMethodsUsage(MethodNode mth, List<MethodNode> methods);
    method visitMethodsUses (line 22) | void visitMethodsUses(MethodNode mth, List<MethodNode> methods);
    method visitUnresolvedMethodsUsage (line 24) | void visitUnresolvedMethodsUsage(MethodNode mth, List<IMethodRef> meth...
    method visitIsSelfCall (line 26) | void visitIsSelfCall(MethodNode mth, boolean isSelfCall);
    method visitComplete (line 28) | void visitComplete();

FILE: jadx-core/src/main/java/jadx/api/usage/impl/EmptyUsageInfoCache.java
  class EmptyUsageInfoCache (line 11) | public class EmptyUsageInfoCache implements IUsageInfoCache {
    method get (line 12) | @Override
    method set (line 17) | @Override
    method close (line 21) | @Override

FILE: jadx-core/src/main/java/jadx/api/usage/impl/InMemoryUsageInfoCache.java
  class InMemoryUsageInfoCache (line 9) | public class InMemoryUsageInfoCache implements IUsageInfoCache {
    method get (line 18) | @Override
    method set (line 23) | @Override
    method close (line 29) | @Override

FILE: jadx-core/src/main/java/jadx/api/utils/CodeUtils.java
  class CodeUtils (line 11) | public class CodeUtils {
    method getLineForPos (line 13) | public static String getLineForPos(String code, int pos) {
    method getLineStartForPos (line 19) | public static int getLineStartForPos(String code, int pos) {
    method getLineEndForPos (line 24) | public static int getLineEndForPos(String code, int pos) {
    method getNewLinePosAfter (line 29) | public static int getNewLinePosAfter(String code, int startPos) {
    method getNewLinePosBefore (line 41) | public static int getNewLinePosBefore(String code, int startPos) {
    method getLineNumForPos (line 45) | public static int getLineNumForPos(String code, int pos, String newLin...
    method extractMethodCode (line 64) | public static String extractMethodCode(MethodNode mth, ICodeInfo codeI...
    method getMethodStart (line 79) | private static int getMethodStart(MethodNode mth, ICodeInfo codeInfo) {
    method getMethodEnd (line 92) | public static int getMethodEnd(MethodNode mth, ICodeInfo codeInfo) {

FILE: jadx-core/src/main/java/jadx/api/utils/tasks/ITaskExecutor.java
  type ITaskExecutor (line 12) | public interface ITaskExecutor {
    method addParallelTasks (line 17) | void addParallelTasks(List<? extends Runnable> parallelTasks);
    method addSequentialTasks (line 22) | void addSequentialTasks(List<? extends Runnable> seqTasks);
    method addSequentialTask (line 27) | void addSequentialTask(Runnable task);
    method getTasksCount (line 32) | int getTasksCount();
    method setThreadsCount (line 39) | void setThreadsCount(int threadsCount);
    method getThreadsCount (line 41) | int getThreadsCount();
    method execute (line 46) | void execute();
    method getProgress (line 48) | int getProgress();
    method terminate (line 53) | void terminate();
    method isTerminating (line 55) | boolean isTerminating();
    method isRunning (line 57) | boolean isRunning();
    method awaitTermination (line 62) | void awaitTermination();
    method getInternalExecutor (line 67) | @Nullable

FILE: jadx-core/src/main/java/jadx/core/Consts.java
  class Consts (line 3) | public class Consts {
    method Consts (line 32) | private Consts() {

FILE: jadx-core/src/main/java/jadx/core/Jadx.java
  class Jadx (line 84) | public class Jadx {
    method Jadx (line 87) | private Jadx() {
    method getPassesList (line 90) | public static List<IDexTreeVisitor> getPassesList(JadxArgs args) {
    method getPreDecompilePassesList (line 104) | public static List<IDexTreeVisitor> getPreDecompilePassesList() {
    method getRegionsModePasses (line 123) | public static List<IDexTreeVisitor> getRegionsModePasses(JadxArgs args) {
    method getSimpleModePasses (line 218) | public static List<IDexTreeVisitor> getSimpleModePasses(JadxArgs args) {
    method getFallbackPassesList (line 260) | public static List<IDexTreeVisitor> getFallbackPassesList() {
    method getVersion (line 273) | public static String getVersion() {
    method isDevVersion (line 280) | public static boolean isDevVersion() {
    method searchJadxVersion (line 284) | private static String searchJadxVersion() {

FILE: jadx-core/src/main/java/jadx/core/ProcessClass.java
  class ProcessClass (line 34) | public class ProcessClass {
    method ProcessClass (line 41) | public ProcessClass(List<IDexTreeVisitor> passesList) {
    method process (line 45) | @Nullable
    method generateCode (line 106) | @NotNull
    method forceProcess (line 139) | public void forceProcess(ClassNode cls) {
    method forceGenerateCode (line 155) | public @Nullable ICodeInfo forceGenerateCode(ClassNode cls) {
    method forceGenerateCodeForMode (line 165) | public @Nullable ICodeInfo forceGenerateCodeForMode(ClassNode cls, Dec...
    method getPassesForMode (line 182) | private static List<IDexTreeVisitor> getPassesForMode(JadxArgs baseArg...
    method initPasses (line 200) | public void initPasses(RootNode root) {
    method getPasses (line 211) | public List<IDexTreeVisitor> getPasses() {

FILE: jadx-core/src/main/java/jadx/core/clsp/ClsSet.java
  class ClsSet (line 38) | public class ClsSet {
    method ClsSet (line 58) | public ClsSet(RootNode root) {
    type TypeEnum (line 62) | private enum TypeEnum {
    method loadFromClstFile (line 74) | public void loadFromClstFile() throws IOException, DecodeException {
    method loadFrom (line 90) | public void loadFrom(RootNode root) {
    method getClspClassSource (line 121) | private static ClspClassSource getClspClassSource(ClassNode cls) {
    method getMethodsDetails (line 132) | private List<ClspMethod> getMethodsDetails(ClassNode cls) {
    method processMethodDetails (line 141) | private void processMethodDetails(MethodNode mth, List<ClspMethod> met...
    method makeParentsArray (line 152) | public static ArgType[] makeParentsArray(ClassNode cls) {
    method getCls (line 172) | private static ClspClass getCls(ClassNode cls, Map<String, ClspClass> ...
    method getCls (line 176) | private static ClspClass getCls(ArgType clsType, Map<String, ClspClass...
    method getCls (line 180) | private static ClspClass getCls(String fullName, Map<String, ClspClass...
    method save (line 188) | public void save(Path path) throws IOException {
    method save (line 200) | private void save(OutputStream output) throws IOException {
    method writeMethod (line 228) | private static void writeMethod(DataOutputStream out, ClspMethod metho...
    method writeArgTypesList (line 241) | private static void writeArgTypesList(DataOutputStream out, List<ArgTy...
    method writeArgTypesArray (line 251) | private static void writeArgTypesArray(DataOutputStream out, @Nullable...
    method writeArgType (line 269) | private static void writeArgType(DataOutputStream out, ArgType argType...
    method load (line 307) | private void load(InputStream input) throws IOException, DecodeExcepti...
    method readClsSource (line 338) | private static ClspClassSource readClsSource(DataInputStream in) throw...
    method readClsMethods (line 347) | private List<ClspMethod> readClsMethods(DataInputStream in, ClassInfo ...
    method readMethod (line 356) | private ClspMethod readMethod(DataInputStream in, ClassInfo clsInfo) t...
    method readArgTypesList (line 377) | private List<ArgType> readArgTypesList(DataInputStream in) throws IOEx...
    method readArgTypesArray (line 389) | @Nullable
    method readArgType (line 408) | private ArgType readArgType(DataInputStream in) throws IOException {
    method writeString (line 451) | private static void writeString(DataOutputStream out, String name) thr...
    method readString (line 461) | private static String readString(DataInputStream in) throws IOException {
    method readString (line 466) | private static String readString(DataInputStream in, int len) throws I...
    method writeUnsignedByte (line 480) | private static void writeUnsignedByte(DataOutputStream out, int value)...
    method readUnsignedByte (line 487) | private static int readUnsignedByte(DataInputStream in) throws IOExcep...
    method getClassesCount (line 491) | public int getClassesCount() {
    method addToMap (line 495) | public void addToMap(Map<String, ClspClass> nameMap) {
    method getAndroidApiLevel (line 501) | public int getAndroidApiLevel() {
    method setAndroidApiLevel (line 505) | public void setAndroidApiLevel(int androidApiLevel) {

FILE: jadx-core/src/main/java/jadx/core/clsp/ClspClass.java
  class ClspClass (line 18) | public class ClspClass {
    method ClspClass (line 29) | public ClspClass(ArgType clsType, int id, int accFlags, ClspClassSourc...
    method getName (line 36) | public String getName() {
    method getClsType (line 40) | public ArgType getClsType() {
    method getId (line 44) | public int getId() {
    method getAccFlags (line 48) | public int getAccFlags() {
    method isInterface (line 52) | public boolean isInterface() {
    method hasAccFlag (line 56) | public boolean hasAccFlag(@MagicConstant(flagsFromClass = AccessFlags....
    method getParents (line 60) | public ArgType[] getParents() {
    method setParents (line 64) | public void setParents(ArgType[] parents) {
    method getMethodsMap (line 68) | public Map<String, ClspMethod> getMethodsMap() {
    method getSortedMethodsList (line 72) | public List<ClspMethod> getSortedMethodsList() {
    method setMethodsMap (line 79) | public void setMethodsMap(Map<String, ClspMethod> methodsMap) {
    method setMethods (line 83) | public void setMethods(List<ClspMethod> methods) {
    method getTypeParameters (line 91) | public List<ArgType> getTypeParameters() {
    method setTypeParameters (line 95) | public void setTypeParameters(List<ArgType> typeParameters) {
    method getSource (line 99) | public ClspClassSource getSource() {
    method hashCode (line 103) | @Override
    method equals (line 108) | @Override
    method toString (line 120) | @Override

FILE: jadx-core/src/main/java/jadx/core/clsp/ClspClassSource.java
  type ClspClassSource (line 3) | public enum ClspClassSource {
    method ClspClassSource (line 11) | ClspClassSource(String jarFile) {
    method getJarFile (line 15) | public String getJarFile() {
    method getClspClassSource (line 19) | public static ClspClassSource getClspClassSource(String jarFile) {

FILE: jadx-core/src/main/java/jadx/core/clsp/ClspGraph.java
  class ClspGraph (line 28) | public class ClspGraph {
    method ClspGraph (line 38) | public ClspGraph(RootNode rootNode) {
    method loadClsSetFile (line 42) | public void loadClsSetFile() throws IOException, DecodeException {
    method addClasspath (line 48) | public void addClasspath(ClsSet set) {
    method addApp (line 57) | public void addApp(List<ClassNode> classes) {
    method initCache (line 66) | public void initCache() {
    method isClsKnown (line 71) | public boolean isClsKnown(String fullName) {
    method getClsDetails (line 75) | public ClspClass getClsDetails(ArgType type) {
    method getMethodDetails (line 79) | @Nullable
    method getMethodFromClass (line 103) | private ClspMethod getMethodFromClass(ClspClass cls, MethodInfo method...
    method addClass (line 107) | private void addClass(ClassNode cls) {
    method isImplements (line 118) | public boolean isImplements(String clsName, String implClsName) {
    method getImplementations (line 123) | public List<String> getImplementations(String clsName) {
    method fillImplementsCache (line 128) | private void fillImplementsCache() {
    method getCommonAncestor (line 140) | public String getCommonAncestor(String clsName, String implClsName) {
    method searchCommonParent (line 156) | private String searchCommonParent(Set<String> anc, ClspClass cls) {
    method getSuperTypes (line 173) | public Set<String> getSuperTypes(String clsName) {
    method fillSuperTypesCache (line 180) | private void fillSuperTypesCache() {
    method addSuperTypes (line 213) | private void addSuperTypes(ClspClass cls, Set<String> result) {
    method getClspClass (line 231) | @Nullable
    method printMissingClasses (line 240) | public void printMissingClasses() {

FILE: jadx-core/src/main/java/jadx/core/clsp/ClspMethod.java
  class ClspMethod (line 17) | public class ClspMethod implements IMethodDetails, Comparable<ClspMethod> {
    method ClspMethod (line 26) | public ClspMethod(MethodInfo methodInfo,
    method getMethodInfo (line 37) | @Override
    method getReturnType (line 42) | @Override
    method getArgTypes (line 47) | @Override
    method containsGenericArgs (line 52) | public boolean containsGenericArgs() {
    method getArgsCount (line 56) | public int getArgsCount() {
    method getTypeParameters (line 60) | @Override
    method getThrows (line 65) | @Override
    method isVarArg (line 70) | @Override
    method getRawAccessFlags (line 75) | @Override
    method equals (line 80) | @Override
    method hashCode (line 92) | @Override
    method compareTo (line 97) | @Override
    method toAttrString (line 102) | @Override
    method toString (line 107) | @Override

FILE: jadx-core/src/main/java/jadx/core/clsp/SimpleMethodDetails.java
  class SimpleMethodDetails (line 15) | public class SimpleMethodDetails implements IMethodDetails {
    method SimpleMethodDetails (line 19) | public SimpleMethodDetails(MethodInfo methodInfo) {
    method getMethodInfo (line 23) | @Override
    method getReturnType (line 28) | @Override
    method getArgTypes (line 33) | @Override
    method getTypeParameters (line 38) | @Override
    method getThrows (line 43) | @Override
    method isVarArg (line 48) | @Override
    method getRawAccessFlags (line 53) | @Override
    method toAttrString (line 58) | @Override
    method toString (line 63) | @Override

FILE: jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java
  class AnnotationGen (line 29) | public class AnnotationGen {
    method AnnotationGen (line 34) | public AnnotationGen(ClassNode cls, ClassGen classGen) {
    method addForClass (line 39) | public void addForClass(ICodeWriter code) {
    method addForMethod (line 43) | public void addForMethod(ICodeWriter code, MethodNode mth) {
    method addForField (line 47) | public void addForField(ICodeWriter code, FieldNode field) {
    method addForParameter (line 51) | public void addForParameter(ICodeWriter code, AnnotationMethodParamsAt...
    method add (line 66) | private void add(IAttributeNode node, ICodeWriter code) {
    method formatAnnotation (line 80) | private void formatAnnotation(ICodeWriter code, IAnnotation a) {
    method getParamName (line 110) | private String getParamName(@Nullable ClassNode annCls, String paramNa...
    method addThrows (line 121) | public void addThrows(MethodNode mth, ICodeWriter code) {
    method getAnnotationDefaultValue (line 135) | public EncodedValue getAnnotationDefaultValue(MethodNode mth) {
    method encodeValue (line 144) | public void encodeValue(RootNode root, ICodeWriter code, EncodedValue ...
    method getStringUtils (line 223) | private StringUtils getStringUtils() {

FILE: jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
  class ClassGen (line 56) | public class ClassGen {
    method ClassGen (line 74) | public ClassGen(ClassNode cls, JadxArgs jadxArgs) {
    method ClassGen (line 78) | public ClassGen(ClassNode cls, ClassGen parentClsGen) {
    method ClassGen (line 83) | public ClassGen(ClassNode cls, ClassGen parentClsGen, boolean useImpor...
    method getClassNode (line 95) | public ClassNode getClassNode() {
    method makeClass (line 99) | public ICodeInfo makeClass() throws CodegenException {
    method addPackage (line 114) | private void addPackage(ICodeWriter clsCode) {
    method addImports (line 122) | private void addImports(ICodeWriter clsCode) {
    method makePackageInfo (line 141) | private ICodeInfo makePackageInfo() {
    method addClassCode (line 152) | public void addClassCode(ICodeWriter code) throws CodegenException {
    method addClassDeclaration (line 163) | public void addClassDeclaration(ICodeWriter clsCode) {
    method addGenericTypeParameters (line 226) | public boolean addGenericTypeParameters(ICodeWriter code, List<ArgType...
    method addClassBody (line 267) | public void addClassBody(ICodeWriter clsCode) throws CodegenException {
    method addClassBody (line 275) | public void addClassBody(ICodeWriter clsCode, boolean printClassName) ...
    method addInnerClsAndMethods (line 290) | private void addInnerClsAndMethods(ICodeWriter clsCode) {
    method skipNode (line 304) | private boolean skipNode(NotificationAttrNode node) {
    method addInnerClass (line 316) | private void addInnerClass(ICodeWriter code, ClassNode innerCls) {
    method isInnerClassesPresents (line 327) | private boolean isInnerClassesPresents() {
    method addMethod (line 336) | private void addMethod(ICodeWriter code, MethodNode mth) {
    method skipMethod (line 359) | private boolean skipMethod(MethodNode mth) {
    method isMethodsPresents (line 389) | private boolean isMethodsPresents() {
    method addMethodCode (line 398) | public void addMethodCode(ICodeWriter code, MethodNode mth) throws Cod...
    method addFields (line 427) | private void addFields(ICodeWriter code) throws CodegenException {
    method addField (line 434) | public void addField(ICodeWriter code, FieldNode f) {
    method getIntegerString (line 484) | private String getIntegerString(long lit, ArgType type) {
    method isFieldsPresents (line 492) | private boolean isFieldsPresents() {
    method addEnumFields (line 501) | private void addEnumFields(ICodeWriter code) throws CodegenException {
    method getEnumCtrSkipArgsCount (line 540) | private int getEnumCtrSkipArgsCount(@Nullable MethodNode callMth) {
    method makeInsnGen (line 550) | private InsnGen makeInsnGen(MethodNode mth) {
    method addInsnBody (line 555) | private void addInsnBody(InsnGen insnGen, ICodeWriter code, InsnNode i...
    method useType (line 563) | public void useType(ICodeWriter code, ArgType type) {
    method useClass (line 581) | public void useClass(ICodeWriter code, String rawCls) {
    method useClass (line 585) | public void useClass(ICodeWriter code, ArgType type) {
    method addInnerType (line 597) | private void addInnerType(ICodeWriter code, ArgType baseType) {
    method useClassWithShortName (line 609) | private void useClassWithShortName(ICodeWriter code, ArgType baseType,...
    method addGenerics (line 625) | private void addGenerics(ICodeWriter code, ArgType type) {
    method useClass (line 650) | public void useClass(ICodeWriter code, ClassInfo classInfo) {
    method useClass (line 659) | public void useClass(ICodeWriter code, ClassNode classNode) {
    method addClsName (line 664) | public void addClsName(ICodeWriter code, ClassInfo classInfo) {
    method addClsShortNameForced (line 669) | public void addClsShortNameForced(ICodeWriter code, ClassInfo classInf...
    method useClassInternal (line 676) | private String useClassInternal(ClassInfo useCls, ClassInfo extClsInfo) {
    method expandInnerClassName (line 728) | private String expandInnerClassName(ClassInfo useCls, ClassInfo extCls...
    method addImport (line 748) | private void addImport(ClassInfo classInfo) {
    method getImports (line 756) | public Set<ClassInfo> getImports() {
    method isBothClassesInOneTopClass (line 764) | private static boolean isBothClassesInOneTopClass(ClassInfo useCls, Cl...
    method isClassInnerFor (line 774) | private static boolean isClassInnerFor(ClassInfo inner, ClassInfo pare...
    method checkInnerCollision (line 782) | private static boolean checkInnerCollision(RootNode root, @Nullable Cl...
    method checkInPackageCollision (line 805) | private static boolean checkInPackageCollision(RootNode root, ClassInf...
    method addClassUsageInfo (line 815) | private static void addClassUsageInfo(ICodeWriter code, ClassNode cls) {
    method addMthUsageInfo (line 833) | static void addMthUsageInfo(ICodeWriter code, MethodNode mth) {
    method addFieldUsageInfo (line 841) | private static void addFieldUsageInfo(ICodeWriter code, FieldNode fiel...
    method getParentGen (line 849) | public ClassGen getParentGen() {
    method getAnnotationGen (line 853) | public AnnotationGen getAnnotationGen() {
    method isFallbackMode (line 857) | public boolean isFallbackMode() {
    method isBodyGenStarted (line 861) | public boolean isBodyGenStarted() {
    method setBodyGenStarted (line 865) | public void setBodyGenStarted(boolean bodyGenStarted) {
    method getOuterNameGen (line 869) | @Nullable
    method setOuterNameGen (line 874) | public void setOuterNameGen(@NotNull NameGen outerNameGen) {

FILE: jadx-core/src/main/java/jadx/core/codegen/CodeGen.java
  class CodeGen (line 13) | public class CodeGen {
    method generate (line 15) | public static ICodeInfo generate(ClassNode cls) {
    method generateJavaCode (line 32) | private static ICodeInfo generateJavaCode(ClassNode cls, JadxArgs args) {
    method generateJson (line 37) | private static ICodeInfo generateJson(ClassNode cls) {
    method wrapCodeGen (line 43) | private static <R> R wrapCodeGen(ClassNode cls, Callable<R> codeGenFun...
    method CodeGen (line 60) | private CodeGen() {

FILE: jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java
  class ConditionGen (line 23) | public class ConditionGen extends InsnGen {
    class CondStack (line 25) | private static class CondStack {
      method getStack (line 28) | public Queue<IfCondition> getStack() {
      method push (line 32) | public void push(IfCondition cond) {
      method pop (line 36) | public IfCondition pop() {
    method ConditionGen (line 41) | public ConditionGen(InsnGen insnGen) {
    method add (line 45) | public void add(ICodeWriter code, IfCondition condition) throws Codege...
    method wrap (line 49) | void wrap(ICodeWriter code, IfCondition condition) throws CodegenExcep...
    method add (line 53) | private void add(ICodeWriter code, CondStack stack, IfCondition condit...
    method wrap (line 79) | private void wrap(ICodeWriter code, CondStack stack, IfCondition cond)...
    method wrap (line 90) | private void wrap(ICodeWriter code, InsnArg firstArg) throws CodegenEx...
    method addCompare (line 101) | private void addCompare(ICodeWriter code, CondStack stack, Compare com...
    method addTernary (line 134) | private void addTernary(ICodeWriter code, CondStack stack, IfCondition...
    method addNot (line 142) | private void addNot(ICodeWriter code, CondStack stack, IfCondition con...
    method addAndOr (line 147) | private void addAndOr(ICodeWriter code, CondStack stack, IfCondition c...
    method isWrapNeeded (line 158) | private boolean isWrapNeeded(IfCondition condition) {
    method isArgWrapNeeded (line 165) | private static boolean isArgWrapNeeded(InsnArg arg) {

FILE: jadx-core/src/main/java/jadx/core/codegen/InsnGen.java
  class InsnGen (line 70) | public class InsnGen {
    type Flags (line 78) | protected enum Flags {
    method InsnGen (line 84) | public InsnGen(MethodGen mgen, boolean fallback) {
    method isFallback (line 91) | private boolean isFallback() {
    method addArgDot (line 95) | public void addArgDot(ICodeWriter code, InsnArg arg) throws CodegenExc...
    method addArg (line 103) | public void addArg(ICodeWriter code, InsnArg arg) throws CodegenExcept...
    method addArg (line 107) | public void addArg(ICodeWriter code, InsnArg arg, boolean wrap) throws...
    method addArg (line 111) | public void addArg(ICodeWriter code, InsnArg arg, Set<Flags> flags) th...
    method addLiteralArg (line 129) | private void addLiteralArg(ICodeWriter code, LiteralArg litArg, Set<Fl...
    method addWrappedArg (line 138) | private void addWrappedArg(ICodeWriter code, InsnWrapArg arg, Set<Flag...
    method assignVar (line 149) | public void assignVar(ICodeWriter code, InsnNode insn) throws CodegenE...
    method declareVar (line 158) | public void declareVar(ICodeWriter code, RegisterArg arg) {
    method declareVar (line 162) | public void declareVar(ICodeWriter code, CodeVar codeVar) {
    method defVar (line 174) | private void defVar(ICodeWriter code, CodeVar codeVar) {
    method lit (line 182) | private String lit(LiteralArg arg) {
    method instanceField (line 186) | private void instanceField(ICodeWriter code, FieldInfo field, InsnArg ...
    method staticField (line 215) | protected void staticField(ICodeWriter code, FieldInfo field) throws C...
    method makeStaticFieldAccess (line 233) | public static void makeStaticFieldAccess(ICodeWriter code, FieldInfo f...
    method makeStaticFieldAccess (line 238) | private static void makeStaticFieldAccess(ICodeWriter code,
    method useClass (line 260) | public void useClass(ICodeWriter code, ArgType type) {
    method useClass (line 264) | public void useClass(ICodeWriter code, ClassInfo cls) {
    method useType (line 268) | protected void useType(ICodeWriter code, ArgType type) {
    method makeInsn (line 272) | public void makeInsn(InsnNode insn, ICodeWriter code) throws CodegenEx...
    method makeInsn (line 280) | protected void makeInsn(InsnNode insn, ICodeWriter code, Flags flag) t...
    method makeInsnBody (line 314) | private void makeInsnBody(ICodeWriter code, InsnNode insn, Set<Flags> ...
    method fillArray (line 657) | private void fillArray(ICodeWriter code, FillArrayInsn arrayNode) thro...
    method oneArgInsn (line 683) | private void oneArgInsn(ICodeWriter code, InsnNode insn, Set<Flags> st...
    method fallbackOnlyInsn (line 695) | private void fallbackOnlyInsn(InsnNode insn) throws CodegenException {
    method filledNewArray (line 705) | private void filledNewArray(FilledNewArrayNode insn, ICodeWriter code)...
    method makeConstructor (line 727) | private void makeConstructor(ConstructorInsn insn, ICodeWriter code) t...
    method addOuterClassInstance (line 785) | private boolean addOuterClassInstance(ConstructorInsn insn, ICodeWrite...
    method inlineAnonymousConstructor (line 806) | private void inlineAnonymousConstructor(ICodeWriter code, ClassNode cl...
    method makeInvoke (line 850) | private void makeInvoke(InvokeNode insn, ICodeWriter code) throws Code...
    method makeInvokeCustomRaw (line 913) | private void makeInvokeCustomRaw(InvokeCustomRawNode insn,
    method needInvokeArg (line 939) | private boolean needInvokeArg(InsnArg arg) {
    method makeInvokeLambda (line 952) | private void makeInvokeLambda(ICodeWriter code, InvokeCustomNode custo...
    method makeRefLambda (line 965) | private void makeRefLambda(ICodeWriter code, InvokeCustomNode customNo...
    method makeSimpleLambda (line 985) | private void makeSimpleLambda(ICodeWriter code, InvokeCustomNode custo...
    method makeInlinedLambdaMethod (line 1032) | private void makeInlinedLambdaMethod(ICodeWriter code, InvokeCustomNod...
    method callSuper (line 1080) | private void callSuper(ICodeWriter code, MethodInfo callMth) {
    method getClassForSuperCall (line 1101) | @Nullable
    method generateMethodArguments (line 1119) | void generateMethodArguments(ICodeWriter code, BaseInvokeNode insn, in...
    method processVarArg (line 1152) | private boolean processVarArg(ICodeWriter code, BaseInvokeNode invokeI...
    method makeTernary (line 1174) | private void makeTernary(TernaryInsn insn, ICodeWriter code, Set<Flags...
    method makeArith (line 1196) | private void makeArith(ArithNode insn, ICodeWriter code, Set<Flags> st...
    method makeArithOneArg (line 1216) | private void makeArithOneArg(ArithNode insn, ICodeWriter code) throws ...

FILE: jadx-core/src/main/java/jadx/core/codegen/MethodGen.java
  class MethodGen (line 54) | public class MethodGen {
    method MethodGen (line 62) | public MethodGen(ClassGen classGen, MethodNode mth) {
    method getClassGen (line 69) | public ClassGen getClassGen() {
    method getNameGen (line 73) | public NameGen getNameGen() {
    method getMethodNode (line 77) | public MethodNode getMethodNode() {
    method addDefinition (line 81) | public boolean addDefinition(ICodeWriter code) {
    method getMethodForDefinition (line 166) | private MethodNode getMethodForDefinition() {
    method addOverrideAnnotation (line 174) | private void addOverrideAnnotation(ICodeWriter code, MethodNode mth) {
    method addMethodArguments (line 193) | private void addMethodArguments(ICodeWriter code) {
    method addInstructions (line 255) | public void addInstructions(ICodeWriter code) throws CodegenException {
    method addRegionInsns (line 288) | public void addRegionInsns(ICodeWriter code) throws CodegenException {
    method addSimpleMethodCode (line 306) | private void addSimpleMethodCode(ICodeWriter code) {
    method generateSimpleCode (line 325) | private void generateSimpleCode(ICodeWriter code) throws CodegenExcept...
    method dumpInstructions (line 359) | public void dumpInstructions(ICodeWriter code) {
    method addFallbackMethodCode (line 376) | public void addFallbackMethodCode(ICodeWriter code, FallbackOption fal...
    type FallbackOption (line 422) | public enum FallbackOption {
    method addFallbackInsns (line 428) | public static void addFallbackInsns(ICodeWriter code, MethodNode mth, ...
    method dumpInsn (line 442) | private boolean dumpInsn(ICodeWriter code, InsnGen insnGen, FallbackOp...
    method addCatchComment (line 490) | private void addCatchComment(ICodeWriter code, InsnNode insn, boolean ...
    method isCommentEscapeNeeded (line 508) | private static boolean isCommentEscapeNeeded(InsnNode insn, FallbackOp...
    method needLabel (line 518) | private static boolean needLabel(InsnNode insn, InsnNode prevInsn) {
    method getFallbackMethodGen (line 542) | public static MethodGen getFallbackMethodGen(MethodNode mth) {
    method getLabelName (line 547) | public static String getLabelName(BlockNode block) {
    method getLabelName (line 551) | public static String getLabelName(IfNode insn) {
    method getLabelName (line 559) | public static String getLabelName(int offset) {

FILE: jadx-core/src/main/java/jadx/core/codegen/NameGen.java
  class NameGen (line 17) | public class NameGen {
    method NameGen (line 22) | public NameGen(MethodNode mth, ClassGen classGen) {
    method inheritUsedNames (line 32) | public void inheritUsedNames(NameGen otherNameGen) {
    method addNamesUsedInClass (line 36) | private void addNamesUsedInClass() {
    method assignArg (line 50) | public String assignArg(CodeVar var) {
    method assignNamedArg (line 62) | public String assignNamedArg(NamedArg arg) {
    method useArg (line 72) | public String useArg(RegisterArg arg) {
    method getLoopLabel (line 81) | public String getLoopLabel(LoopLabelAttr attr) {
    method getUniqueVarName (line 87) | private String getUniqueVarName(String name) {
    method makeArgName (line 98) | private String makeArgName(CodeVar var) {
    method getFallbackName (line 106) | private String getFallbackName(CodeVar var) {
    method getFallbackName (line 114) | private String getFallbackName(RegisterArg arg) {

FILE: jadx-core/src/main/java/jadx/core/codegen/RegionGen.java
  class RegionGen (line 57) | public class RegionGen extends InsnGen {
    method RegionGen (line 60) | public RegionGen(MethodGen mgen) {
    method makeRegion (line 64) | public void makeRegion(ICodeWriter code, IContainer cont) throws Codeg...
    method declareVars (line 69) | private void declareVars(ICodeWriter code, IContainer cont) {
    method makeRegionIndent (line 81) | private void makeRegionIndent(ICodeWriter code, IContainer region) thr...
    method makeSimpleBlock (line 87) | public void makeSimpleBlock(IBlock block, ICodeWriter code) throws Cod...
    method makeIf (line 103) | public void makeIf(IfRegion region, ICodeWriter code, boolean newLine)...
    method connectElseIf (line 152) | private boolean connectElseIf(ICodeWriter code, IContainer els) throws...
    method makeLoop (line 164) | public void makeLoop(LoopRegion region, ICodeWriter code) throws Codeg...
    method makeSynchronizedRegion (line 231) | public void makeSynchronizedRegion(SynchronizedRegion cont, ICodeWrite...
    method makeSwitch (line 244) | public void makeSwitch(SwitchRegion sw, ICodeWriter code) throws Codeg...
    method addCaseKey (line 273) | private void addCaseKey(ICodeWriter code, InsnArg arg, Object k) throw...
    method useField (line 288) | private void useField(ICodeWriter code, FieldInfo fldInfo, @Nullable F...
    method makeTryCatch (line 313) | public void makeTryCatch(TryCatchRegion region, ICodeWriter code) thro...
    method makeCatchBlock (line 345) | private void makeCatchBlock(ICodeWriter code, ExceptionHandler handler...

FILE: jadx-core/src/main/java/jadx/core/codegen/SimpleModeHelper.java
  class SimpleModeHelper (line 23) | public class SimpleModeHelper {
    method SimpleModeHelper (line 30) | public SimpleModeHelper(MethodNode mth) {
    method prepareBlocks (line 36) | public List<BlockNode> prepareBlocks() {
    method removeEmptyBlocks (line 86) | private void removeEmptyBlocks() {
    method unbindExceptionHandlers (line 107) | private void unbindExceptionHandlers() {
    method processTargetInsn (line 119) | private void processTargetInsn(BlockNode block, InsnNode lastInsn, @Nu...
    method isNeedStartLabel (line 137) | public boolean isNeedStartLabel(BlockNode block) {
    method isNeedEndGoto (line 141) | public boolean isNeedEndGoto(BlockNode block) {
    method getSortedBlocks (line 146) | private List<BlockNode> getSortedBlocks() {

FILE: jadx-core/src/main/java/jadx/core/codegen/TypeGen.java
  class TypeGen (line 16) | public class TypeGen {
    method TypeGen (line 19) | private TypeGen() {
    method signature (line 22) | public static String signature(ArgType type) {
    method literalToString (line 36) | public static String literalToString(LiteralArg arg, IDexNode dexNode,...
    method literalToString (line 48) | public static String literalToString(long lit, ArgType type, IDexNode ...
    method literalToString (line 52) | public static String literalToString(long lit, ArgType type, StringUti...
    method literalToRawString (line 101) | @Nullable

FILE: jadx-core/src/main/java/jadx/core/codegen/json/JsonCodeGen.java
  class JsonCodeGen (line 38) | public class JsonCodeGen {
    method JsonCodeGen (line 49) | public JsonCodeGen(ClassNode cls) {
    method process (line 55) | public String process() {
    method processCls (line 60) | private JsonClass processCls(ClassNode cls, @Nullable ClassGen parentC...
    method addInnerClasses (line 105) | private void addInnerClasses(ClassNode cls, JsonClass jsonCls, ClassGe...
    method addFields (line 120) | private void addFields(ClassNode cls, JsonClass jsonCls, ClassGen clas...
    method addMethods (line 140) | private void addMethods(ClassNode cls, JsonClass jsonCls, ClassGen cla...
    method fillMthCode (line 166) | private List<JsonCodeLine> fillMthCode(MethodNode mth, MethodGen mthGe...
    method getTypeAlias (line 209) | private String getTypeAlias(ClassGen classGen, ArgType clsType) {
    method getClassTypeStr (line 215) | private String getClassTypeStr(ClassNode cls) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/JsonMappingGen.java
  class JsonMappingGen (line 30) | public class JsonMappingGen {
    method dump (line 38) | public static void dump(RootNode root) {
    method fillMapping (line 54) | private static void fillMapping(JsonMapping mapping, RootNode root) {
    method addMethods (line 73) | private static void addMethods(ClassNode cls, JsonClsMapping jsonCls) {
    method addFields (line 90) | private static void addFields(ClassNode cls, JsonClsMapping jsonCls) {
    method JsonMappingGen (line 104) | private JsonMappingGen() {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/cls/JsonClass.java
  class JsonClass (line 7) | public class JsonClass extends JsonNode {
    method getType (line 23) | public String getType() {
    method setType (line 27) | public void setType(String type) {
    method getSuperClass (line 31) | public String getSuperClass() {
    method setSuperClass (line 35) | public void setSuperClass(String superClass) {
    method getInterfaces (line 39) | public List<String> getInterfaces() {
    method setInterfaces (line 43) | public void setInterfaces(List<String> interfaces) {
    method getFields (line 47) | public List<JsonField> getFields() {
    method setFields (line 51) | public void setFields(List<JsonField> fields) {
    method getMethods (line 55) | public List<JsonMethod> getMethods() {
    method setMethods (line 59) | public void setMethods(List<JsonMethod> methods) {
    method getInnerClasses (line 63) | public List<JsonClass> getInnerClasses() {
    method setInnerClasses (line 67) | public void setInnerClasses(List<JsonClass> innerClasses) {
    method getPkg (line 71) | public String getPkg() {
    method setPkg (line 75) | public void setPkg(String pkg) {
    method getDex (line 79) | public String getDex() {
    method setDex (line 83) | public void setDex(String dex) {
    method getImports (line 87) | public List<String> getImports() {
    method setImports (line 91) | public void setImports(List<String> imports) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/cls/JsonCodeLine.java
  class JsonCodeLine (line 5) | public class JsonCodeLine {
    method getCode (line 10) | public String getCode() {
    method setCode (line 14) | public void setCode(String code) {
    method getOffset (line 18) | public String getOffset() {
    method setOffset (line 22) | public void setOffset(String offset) {
    method getSourceLine (line 26) | public Integer getSourceLine() {
    method setSourceLine (line 30) | public void setSourceLine(@Nullable Integer sourceLine) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/cls/JsonField.java
  class JsonField (line 3) | public class JsonField extends JsonNode {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/cls/JsonMethod.java
  class JsonMethod (line 5) | public class JsonMethod extends JsonNode {
    method getSignature (line 12) | public String getSignature() {
    method setSignature (line 16) | public void setSignature(String signature) {
    method getReturnType (line 20) | public String getReturnType() {
    method setReturnType (line 24) | public void setReturnType(String returnType) {
    method getArguments (line 28) | public List<String> getArguments() {
    method setArguments (line 32) | public void setArguments(List<String> arguments) {
    method getLines (line 36) | public List<JsonCodeLine> getLines() {
    method setLines (line 40) | public void setLines(List<JsonCodeLine> lines) {
    method getOffset (line 44) | public String getOffset() {
    method setOffset (line 48) | public void setOffset(String offset) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/cls/JsonNode.java
  class JsonNode (line 3) | public class JsonNode {
    method getName (line 9) | public String getName() {
    method setName (line 13) | public void setName(String name) {
    method getAlias (line 17) | public String getAlias() {
    method setAlias (line 21) | public void setAlias(String alias) {
    method getDeclaration (line 25) | public String getDeclaration() {
    method setDeclaration (line 29) | public void setDeclaration(String declaration) {
    method getAccessFlags (line 33) | public int getAccessFlags() {
    method setAccessFlags (line 37) | public void setAccessFlags(int accessFlags) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/mapping/JsonClsMapping.java
  class JsonClsMapping (line 5) | public class JsonClsMapping {
    method getName (line 16) | public String getName() {
    method setName (line 20) | public void setName(String name) {
    method getAlias (line 24) | public String getAlias() {
    method setAlias (line 28) | public void setAlias(String alias) {
    method getJson (line 32) | public String getJson() {
    method setJson (line 36) | public void setJson(String json) {
    method isInner (line 40) | public boolean isInner() {
    method setInner (line 44) | public void setInner(boolean inner) {
    method getTopClass (line 48) | public String getTopClass() {
    method setTopClass (line 52) | public void setTopClass(String topClass) {
    method getFields (line 56) | public List<JsonFieldMapping> getFields() {
    method setFields (line 60) | public void setFields(List<JsonFieldMapping> fields) {
    method getMethods (line 64) | public List<JsonMthMapping> getMethods() {
    method setMethods (line 68) | public void setMethods(List<JsonMthMapping> methods) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/mapping/JsonFieldMapping.java
  class JsonFieldMapping (line 3) | public class JsonFieldMapping {
    method getName (line 7) | public String getName() {
    method setName (line 11) | public void setName(String name) {
    method getAlias (line 15) | public String getAlias() {
    method setAlias (line 19) | public void setAlias(String alias) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/mapping/JsonMapping.java
  class JsonMapping (line 5) | public class JsonMapping {
    method getClasses (line 8) | public List<JsonClsMapping> getClasses() {
    method setClasses (line 12) | public void setClasses(List<JsonClsMapping> classes) {

FILE: jadx-core/src/main/java/jadx/core/codegen/json/mapping/JsonMthMapping.java
  class JsonMthMapping (line 3) | public class JsonMthMapping {
    method getSignature (line 9) | public String getSignature() {
    method setSignature (line 13) | public void setSignature(String signature) {
    method getName (line 17) | public String getName() {
    method setName (line 21) | public void setName(String name) {
    method getAlias (line 25) | public String getAlias() {
    method setAlias (line 29) | public void setAlias(String alias) {
    method getOffset (line 33) | public String getOffset() {
    method setOffset (line 37) | public void setOffset(String offset) {

FILE: jadx-core/src/main/java/jadx/core/codegen/utils/CodeComment.java
  class CodeComment (line 6) | public class CodeComment {
    method CodeComment (line 11) | public CodeComment(String comment, CommentStyle style) {
    method CodeComment (line 16) | public CodeComment(ICodeComment comment) {
    method getComment (line 20) | public String getComment() {
    method getStyle (line 24) | public CommentStyle getStyle() {
    method toString (line 28) | @Override

FILE: jadx-core/src/main/java/jadx/core/codegen/utils/CodeGenUtils.java
  class CodeGenUtils (line 28) | public class CodeGenUtils {
    method addErrorsAndComments (line 30) | public static void addErrorsAndComments(ICodeWriter code, Notification...
    method addErrors (line 35) | public static void addErrors(ICodeWriter code, NotificationAttrNode no...
    method addError (line 47) | public static void addError(ICodeWriter code, String errMsg, Throwable...
    method addComments (line 57) | public static void addComments(ICodeWriter code, NotificationAttrNode ...
    method addCodeComments (line 66) | public static void addCodeComments(ICodeWriter code, NotificationAttrN...
    method addCodeComments (line 75) | private static void addCodeComments(ICodeWriter code, @Nullable IAttri...
    method addCodeComment (line 85) | private static void addCodeComment(ICodeWriter code, CodeComment comme...
    method addJadxNodeComment (line 94) | public static void addJadxNodeComment(ICodeWriter code, NotificationAt...
    method addJadxComment (line 105) | public static void addJadxComment(ICodeWriter code, CommentsLevel leve...
    method addCommentWithStyle (line 110) | private static void addCommentWithStyle(ICodeWriter code, CommentStyle...
    method addCommentWithStyle (line 119) | private static void addCommentWithStyle(ICodeWriter code, CommentStyle...
    method appendMultiLineString (line 127) | private static void appendMultiLineString(ICodeWriter code, String onN...
    method addClassRenamedComment (line 140) | public static void addClassRenamedComment(ICodeWriter code, ClassNode ...
    method addRenamedComment (line 147) | public static void addRenamedComment(ICodeWriter code, NotificationAtt...
    method addSourceFileInfo (line 157) | public static void addSourceFileInfo(ICodeWriter code, ClassNode node) {
    method addInputFileInfo (line 173) | public static void addInputFileInfo(ICodeWriter code, ClassNode cls) {
    method getCodeVar (line 189) | public static CodeVar getCodeVar(RegisterArg arg) {
    method CodeGenUtils (line 197) | private CodeGenUtils() {

FILE: jadx-core/src/main/java/jadx/core/deobf/DeobfAliasProvider.java
  class DeobfAliasProvider (line 13) | public class DeobfAliasProvider implements IAliasProvider {
    method init (line 22) | @Override
    method initIndexes (line 27) | @Override
    method forPackage (line 35) | @Override
    method forClass (line 40) | @Override
    method forField (line 46) | @Override
    method forMethod (line 51) | @Override
    method prepareNamePart (line 57) | private String prepareNamePart(String name) {
    method makeClsPrefix (line 68) | private String makeClsPrefix(ClassNode cls) {
    method getBaseName (line 85) | private static String getBaseName(ClassNode cls) {
    method getClsName (line 117) | private static String getClsName(String name) {

FILE: jadx-core/src/main/java/jadx/core/deobf/DeobfPresets.java
  class DeobfPresets (line 34) | public class DeobfPresets {
    method build (line 46) | public static DeobfPresets build(RootNode root) {
    method getPathDeobfMapPath (line 54) | private static Path getPathDeobfMapPath(RootNode root) {
    method DeobfPresets (line 65) | private DeobfPresets(Path deobfMapFile) {
    method load (line 72) | public boolean load() {
    method splitAndTrim (line 115) | private static String[] splitAndTrim(String str) {
    method save (line 123) | public void save() throws IOException {
    method fill (line 149) | public void fill(RootNode root) {
    method apply (line 179) | public void apply(RootNode root) {
    method initIndexes (line 205) | public void initIndexes(IAliasProvider aliasProvider) {
    method getForCls (line 209) | public String getForCls(ClassInfo cls) {
    method getForFld (line 216) | public String getForFld(FieldInfo fld) {
    method getForMth (line 223) | public String getForMth(MethodInfo mth) {
    method clear (line 230) | public void clear() {
    method getDeobfMapFile (line 237) | public Path getDeobfMapFile() {
    method getPkgPresetMap (line 241) | public Map<String, String> getPkgPresetMap() {
    method getClsPresetMap (line 245) | public Map<String, String> getClsPresetMap() {
    method getFldPresetMap (line 249) | public Map<String, String> getFldPresetMap() {
    method getMthPresetMap (line 253) | public Map<String, String> getMthPresetMap() {

FILE: jadx-core/src/main/java/jadx/core/deobf/DeobfuscatorVisitor.java
  class DeobfuscatorVisitor (line 14) | public class DeobfuscatorVisitor extends AbstractVisitor {
    method init (line 16) | @Override
    method process (line 34) | public static void process(RootNode root, IRenameCondition renameCondi...
    method getName (line 75) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/FileTypeDetector.java
  class FileTypeDetector (line 17) | public class FileTypeDetector {
    method register (line 44) | public static void register(String fileType, String signature) {
    method detectByHeaders (line 48) | private static String detectByHeaders(byte[] data) {
    method detectFileExtension (line 60) | public static String detectFileExtension(byte[] data) {
    method readInt (line 110) | private static int readInt(byte[] data, int offset) {
    method isNinePatch (line 117) | private static boolean isNinePatch(byte[] data) {

FILE: jadx-core/src/main/java/jadx/core/deobf/NameMapper.java
  class NameMapper (line 12) | public class NameMapper {
    method isReserved (line 77) | public static boolean isReserved(String str) {
    method isValidIdentifier (line 81) | public static boolean isValidIdentifier(String str) {
    method isValidFullIdentifier (line 87) | public static boolean isValidFullIdentifier(String str) {
    method isValidAndPrintable (line 93) | public static boolean isValidAndPrintable(String str) {
    method isValidIdentifierStart (line 97) | public static boolean isValidIdentifierStart(int codePoint) {
    method isValidIdentifierPart (line 101) | public static boolean isValidIdentifierPart(int codePoint) {
    method isPrintableChar (line 105) | public static boolean isPrintableChar(char c) {
    method isPrintableAsciiCodePoint (line 109) | public static boolean isPrintableAsciiCodePoint(int c) {
    method isPrintableCodePoint (line 113) | public static boolean isPrintableCodePoint(int codePoint) {
    method isAllCharsPrintable (line 132) | public static boolean isAllCharsPrintable(String str) {
    method removeInvalidCharsMiddle (line 157) | public static String removeInvalidCharsMiddle(String name) {
    method removeInvalidChars (line 176) | public static String removeInvalidChars(String name, String prefix) {
    method removeNonPrintableCharacters (line 187) | public static String removeNonPrintableCharacters(String name) {
    method NameMapper (line 197) | private NameMapper() {

FILE: jadx-core/src/main/java/jadx/core/deobf/SaveDeobfMapping.java
  class SaveDeobfMapping (line 16) | public class SaveDeobfMapping extends AbstractVisitor {
    method init (line 19) | @Override
    method saveMappings (line 30) | private void saveMappings(RootNode root) {
    method getName (line 49) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/AbstractDeobfCondition.java
  class AbstractDeobfCondition (line 10) | public abstract class AbstractDeobfCondition implements IDeobfCondition {
    method init (line 12) | @Override
    method check (line 16) | @Override
    method check (line 21) | @Override
    method check (line 26) | @Override
    method check (line 31) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/AvoidClsAndPkgNamesCollision.java
  class AvoidClsAndPkgNamesCollision (line 10) | public class AvoidClsAndPkgNamesCollision extends AbstractDeobfCondition {
    method init (line 14) | @Override
    method check (line 22) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/BaseDeobfCondition.java
  class BaseDeobfCondition (line 14) | public class BaseDeobfCondition extends AbstractDeobfCondition {
    method check (line 16) | @Override
    method check (line 24) | @Override
    method check (line 32) | @Override
    method check (line 42) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/DeobfLengthCondition.java
  class DeobfLengthCondition (line 11) | public class DeobfLengthCondition implements IDeobfCondition {
    method init (line 16) | @Override
    method checkName (line 23) | private Action checkName(String s) {
    method check (line 31) | @Override
    method check (line 36) | @Override
    method check (line 41) | @Override
    method check (line 46) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/DeobfWhitelist.java
  class DeobfWhitelist (line 13) | public class DeobfWhitelist extends AbstractDeobfCondition {
    method init (line 28) | @Override
    method check (line 43) | @Override
    method check (line 51) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/ExcludeAndroidRClass.java
  class ExcludeAndroidRClass (line 9) | public class ExcludeAndroidRClass extends AbstractDeobfCondition {
    method check (line 11) | @Override
    method isR (line 19) | private static boolean isR(ClassNode cls) {

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/ExcludePackageWithTLDNames.java
  class ExcludePackageWithTLDNames (line 14) | public class ExcludePackageWithTLDNames extends AbstractDeobfCondition {
    class TldHolder (line 19) | private static class TldHolder {
    method loadTldSet (line 23) | private static Set<String> loadTldSet() {
    method check (line 33) | @Override

FILE: jadx-core/src/main/java/jadx/core/deobf/conditions/JadxRenameConditions.java
  class JadxRenameConditions (line 10) | public class JadxRenameConditions {
    method buildDefaultDeobfConditions (line 16) | public static List<IDeobfCondition> buildDefaultDeobfConditions() {
    method buildDefault (line 27) | public static IRenameCondition buildDefault() {

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/AFlag.java
  type AFlag (line 3) | public enum AFlag {

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/AType.java
  class AType (line 49) | public final class AType<T extends IJadxAttribute> implements IJadxAttrT...

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/AttrList.java
  class AttrList (line 10) | public class AttrList<T> implements IJadxAttribute {
    method AttrList (line 17) | public AttrList(IJadxAttrType<AttrList<T>> type) {
    method getList (line 21) | public List<T> getList() {
    method getAttrType (line 25) | @Override
    method toString (line 30) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/AttrNode.java
  class AttrNode (line 13) | public abstract class AttrNode implements IAttributeNode {
    method add (line 19) | @Override
    method addAttr (line 27) | @Override
    method addAttrs (line 36) | @Override
    method addAttr (line 44) | @Override
    method addAttr (line 52) | public <T> void addAttr(IJadxAttrType<AttrList<T>> type, List<T> list) {
    method copyAttributesFrom (line 57) | @Override
    method copyAttributeFrom (line 65) | @Override
    method rewriteAttributeFrom (line 76) | @Override
    method initStorage (line 82) | private AttributeStorage initStorage() {
    method unloadIfEmpty (line 91) | private void unloadIfEmpty() {
    method contains (line 97) | @Override
    method contains (line 102) | @Override
    method get (line 107) | @Override
    method getAnnotation (line 112) | @Override
    method getAll (line 117) | @Override
    method remove (line 122) | @Override
    method remove (line 128) | @Override
    method removeAttr (line 134) | @Override
    method clearAttributes (line 140) | @Override
    method unloadAttributes (line 145) | public void unloadAttributes() {
    method getAttributesStringsList (line 154) | @Override
    method getAttributesString (line 159) | @Override
    method isAttrStorageEmpty (line 164) | @Override
    method addDebugComment (line 169) | private void addDebugComment(String msg) {

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/AttributeStorage.java
  class AttributeStorage (line 26) | public class AttributeStorage {
    method fromList (line 28) | public static AttributeStorage fromList(List<IJadxAttribute> list) {
    method AttributeStorage (line 46) | public AttributeStorage() {
    method add (line 51) | public void add(AFlag flag) {
    method add (line 55) | public void add(IJadxAttribute attr) {
    method add (line 59) | public void add(List<IJadxAttribute> list) {
    method add (line 63) | public <T> void add(IJadxAttrType<AttrList<T>> type, T obj) {
    method addAll (line 72) | public void addAll(AttributeStorage otherList) {
    method contains (line 79) | public boolean contains(AFlag flag) {
    method contains (line 83) | public <T extends IJadxAttribute> boolean contains(IJadxAttrType<T> ty...
    method get (line 87) | @SuppressWarnings("unchecked")
    method getAnnotation (line 92) | public IAnnotation getAnnotation(String cls) {
    method getAll (line 97) | public <T> List<T> getAll(IJadxAttrType<AttrList<T>> type) {
    method remove (line 105) | public void remove(AFlag flag) {
    method clearFlags (line 109) | public void clearFlags() {
    method remove (line 113) | public <T extends IJadxAttribute> void remove(IJadxAttrType<T> type) {
    method remove (line 119) | public void remove(IJadxAttribute attr) {
    method writeAttributes (line 131) | private void writeAttributes(Consumer<Map<IJadxAttrType<?>, IJadxAttri...
    method unloadAttributes (line 143) | public void unloadAttributes() {
    method getAttributeStrings (line 150) | public List<String> getAttributeStrings() {
    method isEmpty (line 165) | public boolean isEmpty() {
    method toString (line 169) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/EmptyAttrStorage.java
  class EmptyAttrStorage (line 10) | public final class EmptyAttrStorage extends AttributeStorage {
    method EmptyAttrStorage (line 14) | private EmptyAttrStorage() {
    method contains (line 18) | @Override
    method contains (line 23) | @Override
    method get (line 28) | @Override
    method getAnnotation (line 33) | @Override
    method getAll (line 38) | @Override
    method remove (line 43) | @Override
    method remove (line 48) | @Override
    method remove (line 53) | @Override
    method getAttributeStrings (line 58) | @Override
    method isEmpty (line 63) | @Override
    method toString (line 68) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/FieldInitInsnAttr.java
  class FieldInitInsnAttr (line 11) | public final class FieldInitInsnAttr extends PinnedAttribute {
    method FieldInitInsnAttr (line 15) | public FieldInitInsnAttr(MethodNode mth, InsnNode insn) {
    method getInsn (line 20) | public InsnNode getInsn() {
    method getInsnMth (line 24) | public MethodNode getInsnMth() {
    method getAttrType (line 28) | @Override
    method toString (line 33) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/IAttributeNode.java
  type IAttributeNode (line 9) | public interface IAttributeNode {
    method add (line 11) | void add(AFlag flag);
    method addAttr (line 13) | void addAttr(IJadxAttribute attr);
    method addAttrs (line 15) | void addAttrs(List<IJadxAttribute> list);
    method addAttr (line 17) | <T> void addAttr(IJadxAttrType<AttrList<T>> type, T obj);
    method copyAttributesFrom (line 19) | void copyAttributesFrom(AttrNode attrNode);
    method copyAttributeFrom (line 21) | <T extends IJadxAttribute> void copyAttributeFrom(AttrNode attrNode, A...
    method rewriteAttributeFrom (line 23) | <T extends IJadxAttribute> void rewriteAttributeFrom(AttrNode attrNode...
    method contains (line 25) | boolean contains(AFlag flag);
    method contains (line 27) | <T extends IJadxAttribute> boolean contains(IJadxAttrType<T> type);
    method get (line 29) | <T extends IJadxAttribute> T get(IJadxAttrType<T> type);
    method getAnnotation (line 31) | IAnnotation getAnnotation(String cls);
    method getAll (line 33) | <T> List<T> getAll(IJadxAttrType<AttrList<T>> type);
    method remove (line 35) | void remove(AFlag flag);
    method remove (line 37) | <T extends IJadxAttribute> void remove(IJadxAttrType<T> type);
    method removeAttr (line 39) | void removeAttr(IJadxAttribute attr);
    method clearAttributes (line 41) | void clearAttributes();
    method getAttributesStringsList (line 43) | List<String> getAttributesStringsList();
    method getAttributesString (line 45) | String getAttributesString();
    method isAttrStorageEmpty (line 47) | boolean isAttrStorageEmpty();

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/ILineAttributeNode.java
  type ILineAttributeNode (line 3) | public interface ILineAttributeNode {
    method getSourceLine (line 4) | int getSourceLine();
    method setSourceLine (line 6) | void setSourceLine(int sourceLine);
    method getDefPosition (line 8) | int getDefPosition();
    method setDefPosition (line 10) | void setDefPosition(int pos);

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/AnonymousClassAttr.java
  class AnonymousClassAttr (line 8) | public class AnonymousClassAttr extends PinnedAttribute {
    type InlineType (line 10) | public enum InlineType {
    method AnonymousClassAttr (line 19) | public AnonymousClassAttr(ClassNode outerCls, ArgType baseType, Inline...
    method getOuterCls (line 25) | public ClassNode getOuterCls() {
    method getBaseType (line 29) | public ArgType getBaseType() {
    method getInlineType (line 33) | public InlineType getInlineType() {
    method getAttrType (line 37) | @Override
    method toString (line 42) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/ClassTypeVarsAttr.java
  class ClassTypeVarsAttr (line 11) | public class ClassTypeVarsAttr implements IJadxAttribute {
    method ClassTypeVarsAttr (line 25) | public ClassTypeVarsAttr(List<ArgType> typeVars, Map<String, Map<ArgTy...
    method getTypeVars (line 30) | public List<ArgType> getTypeVars() {
    method getTypeVarsMapFor (line 34) | public Map<ArgType, ArgType> getTypeVarsMapFor(ArgType type) {
    method getAttrType (line 42) | @Override
    method toString (line 47) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/CodeFeaturesAttr.java
  class CodeFeaturesAttr (line 10) | public class CodeFeaturesAttr implements IJadxAttribute {
    type CodeFeature (line 12) | public enum CodeFeature {
    method contains (line 24) | public static boolean contains(MethodNode mth, CodeFeature feature) {
    method add (line 32) | public static void add(MethodNode mth, CodeFeature feature) {
    method getCodeFeatures (line 43) | public Set<CodeFeature> getCodeFeatures() {
    method getAttrType (line 47) | @Override
    method toAttrString (line 52) | @Override
    method toString (line 57) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/DeclareVariablesAttr.java
  class DeclareVariablesAttr (line 14) | public class DeclareVariablesAttr implements IJadxAttribute {
    method getVars (line 18) | public Iterable<CodeVar> getVars() {
    method addVar (line 22) | public void addVar(CodeVar arg) {
    method getAttrType (line 26) | @Override
    method toString (line 31) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/DecompileModeOverrideAttr.java
  class DecompileModeOverrideAttr (line 8) | public class DecompileModeOverrideAttr implements IJadxAttribute {
    method DecompileModeOverrideAttr (line 12) | public DecompileModeOverrideAttr(DecompilationMode mode) {
    method getMode (line 16) | public DecompilationMode getMode() {
    method getAttrType (line 20) | @Override
    method toString (line 25) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/EdgeInsnAttr.java
  class EdgeInsnAttr (line 12) | public class EdgeInsnAttr implements IJadxAttribute {
    method addEdgeInsn (line 18) | public static void addEdgeInsn(Edge edge, InsnNode insn) {
    method addEdgeInsn (line 22) | public static void addEdgeInsn(BlockNode start, BlockNode end, InsnNod...
    method EdgeInsnAttr (line 32) | private EdgeInsnAttr(BlockNode start, BlockNode end, InsnNode insn) {
    method getAttrType (line 38) | @Override
    method getStart (line 43) | public BlockNode getStart() {
    method getEnd (line 47) | public BlockNode getEnd() {
    method getInsn (line 51) | public InsnNode getInsn() {
    method equals (line 55) | @Override
    method hashCode (line 69) | @Override
    method toString (line 74) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/EnumClassAttr.java
  class EnumClassAttr (line 14) | public class EnumClassAttr implements IJadxAttribute {
    class EnumField (line 16) | public static class EnumField {
      method EnumField (line 22) | public EnumField(FieldNode field, ConstructorInsn co, @Nullable Stri...
      method getField (line 28) | public FieldNode getField() {
      method getConstrInsn (line 32) | public ConstructorInsn getConstrInsn() {
      method getCls (line 36) | public ClassNode getCls() {
      method setCls (line 40) | public void setCls(ClassNode cls) {
      method getNameStr (line 44) | public @Nullable String getNameStr() {
      method toString (line 48) | @Override
    method EnumClassAttr (line 57) | public EnumClassAttr(List<EnumField> fields) {
    method getFields (line 61) | public List<EnumField> getFields() {
    method getStaticMethod (line 65) | public MethodNode getStaticMethod() {
    method setStaticMethod (line 69) | public void setStaticMethod(MethodNode staticMethod) {
    method getAttrType (line 73) | @Override
    method toString (line 78) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/EnumMapAttr.java
  class EnumMapAttr (line 12) | public class EnumMapAttr implements IJadxAttribute {
    class KeyValueMap (line 14) | public static class KeyValueMap {
      method get (line 17) | public Object get(Object key) {
      method put (line 21) | void put(Object key, Object value) {
    method getMap (line 29) | @Nullable
    method add (line 37) | public void add(FieldNode field, Object key, Object value) {
    method isEmpty (line 49) | public boolean isEmpty() {
    method getAttrType (line 53) | @Override
    method toString (line 58) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/ExcSplitCrossAttr.java
  class ExcSplitCrossAttr (line 14) | public class ExcSplitCrossAttr implements IJadxAttribute {
    method ExcSplitCrossAttr (line 18) | public ExcSplitCrossAttr(BlockNode originalPathCross) {
    method getOriginalPathCross (line 22) | public BlockNode getOriginalPathCross() {
    method getAttrType (line 26) | @Override
    method toString (line 31) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/FieldReplaceAttr.java
  class FieldReplaceAttr (line 8) | public class FieldReplaceAttr extends PinnedAttribute {
    type ReplaceWith (line 10) | public enum ReplaceWith {
    method FieldReplaceAttr (line 18) | public FieldReplaceAttr(ClassInfo cls) {
    method FieldReplaceAttr (line 23) | public FieldReplaceAttr(InsnArg reg) {
    method getReplaceType (line 28) | public ReplaceWith getReplaceType() {
    method getClsRef (line 32) | public ClassInfo getClsRef() {
    method getVarRef (line 36) | public InsnArg getVarRef() {
    method getAttrType (line 40) | @Override
    method toString (line 45) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/ForceReturnAttr.java
  class ForceReturnAttr (line 8) | public class ForceReturnAttr implements IJadxAttribute {
    method ForceReturnAttr (line 12) | public ForceReturnAttr(InsnNode retInsn) {
    method getReturnInsn (line 16) | public InsnNode getReturnInsn() {
    method getAttrType (line 20) | @Override
    method toString (line 25) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/GenericInfoAttr.java
  class GenericInfoAttr (line 9) | public class GenericInfoAttr implements IJadxAttribute {
    method GenericInfoAttr (line 13) | public GenericInfoAttr(List<ArgType> genericTypes) {
    method getGenericTypes (line 17) | public List<ArgType> getGenericTypes() {
    method isExplicit (line 21) | public boolean isExplicit() {
    method setExplicit (line 25) | public void setExplicit(boolean explicit) {
    method getAttrType (line 29) | @Override
    method toString (line 34) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/InlinedAttr.java
  class InlinedAttr (line 8) | public class InlinedAttr implements IJadxAttribute {
    method InlinedAttr (line 12) | public InlinedAttr(ClassNode inlineCls) {
    method getInlineCls (line 16) | public ClassNode getInlineCls() {
    method getAttrType (line 20) | @Override
    method toString (line 25) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/JadxCommentsAttr.java
  class JadxCommentsAttr (line 18) | public class JadxCommentsAttr implements IJadxAttribute {
    method add (line 20) | public static void add(IAttributeNode node, CommentsLevel level, Strin...
    method initFor (line 24) | private static JadxCommentsAttr initFor(IAttributeNode node) {
    method add (line 36) | public void add(CommentsLevel level, String comment) {
    method formatAndFilter (line 40) | public List<String> formatAndFilter(CommentsLevel level) {
    method getComments (line 55) | public Map<CommentsLevel, Set<String>> getComments() {
    method getAttrType (line 59) | @Override
    method toString (line 64) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/JadxError.java
  class JadxError (line 9) | public class JadxError implements Comparable<JadxError> {
    method JadxError (line 14) | public JadxError(String error, Throwable cause) {
    method getError (line 19) | public String getError() {
    method getCause (line 23) | public Throwable getCause() {
    method compareTo (line 27) | @Override
    method equals (line 32) | @Override
    method hashCode (line 44) | @Override
    method toString (line 49) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/JumpInfo.java
  class JumpInfo (line 5) | public class JumpInfo {
    method JumpInfo (line 10) | public JumpInfo(int src, int dest) {
    method getSrc (line 15) | public int getSrc() {
    method getDest (line 19) | public int getDest() {
    method hashCode (line 23) | @Override
    method equals (line 28) | @Override
    method toString (line 43) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/LineAttrNode.java
  class LineAttrNode (line 6) | public abstract class LineAttrNode extends AttrNode implements ILineAttr...
    method getSourceLine (line 15) | @Override
    method setSourceLine (line 20) | @Override
    method getDefPosition (line 25) | @Override
    method setDefPosition (line 30) | @Override
    method addSourceLineFrom (line 35) | public void addSourceLineFrom(LineAttrNode lineAttrNode) {
    method copyLines (line 41) | public void copyLines(LineAttrNode lineAttrNode) {

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/LocalVarsDebugInfoAttr.java
  class LocalVarsDebugInfoAttr (line 10) | public class LocalVarsDebugInfoAttr implements IJadxAttribute {
    method LocalVarsDebugInfoAttr (line 13) | public LocalVarsDebugInfoAttr(List<ILocalVar> localVars) {
    method getLocalVars (line 17) | public List<ILocalVar> getLocalVars() {
    method getAttrType (line 21) | @Override
    method toString (line 26) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/LoopInfo.java
  class LoopInfo (line 13) | public class LoopInfo {
    method LoopInfo (line 22) | public LoopInfo(BlockNode start, BlockNode end, Set<BlockNode> loopBlo...
    method getStart (line 28) | public BlockNode getStart() {
    method getEnd (line 32) | public BlockNode getEnd() {
    method getLoopBlocks (line 36) | public Set<BlockNode> getLoopBlocks() {
    method getExitNodes (line 44) | public Set<BlockNode> getExitNodes() {
    method getExitEdges (line 61) | public List<Edge> getExitEdges() {
    method getPreHeader (line 74) | public BlockNode getPreHeader() {
    method getId (line 78) | public int getId() {
    method setId (line 82) | public void setId(int id) {
    method getParentLoop (line 86) | public LoopInfo getParentLoop() {
    method setParentLoop (line 90) | public void setParentLoop(LoopInfo parentLoop) {
    method hasParent (line 94) | public boolean hasParent(LoopInfo searchLoop) {
    method toString (line 107) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/LoopLabelAttr.java
  class LoopLabelAttr (line 6) | public class LoopLabelAttr implements IJadxAttribute {
    method LoopLabelAttr (line 10) | public LoopLabelAttr(LoopInfo loop) {
    method getLoop (line 14) | public LoopInfo getLoop() {
    method getAttrType (line 18) | @Override
    method toString (line 23) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/MethodBridgeAttr.java
  class MethodBridgeAttr (line 7) | public class MethodBridgeAttr extends PinnedAttribute {
    method MethodBridgeAttr (line 11) | public MethodBridgeAttr(MethodNode bridgeMth) {
    method getBridgeMth (line 15) | public MethodNode getBridgeMth() {
    method getAttrType (line 19) | @Override
    method toString (line 24) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/MethodInlineAttr.java
  class MethodInlineAttr (line 12) | public class MethodInlineAttr extends PinnedAttribute {
    method markForInline (line 16) | public static MethodInlineAttr markForInline(MethodNode mth, InsnNode ...
    method inlineNotNeeded (line 31) | public static MethodInlineAttr inlineNotNeeded(MethodNode mth) {
    method MethodInlineAttr (line 43) | private MethodInlineAttr(InsnNode insn, int[] argsRegNums) {
    method notNeeded (line 48) | public boolean notNeeded() {
    method getInsn (line 52) | public InsnNode getInsn() {
    method getArgsRegNums (line 56) | public int[] getArgsRegNums() {
    method getAttrType (line 60) | @Override
    method toString (line 65) | @Override

FILE: jadx-core/src/main/java/jadx/core/dex/attributes/nodes/MethodOverrideAttr.java
  class MethodOverrideAttr (line 12) | public class MethodOverrideAttr extends PinnedAttribute {
    method MethodOverrideAttr (line 26) | public MethodOverrideAttr(List<IMethodDetails> overrideList, SortedSet...
    method getOverrideList (line 32) | public List<IMethodDetails> getOverrideList() {
    method getRelatedMthNodes (line 36) | public SortedSet<MethodNode> getRelatedMthNodes() {
    method getBaseMethods (line 40) | public Set<IMethodDetails> getBaseMethods() {
    method setRelatedMthNodes (line 44) | public void setRelatedMthNodes(SortedSet<MethodNode> relatedMthNodes) {
    method getAt
Condensed preview — 2269 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,317K chars).
[
  {
    "path": ".editorconfig",
    "chars": 697,
    "preview": "# EditorConfig is awesome: https://EditorConfig.org\nroot = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\n\ninden"
  },
  {
    "path": ".gitattributes",
    "chars": 195,
    "preview": "*       text=auto eol=lf\n\n*.java  text eol=lf diff=java\n*.kt    text eol=lf diff=kotlin\n*.kts   text eol=lf diff=kotlin\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 28,
    "preview": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/decompilation-issue.yml",
    "chars": 1289,
    "preview": "name: Decompilation issue\ndescription: Create a report to help us improve jadx decompiler\ntitle: '[core] '\nlabels:\n  - C"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "chars": 268,
    "preview": "name: Feature Request\ndescription: Suggest an idea for jadx\ntitle: '[feature] '\nlabels:\n  - 'new feature'\nbody:\n  - type"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/jadx-gui-issue.yml",
    "chars": 1146,
    "preview": "name: jadx-gui issue\ndescription: Create a bug report about issue found in jadx-gui\ntitle: '[gui] '\nlabels:\n  - GUI\n  - "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 161,
    "preview": "version: 2\nupdates:\n  # Set update schedule for GitHub Actions\n  - package-ecosystem: \"github-actions\"\n    directory: \"/"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 221,
    "preview": ":exclamation: Please review the [guidelines for contributing](https://github.com/skylot/jadx/blob/master/CONTRIBUTING.md"
  },
  {
    "path": ".github/workflows/build-artifacts.yml",
    "chars": 2474,
    "preview": "name: Build Artifacts\n\non:\n  push:\n    branches: [ master, build-test ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    s"
  },
  {
    "path": ".github/workflows/build-test.yml",
    "chars": 596,
    "preview": "name: Build Test\n\non:\n  push:\n    branches: [ master, build-test ]\n  pull_request:\n    branches: [ master ]\n\njobs:\n  tes"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 2494,
    "preview": "name: Release\n\non:\n  push:\n    tags:\n      - \"v*.*.*\"\n\n# additional permissions for provided GitHub token to create new "
  },
  {
    "path": ".gitignore",
    "chars": 365,
    "preview": "# Eclipse files\n.classpath\n.project\n.settings/\n\n# IntelliJ Idea files\n.idea/\n.run/\nout/\n*.iml\n*.ipr\n*.iws\n.attach_pid*\n*"
  },
  {
    "path": ".gitlab-ci.yml",
    "chars": 277,
    "preview": "variables:\n  GRADLE_OPTS: \"-Dorg.gradle.daemon=false\"\n  TERM: \"dumb\"\n\nbefore_script:\n  - chmod +x gradlew\n\nstages:\n  - t"
  },
  {
    "path": ".jitpack.yml",
    "chars": 249,
    "preview": "jdk:\n  - openjdk11\ninstall:\n  - echo \"Jitpack is not supported. Use artifacts from Maven Central (https://search.maven.o"
  },
  {
    "path": ".typos.toml",
    "chars": 441,
    "preview": "# Config for 'typos' spellchecker (https://github.com/crate-ci/typos)\n\n[default.extend-words]\nIPUT = \"IPUT\"\nLaf = \"Laf\"\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 2703,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1084,
    "preview": "# Contributing\n\nPlease note, we have [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your interactions wi"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "NOTICE",
    "chars": 10657,
    "preview": "The majority of jadx is written and copyrighted by me (Skylot)\nand released under the Apache 2.0 license (see LICENSE fi"
  },
  {
    "path": "README.md",
    "chars": 17870,
    "preview": "<img src=\"https://raw.githubusercontent.com/skylot/jadx/master/jadx-gui/src/main/resources/logos/jadx-logo.png\" width=\"6"
  },
  {
    "path": "SECURITY.md",
    "chars": 436,
    "preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nTo report a security issue, please open a [new security advisory](https"
  },
  {
    "path": "build.gradle.kts",
    "chars": 5140,
    "preview": "import com.diffplug.gradle.spotless.FormatExtension\nimport com.diffplug.gradle.spotless.SpotlessExtension\nimport com.dif"
  },
  {
    "path": "buildSrc/build.gradle.kts",
    "chars": 202,
    "preview": "plugins {\n\t`kotlin-dsl`\n}\n\ndependencies {\n\timplementation(\"org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.10\")\n\n\timplemen"
  },
  {
    "path": "buildSrc/src/main/kotlin/jadx-java.gradle.kts",
    "chars": 1379,
    "preview": "import org.gradle.api.tasks.testing.logging.TestExceptionFormat\n\nplugins {\n\tjava\n\tcheckstyle\n\n\tid(\"jadx-rewrite\")\n}\n\nval"
  },
  {
    "path": "buildSrc/src/main/kotlin/jadx-kotlin.gradle.kts",
    "chars": 304,
    "preview": "import org.jetbrains.kotlin.gradle.dsl.JvmTarget\n\nplugins {\n\tid(\"jadx-java\")\n\tid(\"org.jetbrains.kotlin.jvm\")\n}\n\ndependen"
  },
  {
    "path": "buildSrc/src/main/kotlin/jadx-library.gradle.kts",
    "chars": 2016,
    "preview": "plugins {\n\tid(\"jadx-java\")\n\tid(\"java-library\")\n\tid(\"maven-publish\")\n\tid(\"signing\")\n}\n\nval jadxVersion: String by rootPro"
  },
  {
    "path": "buildSrc/src/main/kotlin/jadx-rewrite.gradle.kts",
    "chars": 1082,
    "preview": "plugins {\n\tid(\"org.openrewrite.rewrite\")\n}\n\nrepositories {\n\tmavenCentral()\n}\n\ndependencies {\n\trewrite(\"org.openrewrite.r"
  },
  {
    "path": "config/checkstyle/checkstyle.xml",
    "chars": 4916,
    "preview": "<?xml version=\"1.0\" ?>\n\n<!DOCTYPE module PUBLIC\n\t\t\"-//Puppy Crawl//DTD Check Configuration 1.2//EN\"\n\t\t\"http://www.puppyc"
  },
  {
    "path": "config/code-formatter/eclipse.importorder",
    "chars": 56,
    "preview": "#Import Order\n0=java\n1=javax\n2=org\n3=com\n4=\n5=jadx\n6=\\#\n"
  },
  {
    "path": "config/code-formatter/eclipse.xml",
    "chars": 45287,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<profiles version=\"23\">\n    <profile kind=\"CodeFormatterProfile\" "
  },
  {
    "path": "config/jflex/.gitignore",
    "chars": 21,
    "preview": "SmaliTokenMaker.java\n"
  },
  {
    "path": "config/jflex/README.md",
    "chars": 148,
    "preview": "Refer to the following instructions to modify and use to generate SmaliTokenMarker\n\n```shell\njflex SmaliTokenMaker.flex "
  },
  {
    "path": "config/jflex/SmaliTokenMaker.flex",
    "chars": 15128,
    "preview": "/*\n * Generated on 11/22/21, 8:58 PM\n */\npackage jadx.gui.ui.codearea;\n\nimport java.io.*;\nimport javax.swing.text.Segmen"
  },
  {
    "path": "config/jflex/skeleton.default",
    "chars": 5932,
    "preview": "\n  /** This character denotes the end of file */\n  public static final int YYEOF = -1;\n\n  /** initial size of the lookah"
  },
  {
    "path": "contrib/jadx-gui.desktop",
    "chars": 207,
    "preview": "[Desktop Entry]\nName=JADX GUI\nComment=Dex to Java decompiler\nIcon=jadx\nExec=jadx-gui %f\nTerminal=false\nType=Application\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 339,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionSha256Sum=72f44c9f8ebcb1af43838f45ee5c4aa9c"
  },
  {
    "path": "gradle.properties",
    "chars": 821,
    "preview": "org.gradle.warning.mode=all\norg.gradle.parallel=true\norg.gradle.caching=true\n\n### Disable configuration cache for now: c"
  },
  {
    "path": "gradlew",
    "chars": 8595,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "gradlew.bat",
    "chars": 2896,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "jadx-cli/build.gradle.kts",
    "chars": 1770,
    "preview": "plugins {\n\tid(\"jadx-java\")\n\tid(\"jadx-library\")\n\tid(\"application\")\n\n\t// use shadow only for application scripts, jar will"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/JCommanderWrapper.java",
    "chars": 10380,
    "preview": "package jadx.cli;\n\nimport java.io.PrintStream;\nimport java.lang.reflect.Field;\nimport java.util.ArrayList;\nimport java.u"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/JadxAppCommon.java",
    "chars": 1821,
    "preview": "package jadx.cli;\n\nimport java.util.Set;\n\nimport jadx.api.JadxArgs;\nimport jadx.api.security.JadxSecurityFlag;\nimport ja"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/JadxCLI.java",
    "chars": 3825,
    "preview": "package jadx.cli;\n\nimport java.util.function.Consumer;\n\nimport org.jetbrains.annotations.Nullable;\nimport org.slf4j.Logg"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java",
    "chars": 34892,
    "preview": "package jadx.cli;\n\nimport java.nio.file.Path;\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.En"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/JadxCLICommands.java",
    "chars": 1064,
    "preview": "package jadx.cli;\n\nimport java.util.LinkedHashMap;\nimport java.util.Map;\n\nimport com.beust.jcommander.JCommander;\n\nimpor"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/LogHelper.java",
    "chars": 2835,
    "preview": "package jadx.cli;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;\nimport org.slf4j"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/SingleClassMode.java",
    "chars": 3244,
    "preview": "package jadx.cli;\n\nimport java.io.File;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\nimport org.slf4j.Log"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/clst/ConvertToClsSet.java",
    "chars": 2383,
    "preview": "package jadx.cli.clst;\n\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\nimport java.util.EnumSet;\nimport java.uti"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/commands/CommandPlugins.java",
    "chars": 7499,
    "preview": "package jadx.cli.commands;\n\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\nimport java.util.stre"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/commands/ICommand.java",
    "chars": 215,
    "preview": "package jadx.cli.commands;\n\nimport com.beust.jcommander.JCommander;\n\nimport jadx.cli.JCommanderWrapper;\n\npublic interfac"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/config/IJadxConfig.java",
    "chars": 111,
    "preview": "package jadx.cli.config;\n\n/**\n * Marker interface for jadx config objects\n */\npublic interface IJadxConfig {\n}\n"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/config/JadxConfigAdapter.java",
    "chars": 3277,
    "preview": "package jadx.cli.config;\n\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.util.function.Consumer;\n\nim"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/config/JadxConfigExclude.java",
    "chars": 291,
    "preview": "package jadx.cli.config;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport java.la"
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/plugins/JadxFilesGetter.java",
    "chars": 620,
    "preview": "package jadx.cli.plugins;\n\nimport java.nio.file.Path;\n\nimport jadx.commons.app.JadxCommonFiles;\nimport jadx.commons.app."
  },
  {
    "path": "jadx-cli/src/main/java/jadx/cli/tools/ConvertArscFile.java",
    "chars": 3777,
    "preview": "package jadx.cli.tools;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.file.Files;\nimport java"
  },
  {
    "path": "jadx-cli/src/main/resources/logback.xml",
    "chars": 370,
    "preview": "<!-- Jadx logger config. Used both in cli and gui -->\n\n<configuration>\n\t<appender name=\"STDOUT\" class=\"ch.qos.logback.co"
  },
  {
    "path": "jadx-cli/src/test/java/jadx/cli/BaseCliIntegrationTest.java",
    "chars": 4058,
    "preview": "package jadx.cli;\n\nimport java.io.IOException;\nimport java.net.URISyntaxException;\nimport java.net.URL;\nimport java.nio."
  },
  {
    "path": "jadx-cli/src/test/java/jadx/cli/JadxCLIArgsTest.java",
    "chars": 3514,
    "preview": "package jadx.cli;\n\nimport java.util.Collections;\nimport java.util.Map;\n\nimport org.junit.jupiter.api.Test;\nimport org.sl"
  },
  {
    "path": "jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java",
    "chars": 1252,
    "preview": "package jadx.cli;\n\nimport java.util.Set;\n\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\n\ni"
  },
  {
    "path": "jadx-cli/src/test/java/jadx/cli/TestExport.java",
    "chars": 3261,
    "preview": "package jadx.cli;\n\nimport org.assertj.core.api.Condition;\nimport org.junit.jupiter.api.Test;\n\nimport static org.assertj."
  },
  {
    "path": "jadx-cli/src/test/java/jadx/cli/TestInput.java",
    "chars": 2251,
    "preview": "package jadx.cli;\n\nimport java.nio.file.Path;\nimport java.util.List;\n\nimport org.assertj.core.api.Condition;\nimport org."
  },
  {
    "path": "jadx-cli/src/test/java/jadx/plugins/tools/utils/PluginUtilsTest.java",
    "chars": 479,
    "preview": "package jadx.plugins.tools.utils;\n\nimport org.junit.jupiter.api.Test;\n\nimport static jadx.plugins.tools.utils.PluginUtil"
  },
  {
    "path": "jadx-cli/src/test/resources/samples/HelloWorld.smali",
    "chars": 528,
    "preview": ".class Lsmali/HelloWorld;\n.super Ljava/lang/Object;\n.source \"HelloWorld.java\"\n\n.method constructor <init>()V\n    .regist"
  },
  {
    "path": "jadx-commons/jadx-app-commons/README.md",
    "chars": 314,
    "preview": "## jadx app commons\n\nThis module contains common utilities used in jadx apps (cli and gui) and not needed in jadx-code m"
  },
  {
    "path": "jadx-commons/jadx-app-commons/build.gradle.kts",
    "chars": 112,
    "preview": "plugins {\n\tid(\"jadx-library\")\n}\n\ndependencies {\n\timplementation(\"io.get-coursier.util:directories-jni:0.1.4\")\n}\n"
  },
  {
    "path": "jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonEnv.java",
    "chars": 740,
    "preview": "package jadx.commons.app;\n\npublic class JadxCommonEnv {\n\n\tpublic static String get(String varName, String defValue) {\n\t\t"
  },
  {
    "path": "jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxCommonFiles.java",
    "chars": 2700,
    "preview": "package jadx.commons.app;\n\nimport java.io.IOException;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport jav"
  },
  {
    "path": "jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxSystemInfo.java",
    "chars": 1081,
    "preview": "package jadx.commons.app;\n\nimport java.util.Locale;\n\npublic class JadxSystemInfo {\n\tpublic static final String JAVA_VM ="
  },
  {
    "path": "jadx-commons/jadx-app-commons/src/main/java/jadx/commons/app/JadxTempFiles.java",
    "chars": 909,
    "preview": "package jadx.commons.app;\n\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\n\npublic cl"
  },
  {
    "path": "jadx-commons/jadx-zip/README.md",
    "chars": 104,
    "preview": "## jadx zip\n\nCustom zip reader implementation to fight tampering and provide additional security checks\n"
  },
  {
    "path": "jadx-commons/jadx-zip/build.gradle.kts",
    "chars": 32,
    "preview": "plugins {\n\tid(\"jadx-library\")\n}\n"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/IZipEntry.java",
    "chars": 528,
    "preview": "package jadx.zip;\n\nimport java.io.File;\nimport java.io.InputStream;\n\npublic interface IZipEntry {\n\n\t/**\n\t * Zip entry na"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/IZipParser.java",
    "chars": 164,
    "preview": "package jadx.zip;\n\nimport java.io.Closeable;\nimport java.io.IOException;\n\npublic interface IZipParser extends Closeable "
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipContent.java",
    "chars": 1321,
    "preview": "package jadx.zip;\n\nimport java.io.Closeable;\nimport java.io.IOException;\nimport java.util.HashMap;\nimport java.util.List"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipReader.java",
    "chars": 3060,
    "preview": "package jadx.zip;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.Set;\nim"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipReaderFlags.java",
    "chars": 734,
    "preview": "package jadx.zip;\n\nimport java.util.EnumSet;\nimport java.util.Set;\n\npublic enum ZipReaderFlags {\n\t/**\n\t * Search all loc"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/ZipReaderOptions.java",
    "chars": 653,
    "preview": "package jadx.zip;\n\nimport java.util.Set;\n\nimport jadx.zip.security.IJadxZipSecurity;\nimport jadx.zip.security.JadxZipSec"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/fallback/FallbackZipEntry.java",
    "chars": 1075,
    "preview": "package jadx.zip.fallback;\n\nimport java.io.File;\nimport java.io.InputStream;\nimport java.util.zip.ZipEntry;\n\nimport jadx"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/fallback/FallbackZipParser.java",
    "chars": 3018,
    "preview": "package jadx.zip.fallback;\n\nimport java.io.BufferedInputStream;\nimport java.io.File;\nimport java.io.IOException;\nimport "
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/io/ByteBufferBackedInputStream.java",
    "chars": 930,
    "preview": "package jadx.zip.io;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\n\npublic class "
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/io/LimitedInputStream.java",
    "chars": 1248,
    "preview": "package jadx.zip.io;\n\nimport java.io.FilterInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic "
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/parser/JadxZipEntry.java",
    "chars": 1836,
    "preview": "package jadx.zip.parser;\n\nimport java.io.File;\nimport java.io.InputStream;\n\nimport jadx.zip.IZipEntry;\n\npublic final cla"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/parser/JadxZipParser.java",
    "chars": 12927,
    "preview": "package jadx.zip.parser;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.Ra"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/parser/ZipDeflate.java",
    "chars": 1384,
    "preview": "package jadx.zip.parser;\n\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.util.zip.DataFormatExcepti"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/security/DisabledZipSecurity.java",
    "chars": 609,
    "preview": "package jadx.zip.security;\n\nimport java.io.File;\n\nimport jadx.zip.IZipEntry;\n\npublic class DisabledZipSecurity implement"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/security/IJadxZipSecurity.java",
    "chars": 796,
    "preview": "package jadx.zip.security;\n\nimport java.io.File;\n\nimport jadx.zip.IZipEntry;\n\npublic interface IJadxZipSecurity {\n\n\t/**\n"
  },
  {
    "path": "jadx-commons/jadx-zip/src/main/java/jadx/zip/security/JadxZipSecurity.java",
    "chars": 3772,
    "preview": "package jadx.zip.security;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.nio.file.Path;\nimport java.nio."
  },
  {
    "path": "jadx-core/build.gradle.kts",
    "chars": 1762,
    "preview": "plugins {\n\tid(\"jadx-library\")\n}\n\ndependencies {\n\tapi(project(\":jadx-plugins:jadx-input-api\"))\n\tapi(project(\":jadx-common"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/CommentsLevel.java",
    "chars": 192,
    "preview": "package jadx.api;\n\npublic enum CommentsLevel {\n\tNONE,\n\tUSER_ONLY,\n\tERROR,\n\tWARN,\n\tINFO,\n\tDEBUG;\n\n\tpublic boolean filter("
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/DecompilationMode.java",
    "chars": 555,
    "preview": "package jadx.api;\n\npublic enum DecompilationMode {\n\t/**\n\t * Trying best options (default)\n\t */\n\tAUTO,\n\n\t/**\n\t * Restore "
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ICodeCache.java",
    "chars": 405,
    "preview": "package jadx.api;\n\nimport java.io.Closeable;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ICodeInfo.java",
    "chars": 255,
    "preview": "package jadx.api;\n\nimport jadx.api.impl.SimpleCodeInfo;\nimport jadx.api.metadata.ICodeMetadata;\n\npublic interface ICodeI"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ICodeWriter.java",
    "chars": 1184,
    "preview": "package jadx.api;\n\nimport java.util.Map;\n\nimport org.jetbrains.annotations.ApiStatus;\n\nimport jadx.api.metadata.ICodeAnn"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/IDecompileScheduler.java",
    "chars": 146,
    "preview": "package jadx.api;\n\nimport java.util.List;\n\npublic interface IDecompileScheduler {\n\tList<List<JavaClass>> buildBatches(Li"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JadxArgs.java",
    "chars": 25196,
    "preview": "package jadx.api;\n\nimport java.io.Closeable;\nimport java.io.File;\nimport java.nio.file.Path;\nimport java.util.ArrayList;"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JadxArgsValidator.java",
    "chars": 2570,
    "preview": "package jadx.api;\n\nimport java.io.File;\nimport java.util.List;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.slf"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JadxDecompiler.java",
    "chars": 21594,
    "preview": "package jadx.api;\n\nimport java.io.Closeable;\nimport java.io.File;\nimport java.nio.file.Path;\nimport java.util.ArrayList;"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JavaClass.java",
    "chars": 9436,
    "preview": "package jadx.api;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.ut"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JavaField.java",
    "chars": 1998,
    "preview": "package jadx.api;\n\nimport java.util.List;\n\nimport org.jetbrains.annotations.ApiStatus;\n\nimport jadx.api.metadata.ICodeAn"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JavaMethod.java",
    "chars": 3538,
    "preview": "package jadx.api;\n\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\nimport org."
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JavaNode.java",
    "chars": 420,
    "preview": "package jadx.api;\n\nimport java.util.List;\n\nimport jadx.api.metadata.ICodeAnnotation;\nimport jadx.api.metadata.ICodeNodeR"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JavaPackage.java",
    "chars": 3568,
    "preview": "package jadx.api;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Objects;\n\nimport org.jetbrains.an"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/JavaVariable.java",
    "chars": 2178,
    "preview": "package jadx.api;\n\nimport java.util.Collections;\nimport java.util.List;\n\nimport org.jetbrains.annotations.ApiStatus;\nimp"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ResourceFile.java",
    "chars": 3274,
    "preview": "package jadx.api;\n\nimport java.io.File;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.core.deobf.FileTypeDete"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ResourceFileContainer.java",
    "chars": 378,
    "preview": "package jadx.api;\n\nimport jadx.core.xmlgen.ResContainer;\n\npublic class ResourceFileContainer extends ResourceFile {\n\tpri"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ResourceFileContent.java",
    "chars": 401,
    "preview": "package jadx.api;\n\nimport jadx.core.xmlgen.ResContainer;\n\npublic class ResourceFileContent extends ResourceFile {\n\tpriva"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ResourceType.java",
    "chars": 2459,
    "preview": "package jadx.api;\n\nimport java.util.HashMap;\nimport java.util.Locale;\nimport java.util.Map;\n\nimport jadx.api.resources.R"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/ResourcesLoader.java",
    "chars": 8385,
    "preview": "package jadx.api;\n\nimport java.io.BufferedInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.File;\nimport"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/args/GeneratedRenamesMappingFileMode.java",
    "chars": 562,
    "preview": "package jadx.api.args;\n\npublic enum GeneratedRenamesMappingFileMode {\n\n\t/**\n\t * Load if found, don't save (default)\n\t */"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/args/IntegerFormat.java",
    "chars": 153,
    "preview": "package jadx.api.args;\n\npublic enum IntegerFormat {\n\tAUTO,\n\tDECIMAL,\n\tHEXADECIMAL;\n\n\tpublic boolean isHexadecimal() {\n\t\t"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/args/ResourceNameSource.java",
    "chars": 307,
    "preview": "package jadx.api.args;\n\n/**\n * Resources original name source (for deobfuscation)\n */\npublic enum ResourceNameSource {\n\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/args/UseSourceNameAsClassNameAlias.java",
    "chars": 858,
    "preview": "package jadx.api.args;\n\nimport jadx.core.utils.exceptions.JadxRuntimeException;\n\npublic enum UseSourceNameAsClassNameAli"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/args/UserRenamesMappingsMode.java",
    "chars": 641,
    "preview": "package jadx.api.args;\n\npublic enum UserRenamesMappingsMode {\n\n\t/**\n\t * Just read, user can save manually (default)\n\t */"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/CodeRefType.java",
    "chars": 83,
    "preview": "package jadx.api.data;\n\npublic enum CodeRefType {\n\tMTH_ARG,\n\tVAR,\n\tCATCH,\n\tINSN,\n}\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/CommentStyle.java",
    "chars": 967,
    "preview": "package jadx.api.data;\n\npublic enum CommentStyle {\n\n\t/**\n\t * <pre>\n\t * // comment\n\t * </pre>\n\t */\n\tLINE(\"// \", \"// \", \"\""
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/ICodeComment.java",
    "chars": 254,
    "preview": "package jadx.api.data;\n\nimport org.jetbrains.annotations.Nullable;\n\npublic interface ICodeComment extends Comparable<ICo"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/ICodeData.java",
    "chars": 170,
    "preview": "package jadx.api.data;\n\nimport java.util.List;\n\npublic interface ICodeData {\n\n\tList<ICodeComment> getComments();\n\n\tList<"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/ICodeRename.java",
    "chars": 225,
    "preview": "package jadx.api.data;\n\nimport org.jetbrains.annotations.Nullable;\n\npublic interface ICodeRename extends Comparable<ICod"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/IJavaCodeRef.java",
    "chars": 300,
    "preview": "package jadx.api.data;\n\nimport org.jetbrains.annotations.NotNull;\n\npublic interface IJavaCodeRef extends Comparable<IJav"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java",
    "chars": 213,
    "preview": "package jadx.api.data;\n\npublic interface IJavaNodeRef extends Comparable<IJavaNodeRef> {\n\n\tenum RefType {\n\t\tCLASS, FIELD"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/IRenameNode.java",
    "chars": 88,
    "preview": "package jadx.api.data;\n\npublic interface IRenameNode {\n\n\tvoid rename(String newName);\n}\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/impl/JadxCodeComment.java",
    "chars": 2261,
    "preview": "package jadx.api.data.impl;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;\n\nimpor"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/impl/JadxCodeData.java",
    "chars": 777,
    "preview": "package jadx.api.data.impl;\n\nimport java.util.Collections;\nimport java.util.List;\n\nimport jadx.api.data.ICodeComment;\nim"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/impl/JadxCodeRef.java",
    "chars": 1951,
    "preview": "package jadx.api.data.impl;\n\nimport jadx.api.JavaVariable;\nimport jadx.api.data.CodeRefType;\nimport jadx.api.data.IJavaC"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/impl/JadxCodeRename.java",
    "chars": 2101,
    "preview": "package jadx.api.data.impl;\n\nimport java.util.Objects;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.a"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/data/impl/JadxNodeRef.java",
    "chars": 3289,
    "preview": "package jadx.api.data.impl;\n\nimport java.util.Comparator;\nimport java.util.Objects;\n\nimport org.jetbrains.annotations.No"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/deobf/IAliasProvider.java",
    "chars": 609,
    "preview": "package jadx.api.deobf;\n\nimport jadx.core.dex.nodes.ClassNode;\nimport jadx.core.dex.nodes.FieldNode;\nimport jadx.core.de"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/deobf/IDeobfCondition.java",
    "chars": 712,
    "preview": "package jadx.api.deobf;\n\nimport jadx.api.deobf.impl.CombineDeobfConditions;\nimport jadx.core.dex.nodes.ClassNode;\nimport"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/deobf/IRenameCondition.java",
    "chars": 443,
    "preview": "package jadx.api.deobf;\n\nimport jadx.core.dex.nodes.ClassNode;\nimport jadx.core.dex.nodes.FieldNode;\nimport jadx.core.de"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/deobf/impl/AlwaysRename.java",
    "chars": 778,
    "preview": "package jadx.api.deobf.impl;\n\nimport jadx.api.deobf.IRenameCondition;\nimport jadx.core.dex.nodes.ClassNode;\nimport jadx."
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/deobf/impl/AnyRenameCondition.java",
    "chars": 1063,
    "preview": "package jadx.api.deobf.impl;\n\nimport java.util.function.BiPredicate;\n\nimport jadx.api.deobf.IRenameCondition;\nimport jad"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/deobf/impl/CombineDeobfConditions.java",
    "chars": 1828,
    "preview": "package jadx.api.deobf.impl;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.function.Function;\n\nimpor"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/gui/tree/ITreeNode.java",
    "chars": 461,
    "preview": "package jadx.api.gui.tree;\n\nimport javax.swing.Icon;\nimport javax.swing.tree.TreeNode;\n\nimport org.jetbrains.annotations"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/AnnotatedCodeInfo.java",
    "chars": 829,
    "preview": "package jadx.api.impl;\n\nimport java.util.Map;\n\nimport jadx.api.ICodeInfo;\nimport jadx.api.metadata.ICodeAnnotation;\nimpo"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/AnnotatedCodeWriter.java",
    "chars": 3481,
    "preview": "package jadx.api.impl;\n\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.T"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/DelegateCodeCache.java",
    "chars": 988,
    "preview": "package jadx.api.impl;\n\nimport java.io.IOException;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.anno"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/InMemoryCodeCache.java",
    "chars": 1266,
    "preview": "package jadx.api.impl;\n\nimport java.io.IOException;\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/NoOpCodeCache.java",
    "chars": 831,
    "preview": "package jadx.api.impl;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;\n\nimport jad"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/SimpleCodeInfo.java",
    "chars": 504,
    "preview": "package jadx.api.impl;\n\nimport jadx.api.ICodeInfo;\nimport jadx.api.metadata.ICodeMetadata;\n\npublic class SimpleCodeInfo "
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/SimpleCodeWriter.java",
    "chars": 4714,
    "preview": "package jadx.api.impl;\n\nimport java.util.Collections;\nimport java.util.Map;\n\nimport org.slf4j.Logger;\nimport org.slf4j.L"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/passes/DecompilePassWrapper.java",
    "chars": 1561,
    "preview": "package jadx.api.impl.passes;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport jadx.api.plugins.pass.Ja"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/passes/IPassWrapperVisitor.java",
    "chars": 205,
    "preview": "package jadx.api.impl.passes;\n\nimport jadx.api.plugins.pass.JadxPass;\nimport jadx.core.dex.visitors.IDexTreeVisitor;\n\npu"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/impl/passes/PreparePassWrapper.java",
    "chars": 975,
    "preview": "package jadx.api.impl.passes;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport jadx.api.plugins.pass.Ja"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/ICodeAnnotation.java",
    "chars": 221,
    "preview": "package jadx.api.metadata;\n\npublic interface ICodeAnnotation {\n\n\tenum AnnType {\n\t\tCLASS,\n\t\tFIELD,\n\t\tMETHOD,\n\t\tPKG,\n\t\tVAR"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/ICodeMetadata.java",
    "chars": 1415,
    "preview": "package jadx.api.metadata;\n\nimport java.util.Map;\nimport java.util.function.BiFunction;\n\nimport org.jetbrains.annotation"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/ICodeNodeRef.java",
    "chars": 141,
    "preview": "package jadx.api.metadata;\n\npublic interface ICodeNodeRef extends ICodeAnnotation {\n\tint getDefPosition();\n\n\tvoid setDef"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/annotations/InsnCodeOffset.java",
    "chars": 1130,
    "preview": "package jadx.api.metadata.annotations;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.api.ICodeWriter;\nimport "
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/annotations/NodeDeclareRef.java",
    "chars": 946,
    "preview": "package jadx.api.metadata.annotations;\n\nimport java.util.Objects;\n\nimport jadx.api.metadata.ICodeAnnotation;\nimport jadx"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/annotations/NodeEnd.java",
    "chars": 340,
    "preview": "package jadx.api.metadata.annotations;\n\nimport jadx.api.metadata.ICodeAnnotation;\n\npublic class NodeEnd implements ICode"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/annotations/VarNode.java",
    "chars": 2980,
    "preview": "package jadx.api.metadata.annotations;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.api.metadata.ICodeAnnota"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/annotations/VarRef.java",
    "chars": 1470,
    "preview": "package jadx.api.metadata.annotations;\n\nimport jadx.api.metadata.ICodeAnnotation;\n\n/**\n * Variable reference by position"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/metadata/impl/CodeMetadataStorage.java",
    "chars": 4463,
    "preview": "package jadx.api.metadata.impl;\n\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.Map;\nimport"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/CustomResourcesLoader.java",
    "chars": 475,
    "preview": "package jadx.api.plugins;\n\nimport java.io.Closeable;\nimport java.io.File;\nimport java.util.List;\n\nimport jadx.api.Resour"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/JadxPlugin.java",
    "chars": 920,
    "preview": "package jadx.api.plugins;\n\nimport jadx.api.plugins.pass.types.JadxAfterLoadPass;\nimport jadx.api.plugins.pass.types.Jadx"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/JadxPluginContext.java",
    "chars": 1584,
    "preview": "package jadx.api.plugins;\n\nimport java.util.function.Supplier;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx."
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/JadxPluginInfo.java",
    "chars": 1969,
    "preview": "package jadx.api.plugins;\n\nimport org.jetbrains.annotations.Nullable;\n\npublic class JadxPluginInfo {\n\tprivate final Stri"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/JadxPluginInfoBuilder.java",
    "chars": 1799,
    "preview": "package jadx.api.plugins;\n\nimport java.util.Objects;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.core.plugi"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/data/IJadxFiles.java",
    "chars": 290,
    "preview": "package jadx.api.plugins.data;\n\nimport java.nio.file.Path;\n\npublic interface IJadxFiles {\n\n\t/**\n\t * Plugin cache directo"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/data/IJadxPlugins.java",
    "chars": 269,
    "preview": "package jadx.api.plugins.data;\n\nimport jadx.api.plugins.JadxPlugin;\n\npublic interface IJadxPlugins {\n\n\tJadxPluginRuntime"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/data/JadxPluginRuntimeData.java",
    "chars": 826,
    "preview": "package jadx.api.plugins.data;\n\nimport java.io.Closeable;\nimport java.nio.file.Path;\nimport java.util.List;\n\nimport org."
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/IJadxEvent.java",
    "chars": 115,
    "preview": "package jadx.api.plugins.events;\n\npublic interface IJadxEvent {\n\n\tJadxEventType<? extends IJadxEvent> getType();\n}\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/IJadxEvents.java",
    "chars": 676,
    "preview": "package jadx.api.plugins.events;\n\nimport java.util.function.Consumer;\n\npublic interface IJadxEvents {\n\n\t/**\n\t * Send an "
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/JadxEventType.java",
    "chars": 388,
    "preview": "package jadx.api.plugins.events;\n\npublic abstract class JadxEventType<T extends IJadxEvent> {\n\n\tpublic static <E extends"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/JadxEvents.java",
    "chars": 1078,
    "preview": "package jadx.api.plugins.events;\n\nimport jadx.api.plugins.events.types.NodeRenamedByUser;\nimport jadx.api.plugins.events"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/types/NodeRenamedByUser.java",
    "chars": 1456,
    "preview": "package jadx.api.plugins.events.types;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.api.metadata.ICodeNodeRe"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/types/ReloadProject.java",
    "chars": 507,
    "preview": "package jadx.api.plugins.events.types;\n\nimport jadx.api.plugins.events.IJadxEvent;\nimport jadx.api.plugins.events.JadxEv"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/events/types/ReloadSettingsWindow.java",
    "chars": 561,
    "preview": "package jadx.api.plugins.events.types;\n\nimport jadx.api.plugins.events.IJadxEvent;\nimport jadx.api.plugins.events.JadxEv"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/gui/ISettingsGroup.java",
    "chars": 618,
    "preview": "package jadx.api.plugins.gui;\n\nimport java.util.Collections;\nimport java.util.List;\n\nimport javax.swing.JComponent;\n\n/**"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/gui/JadxGuiContext.java",
    "chars": 2892,
    "preview": "package jadx.api.plugins.gui;\n\nimport java.util.function.Consumer;\nimport java.util.function.Function;\nimport java.util."
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/gui/JadxGuiSettings.java",
    "chars": 418,
    "preview": "package jadx.api.plugins.gui;\n\nimport java.util.List;\n\nimport jadx.api.plugins.options.OptionDescription;\n\npublic interf"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/loader/JadxBasePluginLoader.java",
    "chars": 626,
    "preview": "package jadx.api.plugins.loader;\n\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.List;\nimport "
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/loader/JadxPluginLoader.java",
    "chars": 204,
    "preview": "package jadx.api.plugins.loader;\n\nimport java.io.Closeable;\nimport java.util.List;\n\nimport jadx.api.plugins.JadxPlugin;\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/JadxPluginOptions.java",
    "chars": 220,
    "preview": "package jadx.api.plugins.options;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic interface JadxPluginOptions {\n\n\t"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/OptionDescription.java",
    "chars": 547,
    "preview": "package jadx.api.plugins.options;\n\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.Set;\n\nimport or"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/OptionFlag.java",
    "chars": 535,
    "preview": "package jadx.api.plugins.options;\n\npublic enum OptionFlag {\n\t/**\n\t * Store in project settings instead global (for jadx-"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/OptionType.java",
    "chars": 89,
    "preview": "package jadx.api.plugins.options;\n\npublic enum OptionType {\n\tSTRING,\n\tNUMBER,\n\tBOOLEAN\n}\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/impl/BaseOptionsParser.java",
    "chars": 1216,
    "preview": "package jadx.api.plugins.options.impl;\n\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.function.Functio"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/impl/BasePluginOptionsBuilder.java",
    "chars": 6460,
    "preview": "package jadx.api.plugins.options.impl;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/impl/JadxOptionDescription.java",
    "chars": 2043,
    "preview": "package jadx.api.plugins.options.impl;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.EnumSet;"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/options/impl/OptionBuilder.java",
    "chars": 961,
    "preview": "package jadx.api.plugins.options.impl;\n\nimport java.util.List;\nimport java.util.function.Consumer;\nimport java.util.func"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/JadxPass.java",
    "chars": 167,
    "preview": "package jadx.api.plugins.pass;\n\nimport jadx.api.plugins.pass.types.JadxPassType;\n\npublic interface JadxPass {\n\tJadxPassI"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/JadxPassInfo.java",
    "chars": 623,
    "preview": "package jadx.api.plugins.pass;\n\nimport java.util.List;\n\npublic interface JadxPassInfo {\n\n\t/**\n\t * Add this to 'run after"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/impl/OrderedJadxPassInfo.java",
    "chars": 1261,
    "preview": "package jadx.api.plugins.pass.impl;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport jadx.api.plugins.pass.Ja"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/impl/SimpleAfterLoadPass.java",
    "chars": 645,
    "preview": "package jadx.api.plugins.pass.impl;\n\nimport java.util.function.Consumer;\n\nimport jadx.api.JadxDecompiler;\nimport jadx.ap"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/impl/SimpleJadxPassInfo.java",
    "chars": 705,
    "preview": "package jadx.api.plugins.pass.impl;\n\nimport java.util.Collections;\nimport java.util.List;\n\nimport jadx.api.plugins.pass."
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxAfterLoadPass.java",
    "chars": 330,
    "preview": "package jadx.api.plugins.pass.types;\n\nimport jadx.api.JadxDecompiler;\nimport jadx.api.plugins.pass.JadxPass;\n\npublic int"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxDecompilePass.java",
    "chars": 591,
    "preview": "package jadx.api.plugins.pass.types;\n\nimport jadx.api.plugins.pass.JadxPass;\nimport jadx.core.dex.nodes.ClassNode;\nimpor"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxPassType.java",
    "chars": 475,
    "preview": "package jadx.api.plugins.pass.types;\n\npublic class JadxPassType {\n\tprivate final String cls;\n\n\tpublic JadxPassType(Strin"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/pass/types/JadxPreparePass.java",
    "chars": 319,
    "preview": "package jadx.api.plugins.pass.types;\n\nimport jadx.api.plugins.pass.JadxPass;\nimport jadx.core.dex.nodes.RootNode;\n\npubli"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/resources/IResContainerFactory.java",
    "chars": 850,
    "preview": "package jadx.api.plugins.resources;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\nimport org.jetbrains.annot"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/resources/IResTableParserProvider.java",
    "chars": 815,
    "preview": "package jadx.api.plugins.resources;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.api.ResourceFile;\nimport ja"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/resources/IResourcesLoader.java",
    "chars": 230,
    "preview": "package jadx.api.plugins.resources;\n\npublic interface IResourcesLoader {\n\n\tvoid addResContainerFactory(IResContainerFact"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/utils/CommonFileUtils.java",
    "chars": 3036,
    "preview": "package jadx.api.plugins.utils;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.File;\nimport java.io.IOException;\n"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/utils/Utils.java",
    "chars": 2112,
    "preview": "package jadx.api.plugins.utils;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\nimpor"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/plugins/utils/ZipSecurity.java",
    "chars": 2909,
    "preview": "package jadx.api.plugins.utils;\n\nimport java.io.BufferedInputStream;\nimport java.io.File;\nimport java.io.IOException;\nim"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/resources/ResourceContentType.java",
    "chars": 130,
    "preview": "package jadx.api.resources;\n\npublic enum ResourceContentType {\n\tCONTENT_TEXT,\n\tCONTENT_BINARY,\n\tCONTENT_NONE,\n\tCONTENT_U"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/security/IJadxSecurity.java",
    "chars": 426,
    "preview": "package jadx.api.security;\n\nimport java.io.InputStream;\n\nimport org.w3c.dom.Document;\n\nimport jadx.zip.security.IJadxZip"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/security/JadxSecurityFlag.java",
    "chars": 368,
    "preview": "package jadx.api.security;\n\nimport java.util.EnumSet;\nimport java.util.Set;\n\npublic enum JadxSecurityFlag {\n\n\tVERIFY_APP"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/security/impl/JadxSecurity.java",
    "chars": 3442,
    "preview": "package jadx.api.security.impl;\n\nimport java.io.File;\nimport java.io.InputStream;\nimport java.util.Set;\n\nimport javax.xm"
  },
  {
    "path": "jadx-core/src/main/java/jadx/api/usage/IUsageInfoCache.java",
    "chars": 285,
    "preview": "package jadx.api.usage;\n\nimport java.io.Closeable;\n\nimport org.jetbrains.annotations.Nullable;\n\nimport jadx.core.dex.nod"
  }
]

// ... and 2069 more files (download for full content)

About this extraction

This page contains the full source code of the skylot/jadx GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2269 files (7.1 MB), approximately 2.0M tokens, and a symbol index with 17124 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!