Skip to content

Подсказка сигнатуры показывает лишь первый тип возвращаемого значения из объединения #4427

Description

@nixel2007

Что не так

Подсказка сигнатуры показывает только первый тип возвращаемого значения, даже когда их
несколько. SignatureDescriptor хранит типы набором (TypeSet), а
SignatureInfoProvider.methodToDescriptor(...) берёт из него findFirst() и подписывает
сигнатуру одним-единственным TypeRef.

Для функции, которая в одной ветке возвращает Массив, а в другой Число, пользователь
увидит только один из них — какой именно, зависит от порядка в наборе.

Почему это стало заметно

Раньше объединения в возвращаемом значении встречались редко: тип брался из документирующего
комментария, а там обычно пишут один тип. С расчётом типа возврата по телу метода
(#4402) объединения стали обычным делом — по числу достижимых точек выхода.

Что сделать

Либо собирать подпись из всех типов набора, либо, если их несколько, не показывать
конкретный тип вовсе. Первое информативнее, второе честнее по месту в подсказке — решать по
тому, как это выглядит на длинных объединениях.

Как проверить

Подсказка сигнатуры для функции с разными типами в ветках возврата: показаны все
альтернативы (или ни одной, если выбран второй вариант), а не первая попавшаяся.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions