Skip to content

Instantly share code, notes, and snippets.

@atsushieno
Created April 14, 2017 12:37
Show Gist options
  • Select an option

  • Save atsushieno/b5a25e4e8d147155658af0bd980aea32 to your computer and use it in GitHub Desktop.

Select an option

Save atsushieno/b5a25e4e8d147155658af0bd980aea32 to your computer and use it in GitHub Desktop.
AndroidFCR #5 (data-binding)

data-binding

ソースの在り処

https://android.googlesource.com/platform/frameworks/data-binding/+/studio-master-dev/compiler/src/main/java/android/databinding/

  • studio-master-devブランチ重要

data bindingで使われる式構造

compilerCommon/BindingExpression.g4

  • ANTLR4らしい (build.gradleに依存関係の記述あり)
  • syntax visualizerが.g4をサポートしていない(つらみ)

android.databinding.tool.ExpressionParserが利用

BindingExpressionParser.BindingSyntaxContext root = parser.bindingSyntax();

return root.accept(visitor); // returns android.databinding.tool.expr.Expr

ExpressionParserはandroid.databinding.tool.LayoutBinderandroid.databinding.tool.util.XmlEditorが利用

XmlEditorは、属性値中のbinding expression(@={...}あるいは@{...})が登場したら、その内容をBindingExpressionParserで解析する(defaultReplacement(XMLParser.AttributeContext attr)内部)

LayoutBinderはResourceBundle.fromXML(InputStream)でロードされたLayoutFileBundleから(これをコンストラクター引数として)生成される。

ひとつのプロジェクト中のバインディング処理の対象は、ひとつのResourceBundleにまとめられる。

ResourceBundleは、android.databinding.tool.LayoutXmlProcessorの中で生成・保持される。また、android.databinding.annotationprocessor.ProcessExpressions(APT実装の一部)の中でも生成・保持される。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment