{"id":48313110,"url":"https://github.com/alien-tools/ucov","last_synced_at":"2026-04-05T00:25:20.370Z","repository":{"id":222269576,"uuid":"608581964","full_name":"alien-tools/ucov","owner":"alien-tools","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-06T16:43:18.000Z","size":103,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-09T04:01:34.222Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alien-tools.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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-02T10:12:47.000Z","updated_at":"2025-05-06T16:43:21.000Z","dependencies_parsed_at":"2025-05-06T17:38:48.969Z","dependency_job_id":null,"html_url":"https://github.com/alien-tools/ucov","commit_stats":null,"previous_names":["alien-tools/ucov"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/alien-tools/ucov","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alien-tools%2Fucov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alien-tools%2Fucov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alien-tools%2Fucov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alien-tools%2Fucov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alien-tools","download_url":"https://codeload.github.com/alien-tools/ucov/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alien-tools%2Fucov/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31419699,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T00:25:07.052Z","status":"ssl_error","status_checked_at":"2026-04-05T00:25:05.923Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2026-04-05T00:25:20.286Z","updated_at":"2026-04-05T00:25:20.347Z","avatar_url":"https://github.com/alien-tools.png","language":"Java","readme":"# UCov\n\nUCov is a proof of concept implementation of syntactic API usage analysis for Java libraries.\nIt enables developers to better design their software library API as well as understand the usage patterns between their software library and their clients.\nUCov parses and analyzes the source code of Java libraries to produce syntactic usage models (SUM) and the source code of Java clients to produce syntactic usage footprints (SUF) and their coverage.\nUCov implements a specific API syntactic usage model (SUM) for Java, as follows:\n\n```java\npublic enum SymbolKind {\n    SYMBOL_KIND_TYPE,\n    SYMBOL_KIND_CLASS,\n    SYMBOL_KIND_INTERFACE,\n    SYMBOL_KIND_METHOD,\n    SYMBOL_KIND_CONSTRUCTOR,\n    SYMBOL_KIND_FIELD\n}\n\npublic enum SymbolUse {\n    SYMBOL_USE_INSTANTIATION, // TYPE_USE, CLASS_USE\n    SYMBOL_USE_TYPE_REFERENCE, // TYPE_USE\n    SYMBOL_USE_INHERITANCE, // CLASS_USE\n    SYMBOL_USE_IMPLEMENTATION, // INTERFACE_USE\n    SYMBOL_USE_EXTENSION, // INTERFACE_USE\n    SYMBOL_USE_INVOCATION, // METHOD_USE\n    SYMBOL_USE_STATIC_INVOCATION, // METHOD_USE\n    SYMBOL_USE_OVERRIDING, // METHOD_USE\n    SYMBOL_USE_INSTANCE_FIELD_READ, // FIELD_USE\n    SYMBOL_USE_INSTANCE_FIELD_WRITE, // FIELD_USE,\n    SYMBOL_USE_VIRTUAL_INVOCATION\n}\n```\n\nUCov outputs a set of report files:\n\n- The API of the Java library (generated by [Roseau](https://github.com/alien-tools/roseau)) exported as a JSON file: ```.API.json```\n- The syntactic usage model (SUM) of the Java library (list of all possible uses permitted by the library) exported as a CSV file ```.SUM.csv```\n- The syntactic usage footprint (SUF) of a client using the Java library (list of all uses made by the client out of the API) exported as a CSV file ```.SUF.csv```\n\nFor the SUM and SUF reports, here's a sample SUF result extract from the analysis of the Spark 2.9.3 Library (the SUM report follows the same format):\n\n| projectId | projectType | projectLocation | usagePosition | usageEndPosition | usageFullyQualifiedName | usageKind | usageType |\n|-----------|-------------|-----------------|---------------|------------------|-------------------------|-----------|-----------| \n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(16:23) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(79:1)   | spark.Route                                      | SYMBOL_KIND_INTERFACE | SYMBOL_USE_IMPLEMENTATION |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(16:97) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(16:101) | spark.Route                                      | SYMBOL_KIND_TYPE      | SYMBOL_USE_TYPE_REFERENCE |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(28:45) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(28:51)  | spark.Request                                    | SYMBOL_KIND_TYPE      | SYMBOL_USE_TYPE_REFERENCE |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(29:25) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(29:49)  | spark.Request.headers(java.lang.String)          | SYMBOL_KIND_METHOD    | SYMBOL_USE_INVOCATION     |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(55:19) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(77:5)   | spark.Route.handle(spark.Request,spark.Response) | SYMBOL_KIND_METHOD    | SYMBOL_USE_OVERRIDING     |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(55:26) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(55:32)  | spark.Request                                    | SYMBOL_KIND_TYPE      | SYMBOL_USE_TYPE_REFERENCE |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(55:43) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(55:50)  | spark.Response                                   | SYMBOL_KIND_TYPE      | SYMBOL_USE_TYPE_REFERENCE |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(60:48) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(60:61)  | spark.Request.body()                             | SYMBOL_KIND_METHOD    | SYMBOL_USE_INVOCATION     |\n| Spark-2.9.3 | SAMPLE | I:/UCov/Repro/spark/Samples | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(62:45) | /blogservice_sparkexample/src/main/java/me/tomassetti/abstractrequesthandler.java(62:60)  | spark.Request.params()                           | SYMBOL_KIND_METHOD    | SYMBOL_USE_INVOCATION     |\n\n## License\n\nThis repository is licensed under the [MIT License](LICENSE).\n\nThis repository makes use of a third party dependency named [Roseau](https://github.com/alien-tools/roseau) also made available under the MIT license and whose license is reproduced below:\n\n\u003cdetails\u003e\n  \u003csummary\u003eRoseau License Terms\u003c/summary\u003e\n  \u003cp\u003e\nMIT License\n\nCopyright (c) 2023 Roseau\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS,\" WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n    \u003c/p\u003e\n\u003c/spoiler\u003e","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falien-tools%2Fucov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falien-tools%2Fucov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falien-tools%2Fucov/lists"}