Moxy icon indicating copy to clipboard operation
Moxy copied to clipboard

Генерируется несколько ViewState в многомодульном проекте (версии 2.1.1 и 2.1.2)

Open RankoR opened this issue 4 years ago • 8 comments

После обновления до 2.1.2 билд многомодульного проекта фейлится с ошибкой:

Type moxy.MvpView$$State is defined multiple times

На 2.1.1 то же самое, а вот 2.0.2 билдится нормально.

Полный лог билда: https://travis-ci.com/github/RankoR/android-smart-rate/jobs/341635309

Проект, на котором воспроизводил: https://github.com/RankoR/android-smart-rate/

RankoR avatar May 30 '20 02:05 RankoR

Да, это известная проблема, фикс уже в процессе. С вашей стороны это вызвано тем, что BasePresenter у вас определён как в библиотечном модуле, так и в app модуле. В качестве временного решения вы можете сделать в модуле MyBaseView: MvpView, и указать его в BasePresenter. Но фикс так себе, и проблему, конечно, нужно решить со стороны библиотеки. Спасибо за подробный репорт!

alaershov avatar May 30 '20 05:05 alaershov

В версии 2.1.1 аннотация @InjectViewState стала наследуемой, и была добавлена в MvpPresenter, чтобы убрать необходимость указывать её вручную на каждом презентере. Эта аннотация является точкой входа для процессора аннотаций, который генерирует ViewState. Для каждого презентера, унаследованного от MvpPresenter, будет сгенерирован ViewState для того интерфейса View, который указан в generic-параметре этого презентера.

Проблема: если в двух разных модулях приложения есть BasePresenter<MvpView>, процессор аннотаций сгерирует moxy.MvpView$$State в обоих модулях, и приложение не скомпилируется из-за дублирования класса.

Предлагаемое решение: Не генерировать ViewState для Presenter, если:

  • этот Presenter - абстрактный класс
  • ИЛИ этот Presetner имеет в generic-параметре не конкретный интерфейс <SomeView>, а <T extends SomeView>

alaershov avatar Jun 28 '20 14:06 alaershov

Приветствую А в случае, если один модуль содержит абстрактный BaseDocsPresenter<DocsView>, а в нескольких других модулях описаны его наследники, то есть какая-то возможность избежать множественной генерации ViewState?

youndie avatar Jan 24 '21 18:01 youndie

@youndie у наследников генерируются отдельные ViewState для DocsView, и в итоге образуется коллизия?

alaershov avatar Jan 25 '21 04:01 alaershov

да, на каждый модуль генерируется свой ViewState

youndie avatar Jan 25 '21 05:01 youndie

up, проблема от @alaershov все еще существует

Areyana avatar Sep 22 '22 11:09 Areyana

Несколько часов пытался понять в чем дело, пока не нашел этот тред( Есть какие-нибудь новости по фиксу?

zakrodionov avatar Dec 16 '22 13:12 zakrodionov

Хмм, у нас в многомодульном проекте всё было шоколадно =( Может у вас есть какое-то наследование презентеров сквозь модули? Или вью стейтов. Сложно предположить, что за кейс

senneco avatar Dec 16 '22 20:12 senneco