Re[3]: NotNull annotation
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 06.07.07 08:23
Оценка: 12 (1)
Здравствуйте, Tourist, Вы писали:

T>Кто нибудь использовал данную возможность в разработке?

Ну я. Здесь писал ранее об этом: Re[5]: Ищется язык
Автор: rsn81
Дата: 25.06.07


Прочитал у Гетца статью В погоне за качеством кода: Безопасное программирование с помощью АОП, потрогал — понравилось.
Это методика контрактного программирования, основанная на использовании AspectJ-компилятора и библиотеки Oval, определяющей пред- и постусловия проверок контрактов на основе аннотаций. Кроме аннотации @NotNull в Oval море всего вкусного.

К примеру, код бизнесс-класса компании:
/**
 * Компания
 */
@Guarded
public class Company {
    @NotNull
    private String name;

    @NotNull
    private String legalAddress;

    @NotNull
    private String postAddress;

    @NotNull
    private String telephone;

    @NotNull
    @MatchPattern(pattern = "^\\d*$")
    @PossibleLength(lengths = { 0, 10, 12 })
    private String tin; // ИНН физ. и юр. лица различаются по длине

    @NotNull
    @MatchPattern(pattern = "^\\d*$")
    @PossibleLength(lengths = { 0, 9 })
    private String kpp; // КПП строго 9 цифр
    
    @NotNull    
    @Assert(expr = "_value.every{it in '0'..'9'} && (_value.size() == 0 || _value.size() == 9)", lang = "groovy")
    public String _kpp;
     
    //...
}

@NotNull, @MatchPattern (в примере шаблон проверяет строку на налии только цифр) — аннотации в стандартной поставке Oval.
@PossibleLength — определил самостоятельно (нет в Oval такого контракта: возможные длины строки, есть только минимальная-максимальная), заняло это 5 минут: определить аннотацию и переопределить реализацию класса проверки.
@Assert — это также стандартная аннотация Oval, в ней идет проверка с использованием языка Groovy, по сути проверки kpp и _kpp идентичны, но на Groovy выглядит выразительнее, да и написать быстрее.

И это минимум, в Oval море всего интересного.
NotNull annotation
От: bob_marlin Россия www.2ka.mipt.ru/~bobdva
Дата: 08.08.05 06:20
Оценка:
Здесь как-то уже пролетала статья
Adding notnull to the Java Programming Language
Автор(ы): Dmytro Sheyko
Дата: 08.08.2004
В данной статье рассматривается расширение языка программирования Java, которое позволяет существенно сократить количество ошибок, связанных с разыменованием нулевого указателя и обычно проявляющихся в виде неожиданного исключения java.lang.NullPointerException.

про notnull модификатор,
но с появлением java 5 и эту проблему можно решить через annotation,
кто-нибудь это уже сделал ?

простую и банальную

package java.lang;

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({
    ElementType.FIELD,
    ElementType.METHOD,
    ElementType.PARAMETER,
    ElementType.LOCAL_VARIABLE
})
public @interface NotNull {}


не хочется, т.к. нет реально проверки (если есть, то поправте — я не вижу) на уровне выполнения
(т.е хочется, чтобы


public void setSmth(@NotNull Object smth){
...
}


выплюнул ошибку, при попытке проставить ему null)
Re: NotNull annotation
От: ykk Украина  
Дата: 08.08.05 06:38
Оценка:
Здравствуйте, bob_marlin, Вы писали:

В Intellij IDEA 5.0 добавили "@Nullable/@NotNull annotations and inspections" http://www.jetbrains.com/idea/features/newfeatures.html#nullable
Re: NotNull annotation
От: all-x Россия http://treedl.sf.net
Дата: 08.08.05 06:48
Оценка:
Здравствуйте, bob_marlin, Вы писали:

_>Здесь как-то уже пролетала статья

_>Adding notnull to the Java Programming Language
Автор(ы): Dmytro Sheyko
Дата: 08.08.2004
В данной статье рассматривается расширение языка программирования Java, которое позволяет существенно сократить количество ошибок, связанных с разыменованием нулевого указателя и обычно проявляющихся в виде неожиданного исключения java.lang.NullPointerException.

_>про notnull модификатор,

Вот ещё ссылка по теме от классика — Bertrand Meyer: http://se.ethz.ch/~meyer/publications/lncs/attached.pdf

_>но с появлением java 5 и эту проблему можно решить через annotation,

_>кто-нибудь это уже сделал ?

_>простую и банальную


_>
_>package java.lang;

_>import java.lang.annotation.*;

_>@Documented
_>@Retention(RetentionPolicy.RUNTIME)
_>@Target({
_>    ElementType.FIELD,
_>    ElementType.METHOD,
_>    ElementType.PARAMETER,
_>    ElementType.LOCAL_VARIABLE
_>})
_>public @interface NotNull {}
_>


_>не хочется, т.к. нет реально проверки (если есть, то поправте — я не вижу) на уровне выполнения

_>(т.е хочется, чтобы

_>

_>public void setSmth(@NotNull Object smth){
_>...
_>}

_>


_>выплюнул ошибку, при попытке проставить ему null)


По-моему, это не правильно. Цель в том, чтобы ловить подобные ошибки на этапе компиляции, а NPE при выполнении получить всегда успеем
Re[2]: NotNull annotation
От: bob_marlin Россия www.2ka.mipt.ru/~bobdva
Дата: 08.08.05 06:50
Оценка:
Здравствуйте, ykk, Вы писали:

ykk>Здравствуйте, bob_marlin, Вы писали:


