Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Paul Nazarov
    @thelamon
    ну я еще до коры не добрался, там овердофига вкладок в хроме )
    ps. Congrats с JB
    Tagir Valeev
    @amaembo
    Проанализировать штуки типа redundant null check (value is known to be non-null | value is known to be null) - это легко и там ложных сработок почти не бывает
    А вот possible null dereference - это по факту уличная магия
    Потому что ты можешь знать из каких-то соображений, что это невозможно, а анализатор знать не будет
    Вот пример:
    String s = null;
    for(String s2 : list) {
      if(s2.startsWith("something")) s = s2;
    }
    return s.trim();
    Ругаться на s.trim() или нет?
    Возможно, по логике программы известно, что в списке всегда есть строка, которая начинается с something
    Установить этот факт статически нереально
    Paul Nazarov
    @thelamon
    ну это возможно в обе стороны, тут ничего не скажешь
    достоверно ничего неизвестно
    Tagir Valeev
    @amaembo
    Ну вот и вопрос: показывать тут варнинг, терпя возможные false-positive, или не показывать, терпя возможные false-negative =)
    Сейчас ещё пытаюсь побороть такие ситуации типа
    boolean invalid = s == null || blahblah || somethingelse;
    if(invalid) {
      s = "";
    }
    return s.trim();
    Вроде конкретно этот пример даже должен не выдавать сработок ложных
    То есть смысл нулл-анализа (если пока не брать в расчёт аннотации) - если мы где-то проверяли переменную на null, либо когда-то присваивали в неё null, то она nullable
    И тогда теоретически дереференс без проверки опасен
    Но реально есть куча исключений, которые все статически не отследишь
    Ivan Sopov
    @isopov
    null-анализ без аннотаций нормально, если будет в очень ограниченном виде. Кому хочется полноценного - пусть размечает все филды и параметры аннотациями - у нас всё размечено.
    причем, у нас null-анализ немножко допиленный и для наших допилов аннотации сделаны RetentionPolicy.RUNTIME
    у обычных джетбрейнсовских RetentionPolicy.CLASS, так что тоже можно использовать, насколько я понимаю
    Tagir Valeev
    @amaembo
    Можно, да. Аннотации я, конечно, со временем поддержу
    Kirill Tolkachev
    @lavcraft
    Просканил проектик со стремным java api для Telegram - https://github.com/rubenlagus/TelegramBots
    Unconditional BotSession.access$700() call in BotSession.HandlerThread.run().
    Я так понимаю имеется ввиду https://github.com/rubenlagus/TelegramBots/blob/15ff562dac1342d9765c9d080c811f4b39a320df/src/main/java/org/telegram/telegrambots/updatesreceivers/BotSession.java#L89 ?
    как разшифровывать access$700 )
    Tagir Valeev
    @amaembo
    Это аксессор-метод к приватному методу вложенного класса
    Kirill Tolkachev
    @lavcraft
    а ок
    Tagir Valeev
    @amaembo
    Вообще странное сообщение
    Надо разобраться
    А целиком можешь скопировать, что там в отчёте?
    Kirill Tolkachev
    @lavcraft
    хочешь html скину просто?
    Tagir Valeev
    @amaembo
    Хм... ну давай
    А, я понял
    Kirill Tolkachev
    @lavcraft
    лови
    Tagir Valeev
    @amaembo
    Закоммитил фикс, можешь попробовать сейчас
    Kirill Tolkachev
    @lavcraft
    версию поднял плагина?
    или нужно собирать
    Tagir Valeev
    @amaembo
    Не, надо собирать
    Ну если неохота, не собирай :-)
    Kirill Tolkachev
    @lavcraft
    тогда позже..
    Tagir Valeev
    @amaembo
    Ща юниттест попробую нафигачить...
    Kirill Tolkachev
    @lavcraft
    А в чем косяк был:
    ?
    хотя чо я
    посмотреть же можно)
    Tagir Valeev
    @amaembo
    Пока неясно
    Что-то у меня не воспроизводится пока проблема
    Kirill Tolkachev
    @lavcraft
    хм
    ну ок