Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
RankoR opened this issue May 30, 2020 · 8 comments
Labels
bug Something isn't working

Comments

@RankoR
Copy link

RankoR commented May 30, 2020

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

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

@alaershov alaershov added the bug Something isn't working label May 30, 2020
@alaershov alaershov changed the title Версии 2.1.1 и 2.1.2 ломают релизный билд с R8 Генерируется несколько ViewState в многомодульном проекте (версии 2.1.1 и 2.1.2) Jun 28, 2020
@alaershov
Copy link
Member

В версии 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 added a commit that referenced this issue Aug 4, 2020
It should not generate ViewState, see #101
@youndie
Copy link

youndie commented Jan 24, 2021

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

@alaershov
Copy link
Member

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

@youndie
Copy link

youndie commented Jan 25, 2021

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

@Areyana
Copy link

Areyana commented Sep 22, 2022

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

@zakrodionov
Copy link

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

@senneco
Copy link
Collaborator

senneco commented Dec 16, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants