moxy-community / Moxy

Moxy is MVP library for Android with incremental annotation processor and ktx features
MIT License
324 stars 33 forks source link

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

Open RankoR opened 4 years ago

RankoR commented 4 years ago

После обновления до 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/

alaershov commented 4 years ago

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

alaershov commented 4 years ago

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

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

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

youndie commented 3 years ago

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

alaershov commented 3 years ago

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

youndie commented 3 years ago

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

Areyana commented 1 year ago

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

zakrodionov commented 1 year ago

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

senneco commented 1 year ago

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