Skip to content

Releases: Bloogefest/BF.Annotation

3.0.0

15 Nov 18:50
Compare
Choose a tag to compare

Этот выпуск несовместим с предыдущим — все аннотации были переработаны, а некоторые даже удалены. Например, аннотация Removal была удалена и заменена новым параметром Obsolete::to() в уже существующей аннотации Obsolete. Аннотации: Enumed, Magical, Nls, NotNls — показались довольно бесполезными, поэтому тоже были удалены.

Подробнее об изменениях: 2.1.0...3.0.0

Maven

<repository>
  <id>central</id>
  <url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>3.0.0</version>
</dependency>

Gradle

mavenCentral()
implementation("com.bloogefest:annotation:3.0.0")

Введено:

Аннотации:

Возвращает тип влияния на окружение метода или конструктора.

API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.

public final class Singleton {

    private static volatile @Nullable Singleton defaultInstance;
    
    private Singleton() {}

    @Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
    public static @NonNull Singleton defaultInstance() {
        if (defaultInstance == null) synchronized (Singleton.class) {
            if (defaultInstance == null) defaultInstance = new Singleton();
        }
        return defaultInstance;
    }

}

Типы влияния на окружение.

API Note: Это перечисление было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого перечисления по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого перечисления было максимально эффективно, следуйте рекомендациям по применению.

public final class Singleton {

    private static volatile @Nullable Singleton defaultInstance;
    
    private Singleton() {}

    @Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
    public static @NonNull Singleton defaultInstance() {
        if (defaultInstance == null) synchronized (Singleton.class) {
            if (defaultInstance == null) defaultInstance = new Singleton();
        }
        return defaultInstance;
    }

}

Отсутствие влияния на окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Holder<T> {

    private final @Nullable T object;

    public Holder(final @Nullable T object) {
        this.object = object;
    }

    @Contract(value = "-> ~", impact = Contract.Impact.NONE)
    public @Nullable T object() {
        return object;
    }

}

Влияние на внутреннее и внешнее окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Listener {

    private volatile boolean listened;

    public Listener() {}

    @Contract(value = "-> ~", impact = Contract.Impact.SHARED)
    public void listen() {
        if (!listened) synchronized (this) {
            if (!listened) {
                listened = true;
                return;
            }
        }
        System.exit(0);
    }

    @Contract(value = "-> ~", impact = Contract.Impact.NONE)
    public boolean listened() {
        return listened;
    }

}

Влияние на внутреннее окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Singleton {

    private static volatile @Nullable Singleton defaultInstance;
    
    private Singleton() {}

    @Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
    public static @NonNull Singleton defaultInstance() {
        if (defaultInstance == null) synchronized (Singleton.class) {
            if (defaultInstance == null) defaultInstance = new Singleton();
        }
        return defaultInstance;
    }

}

Влияние на внешнее окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Listener {

    public Listener() {}

    @Contract(value = "-> ~", impact = Contract.Impact.EXTERNAL)
    public void listen() {
        System.exit(0);
    }

}

Неопределённое влияние на окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

@FunctionalInterface
public interface Listener {

    @Contract(value = "-> ?", impact = Contract.Impact.UNDEFINED)
    void listen();

}

Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором состояние элемента было обозначено как экспериментальное.

API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.

