#summary Conditional deferred-binding properties = Introduction = Historically, one of the limiting factors in using GWT's deferred binding system is the very real possibility of "permutation explosion." The compiler will compute the cross-product of every possible combination of binding property values, even in those cases where certain combinations are not useful. To allow the developer to specify a subset of the total cross product, the `` module directive has been extended to allow it to accept `` conditions and the standard set of combinators ``, ``, and ``. == Example 1: Macro-like properties == Imagine that you have an application targeted at five browsers and localized to forty languages and would like to enable different features for a certain subset of your users. This could be written as: {{{ }}} This isn't so bad, unless you want to add additional deferred-bindings based on the same or similar critera, because you would need to duplicate the conditions across every `` or `` rule. Instead, the complex condition can be expressed as another deferred-binding property: {{{ }}} This `alternateFeatures` property is called *derived* because its value can be determined solely from other deferred-binding properties. There is never a need to execute a property provider for a derived property. Moreover, derived properties do not expand the permutation matrix and have no deployment cost. == Example 2: Avoiding permutation explosion == Suppose that you are targeting conventional desktop and WebKit-based mobile devices and need some tweaks here and there to account for device-specific functions. {{{ }}} Instead of having `[user.agent] * [mobile.user.agent] = 6 * 3 = 18` permutations, this will produce `[user.agent] + [mobile.user.agent] = 9` permutations. Add forty `locale` values, and the compare `40 * 6 * 3 = 720` to `40 * (6 + 3) = 360` permutations.