¿Cómo deshago los cambios de la meta clase después de ejecutar GroovyShell?

Por ejemplo, si ejecuto un script Groovy, que modifica la meta clase String, agregando un método foo ()

GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");

cuando creo un nuevo shell y lo ejecuto, los cambios siguen ahí

GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");

¿Hay una manera de deshacer todos los cambios de la meta clase después de ejecutar GroovyShell? Lo intenté

shell1.getClassLoader().clearCache();

y

shell1.resetLoadedClasses();

Pero eso no hizo un cambio.

Respuestas a la pregunta(3)

Su respuesta a la pregunta