AndroidでDataBinding周りミスるとめっちゃエラー出て辛いですね。辛いのでDataBindingのエラーを抽出するスクリプトを書きました。スクリプトはかなり雑なので適宜いい感じにしてください。
extract_data_binding_error.rb
#! /bin/sh exec ruby -S -x "$0" "$@" #! ruby state = 0 while str = STDIN.gets break if str.chomp == "exit" case state when 0 state = 1 if str.match(/.*Found data binding errors.*/) when 1 state = 2 if str.match(/.*e: .*/) next if state == 2 print str end end
gradleのコマンドに2>&1
を足してextract_data_binding_error.rb
に流せばok
$ ./gradlew assembleDebug 2>&1 | ./extract_data_binding_error.rb Identifiers must have user defined types from the XML file. user is missing it file:///hoge/foo/git/android-app/app/src/main/res/layout/list_item_comment.xml Line:60 at android.databinding.tool.processing.Scope.assertNoError(Scope.java:110) at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:89) at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794) at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705) at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035) at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068) at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:73) ... 50 more
こんな感じ。やったね