Меня интересуют синтетические расширения Kotlin для Android, и я подумал, можем ли мы сделать то же самое для пользовательских файлов, таких как необработанные XML-файлы, которые мы храним в проекте. Например, рассмотрим синтетические представления в Kotlin.
import kotlinx.android.synthetic.main.fragment_profile_management.*
textview_shop_name.text = merchant.establishmentName
Генерируемый код выглядит следующим образом:
TextView textView = (TextView) _$_findCachedViewById(com.goharsha.testapp.R.id.textview_shop_name);
Intrinsics.checkExpressionValueIsNotNull(textView, "textview_shop_name");
Merchant merchant3 = this.merchant;
if (merchant3 == null) {
Intrinsics.throwUninitializedPropertyAccessException("merchant");
}
textView.setText(merchant3.getEstablishmentName());
И метод _$_findCachedViewById
также создается в том же классе следующим образом:
private HashMap _$_findViewCache;
public View _$_findCachedViewById(int i) {
if (this._$_findViewCache == null) {
this._$_findViewCache = new HashMap();
}
View view = (View) this._$_findViewCache.get(Integer.valueOf(i));
if (view != null) {
return view;
}
View view2 = getView();
if (view2 == null) {
return null;
}
View findViewById = view2.findViewById(i);
this._$_findViewCache.put(Integer.valueOf(i), findViewById);
return findViewById;
}
Поскольку это специфично для Android, я предположил, что это можно сделать в Kotlin, и, возможно, я могу расширить это для пользовательских необработанных XML-файлов, таких как, например, файлы конфигурации, и может быть интересно преобразовать их в объект.
Однако я не мог найти, как это можно сделать. Я знал о функциях расширения в Kotlin, но здесь на основе импорта синтетически генерируется целый файл. Существует также эта магия, что этот импорт Kotlin не был найден, когда я декомпилировал приложение.
Я также пытался просмотреть библиотеки core-ktx и view-ktx, но пока безуспешно. Любая идея, как это можно сделать?