Drop explicit stack size: (a) size increase dates back to period of less intensive thread use (where current thread might become quite deep); (b) two most stack-hungry subsystems are generator and typesystem, and especially latter being invoked from former. with recent generator refactorings, generator is much less stack-demanding (at expense of increased heap use), and chances to get into stack overflow is diminishing. (c) it's better to see stack issues right away, during development, than to increase stack size and hope for best.
Non-reflective condition check for if macro
Drop PropertyMacro abstraction: with per-root QueryExecutionContext, caching of PropertyMacro doesn't pay off - cached PM notifies incorrect dependency listener (leading to locks and mysterious OOME for parallel incremental generation). Try alternative approach, where QEC/QueryExecutor become a pure indirection layer (as it's now for rules).
Do not cache QueryExecutionContext along with MacroResolver as it leads to incorrect dependency listener being notified about reference query dependencies.