ykk>В Intellij IDEA 5.0 добавили "@Nullable/@NotNull annotations and inspections" http://www.jetbrains.com/idea/features/newfeatures.html#nullable


я знаю,
как Вы понимаете, это только при использовании idea-компилятора, что не есть универсально
хочется именно source этого annotation'а, чтобы использовать и в других местах, и не тащить ради этого весь idea-хвост
Re[3]: NotNull annotation
От: all-x Россия http://treedl.sf.net
Дата: 08.08.05 06:53
Оценка:
Здравствуйте, bob_marlin, Вы писали:

_>Здравствуйте, ykk, Вы писали:


ykk>>Здравствуйте, bob_marlin, Вы писали:


ykk>>В Intellij IDEA 5.0 добавили "@Nullable/@NotNull annotations and inspections" http://www.jetbrains.com/idea/features/newfeatures.html#nullable


_>я знаю,

_>как Вы понимаете, это только при использовании idea-компилятора, что не есть универсально
_>хочется именно source этого annotation'а, чтобы использовать и в других местах, и не тащить ради этого весь idea-хвост

А нет у него никакого source. Это делается с помощью "IntelliJ IDEA's on-the-fly code inspections"

annotation — это декларативная информация, выполняться там ничего не может.
Re[2]: NotNull annotation
От: bob_marlin Россия www.2ka.mipt.ru/~bobdva
Дата: 08.08.05 06:57
Оценка:
Здравствуйте, all-x, Вы писали:

_>>выплюнул ошибку, при попытке проставить ему null)


AX>По-моему, это не правильно. Цель в том, чтобы ловить подобные ошибки на этапе компиляции, а NPE при выполнении получить всегда успеем


ну не всегда, допустим у нас есть bean, так вот — не хочется, чтобы ему кто-то делал setSmth(null), где setSmth такой:

public voic setSmth(Object smth){
 _smth = smth;
}


ибо потом NPE мы уже выловим в другом месте, а причиной послучил вызов этого setter'а с null'ом. И тем более не всегда на этапе компиляции это возможно. Но в то же время не хочется в каждом методе писать
assert smth != null : "Non null expected";
Re[3]: NotNull annotation
От: all-x Россия http://treedl.sf.net
Дата: 08.08.05 07:07
Оценка:
Здравствуйте, bob_marlin, Вы писали:

_>Здравствуйте, all-x, Вы писали:


_>>>выплюнул ошибку, при попытке проставить ему null)


AX>>По-моему, это не правильно. Цель в том, чтобы ловить подобные ошибки на этапе компиляции, а NPE при выполнении получить всегда успеем


_>ну не всегда, допустим у нас есть bean, так вот — не хочется, чтобы ему кто-то делал setSmth(null), где setSmth такой:


_>
_>public voic setSmth(Object smth){
_> _smth = smth;
_>}
_>


_>ибо потом NPE мы уже выловим в другом месте, а причиной послучил вызов этого setter'а с null'ом.


Это можно поймать при компиляции вызова setter'a.

_>И тем более не всегда на этапе компиляции это возможно. Но в то же время не хочется в каждом методе писать

_>
_>assert smth != null : "Non null expected";
_>


Согласен. Кстати, можно попробовать решить проблему по-другому — вставить эти проверки с помощью аспектов.
Re[2]: NotNull annotation
От: Tourist Россия  
Дата: 06.07.07 06:26
Оценка:
Здравствуйте, ykk, Вы писали:

ykk>Здравствуйте, bob_marlin, Вы писали:


ykk>В Intellij IDEA 5.0 добавили "@Nullable/@NotNull annotations and inspections" http://www.jetbrains.com/idea/features/newfeatures.html#nullable


Хочеться поднять тему. Кто нибудь использовал данную возможность в разработке?
Это реально помогало работе, повышению качества кода? Появились ли какие наработки, чтоб это можно было видеть не только в Idea, но и проверять во время сборки проекта с помощью ant?
Re[4]: NotNull annotation
От: Blazkowicz Россия  
Дата: 06.07.07 08:33
Оценка:
Здравствуйте, rsn81, Вы писали:

T>>Кто нибудь использовал данную возможность в разработке?

R> Ну я. Здесь писал ранее об этом: Re[5]: Ищется язык
Автор: rsn81
Дата: 25.06.07

R>Прочитал у Гетца статью В погоне за качеством кода: Безопасное программирование с помощью АОП, потрогал — понравилось.

Oval же в рантайме работает? А хотелось бы чтобы на компиляции проверялось.
Re[5]: NotNull annotation
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 06.07.07 08:50
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Oval же в рантайме работает? А хотелось бы чтобы на компиляции проверялось.

А IDEA компиляцией проверяет?
Re[6]: NotNull annotation
От: Blazkowicz Россия  
Дата: 06.07.07 08:56
Оценка:
Здравствуйте, rsn81, Вы писали:

B>>Oval же в рантайме работает? А хотелось бы чтобы на компиляции проверялось.

R>А IDEA компиляцией проверяет?

Тоже нет.
Re: NotNull annotation
От: mkizub Литва http://symade.tigris.org
Дата: 06.07.07 09:12
Оценка:
Здравствуйте, bob_marlin, Вы писали:

_>(т.е хочется, чтобы


_>

_>public void setSmth(@NotNull Object smth){
_>...
_>}

_>


_>выплюнул ошибку, при попытке проставить ему null)


Google JSR 305 и JSR 308
А так-же Java Modeling Language (но это на комментариях, а не аннотациях).
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.