public IObservableSet observe(Realm realm, Object source) {
IObservableSet[] sets = new IObservableSet[properties.length];
for (int i = 0; i < sets.length; i++)
sets[i] = properties[i].observe(realm, source);
IObservableSet unionSet = new UnionSet(sets, elementType);
for (int i = 0; i < sets.length; i++)
PropertyObservableUtil.cascadeDispose(unionSet, sets[i]);
return unionSet;