private QueryStateMachine( String query, Session session, URI self, Optional<ResourceGroupId> resourceGroup, TransactionManager transactionManager, Executor executor, Ticker ticker, Metadata metadata, WarningCollector warningCollector) { this.query = requireNonNull(query, "query is null"); this.session = requireNonNull(session, "session is null"); this.queryId = session.getQueryId(); this.self = requireNonNull(self, "self is null"); this.resourceGroup = requireNonNull(resourceGroup, "resourceGroup is null"); this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); this.queryStateTimer = new QueryStateTimer(ticker); this.metadata = requireNonNull(metadata, "metadata is null"); this.queryState = new StateMachine<>("query " + query, executor, QUEUED, TERMINAL_QUERY_STATES); this.finalQueryInfo = new StateMachine<>("finalQueryInfo-" + queryId, executor, Optional.empty()); this.outputManager = new QueryOutputManager(executor); this.warningCollector = requireNonNull(warningCollector, "warningCollector is null"); }