[Rider] Null analysis
От: Ночной Смотрящий Россия  
Дата: 21.09.20 12:21
Оценка:
Ложное срабатывание:
http://prntscr.com/ul3on7
Компайлер шарпа на такое не ругается
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: [Rider] Null analysis
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 23.09.20 20:40
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Ложное срабатывание:

НС>http://prntscr.com/ul3on7
НС>Компайлер шарпа на такое не ругается

Я правильно понимаю, что вот в этом примере никаких предупреждений быть не долджно?

public const string Default = "";

        public static void FooBar(string? sectionName = Default)
        {
            baz(sectionName);

            static int baz(string s) => s.Length;
        }


Здесь должно быть предупреждение и VS 2019 16.7 его выдает, ведь sectionName параметр легко может быть null, если туда передан null насильно: `FooBar(null)`.

Если бы код выглдядел бы так: sectionName ??= Default; вот тогда предупреждения не будет, ни от R#, ни от компилятора.
Re: [Rider] Null analysis
От: andrey.dyatlov  
Дата: 25.09.20 13:42
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Ложное срабатывание:

НС>http://prntscr.com/ul3on7
НС>Компайлер шарпа на такое не ругается

Дефолтное значение будет использоваться только если никакого аргумента не передали, поэтому оно не влияет на анализ ни в Rider ни в компиляторе. Значение имеет только тип параметра, который в вашем примере допускает передачу `null`. Т.е., например, следующий код будет создавать компиляторный ворнинг потому что `NullReferenceException` в нем действительно случится:
    #nullable enable
    public static void Main() => M(null);
    static void M(string? s = "notnull") => s.ToString(); // warning here


Можно проверить здесь

Судя по скриншоту для метода `ConfigureSelectionAndValidate` не включены наллабл референс типы и компилятор не ругается именно поэтому.
В этом случае Rider может полагаться либо на JetBrains.Annotations атрибуты для этого метода либо на выбранный режим анализа.

Вы не могли бы показать сигнатуру метода `ConfigureSelectionAndValidate`, есть ли в нем какие-либо атрибуты? И какой выбран режим анализа (Optimistic или Pessimistic) на странице Editor — Inspection Settings?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.