// returns a list of var mappings static L> xsearch(L vars, Class c, O... params) { for (ISearchVar v : vars) v.set(null); // reset vars params = expandParams(c, params); new L> l; for (A concept : list(c)) if (searchConcept_checkParams(concept, params)) { // Success. Record var mapping l.add(xsearch_makeVarMapping(vars)); // Reset vars for (ISearchVar v : vars) v.set(null); // reset vars } ret l; } static Map xsearch_makeVarMapping(L vars) { new HashMap map; for (ISearchVar v : vars) { O o = v.get(); if (o != null) map.put(v, o); } ret map; }