Package gnu.classpath.jdwp

Source Code of gnu.classpath.jdwp.JDIVirtualMachine

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package gnu.classpath.jdwp;

import gnu.classpath.jdwp.event.EventRequest;
import gnu.classpath.jdwp.util.MethodResult;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.security.ProtectionDomain;
import java.util.ArrayList;
import java.util.Iterator;
import org.jnode.annotation.NoInline;
import org.jnode.vm.BaseVmArchitecture;
import org.jnode.vm.VmSystem;
import org.jnode.vm.VmSystemClassLoader;
import org.jnode.vm.classmgr.ClassDecoder;
import org.jnode.vm.classmgr.VmByteCode;
import org.jnode.vm.classmgr.VmClassLoader;
import org.jnode.vm.classmgr.VmIsolatedStatics;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.classmgr.VmStaticsIterator;
import org.jnode.vm.classmgr.VmType;
import org.jnode.vm.facade.VmUtils;
import org.jnode.vm.isolate.VmIsolate;

/**
* User: lsantha
* Date: 6/26/11 10:53 AM
*/
public class JDIVirtualMachine {
    @NoInline
    static boolean debug() {
        return false;
    }

    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#suspendThread(java.lang.Thread)
     */
    @NoInline
    static void suspendThread(Thread arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.suspendThread()");
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#resumeThread(java.lang.Thread)
     */
    @NoInline
    static void resumeThread(Thread arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.resumeThread()");
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getSuspendCount(java.lang.Thread)
     */
    @NoInline
    static int getSuspendCount(Thread arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getSuspendCount()");
        return 0;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getAllLoadedClassesCount()
     */
    @NoInline
    static int getAllLoadedClassesCount() {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getAllLoadedClassesCount()");
        return 0;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getAllLoadedClasses()
     */
    @NoInline
    static Iterator getAllLoadedClasses() {
        if(debug())
            System.out.println("NativeVMVirtualMachine.getAllLoadedClasses()");
        return new Iterator() {
            private VmStaticsIterator iter = new VmStaticsIterator(VmUtils.getVm().getSharedStatics());
            private Iterator<VmIsolatedStatics> isolated = VmIsolate.staticsIterator();

            public boolean hasNext() {
                if (iter.hasNext())
                    return true;
                else {
                    while (isolated.hasNext()) {
                        iter = new VmStaticsIterator(isolated.next());
                        if (iter.hasNext())
                            return true;
                    }
                }
                return false;
            }

            public Object next() {
                return iter.next().asClass();
            }

            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getClassStatus(java.lang.Class)
     */
    @NoInline
    static int getClassStatus(Class arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getClassStatus()");
        return 0;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getAllClassMethods(java.lang.Class)
     */
    @NoInline
    static VMMethod[] getAllClassMethods(Class arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getAllClassMethods()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getClassMethod(java.lang.Class, long)
     */
    @NoInline
    static VMMethod getClassMethod(Class arg1, long arg2) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getClassMethod()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getFrames(java.lang.Thread, int, int)
     */
    @NoInline
    static ArrayList getFrames(Thread arg1, int arg2, int arg3) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getFrame()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getFrame(java.lang.Thread, java.nio.ByteBuffer)
     */
    @NoInline
    static VMFrame getFrame(Thread arg1, ByteBuffer arg2) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getFrame()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getFrameCount(java.lang.Thread)
     */
    @NoInline
    static int getFrameCount(Thread arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getFrameCount()");
        return 0;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getThreadStatus(java.lang.Thread)
     */
    @NoInline
    static int getThreadStatus(Thread thread) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getThreadStatus()");

//        public static final int ZOMBIE = 0;
//        public static final int RUNNING = 1;
//        public static final int SLEEPING = 2;
//        public static final int MONITOR = 3;
//        public static final int WAIT = 4;

        return 0;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getLoadRequests(java.lang.ClassLoader)
     */
    @NoInline
    static ArrayList getLoadRequests(ClassLoader arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getLoadRequest()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#executeMethod(java.lang.Object, java.lang.Thread, java.lang.Class, java.lang.reflect.Method, java.lang.Object[], boolean)
     */
    @NoInline
    static MethodResult executeMethod(Object arg1, Thread arg2, Class arg3, Method arg4, Object[] arg5, boolean arg6) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.executeMethod()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#getSourceFile(java.lang.Class)
     */
    @NoInline
    static String getSourceFile(Class arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.getSourceFile()");
        return null;
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#registerEvent(gnu.classpath.jdwp.event.EventRequest)
     */
    @NoInline
    static void registerEvent(EventRequest arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.registerEvent() " + arg1.getId() + " " + arg1.getEventKind() +
                " " + arg1.getSuspendPolicy() " " + arg1.getFilters());
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#unregisterEvent(gnu.classpath.jdwp.event.EventRequest)
     */
    @NoInline
    static void unregisterEvent(EventRequest arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.unregisterEvent()");
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#clearEvents(byte)
     */
    @NoInline
    static void clearEvents(byte arg1) {
        //todo implement it
        if(debug())
            System.out.println("NativeVMVirtualMachine.clearEvents()");
    }
    /**
     * @see gnu.classpath.jdwp.VMVirtualMachine#redefineClass(Class, byte[])
     */
    @NoInline
    static void redefineClass(Class oldClass, byte[] classData){
        if(debug())
            System.out.println("NativeVMVirtualMachine.redefineClass()");

        String name = oldClass.getName();
        VmType old_type = VmType.fromClass(oldClass);
        VmClassLoader loader = VmType.fromClass(oldClass).getLoader();
        ProtectionDomain pd = oldClass.getProtectionDomain();
        VmType new_type = ClassDecoder.defineClass(name, ByteBuffer.wrap(classData), false, loader, pd);
        for(int i = 0; i < old_type.getNoDeclaredMethods(); i++){
            VmMethod old_method = old_type.getDeclaredMethod(i);
            if (!old_method.isNative()) {
                VmMethod new_method = new_type.getDeclaredMethod(old_method.getName(), old_method.getSignature());
                if(new_method == null) continue;

                old_method.setBytecode(new_method.getBytecode());
                old_method.resetOptLevel();
                old_method.recompile();
                System.out.println("Redefined method: " + old_method.getFullName());
            }
        }
    }
}
TOP

Related Classes of gnu.classpath.jdwp.JDIVirtualMachine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.