{"id":15009281,"url":"https://github.com/lastnpe/eclipse-null-eea-augments","last_synced_at":"2025-07-25T05:37:44.693Z","repository":{"id":42558291,"uuid":"61545406","full_name":"lastnpe/eclipse-null-eea-augments","owner":"lastnpe","description":"Eclipse External null Annotations (EEA) repository","archived":false,"fork":false,"pushed_at":"2025-01-06T10:42:15.000Z","size":3677,"stargazers_count":43,"open_issues_count":16,"forks_count":21,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-07-03T18:07:29.829Z","etag":null,"topics":["eclipse","eea","java","maven","null-analysis","null-safety","nullability","nullability-analysis","nullable"],"latest_commit_sha":null,"homepage":"http://lastnpe.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lastnpe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-20T12:17:31.000Z","updated_at":"2025-05-19T08:09:29.000Z","dependencies_parsed_at":"2025-01-14T14:19:59.545Z","dependency_job_id":null,"html_url":"https://github.com/lastnpe/eclipse-null-eea-augments","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lastnpe/eclipse-null-eea-augments","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lastnpe%2Feclipse-null-eea-augments","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lastnpe%2Feclipse-null-eea-augments/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lastnpe%2Feclipse-null-eea-augments/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lastnpe%2Feclipse-null-eea-augments/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lastnpe","download_url":"https://codeload.github.com/lastnpe/eclipse-null-eea-augments/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lastnpe%2Feclipse-null-eea-augments/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266962225,"owners_count":24012994,"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","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["eclipse","eea","java","maven","null-analysis","null-safety","nullability","nullability-analysis","nullable"],"created_at":"2024-09-24T19:24:13.886Z","updated_at":"2025-07-25T05:37:44.659Z","avatar_url":"https://github.com/lastnpe.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eclipse External null Annotations (EEA)\n\n[![Build Status](https://github.com/lastnpe/eclipse-null-eea-augments/workflows/Build/badge.svg \"GitHub Actions\")](https://github.com/lastnpe/eclipse-null-eea-augments/actions?query=workflow%3A%22Build%22)\n[![License](https://img.shields.io/github/license/lastnpe/eclipse-null-eea-augments.svg?color=blue)](LICENSE.txt)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.1%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md)\n[![Maven Central](https://img.shields.io/maven-central/v/org.lastnpe.eea/eea-all)](https://central.sonatype.com/artifact/org.lastnpe.eea/eea-all)\n\n\n1. [What is this?](#what-is-this)\n1. [How to use this](#usage)\n   1. [Binaries](#binaries)\n   1. [Building from Sources](#building)\n   1. [Validating/Updating EEA files](#validate_update)\n1. [How to contribute](#contribute)\n1. [Troubleshooting](#troubleshooting)\n1. [Future](#future)\n1. [License](#license)\n\n\n## \u003ca name=\"what-is-this\"\u003e\u003c/a\u003eWhat is this?\n\nThis repository contains *.eea files and example projects how to use this.\n\nIf you like/use this project, a Star / Watch / Follow on GitHub is appreciated.\n\n\n## \u003ca name=\"usage\"\u003e\u003c/a\u003eHow to use this\n\nGeneral usage of External Null Annotations in Eclipse is documented at\nhttps://help.eclipse.org/latest/index.jsp?topic=/org.eclipse.jdt.doc.user/tasks/task-using_external_null_annotations.htm\n\n[See theses slides here](https://www.slideshare.net/mikervorburger/the-end-of-the-world-as-we-know-it-aka-your-last-nullpointerexception-1b-bugs) from this\n[EclipseCon Europe 2016 presentation](https://www.eclipsecon.org/europe2016/session/end-world-we-know-it-aka-your-last-nullpointerexception-1b-bugs) for some background about this project.\n\nTo automatically Enable Annotation-based Null Analysis in the Eclipse Project Preferences correctly (e.g. when you import the `examples/` here), we highly\nrecommend you install the [eclipse-external-annotations-m2e-plugin](https://github.com/lastnpe/eclipse-external-annotations-m2e-plugin) Maven IDE (M2E) Configurator Eclipse plugin.\n(On Eclipse m2e versions \u003c 1.8 (shipped with Oxygen), you also had to install [m2e-jdt-compiler](https://github.com/jbosstools/m2e-jdt-compiler), but with M2E 1.8 in Oxygen that is not necessary anymore, even harmful; see below.)\n\n\n### \u003ca id=\"binaries\"\u003e\u003c/a\u003eBinaries\n\nLatest **Release** binaries are available on Maven central, see https://search.maven.org/search?q=g%3Aorg.lastnpe.eea\n\nLatest **Snapshot** binaries are available via the [mvn-snapshots-repo](https://github.com/lastnpe/eclipse-null-eea-augments/tree/mvn-snapshots-repo) git branch.\nYou need to add this repository configuration to your Maven `settings.xml`:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003csettings xmlns=\"http://maven.apache.org/SETTINGS/1.2.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd\"\u003e\n  \u003cprofiles\u003e\n    \u003cprofile\u003e\n      \u003crepositories\u003e\n        \u003crepository\u003e\n          \u003cid\u003elastnpe-snapshots\u003c/id\u003e\n          \u003cname\u003elastnpe-snapshots\u003c/name\u003e\n          \u003curl\u003ehttps://raw.githubusercontent.com/lastnpe/eclipse-null-eea-augments/mvn-snapshots-repo\u003c/url\u003e\n          \u003creleases\u003e\u003cenabled\u003efalse\u003c/enabled\u003e\u003c/releases\u003e\n          \u003csnapshots\u003e\u003cenabled\u003etrue\u003c/enabled\u003e\u003c/snapshots\u003e\n        \u003c/repository\u003e\n      \u003c/repositories\u003e\n    \u003c/profile\u003e\n  \u003c/profiles\u003e\n  \u003cactiveProfiles\u003e\n    \u003cactiveProfile\u003elastnpe-snapshots\u003c/activeProfile\u003e\n  \u003c/activeProfiles\u003e\n\u003c/settings\u003e\n```\n\n\n### \u003ca id=\"building\"\u003e\u003c/a\u003eBuilding from Sources\n\nThe project also uses the [maven-toolchains-plugin](https://maven.apache.org/plugins/maven-toolchains-plugin/) which decouples the JDK that is\nused to execute Maven and it's plug-ins from the target JDK that is used for compilation and/or unit testing. This ensures full binary\ncompatibility of the compiled artifacts with the runtime library of the required target JDK.\n\nTo build the project follow these steps:\n\n1. Download and install Java 17 **AND** Java 21 SDKs, e.g. from:\n   - Java 17: https://adoptium.net/releases.html?variant=openjdk17 or https://www.azul.com/downloads/?version=java-17-lts\u0026package=jdk#download-openjdk\n   - Java 21: https://adoptium.net/releases.html?variant=openjdk21 or https://www.azul.com/downloads/?version=java-21-lts\u0026package=jdk#download-openjdk\n\n1. Download and install the latest [Maven distribution](https://maven.apache.org/download.cgi).\n\n1. In your user home directory create the file `.m2/toolchains.xml` with the following content:\n\n   ```xml\n   \u003c?xml version=\"1.0\" encoding=\"UTF8\"?\u003e\n   \u003ctoolchains xmlns=\"http://maven.apache.org/TOOLCHAINS/1.1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xsi:schemaLocation=\"http://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd\"\u003e\n      \u003ctoolchain\u003e\n         \u003ctype\u003ejdk\u003c/type\u003e\n         \u003cprovides\u003e\n            \u003cversion\u003e17\u003c/version\u003e\n            \u003cvendor\u003edefault\u003c/vendor\u003e\n         \u003c/provides\u003e\n         \u003cconfiguration\u003e\n            \u003cjdkHome\u003e[PATH_TO_YOUR_JDK_17]\u003c/jdkHome\u003e\n         \u003c/configuration\u003e\n      \u003c/toolchain\u003e\n      \u003ctoolchain\u003e\n         \u003ctype\u003ejdk\u003c/type\u003e\n         \u003cprovides\u003e\n            \u003cversion\u003e21\u003c/version\u003e\n            \u003cvendor\u003edefault\u003c/vendor\u003e\n         \u003c/provides\u003e\n         \u003cconfiguration\u003e\n            \u003cjdkHome\u003e[PATH_TO_YOUR_JDK_21]\u003c/jdkHome\u003e\n         \u003c/configuration\u003e\n      \u003c/toolchain\u003e\n   \u003c/toolchains\u003e\n   ```\n\n   Set the `[PATH_TO_YOUR_JDK_17]`/`[PATH_TO_YOUR_JDK_21]` parameters accordingly\n   to where you installed the JDKs.\n\n1. Checkout the code, e.g. using:\n\n    - `git clone https://github.com/lastnpe/eclipse-null-eea-augments`\n\n1. Run `mvn clean verify` in the project root directory. This will execute compilation, unit-testing, integration-testing and\n   packaging of all artifacts.\n\n\n### \u003ca name=\"validate_update\"\u003e\u003c/a\u003eValidating/Updating EEA files\n\nThe EEA files can be validated/updated using:\n\n```bash\n# validate all EEA files of all eea-* modules\nmvn compile\n\n# validate all EEA files of a specific module\nmvn compile -am -pl \u003cMODULE_NAME\u003e\nmvn compile -am -pl libraries/gson\n\n# update/regenerate all EEA files of all eea-* modules\nmvn compile -Deea-generator.action=generate\n\n# update/regenerate all EEA files of a specific module\nmvn compile -Deea-generator.action=generate -am -pl \u003cMODULE_NAME\u003e\nmvn compile -Deea-generator.action=generate -am -pl libraries/gson\n```\n\nUpdating EEA files will:\n- add new types/fields/methods found\n- remove obsolete declarations from the EEA files\n- preserve null/non-null annotations specified for existing fields/methods\n\n\n## \u003ca name=\"contribute\"\u003e\u003c/a\u003eHow to contribute\n\nPlease consult the [CONTRIBUTING.md](CONTRIBUTING.md).\n\nThis project aims to develop an active community of contributors, and not remain controlled by a single person.\nAnyone making 3 intelligent contributions to this repo may ask to be promoted from a contributor to a committer with full write access by opening an issue requesting it.\n(We reserve the right to remove committers in exceptional circumstances, and after long periods of inactivity.)\n\nWe intend to liberally and quickly merge any contributions with additions to EEA, and avoid delays due to lengthy reviews\n(which are anyway [kind of difficult to do rapidly and at scale until we solve issue #16](https://github.com/lastnpe/eclipse-null-eea-augments/issues/16)),\nbased on the idea that having an EEA that can be tested is better than none.\n\nWe intend to spend more time and request community feedback from engaged previous contributors on any proposed changes to existing EEA in this repo.\nWhen making contributions with changes, please explain what is wrong in the current version in the commit message.\n\nWe generally do not \"self merge\", but let other committers merge our own changes.\n\n\n## \u003ca name=\"troubleshooting\"\u003e\u003c/a\u003eTroubleshooting\n\n* Uninstall the [jbosstools/m2e-jdt-compiler](https://github.com/jbosstools/m2e-jdt-compiler) to fix this problem: _Conflicting lifecycle mapping (plugin execution \"org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (execution: default-compile, phase: compile)\"). To enable full functionality, remove the conflicting mapping and run Maven-\u003eUpdate Project Configuration._\n\n* Do `mvn install` of the `examples/maven/jdt-ecj-settings` to fix this problem, due to [M2E Bug 522393](https://bugs.eclipse.org/bugs/show_bug.cgi?id=522393): _CoreException: Could not get the value for parameter compilerId for plugin execution default-testCompile: PluginResolutionException: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.5.1 or one of its dependencies could not be resolved: Failure to find ch.vorburger.nulls.examples:jdt-ecj-settings:jar:1.0.0-SNAPSHOT_\n\n\n## \u003ca name=\"future\"\u003e\u003c/a\u003eFuture\n\nIf this is found to be of general interest, perhaps this could move to eclipse.org. If this happens, it would be imperative to keep it very easy for anyone to contribute via Pull Requests on GitHub (and not, or not you only, eclipse.org Gerrit changes).\n\n\n## \u003ca name=\"license\"\u003e\u003c/a\u003eLicense\n\nAll files are released under the [Eclipse Public License 2.0](LICENSE.txt).\n\nIndividual files contain the following tag instead of the full license text:\n```\nSPDX-License-Identifier: EPL-2.0\n```\n\nThis enables machine processing of license information based on the SPDX License Identifiers that are available here: https://spdx.org/licenses/.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flastnpe%2Feclipse-null-eea-augments","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flastnpe%2Feclipse-null-eea-augments","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flastnpe%2Feclipse-null-eea-augments/lists"}