{"id":46636154,"url":"https://github.com/marcelkliemannel/intellij-byte-code-plugin","last_synced_at":"2026-03-08T01:33:35.161Z","repository":{"id":39922083,"uuid":"371950849","full_name":"marcelkliemannel/intellij-byte-code-plugin","owner":"marcelkliemannel","description":"An IntelliJ plugin that provides a modern and powerful byte code analyzer tool window.","archived":false,"fork":false,"pushed_at":"2025-12-04T22:10:17.000Z","size":3705,"stargazers_count":57,"open_issues_count":2,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-08T04:56:53.940Z","etag":null,"topics":["asm","bytecode","groovy","intellij-plugin","java","kotlin"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcelkliemannel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-05-29T11:05:24.000Z","updated_at":"2025-12-04T22:09:13.000Z","dependencies_parsed_at":"2025-12-05T15:01:18.445Z","dependency_job_id":null,"html_url":"https://github.com/marcelkliemannel/intellij-byte-code-plugin","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/marcelkliemannel/intellij-byte-code-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelkliemannel%2Fintellij-byte-code-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelkliemannel%2Fintellij-byte-code-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelkliemannel%2Fintellij-byte-code-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelkliemannel%2Fintellij-byte-code-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcelkliemannel","download_url":"https://codeload.github.com/marcelkliemannel/intellij-byte-code-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelkliemannel%2Fintellij-byte-code-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30240898,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"ssl_error","status_checked_at":"2026-03-08T00:55:48.608Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asm","bytecode","groovy","intellij-plugin","java","kotlin"],"created_at":"2026-03-08T01:33:34.588Z","updated_at":"2026-03-08T01:33:35.141Z","avatar_url":"https://github.com/marcelkliemannel.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IntelliJ Byte Code Analyzer Plugin\n\n\u003cimg src=\"src/main/resources/META-INF/pluginIcon.svg\" alt=\"Plugin Logo\" width=\"120px\"/\u003e\n\nThis IntelliJ plugin provides a modern and powerful tool window to analyze byte code. Its supports Java, Kotlin, Groovy, and other JVM language class files.\n\n[**It's available on the official IntelliJ plugin marketplace**](https://plugins.jetbrains.com/plugin/16970-byte-code-analyzer).\n\nThe tool window is available via *View | Tool Windows | Byte Code* and will be shown by default in the lower right corner of IntelliJ.\n\nClass files can be opened directly from the tool window or the \"Analyze Byte Code\" action. This action is available in the project view and the editor for JVM class or source files:\n\n\u003cimg src=\"screenshots/open-files-from-editor.png\" alt=\"Open Files From Editor\" width=\"368px\"/\u003e\n\nIf the editor is the origin of the action execution, the analyzer will pick the class relative to the current cursor position. With this, it is easy to analyze inner, locale, or anonymous classes.\n\nThe plugin currently uses [ASM 9.7](https://asm.ow2.io) under the hood, supporting JVM class files up to version 23.\n\n## Features\n\n### Structure View\n\nThe heart of the tool window is the structure view of a class file. It gives a depth and human-readable insights into the individual elements of a given class file:\n\n\u003cimg src=\"screenshots/structure-view.png\" alt=\"Structure View\" width=\"461px\"/\u003e\n\nIn addition to listing the method instructions, we can view the state of the method frames (locals and current stack) after the execution of each instruction:\n\n\u003cimg src=\"screenshots/show-method-frames-action.png\" alt=\"Method Frames View\" width=\"700px\"/\u003e\n\n### Plain View\n\nThe plain view provides a textified representation of the byte code:\n\n\u003cimg src=\"screenshots/plain-view.png\" alt=\"Plain View\" width=\"461px\"/\u003e\n\n### ASM View\n\nThe ASM view provides Java source code that contains all instructions to generate the class via the [ASM](https://asm.ow2.io) library:\n\n\u003cimg src=\"screenshots/asmified-view.png\" alt=\"ASM View\" width=\"569px\"/\u003e\n\n### Decompiled View\n\nA view that provides the result of the de-compilation of the class file using IntelliJ's built-in decompilers.\n\n\u003cimg src=\"screenshots/decompiled-view.png\" alt=\"ASM View\" width=\"461px\"/\u003e\n\n### Constant Pool View\n\nThis view provides insights into the constant pool entries of the class file:\n\n\u003cimg src=\"screenshots/constantpool-view.png\" alt=\"Constant Pool View\" width=\"462px\"/\u003e\n\n### Byte Code Tools\n\nThe menu in the upper right corner of the tool window provides some generic byte code analyzing actions. These are providing a general way better to understand certain aspects of the byte code specification.\n\n#### Access Converter\n\nThe byte code stores access values in a single compressed number. With the help of the access converter tool, we can break this number into single readable values or calculate a compressed one:\n\n\u003cimg src=\"screenshots/access-converter-tool.png\" alt=\"Access Converter\" width=\"650px\"/\u003e\n\n#### Signature Parser\n\nWith the help of the signature parser, we can split a signature string into its components:\n\n\u003cimg src=\"screenshots/signature-parser-tool.png\" alt=\"Signature Parser\" width=\"663px\"/\u003e\n\n#### Instructions Overview\n\nA built-in overview of all byte code instructions, with name, opcode, operands, stack modifications and a description:\n\n\u003cimg src=\"screenshots/instructions-overview.png\" alt=\"Instructions Overview\" width=\"912px\"/\u003e\n\n## Other\n\nAdditionally, there is an action to verify the byte code of a class file:\n\n\u003cimg src=\"screenshots/validate-byte-code-action.png\" alt=\"Verify Byte Code Action\" width=\"683px\" /\u003e\n\n## Development\n\nIn general, all packages starting with an underscore `_` are internal. Therefore, the code in those packages is not intended to be used by other plugins and does not necessarily adhere to the semantics version rules.\n\nIf you want to contribute something, please follow the code style in the `.editorconfig` and sign your commits.\n\n### Update ASM / add new Java version\n\nTo update the bundled ASM library:\n\n- Set the new version in the main `build.gradle.kts`. (The new bundled ASM library should automatically be created or execute the Gradle task `shadowAsmJar`.)\n- Update the globally defined ASM API version in `dev.turingcomplete.intellijbytecodeplugin._ui.DefaultClassFileContext.ASM_API` to the highest available version.\n- Set the new ASM version and latest supported Java version in the description block of the `plugin.xml` and in the `README.md`.\n- New supported Java versions must be added to the field: `dev.turingcomplete.intellijbytecodeplugin.bytecode.ClassVersionUtils.CLASS_VERSIONS`.\n\n### Extension Points\n\n#### Open Class Files Action\n\nOpen class files actions (e.g., the \"open from disk\" action) offer a way to read class files and open are new tab in the tool window.\n\n* Extension name: `dev.turingcomplete.intellijbytecodeplugin.openClassFilesAction`\n* Interface: `dev.turingcomplete.intellijbytecodeplugin.openclassfiles.OpenClassFilesToolWindowAction`\n\nTo open a class file in the byte code analyzer tool window one of the methods in the service `project.getService(ByteCodeToolService::class.java)` can be called.\n\n#### Byte Code Tool\n\nThe byte code tools do not directly refer to an opened class file (use a byte code action for that).\n\n* Extension name: `dev.turingcomplete.intellijbytecodeplugin.byteCodeTool`\n* Interface: `dev.turingcomplete.intellijbytecodeplugin.tool.ByteCodeTool`\n\n#### Byte Code View\n\nByte code views (e.g., the structure view) display a representation of the byte code.\n\n* Extension name: `dev.turingcomplete.intellijbytecodeplugin.byteCodeViewCreator`\n* Interface: `dev.turingcomplete.intellijbytecodeplugin.view.ByteCodeView$Creator`\n\n#### Byte Code Action\n\nByte code actions (e.g., the decompile action) will be added to each byte code view toolbar. They are working with the currently opened class file.\n\n* Extension name: `dev.turingcomplete.intellijbytecodeplugin.byteCodeAction`\n* Interface: `dev.turingcomplete.intellijbytecodeplugin.view.ByteCodeAction`\n\n### Tests\n\nSome tests are testing the parsing of the structure tree and the constant pool and the opening of files with all class files from the java base module and the `groovy-all` and `kotlin-stdlib` libraries. Since this involves tens of thousands of files, these tests take a lot of time. Therefore, execution in `dev.turingcomplete.intellijbytecodeplugin.ClassFileConsumerTestCase.LIMIT_CLASSES` is limited to 800 classes per library. This value should be increased significantly for at least one test run before a new version gets released.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcelkliemannel%2Fintellij-byte-code-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcelkliemannel%2Fintellij-byte-code-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcelkliemannel%2Fintellij-byte-code-plugin/lists"}