Problems problems,
Map<String, Object> variables ) {
CheckArg.isNotNull(typeSystem, "typeSystem");
CheckArg.isNotNull(schemata, "schemata");
this.typeSystem = typeSystem;
this.hints = hints != null ? hints : new PlanHints();
this.schemata = schemata;
this.problems = problems != null ? problems : new SimpleProblems();
this.variables = variables != null ? Collections.<String, Object>unmodifiableMap(new HashMap<String, Object>(variables)) : Collections.<String, Object>emptyMap();
assert this.typeSystem != null;
assert this.hints != null;