Skip to content

Osmerion/OptIn

Repository files navigation

🗹 OptIn

License Maven Central JavaDoc Java

A standard for declaring and working with APIs that require explicit opt-in in Java.

// Create a requirement marker
@RequiresOptIn(message = "This API is subject to change and may change without prior notice.")
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface ExperimentalNotifications {}

interface MyNotificationProcessor {
    
    void sendOldNotification();
    
    @ExperimentalNotifications // Declares an opt-in requirement
    void sendFancyNewNotification();
    
}

// Opts-in into the requirement marker
@OptIn(ExperimentalNotifications.class)
void onMessage(MyNotificationProcessor processor) {
    processor.sendFancyNewNotification();
}

Learn more!

Building from source

Setup

This project uses Gradle's toolchain support to detect and select the JDKs required to run the build. Please refer to the build scripts to find out which toolchains are requested.

An installed JDK 17 (or later) is required to use Gradle.

Building

Once the setup is complete, invoke the respective Gradle tasks using the following command on Unix/macOS:

./gradlew <tasks>

or the following command on Windows:

gradlew <tasks>

Important Gradle tasks to remember are:

  • clean - clean build results
  • build - assemble and test the Java library
  • publishToMavenLocal - build and install all public artifacts to the local maven repository

Additionally tasks may be used to print a list of all available tasks.

License

Credits

This project was heavily inspired by and is compatible with Kotlin's mechanism for opt-in requirements. It aims to introduce a common, more easily accessible standard for opt-in requirements to the Java ecosystem to bolster code evolution practices with robust static analysis.

OptIn

Copyright 2022-2026 Leon Linhart

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

A standard for declaring and working with APIs that require explicit opt-in.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Contributors