{"id":15583387,"url":"https://github.com/romanqed/jeflect","last_synced_at":"2026-01-02T11:16:27.754Z","repository":{"id":49327089,"uuid":"484460540","full_name":"RomanQed/jeflect","owner":"RomanQed","description":"A set of utilities designed to interact with reflection and speed up it.","archived":false,"fork":false,"pushed_at":"2024-08-30T21:11:03.000Z","size":218,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T22:42:18.325Z","etag":null,"topics":["fast","fast-field","fast-method","fast-reflection","fastfield","fastmethod","field","invoke","java","java-11","java-17","java-21","java11","java17","java21","jeflect","jvm","method","reflect","reflection"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RomanQed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2022-04-22T14:18:55.000Z","updated_at":"2024-09-12T10:24:23.000Z","dependencies_parsed_at":"2023-02-08T20:16:10.400Z","dependency_job_id":"80fcd6f0-9232-4de7-a3f2-91b1661de5e4","html_url":"https://github.com/RomanQed/jeflect","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RomanQed%2Fjeflect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RomanQed%2Fjeflect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RomanQed%2Fjeflect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RomanQed%2Fjeflect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RomanQed","download_url":"https://codeload.github.com/RomanQed/jeflect/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242345090,"owners_count":20112590,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["fast","fast-field","fast-method","fast-reflection","fastfield","fastmethod","field","invoke","java","java-11","java-17","java-21","java11","java17","java21","jeflect","jvm","method","reflect","reflection"],"created_at":"2024-10-02T20:07:51.922Z","updated_at":"2026-01-02T11:16:27.748Z","avatar_url":"https://github.com/RomanQed.png","language":"Java","readme":"# jeflect [![jeflect](https://img.shields.io/maven-central/v/com.github.romanqed/jeflect?color=blue)](https://repo1.maven.org/maven2/com/github/romanqed/jeflect/)\n\nA set of utilities designed to interact with reflection and speed up it.\n\n## Getting Started\n\nTo install it, you will need:\n\n* Java 11+\n* Maven/Gradle\n\n### Features\n\n* Getting values from annotations by name\n* Parsing bytecode classes\n* Transforming loaded classes\n* Packaging methods using a universal proxy lambdas\n* Packaging methods with meta-lambdas\n* Packaging fields with proxy accessor\n\n## Installing\n\n### Gradle dependency\n\n```Groovy\ndependencies {\n    implementation group: 'com.github.romanqed', name: 'jeflect', version: '5.0.1'\n    implementation group: 'com.github.romanqed', name: 'jeflect-loader', version: '1.1.0'\n    implementation group: 'com.github.romanqed', name: 'jeflect-field', version: '1.0.2'\n    implementation group: 'com.github.romanqed', name: 'jeflect-lambda', version: '1.0.2'\n    implementation group: 'com.github.romanqed', name: 'jeflect-meta', version: '1.0.0'\n    implementation group: 'com.github.romanqed', name: 'jeflect-transform', version: '1.0.0'\n}\n```\n\n### Maven dependency\n\n```\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.romanqed\u003c/groupId\u003e\n        \u003cartifactId\u003ejeflect\u003c/artifactId\u003e\n        \u003cversion\u003e5.0.1\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.romanqed\u003c/groupId\u003e\n        \u003cartifactId\u003ejeflect-loader\u003c/artifactId\u003e\n        \u003cversion\u003e1.1.0\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.romanqed\u003c/groupId\u003e\n        \u003cartifactId\u003ejeflect-field\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.2\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.romanqed\u003c/groupId\u003e\n        \u003cartifactId\u003ejeflect-lambda\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.2\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.romanqed\u003c/groupId\u003e\n        \u003cartifactId\u003ejeflect-meta\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.0\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.romanqed\u003c/groupId\u003e\n        \u003cartifactId\u003ejeflect-transform\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n## Examples\n\n### jeflect-field\n\n```Java\nimport com.github.romanqed.jeflect.field.BytecodeAccessorFactory;\n\npublic class Main {\n    public static final String README = \"README\";\n\n    public static void main(String[] args) throws Exception {\n        // So, we need to access field by name\n        // How can we do this?\n        var field = Main.class.getField(\"README\");\n        // Default, very slow, built-in reflection way\n        System.out.println(field.get(null)); // \u003c-- Very bad choice to use it during active calculating\n        // A wonderful, ultra-fast, shining way with field accessor\n        var factory = new BytecodeAccessorFactory();\n        var accessor = factory.packField(field); // \u003c-- This action takes a long time, do this only once\n        System.out.println(accessor.get()); // \u003c-- This action is performed as fast as a normal field access\n    }\n}\n```\n\n### jeflect-lambda\n\n```Java\nimport com.github.romanqed.jeflect.lambda.BytecodeLambdaFactory;\n\npublic class Main {\n    public static void main(String[] args) throws Throwable {\n        // So, we need to invoke method by name\n        // How can we do this?\n        var method = Main.class.getMethod(\"callMe\", int.class, int.class, int.class);\n        var params = new Object[]{1, 2, 3};\n        // Default, very slow, built-in reflection way\n        method.invoke(null, params); // \u003c-- Very bad choice to use it during active calculating\n        // A wonderful, ultra-fast, shining way with proxy lambdas (not so fast as meta-lambdas, but more universal)\n        var factory = new BytecodeLambdaFactory();\n        var lambda = factory.packMethod(method); // \u003c-- This action takes a long time, do this only once\n        lambda.invoke(params); // \u003c-- This action is performed as fast as a normal method call\n    }\n\n    public static void callMe(int first, int second, int third) {\n        System.out.println(\"Hello, i am very useful method, i can sum your numbers: \" + (first + second + third));\n    }\n}\n```\n\n### jeflect-meta\n\n```Java\nimport com.github.romanqed.jeflect.meta.LambdaType;\nimport com.github.romanqed.jeflect.meta.LookupMetaFactory;\n\nimport java.lang.invoke.MethodHandles;\n\npublic class Main {\n    public static void main(String[] args) throws Exception {\n        // So, we need to invoke method by name\n        // How can we do this?\n        var method = Main.class.getMethod(\"callMe\");\n        // Default, very slow, built-in reflection way\n        method.invoke(null); // \u003c-- Very bad choice to use it during active calculating\n        // A wonderful, ultra-fast, shining way with meta-lambdas\n        var factory = new LookupMetaFactory(MethodHandles.lookup());\n        var type = LambdaType.of(Runnable.class);\n        var runnable = factory.packLambdaMethod(type, method); // \u003c-- This action takes a long time, do this only once\n        runnable.run(); // \u003c-- This action is performed as fast as a normal method call\n    }\n\n    public static void callMe() {\n        System.out.println(\"Hello, i am very useful method\");\n    }\n}\n```\n\n## Built With\n\n* [Gradle](https://gradle.org) - Dependency management\n* [ASM](https://asm.ow2.io) - Generation of dynamic proxies\n* [jfunc](https://github.com/RomanQed/jfunc) - Lazy containers\n\n## Authors\n\n* **[RomanQed](https://github.com/RomanQed)** - *Main work*\n\nSee also the list of [contributors](https://github.com/RomanQed/jeflect/contributors)\nwho participated in this project.\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromanqed%2Fjeflect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromanqed%2Fjeflect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromanqed%2Fjeflect/lists"}