@Experimental(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {

    @Experimental(from = "3.7.4-RC2", to = "3.7.4-RC3")
    @Contract("-> ?")
    void work();

}

Возвращает идентификато...

Read more

3.0.0-RC2

15 Nov 13:41
849ab67
Compare
Choose a tag to compare
3.0.0-RC2 Pre-release
Pre-release

Этот предварительный выпуск совместим с предыдущим предварительным.

Подробнее о релизе: 3.0.0-RC1...3.0.0-RC2

Maven

<repository>
  <id>ossrh-rc</id>
  <url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>3.0.0-RC2</version>
</dependency>

Gradle

maven("https://s01.oss.sonatype.org/content/repositories/releases/")
implementation("com.bloogefest:annotation:3.0.0-RC2")

Изменено:

Аннотации:

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

Исправлена документация.

3.0.0-RC1

14 Nov 21:48
Compare
Choose a tag to compare
3.0.0-RC1 Pre-release
Pre-release

Этот предварительный выпуск несовместим с предыдущим стабильным.

Подробнее о релизе: 2.1.0...3.0.0-RC1

Maven

<repository>
  <id>ossrh-rc</id>
  <url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>3.0.0-RC1</version>
</dependency>

Gradle

maven("https://s01.oss.sonatype.org/content/repositories/releases/")
implementation("com.bloogefest:annotation:3.0.0-RC1")

Введено:

Аннотации:

Возвращает тип влияния на окружение метода или конструктора.

API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.

public final class Singleton {

    private static volatile @Nullable Singleton defaultInstance;
    
    private Singleton() {}

    @Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
    public static @NonNull Singleton defaultInstance() {
        if (defaultInstance == null) synchronized (Singleton.class) {
            if (defaultInstance == null) defaultInstance = new Singleton();
        }
        return defaultInstance;
    }

}

Типы влияния на окружение.

API Note: Это перечисление было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого перечисления по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого перечисления было максимально эффективно, следуйте рекомендациям по применению.

public final class Singleton {

    private static volatile @Nullable Singleton defaultInstance;
    
    private Singleton() {}

    @Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
    public static @NonNull Singleton defaultInstance() {
        if (defaultInstance == null) synchronized (Singleton.class) {
            if (defaultInstance == null) defaultInstance = new Singleton();
        }
        return defaultInstance;
    }

}

Отсутствие влияния на окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Holder<T> {

    private final @Nullable T object;

    public Holder(final @Nullable T object) {
        this.object = object;
    }

    @Contract(value = "-> ~", impact = Contract.Impact.NONE)
    public @Nullable T object() {
        return object;
    }

}

Влияние на внутреннее и внешнее окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Listener {

    private volatile boolean listened;

    public Listener() {}

    @Contract(value = "-> ~", impact = Contract.Impact.SHARED)
    public void listen() {
        if (!listened) synchronized (this) {
            if (!listened) {
                listened = true;
                return;
            }
        }
        System.exit(0);
    }

    @Contract(value = "-> ~", impact = Contract.Impact.NONE)
    public boolean listened() {
        return listened;
    }

}

Влияние на внутреннее окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Singleton {

    private static volatile @Nullable Singleton defaultInstance;
    
    private Singleton() {}

    @Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
    public static @NonNull Singleton defaultInstance() {
        if (defaultInstance == null) synchronized (Singleton.class) {
            if (defaultInstance == null) defaultInstance = new Singleton();
        }
        return defaultInstance;
    }

}

Влияние на внешнее окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

public final class Listener {

    public Listener() {}

    @Contract(value = "-> ~", impact = Contract.Impact.EXTERNAL)
    public void listen() {
        System.exit(0);
    }

}

Неопределённое влияние на окружение.

API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.

@FunctionalInterface
public interface Listener {

    @Contract(value = "-> ?", impact = Contract.Impact.UNDEFINED)
    void listen();

}

Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором состояние элемента было обозначено как экспериментальное.

API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.

@Experimental(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {

    @Experimental(from = "3.7.4-RC2", to = "3.7.4-RC3")
    @Contract("-> ?")
    void work();

}

Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором планируется, что состояние элемента перестанет быть обозначенным как экспериментальное.

API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.

@Experimental(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {

    @Experimental(from = "3.7.4-RC2", to = "3.7.4-RC3")
    @Contract("-> ?")
    void work();

}
  • [`Obsolete::fro...
Read more

2.1.0

04 Jun 10:57
Compare
Choose a tag to compare

Этот стабильный выпуск совместим с предыдущим.

Подробнее о релизе: 2.0.0...2.1.0

Maven

<repository>
  <id>central</id>
  <name>Maven Central</name>
  <url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>2.1.0</version>
</dependency>

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("com.bloogefest:annotation:2.1.0")
}

Введено:

Аннотации:

Перечисление значений.

API Note: Уведомляет о предполагаемых значениях.

boolean toBoolean(final @Enumed({0, 1}) int value) {
    return value == 0 ? false : true;
}

Возвращает предполагаемые значения.

Returns: Предполагаемые значения.

Implementation Requirements: Предполагаемые значения не должны повторяться.

boolean toBoolean(final @Enumed({0, 1}) int value) {
    return value == 0 ? false : true;
}

Возвращает идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.

Returns: Идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.

@Experimental("3.7.4-RC1")
void work() {
    System.gc();
}

Магическое значение.

API Note: Уведомляет о магическом значении, содержащимся в поле или локальной переменной.

void operate(final @Magical int code) {
    final @Magical var limit = 256;
    if (code > limit) System.gc();
}

Диапазон числовых значений.

API Note: Позволяет задать диапазон числовых значений.

void operate(final @Range(from = 0, to = 256) int code) {
    if (code == 0) System.gc();
}

Изменено:

Аннотации:

Изменена документация.

Изменена документация — я добавил описание синтаксиса.
Изменена сигнатура.

Изменена документация.
Изменена сигнатура.

Изменена документация.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.

Изменена документация.
Изменена сигнатура.

Изменена документация.

Изменена документация.
Изменена сигнатура.

Другое:

Изменена документация.

Изменена документация.

2.1.0-RC1

01 Jun 09:59
Compare
Choose a tag to compare
2.1.0-RC1 Pre-release
Pre-release

Этот предварительный выпуск совместим с предыдущим стабильным.

Подробнее о релизе: 2.0.0...2.1.0-RC1

Maven

<repository>
  <id>ossrh-rc</id>
  <name>OSSRH RC</name>
  <url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>2.1.0-RC1</version>
</dependency>

Gradle

repositories {
    maven {
        name = "OSSRH RC"
        url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
    }
}
dependencies {
    implementation("com.bloogefest:annotation:2.1.0-RC1")
}

Введено:

Аннотации:

Перечисление значений.

API Note: Уведомляет о предполагаемых значениях.

boolean toBoolean(final @Enumed({0, 1}) int value) {
    return value == 0 ? false : true;
}

Возвращает предполагаемые значения.

Returns: Предполагаемые значения.

Implementation Requirements: Предполагаемые значения не должны повторяться.

boolean toBoolean(final @Enumed({0, 1}) int value) {
    return value == 0 ? false : true;
}

Возвращает идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.

Returns: Идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.

@Experimental("3.7.4-RC1")
void work() {
    System.gc();
}

Магическое значение.

API Note: Уведомляет о магическом значении, содержащимся в поле или локальной переменной.

void operate(final @Magical int code) {
    final @Magical var limit = 256;
    if (code > limit) System.gc();
}

Диапазон числовых значений.

API Note: Позволяет задать диапазон числовых значений.

void operate(final @Range(from = 0, to = 256) int code) {
    if (code == 0) System.gc();
}

Изменено:

Аннотации:

Изменена документация.

Изменена документация — я добавил описание синтаксиса.
Изменена сигнатура.

Изменена документация.
Изменена сигнатура.

Изменена документация.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.
Изменено тело.

Изменена документация.

Изменена документация.
Изменена сигнатура.

Изменена документация.

Изменена документация.
Изменена сигнатура.

Другое:

Изменена документация.

Изменена документация.

2.0.0

22 Apr 17:15
Compare
Choose a tag to compare

Этот стабильный выпуск несовместим с предыдущим.

Произведена демодуляризация проекта.

Подробнее о релизе: 1.0.1...2.0.0

Maven

<repository>
  <id>central</id>
  <name>Maven Central</name>
  <url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>2.0.0</version>
</dependency>

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("com.bloogefest:annotation:2.0.0")
}

Введено:

Аннотации:

Аннотация контракта метода или конструктора.

API Note: Наличие этой аннотации говорит о том, что поведение метода или конструктора соответствует значению контракта.

@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
    return string.length() == 0;
}

Содержит идентификатор выпуска, в котором это будет гарантированно удалено.

Returns: Идентификатор выпуска, в котором это будет гарантированно удалено.

@Removal("3.7.4")
final boolean dev = true;
System.out.println(dev); // Не рекомендуется к использованию

Удалено:

Другое:

2.0.0-RC1

22 Apr 17:06
Compare
Choose a tag to compare
2.0.0-RC1 Pre-release
Pre-release

Этот предварительный выпуск несовместим с предыдущим стабильным.

Произведена демодуляризация проекта.

Подробнее о релизе: 1.0.1...2.0.0-RC1

Maven

<repository>
  <id>ossrh-rc</id>
  <name>OSSRH RC</name>
  <url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>2.0.0-RC1</version>
</dependency>

Gradle

repositories {
    maven {
        name = "OSSRH RC"
        url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
    }
}
dependencies {
    implementation("com.bloogefest:annotation:2.0.0-RC1")
}

Введено:

Аннотации:

Аннотация контракта метода или конструктора.

API Note: Наличие этой аннотации говорит о том, что поведение метода или конструктора соответствует значению контракта.

@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
    return string.length() == 0;
}

Содержит идентификатор выпуска, в котором это будет гарантированно удалено.

Returns: Идентификатор выпуска, в котором это будет гарантированно удалено.

@Removal("3.7.4")
final boolean dev = true;
System.out.println(dev); // Не рекомендуется к использованию

Удалено:

Другое:

1.0.1

12 Apr 15:43
Compare
Choose a tag to compare

Этот стабильный релиз совместим с предыдущим.

Подробнее о релизе: 1.0.0...1.0.1

Maven

<repository>
  <id>central</id>
  <name>Maven Central</name>
  <url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>1.0.1</version>
</dependency>

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("com.bloogefest:annotation:1.0.1")
}

Изменено:

Другое:

Открыт доступ к пакету com.bloogefest.annotation.analysis.

1.0.1-RC1

12 Apr 15:37
Compare
Choose a tag to compare
1.0.1-RC1 Pre-release
Pre-release

Этот предварительный релиз совместим с предыдущим стабильным.

Подробнее о релизе: 1.0.0...1.0.1-RC1

Maven

<repository>
  <id>ossrh-rc</id>
  <name>OSSRH RC</name>
  <url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>1.0.1-RC1</version>
</dependency>

Gradle

repositories {
    maven {
        name = "OSSRH RC"
        url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
    }
}
dependencies {
    implementation("com.bloogefest:annotation:1.0.1-RC1")
}

Изменено:

Другое:

Открыт доступ к пакету com.bloogefest.annotation.analysis.

1.0.0

11 Apr 09:45
Compare
Choose a tag to compare

Этот крупный выпуск первый.

Подробнее о выпуске: https://github.com/Bloogefest/BF.Annotation/commits/1.0.0

Maven

<repository>
  <id>central</id>
  <name>Maven Central</name>
  <url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
  <groupId>com.bloogefest</groupId>
  <artifactId>annotation</artifactId>
  <version>1.0.0</version>
</dependency>

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("com.bloogefest:annotation:1.0.0")
}

Введено:

Аннотации:

Аннотация контракта метода или конструктора.

API Note: Наличие этой аннотации говорит о том, что поведение метода или конструктора соответствует значению контракта.

@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
    return string.length() == 0;
}

Возвращает значение контракта.

Returns: Значение контракта.

final Contract contract = () -> "_ -> _";
System.out.println(contract.value());

Возвращает значение чистоты контракта.

Returns: Значение чистоты контракта.

final Contract contract = () -> "_ -> _";
System.out.println(contract.pure());

Аннотация чего-то экспериментального.

API Note: Наличие этой аннотации у чего-то говорит о том, что оно ещё в разработке и может быть переименовано, перемещено или вовсе удалено.

@Experimental
@Contract("_ -> _")
boolean isEmpty(final @NotNull String string) throws NullPointerException {
    return string.length() == 0;
}

Аннотация того, что должно быть локализовано.

API Note: Наличие этой аннотации у чего-то говорит о том, что оно должно быть локализовано.

@Contract("_ -> _")
boolean isEmpty(final @Nls @NotNull String string) throws NullPointerException {
    return string.length() == 0;
}

Аннотация того, что не должно быть локализовано.

API Note: Наличие этой аннотации у чего-то говорит о том, что оно не должно быть локализовано.

@Contract("_ -> _")
boolean isEmpty(final @NotNls @NotNull String string) throws NullPointerException {
    return string.length() == 0;
}

Аннотация ненулевого значения.

API Note: Наличие этой аннотации говорит о том, что значение не должно быть нулевым.

@Contract("_ -> _")
boolean isEmpty(final @NotNull String string) throws NullPointerException {
    return string.length() == 0;
}

Аннотация нулевого значения.

API Note: Наличие этой аннотации говорит о том, что значение должно быть нулевым.

@Contract("_ -> fail")
boolean isEmpty(final @Null String string) throws NullPointerException {
    return string.length() == 0;
}

Аннотация обнуляемого значения.

API Note: Наличие этой аннотации говорит о том, что значение может быть нулевым.

@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
    return string.length() == 0;
}

Аннотация чего-то устаревшего.

API Note: Наличие этой аннотации у чего-то говорит о том, что оно устарело, не рекомендуется к использованию и может быть удалено.

@Obsolete
@Contract("_ -> _")
boolean isEmpty(final @NotNull String string) throws NullPointerException {
    return string.length() == 0;
}

Содержит полный путь до альтернативы, которая хотя бы немного заменяет это.

Returns: Полный путь до альтернативы, которая хотя бы немного заменяет это.

final Obsolete obsolete = () -> "com.bloogefest.annotation.analysis.Experimental";
System.out.println(obsolete.value());