diff options
author | George Mount <mount@google.com> | 2017-03-09 08:00:31 -0800 |
---|---|---|
committer | George Mount <mount@google.com> | 2017-03-10 16:10:39 -0800 |
commit | 4d82ae5d3f051efa9292e05a9ee849a6782ddd2c (patch) | |
tree | 41dca572a522ee609a65a1eb94ec1af3621adef2 /compiler/src/main/kotlin/android/databinding | |
parent | 31bc7e97cdbda4d1b8bd07a959ff6b6c613d7f4f (diff) | |
download | data-binding-4d82ae5d3f051efa9292e05a9ee849a6782ddd2c.tar.gz |
Allow Observables to Depend on observable fields
Bug 35950493
Adds the ability for Bindable dependencies on ObservableFields.
Test: ran TestApp tests
Change-Id: I3484dcbc18ff141b2b8ee1a4a3daa864851e701b
Diffstat (limited to 'compiler/src/main/kotlin/android/databinding')
-rw-r--r-- | compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt index 0bac65d0..755ac9d0 100644 --- a/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt +++ b/compiler/src/main/kotlin/android/databinding/tool/writer/LayoutBinderWriter.kt @@ -768,7 +768,14 @@ class LayoutBinderWriter(val layoutBinder : LayoutBinder) { } block("case ${"".br()}:") { - val flagSet = it.invalidateFlagSet + val flagSet : FlagSet + if (it is FieldAccessExpr && it.resolvedType.isObservableField) { + flagSet = it.bindableDependents.map { expr -> expr.invalidateFlagSet } + .foldRight(it.invalidateFlagSet) { l, r -> l.or(r) } + } else { + flagSet = it.invalidateFlagSet + } + block("synchronized(this)") { mDirtyFlags.mapOr(flagSet) { suffix, index -> tab("${mDirtyFlags.localName}$suffix |= ${flagSet.localValue(index)};") |