/** * Creates and returns a deep copy of this object. * * @return a clone of this instance. */ public Object clone() { try { final Modules ret = (Modules) super.clone(); final Module[] mods = this.getModules(); final Module[] cloned = new Module[ mods.length ]; for ( int i = mods.length - 1; i >= 0; i-- ) { cloned[i] = (Module) mods[i].clone(); } ret.setModules( cloned ); return ret; } catch ( final CloneNotSupportedException e ) { throw new AssertionError( e ); } }