В этой статье расскажу о том, как решал проблемы, с которыми столкнулся в предыдущей части при реализации проекта.
Во-первых, при анализе трансформируемого класса, нужно как-то понять, является ли этот класс наследником Activity
или Fragment
, чтобы с уверенностью сказать, что класс подходит для нашей трансформации.
Во-вторых, в трансформируемом .class
файле для всех полей с аннотацией @State
нужно явно определить тип, чтобы вызвать соответствующий метод у бандла для сохранения/восстановления состояния, а точно определить тип можно лишь проанализировав всех родителей класса и реализуемые ими интерфейсы.
Таким образом, нужно просто иметь возможность анализировать абстрактно синтаксическое дерево трансформируемых файлов.