{"id":20509322,"url":"https://github.com/raydac/meta","last_synced_at":"2026-02-08T17:02:44.460Z","repository":{"id":57725149,"uuid":"49089945","full_name":"raydac/meta","owner":"raydac","description":"Set of annotations to mark code and some utility classes","archived":false,"fork":false,"pushed_at":"2024-12-14T13:33:17.000Z","size":342,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-14T01:08:55.331Z","etag":null,"topics":["annotation-library","assertion-library","java","library","maven-plugin"],"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/raydac.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}},"created_at":"2016-01-05T20:10:21.000Z","updated_at":"2024-12-14T13:32:11.000Z","dependencies_parsed_at":"2022-09-11T17:21:59.089Z","dependency_job_id":null,"html_url":"https://github.com/raydac/meta","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/raydac/meta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raydac%2Fmeta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raydac%2Fmeta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raydac%2Fmeta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raydac%2Fmeta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raydac","download_url":"https://codeload.github.com/raydac/meta/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raydac%2Fmeta/sbom","scorecard":{"id":763461,"data":{"date":"2025-08-11","repo":{"name":"github.com/raydac/meta","commit":"65a916d63e3f081a8f061dcfbbb6252b08e4e16c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-5mg8-w23w-74h3","Warn: Project is vulnerable to: GHSA-7g45-4rm6-3mm3","Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v","Warn: Project is vulnerable to: GHSA-rhgr-952r-6p8q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T00:04:50.532Z","repository_id":57725149,"created_at":"2025-08-23T00:04:50.532Z","updated_at":"2025-08-23T00:04:50.532Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29237089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T14:18:14.570Z","status":"ssl_error","status_checked_at":"2026-02-08T14:18:14.071Z","response_time":57,"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":["annotation-library","assertion-library","java","library","maven-plugin"],"created_at":"2024-11-15T20:24:02.472Z","updated_at":"2026-02-08T17:02:44.443Z","avatar_url":"https://github.com/raydac.png","language":"Java","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=AHWJHJFBAWGL2"],"categories":[],"sub_categories":[],"readme":"[![License Apache 2.0](https://img.shields.io/badge/license-Apache%20License%202.0-green.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n[![Maven central](https://maven-badges.herokuapp.com/maven-central/com.igormaznitsa/meta-annotations/badge.svg)](http://search.maven.org/#artifactdetails|com.igormaznitsa|meta-annotations|1.2.1|jar)\n[![Java 11+](https://img.shields.io/badge/java-11.0%2b-green.svg)](https://bell-sw.com/pages/downloads/l)\n[![PayPal donation](https://img.shields.io/badge/donation-PayPal-red.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=AHWJHJFBAWGL2)\n[![Yandex.Money donation](https://img.shields.io/badge/donation-Я.деньги-yellow.svg)](https://money.yandex.ru/embed/small.xml?account=41001158080699\u0026quickpay=small\u0026yamoney-payment-type=on\u0026button-text=01\u0026button-size=l\u0026button-color=orange\u0026targets=%D0%9F%D0%BE%D0%B6%D0%B5%D1%80%D1%82%D0%B2%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B+%D1%81+%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%BC+%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%BC+%D0%BA%D0%BE%D0%B4%D0%BE%D0%BC\u0026default-sum=100\u0026successURL=)\n\n# Introduction\nIt is a small general-purpose library includes:\n* set of run-time annotations to mark code\n* set of utility classes\n* shaded com.google.code.findbugs:jsr305 annotation library\n* maven plugin to log info about some annotations and check java class version\n\n# Change log\n\n- __1.2.1 (14-dec-2024)__\n- added annotations PureFunction and DisableSelfInvocation\n- added `check` functions into `TimeGuard`\n- fixed search for classes in META-INF for checker\n- refactoring\n\n- __1.2.0 (10-dec-2024)__\n - __minimal JDK 11__\n - __minimal Maven 3.8.1__\n - removed vulnerable dependencies\n - minor renaming of methods\n- use of Joda Time replaced by Java Time API\n- updated dependencies and improved new JDK support\n- refactoring and typo fixing\n\n# Annotations\nIt contains number annotations to mark code, plus JSR-305 annotations provided by the shaded findbugs annotation library.\n* ImplementationNote\n* UiThread\n* Critical\n* Constraint\n* Determined\n* NonDetermined\n* LazyInited\n* Link\n* MayContainNull\n* MustNotContainNull\n* NeedsRefactoring\n* OneWayChange\n* PureFunction\n* ReturnsOriginal\n* Risky\n* ToDo\n* Warning\n* Weight\n* ThrowsRuntimeException\n* ThrowsRuntimeExceptions\n* Experimental\n* TimeComplexity\n* MemoryComplexity\n\n# How to add the annotation library into maven project\nTo use annotations just add dependency to the library\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.igormaznitsa\u003c/groupId\u003e\n    \u003cartifactId\u003emeta-annotations\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\nIt shades JSR-305 annotations from the FindBugs library so that they also will be available for usage automatically.\n\n# Utilities\nSince 1.1.0 utility classes extracted into separated module which is available in maven central\nJust add the lines below into build section.\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.igormaznitsa\u003c/groupId\u003e\n    \u003cartifactId\u003emeta-utils\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n## com.igormaznitsa.meta.common.utils.Deferrers\nIt allows to defer some operations, like it works in Go but unfortunately the call to process all deferred operations must be placed into try...finally block to ensure the call.\nIt checks stack frames and all deferred operations will be processed by `Deferrers.processDeferredActions()` only for actual stack depth, it means that deferred operations added on higher stack levels will be ignored.\n```\n    try {\n      // it processes runnable, the code will be executed\n      Deferrers.defer(new Runnable() {public void run() { System.out.println(\"Hello world\");}});\n      final InputStream is = new FileInputStream(\"/home/test/nonexistfile.txt\");\n      // it processes closeable, registered closeable object will be closed automatically\n      Deferrers.defer(is);\n    }\n    finally {\n      Deferrers.processDeferredActions();\n    }\n```\n## com.igormaznitsa.meta.common.utils.TimeGuard\n```\n    final TimeGuard.TimeAlertListener listener = new TimeGuard.TimeAlertListener() {\n      @Override\n      public void onTimeAlert(long l, TimeGuard.TimeData td) {\n        System.out.println(\"Too long delay for \" + td.getAlertMessage());\n      }\n    };\n\n    try {\n      TimeGuard.addGuard(\"Checkpoint1\", 100L, listener);\n      Thread.sleep(200L);\n    }\n    finally {\n      TimeGuard.check();\n    }\n```\n\n# How to use the maven plugin\nI have also published some maven plugin which allows to check compiled classes for the annotations and print some information and check that methods marked by nullable and nonnull annotations.\nAlso the plugin allows to fail build process if detected some annotations, it allows to avoid publishing of project with to-do or experimental stuff.\n```\n\u003cplugin\u003e\n    \u003cgroupId\u003ecom.igormaznitsa\u003c/groupId\u003e\n    \u003cartifactId\u003emeta-checker\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.1\u003c/version\u003e\n    \u003cconfiguration\u003e\n        \u003crestrictClassFormat\u003e7\u003c/restrictClassFormat\u003e\n        \u003cfailForAnnotations\u003e\n            \u003cparam\u003erisky\u003c/param\u003e\n        \u003c/failForAnnotations\u003e\n    \u003c/configuration\u003e\n    \u003cexecutions\u003e\n        \u003cexecution\u003e\n            \u003cgoals\u003e\n              \u003cgoal\u003echeck\u003c/goal\u003e\n            \u003c/goals\u003e\n        \u003c/execution\u003e\n    \u003c/executions\u003e\n\u003c/plugin\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraydac%2Fmeta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraydac%2Fmeta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraydac%2Fmeta/lists"}