sO safeUnstructureAllowingClasses(S s, Class... allowedClasses) { final Set allowedClassesSet = mapToSet className(allowedClasses); O classFinder = func(S name) { if (!allowedClassesSet.contains(name)) fail("Class not allowed to unstructure: " + name); ret classForName(name); }; ret unstructure(s, false, classFinder); }