パルカワ2

最近はFlutterをやっています

EpoxyとDataBindingをやろうとしたらTypeCastExceptionが起きた

エラー: Epoxy Processor Exception:  Caused by TypeCastException: null cannot be cast to non-null type javax.lang.model.element.TypeElement

Stacktrace:
com.airbnb.epoxy.DataBindingModelInfo.<init>(DataBindingModelInfo.kt:25)
com.airbnb.epoxy.DataBindingModelInfo.<init>(DataBindingModelInfo.kt:14)
com.airbnb.epoxy.DataBindingProcessor.process(DataBindingProcessor.kt:33)
com.airbnb.epoxy.EpoxyProcessor.processRound(EpoxyProcessor.java:189)
com.airbnb.epoxy.EpoxyProcessor.process(EpoxyProcessor.java:165)

こういうエラーが出る。このあたりでエラーになってる。

https://github.com/airbnb/epoxy/blob/a9aee295ac7299af849e8d30b598d348d8ed5fc5/epoxy-processor/src/main/java/com/airbnb/epoxy/DataBindingModelInfo.kt#L25

EPOXY_DATA_BINDING_MODELを見るとDataBindingEpoxyModelというクラスのTypeElementを取ろうとしてるメソッドがnullを返してるらしい。

https://github.com/airbnb/epoxy/blob/12e27f98cc4e93f7b18a17b6fdb527ec1f6b4179/epoxy-processor/src/main/java/com/airbnb/epoxy/ClassNames.java#L38-L38

DataBindingEpoxyModelはどこにあるのか調べたら、epoxy-databinding以下にある。アレ!実はepoxyを指定するだけではダメなのでは?!と思って調べたらそうだった。

Data Binding Support · airbnb/epoxy Wiki · GitHub

    def epoxy_version = "2.7.3"
    compile "com.airbnb.android:epoxy:${epoxy_version}"
    compile "com.airbnb.android:epoxy-databinding:${epoxy_version}"
    annotationProcessor "com.airbnb.android:epoxy-processor:${epoxy_version}"

これで動いた。