Object.class.getProtectionDomain() };
protDomain };
    Class generate(ClassLoader loader)    {      byte[] bytecode = new byte[pool.length() + stream.length()];            // More efficient to bypass calling charAt() repetitively.            char[] c = pool.toString().toCharArray();            int i = c.length;            while (--i >= 0)        bytecode[i] = (byte) c[i];            c = stream.toString().toCharArray();            i = c.length;            int j = bytecode.length;            while (i > 0)        bytecode[--j] = (byte) c[--i];            // Patch the constant pool size, which we left at 0 earlier.            int count = poolEntries.size() + 1;      bytecode[8] = (byte) (count >> 8);      bytecode[9] = (byte) count;      try        {                Class vmClassLoader = Class.forName("java.lang.VMClassLoader");          Class[] types = {ClassLoader.class, String.class,                        byte[].class, int.class, int.class,                           ProtectionDomain.class };          Method m = vmClassLoader.getDeclaredMethod("defineClass", types);          // We can bypass the security check of setAccessible(true), since	  // we're in the same package.                m.flag = true;          Object[] args = {loader, qualName, bytecode, new Integer(0),                        new Integer(bytecode.length),                           Object.class.getProtectionDomain() };                Class clazz = (Class) m.invoke(null, args);                // Finally, initialize the m field of the proxy class, before                // returning it.                Field f = clazz.getDeclaredField("m");                f.flag = true;                // we can share the array, because it is not publicized                f.set(null, methods);                return clazz;        }      catch (Exception e)        {                // assert false;          throw (Error) new InternalError("Unexpected: " + e).initCause(e);            }        }