Skip to content

3.0.0

Latest
Compare
Choose a tag to compare
@Bloogefest Bloogefest released this 15 Nov 18:50
· 9 commits to master since this release

Этот выпуск несовместим с предыдущим — все аннотации были переработаны, а некоторые даже удалены. Например, аннотация 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();

}

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

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: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.

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

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

}

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

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

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

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

}

Изменено:

Аннотации:

Полностью переписана документация, а основная её часть перемещена в веб-документацию.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана сигнатура.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана сигнатура.

Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана сигнатура.

Удалено:

Аннотации:

Другое: