It is common that script plugins will need to be applied in a specific order. It would be nice if these scripts gave nice declarative error messages if this was violated. Here is a draft API: ```java /** * Throws an error if `('base/java')` hasn't already been applied. * (Must be called only from within a script plugin.) */ void 干.requires('base/java') { ... } /** * Throws an error if `('base/scala')` has been applied, * or if it is applied in the future. * (Must be called only from within a script plugin.) */ void 干.mutuallyExclusiveWith('base/scala') { ... } /** * If `base/java` has already been applied, or is never applied, then this is fine. * But if `base/java` is ever applied in the future, then there will be an error, * because this plugin must run after 'base/java'. * (Must be called only from within a script plugin.) */ void 干.mustRunAfter('base/java') { ... } void 干.mustRunBefore('base/java') { ... } ```