Java Examples for sun.misc.ProxyGenerator

The following java examples will help you to understand the usage of sun.misc.ProxyGenerator. These source code samples are taken from different open source projects.

Example 1
Project: android-open-project-demo-master  File: ProxyUtils.java View source code
/**
     * Save proxy class to path
     * 
     * @param path path to save proxy class
     * @param proxyClassName name of proxy class
     * @param interfaces interfaces of proxy class
     * @return
     */
public static boolean saveProxyClass(String path, String proxyClassName, Class[] interfaces) {
    if (proxyClassName == null || path == null) {
        return false;
    }
    // get byte of proxy class
    byte[] classFile = ProxyGenerator.generateProxyClass(proxyClassName, interfaces);
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(path);
        out.write(classFile);
        out.flush();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return false;
}
Example 2
Project: demos-master  File: MyClass.java View source code
public static void createProxyClassFile() {
    String name = "ProxyISubject";
    byte[] data = ProxyGenerator.generateProxyClass(name, new Class[] { ISubject.class });
    try {
        FileOutputStream out = new FileOutputStream(name + ".class");
        out.write(data);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Example 3
Project: maxine-mirror-master  File: BootImageGenerator.java View source code
/**
     * Add the current working directory to the class path that will be created when HostedBootClassLoader.classpath() is
     * first called. This is the directory where ProxyGenerator dumps out the class files it generates.
     */
private static void enableProxyClassFileDumping() {
    final String cwd = System.getProperty("user.dir");
    String javaClassPath = System.getProperty("java.class.path");
    System.setProperty("java.class.path", cwd + File.pathSeparatorChar + javaClassPath);
    final File cwdFile = new File(cwd);
    // See sun.misc.ProxyGenerator.saveGeneratedFiles field
    System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
    final Set<File> existingProxyClassFilesAndDirectories = collectProxyClassFilesAndDirectories(cwdFile);
    // create proxy directories
    for (String d : proxyDirs) {
        File proxyDir = new File(cwdFile, d);
        if (!proxyDir.exists()) {
            proxyDir.mkdirs();
            proxyDir.deleteOnExit();
        }
    }
    Runtime.getRuntime().addShutdownHook(new Thread("RemovingProxyClassFilesAndDirectories") {

        @Override
        public void run() {
            System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "false");
            for (File f : collectProxyClassFilesAndDirectories(cwdFile)) {
                if (!existingProxyClassFilesAndDirectories.contains(f)) {
                    f.delete();
                }
            }
        }
    });
}
Example 4
Project: jdk7u-jdk-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {

            public Void run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 5
Project: spring-loaded-master  File: SpringLoadedPreProcessor.java View source code
public void initialize() {
    // When spring loaded is running as an agent, it should not be defining types directly (this setting does not apply to
    // the generated suuport types)
    GlobalConfiguration.directlyDefineTypes = false;
    GlobalConfiguration.fileSystemMonitoring = true;
    systemClassesContainingReflection = new ArrayList<String>();
    // So that jaxb annotations will cause discovery of the correct properties:
    systemClassesContainingReflection.add("com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator");
    // So that proxies are generated with the right set of methods inside
    systemClassesContainingReflection.add("sun/misc/ProxyGenerator");
    // (at least) the call to getModifiers() needs interception
    systemClassesContainingReflection.add("java/lang/reflect/Proxy");
    // So that javabeans introspection is intercepter
    systemClassesContainingReflection.add("java/beans/Introspector");
    // Related to serialization
    // TODO [serialization] Caches in ObjectStreamClass for descriptors, need clearing on reload
    systemClassesContainingReflection.add("java/io/ObjectStreamClass");
    systemClassesContainingReflection.add("java/io/ObjectStreamClass$EntryFuture");
// Don't need this right now, instead we are not removing 'final' from the serialVersionUID
//		// Need to catch at least the call to access the serialVersionUID made in getDeclaredSUID()
//		systemClassesContainingReflection.add("java/io/ObjectStreamClass$2");
}
Example 6
Project: ikvm-openjdk-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

            public Object run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 7
Project: jephyr-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     *
     * @param name        the class name of the proxy class
     * @param interfaces  proxy interfaces
     * @param accessFlags access flags of the proxy class
     */
public static byte[] generateProxyClass(String name, Class<?>[] interfaces, int accessFlags) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces, accessFlags);
    byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        AccessController.doPrivileged(new PrivilegedAction<Void>() {

            @Override
            public Void run() {
                try {
                    int i = name.lastIndexOf('.');
                    Path path;
                    if (i > 0) {
                        Path dir = Paths.get(name.substring(0, i).replace('.', File.separatorChar));
                        Files.createDirectories(dir);
                        path = dir.resolve(name.substring(i + 1, name.length()) + ".class");
                    } else {
                        path = Paths.get(name + ".class");
                    }
                    Files.write(path, classFile);
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 8
Project: android-project-Demo-master  File: ProxyUtils.java View source code
/**
     * Save proxy class to path
     * 
     * @param path path to save proxy class
     * @param proxyClassName name of proxy class
     * @param interfaces interfaces of proxy class
     * @return
     */
public static boolean saveProxyClass(String path, String proxyClassName, Class[] interfaces) {
    if (proxyClassName == null || path == null) {
        return false;
    }
    // get byte of proxy class
    byte[] classFile = ProxyGenerator.generateProxyClass(proxyClassName, interfaces);
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(path);
        out.write(classFile);
        out.flush();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return false;
}
Example 9
Project: openjdk8-jdk-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     *
     * @param name        the class name of the proxy class
     * @param interfaces  proxy interfaces
     * @param accessFlags access flags of the proxy class
    */
public static byte[] generateProxyClass(final String name, Class<?>[] interfaces, int accessFlags) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces, accessFlags);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {

            public Void run() {
                try {
                    int i = name.lastIndexOf('.');
                    Path path;
                    if (i > 0) {
                        Path dir = Paths.get(name.substring(0, i).replace('.', File.separatorChar));
                        Files.createDirectories(dir);
                        path = dir.resolve(name.substring(i + 1, name.length()) + ".class");
                    } else {
                        path = Paths.get(name + ".class");
                    }
                    Files.write(path, classFile);
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 10
Project: JDK-master  File: Proxy.java View source code
/**
     * Generate a proxy class.  Must call the checkProxyAccess method
     * to perform permission checks before calling this.
     */
private static Class<?> getProxyClass0(ClassLoader loader, Class<?>... interfaces) {
    if (interfaces.length > 65535) {
        throw new IllegalArgumentException("interface limit exceeded");
    }
    Class<?> proxyClass = null;
    /* collect interface names to use as key for proxy class cache */
    String[] interfaceNames = new String[interfaces.length];
    // for detecting duplicates
    Set<Class<?>> interfaceSet = new HashSet<>();
    for (int i = 0; i < interfaces.length; i++) {
        /*
             * Verify that the class loader resolves the name of this
             * interface to the same Class object.
             */
        String interfaceName = interfaces[i].getName();
        Class<?> interfaceClass = null;
        try {
            interfaceClass = Class.forName(interfaceName, false, loader);
        } catch (ClassNotFoundException e) {
        }
        if (interfaceClass != interfaces[i]) {
            throw new IllegalArgumentException(interfaces[i] + " is not visible from class loader");
        }
        /*
             * Verify that the Class object actually represents an
             * interface.
             */
        if (!interfaceClass.isInterface()) {
            throw new IllegalArgumentException(interfaceClass.getName() + " is not an interface");
        }
        /*
             * Verify that this interface is not a duplicate.
             */
        if (interfaceSet.contains(interfaceClass)) {
            throw new IllegalArgumentException("repeated interface: " + interfaceClass.getName());
        }
        interfaceSet.add(interfaceClass);
        interfaceNames[i] = interfaceName;
    }
    /*
         * Using string representations of the proxy interfaces as
         * keys in the proxy class cache (instead of their Class
         * objects) is sufficient because we require the proxy
         * interfaces to be resolvable by name through the supplied
         * class loader, and it has the advantage that using a string
         * representation of a class makes for an implicit weak
         * reference to the class.
         */
    List<String> key = Arrays.asList(interfaceNames);
    /*
         * Find or create the proxy class cache for the class loader.
         */
    Map<List<String>, Object> cache;
    synchronized (loaderToCache) {
        cache = loaderToCache.get(loader);
        if (cache == null) {
            cache = new HashMap<>();
            loaderToCache.put(loader, cache);
        }
    /*
             * This mapping will remain valid for the duration of this
             * method, without further synchronization, because the mapping
             * will only be removed if the class loader becomes unreachable.
             */
    }
    /*
         * Look up the list of interfaces in the proxy class cache using
         * the key.  This lookup will result in one of three possible
         * kinds of values:
         *     null, if there is currently no proxy class for the list of
         *         interfaces in the class loader,
         *     the pendingGenerationMarker object, if a proxy class for the
         *         list of interfaces is currently being generated,
         *     or a weak reference to a Class object, if a proxy class for
         *         the list of interfaces has already been generated.
         */
    synchronized (cache) {
        /*
             * Note that we need not worry about reaping the cache for
             * entries with cleared weak references because if a proxy class
             * has been garbage collected, its class loader will have been
             * garbage collected as well, so the entire cache will be reaped
             * from the loaderToCache map.
             */
        do {
            Object value = cache.get(key);
            if (value instanceof Reference) {
                proxyClass = (Class<?>) ((Reference) value).get();
            }
            if (proxyClass != null) {
                // proxy class already generated: return it
                return proxyClass;
            } else if (value == pendingGenerationMarker) {
                // proxy class being generated: wait for it
                try {
                    cache.wait();
                } catch (InterruptedException e) {
                }
                continue;
            } else {
                /*
                     * No proxy class for this list of interfaces has been
                     * generated or is being generated, so we will go and
                     * generate it now.  Mark it as pending generation.
                     */
                cache.put(key, pendingGenerationMarker);
                break;
            }
        } while (true);
    }
    try {
        // package to define proxy class in
        String proxyPkg = null;
        /*
             * Record the package of a non-public proxy interface so that the
             * proxy class will be defined in the same package.  Verify that
             * all non-public proxy interfaces are in the same package.
             */
        for (int i = 0; i < interfaces.length; i++) {
            int flags = interfaces[i].getModifiers();
            if (!Modifier.isPublic(flags)) {
                String name = interfaces[i].getName();
                int n = name.lastIndexOf('.');
                String pkg = ((n == -1) ? "" : name.substring(0, n + 1));
                if (proxyPkg == null) {
                    proxyPkg = pkg;
                } else if (!pkg.equals(proxyPkg)) {
                    throw new IllegalArgumentException("non-public interfaces from different packages");
                }
            }
        }
        if (proxyPkg == null) {
            // if no non-public proxy interfaces, use com.sun.proxy package
            proxyPkg = ReflectUtil.PROXY_PACKAGE + ".";
        }
        {
            /*
                 * Choose a name for the proxy class to generate.
                 */
            long num;
            synchronized (nextUniqueNumberLock) {
                num = nextUniqueNumber++;
            }
            String proxyName = proxyPkg + proxyClassNamePrefix + num;
            /*
                 * Verify that the class loader hasn't already
                 * defined a class with the chosen name.
                 */
            /*
                 * Generate the specified proxy class.
                 */
            byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces);
            try {
                proxyClass = defineClass0(loader, proxyName, proxyClassFile, 0, proxyClassFile.length);
            } catch (ClassFormatError e) {
                throw new IllegalArgumentException(e.toString());
            }
        }
        // add to set of all generated proxy classes, for isProxyClass
        proxyClasses.put(proxyClass, null);
    } finally {
        /*
             * We must clean up the "pending generation" state of the proxy
             * class cache entry somehow.  If a proxy class was successfully
             * generated, store it in the cache (with a weak reference);
             * otherwise, remove the reserved entry.  In all cases, notify
             * all waiters on reserved entries in this cache.
             */
        synchronized (cache) {
            if (proxyClass != null) {
                cache.put(key, new WeakReference<Class<?>>(proxyClass));
            } else {
                cache.remove(key);
            }
            cache.notifyAll();
        }
    }
    return proxyClass;
}
Example 11
Project: phoneme-components-cdc-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

            public Object run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 12
Project: property-db-master  File: Proxy.java View source code
/** {@collect.stats} 
     * Returns the {@code java.lang.Class} object for a proxy class
     * given a class loader and an array of interfaces.  The proxy class
     * will be defined by the specified class loader and will implement
     * all of the supplied interfaces.  If a proxy class for the same
     * permutation of interfaces has already been defined by the class
     * loader, then the existing proxy class will be returned; otherwise,
     * a proxy class for those interfaces will be generated dynamically
     * and defined by the class loader.
     *
     * <p>There are several restrictions on the parameters that may be
     * passed to {@code Proxy.getProxyClass}:
     *
     * <ul>
     * <li>All of the {@code Class} objects in the
     * {@code interfaces} array must represent interfaces, not
     * classes or primitive types.
     *
     * <li>No two elements in the {@code interfaces} array may
     * refer to identical {@code Class} objects.
     *
     * <li>All of the interface types must be visible by name through the
     * specified class loader.  In other words, for class loader
     * {@code cl} and every interface {@code i}, the following
     * expression must be true:
     * <pre>
     *     Class.forName(i.getName(), false, cl) == i
     * </pre>
     *
     * <li>All non-public interfaces must be in the same package;
     * otherwise, it would not be possible for the proxy class to
     * implement all of the interfaces, regardless of what package it is
     * defined in.
     *
     * <li>For any set of member methods of the specified interfaces
     * that have the same signature:
     * <ul>
     * <li>If the return type of any of the methods is a primitive
     * type or void, then all of the methods must have that same
     * return type.
     * <li>Otherwise, one of the methods must have a return type that
     * is assignable to all of the return types of the rest of the
     * methods.
     * </ul>
     *
     * <li>The resulting proxy class must not exceed any limits imposed
     * on classes by the virtual machine.  For example, the VM may limit
     * the number of interfaces that a class may implement to 65535; in
     * that case, the size of the {@code interfaces} array must not
     * exceed 65535.
     * </ul>
     *
     * <p>If any of these restrictions are violated,
     * {@code Proxy.getProxyClass} will throw an
     * {@code IllegalArgumentException}.  If the {@code interfaces}
     * array argument or any of its elements are {@code null}, a
     * {@code NullPointerException} will be thrown.
     *
     * <p>Note that the order of the specified proxy interfaces is
     * significant: two requests for a proxy class with the same combination
     * of interfaces but in a different order will result in two distinct
     * proxy classes.
     *
     * @param   loader the class loader to define the proxy class
     * @param   interfaces the list of interfaces for the proxy class
     *          to implement
     * @return  a proxy class that is defined in the specified class loader
     *          and that implements the specified interfaces
     * @throws  IllegalArgumentException if any of the restrictions on the
     *          parameters that may be passed to {@code getProxyClass}
     *          are violated
     * @throws  NullPointerException if the {@code interfaces} array
     *          argument or any of its elements are {@code null}
     */
public static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces) throws IllegalArgumentException {
    if (interfaces.length > 65535) {
        throw new IllegalArgumentException("interface limit exceeded");
    }
    Class proxyClass = null;
    /* collect interface names to use as key for proxy class cache */
    String[] interfaceNames = new String[interfaces.length];
    // for detecting duplicates
    Set interfaceSet = new HashSet();
    for (int i = 0; i < interfaces.length; i++) {
        /*
             * Verify that the class loader resolves the name of this
             * interface to the same Class object.
             */
        String interfaceName = interfaces[i].getName();
        Class interfaceClass = null;
        try {
            interfaceClass = Class.forName(interfaceName, false, loader);
        } catch (ClassNotFoundException e) {
        }
        if (interfaceClass != interfaces[i]) {
            throw new IllegalArgumentException(interfaces[i] + " is not visible from class loader");
        }
        /*
             * Verify that the Class object actually represents an
             * interface.
             */
        if (!interfaceClass.isInterface()) {
            throw new IllegalArgumentException(interfaceClass.getName() + " is not an interface");
        }
        /*
             * Verify that this interface is not a duplicate.
             */
        if (interfaceSet.contains(interfaceClass)) {
            throw new IllegalArgumentException("repeated interface: " + interfaceClass.getName());
        }
        interfaceSet.add(interfaceClass);
        interfaceNames[i] = interfaceName;
    }
    /*
         * Using string representations of the proxy interfaces as
         * keys in the proxy class cache (instead of their Class
         * objects) is sufficient because we require the proxy
         * interfaces to be resolvable by name through the supplied
         * class loader, and it has the advantage that using a string
         * representation of a class makes for an implicit weak
         * reference to the class.
         */
    Object key = Arrays.asList(interfaceNames);
    /*
         * Find or create the proxy class cache for the class loader.
         */
    Map cache;
    synchronized (loaderToCache) {
        cache = (Map) loaderToCache.get(loader);
        if (cache == null) {
            cache = new HashMap();
            loaderToCache.put(loader, cache);
        }
    /*
             * This mapping will remain valid for the duration of this
             * method, without further synchronization, because the mapping
             * will only be removed if the class loader becomes unreachable.
             */
    }
    /*
         * Look up the list of interfaces in the proxy class cache using
         * the key.  This lookup will result in one of three possible
         * kinds of values:
         *     null, if there is currently no proxy class for the list of
         *         interfaces in the class loader,
         *     the pendingGenerationMarker object, if a proxy class for the
         *         list of interfaces is currently being generated,
         *     or a weak reference to a Class object, if a proxy class for
         *         the list of interfaces has already been generated.
         */
    synchronized (cache) {
        /*
             * Note that we need not worry about reaping the cache for
             * entries with cleared weak references because if a proxy class
             * has been garbage collected, its class loader will have been
             * garbage collected as well, so the entire cache will be reaped
             * from the loaderToCache map.
             */
        do {
            Object value = cache.get(key);
            if (value instanceof Reference) {
                proxyClass = (Class) ((Reference) value).get();
            }
            if (proxyClass != null) {
                // proxy class already generated: return it
                return proxyClass;
            } else if (value == pendingGenerationMarker) {
                // proxy class being generated: wait for it
                try {
                    cache.wait();
                } catch (InterruptedException e) {
                }
                continue;
            } else {
                /*
                     * No proxy class for this list of interfaces has been
                     * generated or is being generated, so we will go and
                     * generate it now.  Mark it as pending generation.
                     */
                cache.put(key, pendingGenerationMarker);
                break;
            }
        } while (true);
    }
    try {
        // package to define proxy class in
        String proxyPkg = null;
        /*
             * Record the package of a non-public proxy interface so that the
             * proxy class will be defined in the same package.  Verify that
             * all non-public proxy interfaces are in the same package.
             */
        for (int i = 0; i < interfaces.length; i++) {
            int flags = interfaces[i].getModifiers();
            if (!Modifier.isPublic(flags)) {
                String name = interfaces[i].getName();
                int n = name.lastIndexOf('.');
                String pkg = ((n == -1) ? "" : name.substring(0, n + 1));
                if (proxyPkg == null) {
                    proxyPkg = pkg;
                } else if (!pkg.equals(proxyPkg)) {
                    throw new IllegalArgumentException("non-public interfaces from different packages");
                }
            }
        }
        if (proxyPkg == null) {
            // if no non-public proxy interfaces,
            // use the unnamed package
            proxyPkg = "";
        }
        {
            /*
                 * Choose a name for the proxy class to generate.
                 */
            long num;
            synchronized (nextUniqueNumberLock) {
                num = nextUniqueNumber++;
            }
            String proxyName = proxyPkg + proxyClassNamePrefix + num;
            /*
                 * Verify that the class loader hasn't already
                 * defined a class with the chosen name.
                 */
            /*
                 * Generate the specified proxy class.
                 */
            byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces);
            try {
                proxyClass = defineClass0(loader, proxyName, proxyClassFile, 0, proxyClassFile.length);
            } catch (ClassFormatError e) {
                throw new IllegalArgumentException(e.toString());
            }
        }
        // add to set of all generated proxy classes, for isProxyClass
        proxyClasses.put(proxyClass, null);
    } finally {
        /*
             * We must clean up the "pending generation" state of the proxy
             * class cache entry somehow.  If a proxy class was successfully
             * generated, store it in the cache (with a weak reference);
             * otherwise, remove the reserved entry.  In all cases, notify
             * all waiters on reserved entries in this cache.
             */
        synchronized (cache) {
            if (proxyClass != null) {
                cache.put(key, new WeakReference(proxyClass));
            } else {
                cache.remove(key);
            }
            cache.notifyAll();
        }
    }
    return proxyClass;
}
Example 13
Project: ManagedRuntimeInitiative-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

            public Object run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 14
Project: classlib6-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

            public Object run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 15
Project: TerminalIDE-master  File: ProxyGenerator.java View source code
//HACK
//java.security.AccessController.doPrivileged(new GetBooleanAction("sun.misc.ProxyGenerator.saveGeneratedFiles")).booleanValue();
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

            public Object run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 16
Project: HotswapAgent-master  File: ProxyGenerator.java View source code
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     *
     * @param name
     *            the class name of the proxy class
     * @param interfaces
     *            proxy interfaces
     * @param accessFlags
     *            access flags of the proxy class
     */
public static byte[] generateProxyClass(final String name, Class<?>[] interfaces, int accessFlags) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces, accessFlags);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {

            public Void run() {
                try {
                    int i = name.lastIndexOf('.');
                    Path path;
                    if (i > 0) {
                        Path dir = Paths.get(name.substring(0, i).replace('.', File.separatorChar));
                        Files.createDirectories(dir);
                        path = dir.resolve(name.substring(i + 1, name.length()) + ".class");
                    } else {
                        path = Paths.get(name + ".class");
                    }
                    Files.write(path, classFile);
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 17
Project: terminal-ide-master  File: ProxyGenerator.java View source code
//HACK
//java.security.AccessController.doPrivileged(new GetBooleanAction("sun.misc.ProxyGenerator.saveGeneratedFiles")).booleanValue();
/**
     * Generate a proxy class given a name and a list of proxy interfaces.
     */
public static byte[] generateProxyClass(final String name, Class[] interfaces) {
    ProxyGenerator gen = new ProxyGenerator(name, interfaces);
    final byte[] classFile = gen.generateClassFile();
    if (saveGeneratedFiles) {
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

            public Object run() {
                try {
                    FileOutputStream file = new FileOutputStream(dotToSlash(name) + ".class");
                    file.write(classFile);
                    file.close();
                    return null;
                } catch (IOException e) {
                    throw new InternalError("I/O exception saving generated file: " + e);
                }
            }
        });
    }
    return classFile;
}
Example 18
Project: proxyhotswap-master  File: JavaProxyTransformer.java View source code
@Override
protected byte[] getNewByteCode(ClassLoader loader, String className, Class<?> classBeingRedefined) {
    return ProxyGenerator.generateProxyClass(className, classBeingRedefined.getInterfaces());
}