summaryrefslogtreecommitdiff
path: root/compiler/src/main/kotlin/android/databinding
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2017-03-09 08:00:31 -0800
committerGeorge Mount <mount@google.com>2017-03-10 16:10:39 -0800
commit4d82ae5d3f051efa9292e05a9ee849a6782ddd2c (patch)
tree41dca572a522ee609a65a1eb94ec1af3621adef2 /compiler/src/main/kotlin/android/databinding
parent31bc7e97cdbda4d1b8bd07a959ff6b6c613d7f4f (diff)
downloaddata-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.kt9
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)};")