Что не так
Подсказка сигнатуры показывает только первый тип возвращаемого значения, даже когда их
несколько. SignatureDescriptor хранит типы набором (TypeSet), а
SignatureInfoProvider.methodToDescriptor(...) берёт из него findFirst() и подписывает
сигнатуру одним-единственным TypeRef.
Для функции, которая в одной ветке возвращает Массив, а в другой Число, пользователь
увидит только один из них — какой именно, зависит от порядка в наборе.
Почему это стало заметно
Раньше объединения в возвращаемом значении встречались редко: тип брался из документирующего
комментария, а там обычно пишут один тип. С расчётом типа возврата по телу метода
(#4402) объединения стали обычным делом — по числу достижимых точек выхода.
Что сделать
Либо собирать подпись из всех типов набора, либо, если их несколько, не показывать
конкретный тип вовсе. Первое информативнее, второе честнее по месту в подсказке — решать по
тому, как это выглядит на длинных объединениях.
Как проверить
Подсказка сигнатуры для функции с разными типами в ветках возврата: показаны все
альтернативы (или ни одной, если выбран второй вариант), а не первая попавшаяся.
Что не так
Подсказка сигнатуры показывает только первый тип возвращаемого значения, даже когда их
несколько.
SignatureDescriptorхранит типы набором (TypeSet), аSignatureInfoProvider.methodToDescriptor(...)берёт из негоfindFirst()и подписываетсигнатуру одним-единственным
TypeRef.Для функции, которая в одной ветке возвращает
Массив, а в другойЧисло, пользовательувидит только один из них — какой именно, зависит от порядка в наборе.
Почему это стало заметно
Раньше объединения в возвращаемом значении встречались редко: тип брался из документирующего
комментария, а там обычно пишут один тип. С расчётом типа возврата по телу метода
(#4402) объединения стали обычным делом — по числу достижимых точек выхода.
Что сделать
Либо собирать подпись из всех типов набора, либо, если их несколько, не показывать
конкретный тип вовсе. Первое информативнее, второе честнее по месту в подсказке — решать по
тому, как это выглядит на длинных объединениях.
Как проверить
Подсказка сигнатуры для функции с разными типами в ветках возврата: показаны все
альтернативы (или ни одной, если выбран второй вариант), а не первая попавшаяся.