/* * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package org.visage.jdi.request; import org.visage.jdi.VisageMirror; import org.visage.jdi.VisageVirtualMachine; import com.sun.jdi.request.AccessWatchpointRequest; import com.sun.jdi.request.BreakpointRequest; import com.sun.jdi.request.ClassPrepareRequest; import com.sun.jdi.request.ClassUnloadRequest; import com.sun.jdi.request.EventRequest; import com.sun.jdi.request.ExceptionRequest; import com.sun.jdi.request.MethodEntryRequest; import com.sun.jdi.request.MethodExitRequest; import com.sun.jdi.request.ModificationWatchpointRequest; import com.sun.jdi.request.MonitorContendedEnterRequest; import com.sun.jdi.request.MonitorContendedEnteredRequest; import com.sun.jdi.request.MonitorWaitRequest; import com.sun.jdi.request.MonitorWaitedRequest; import com.sun.jdi.request.StepRequest; import com.sun.jdi.request.ThreadDeathRequest; import com.sun.jdi.request.ThreadStartRequest; import com.sun.jdi.request.VMDeathRequest; import com.sun.jdi.request.WatchpointRequest; import java.util.ArrayList; import java.util.List; /** * * @author sundar */ public class VisageEventRequest extends VisageMirror implements EventRequest { public VisageEventRequest(VisageVirtualMachine visagevm, EventRequest underlying) { super(visagevm, underlying); } public void addCountFilter(int count) { underlying().addCountFilter(count); } public void disable() { underlying().disable(); } public void enable() { underlying().enable(); } public Object getProperty(Object arg0) { return underlying().getProperty(arg0); } public boolean isEnabled() { return underlying().isEnabled(); } public void putProperty(Object arg0, Object arg1) { underlying().putProperty(arg0, arg1); } public void setEnabled(boolean enabled) { underlying().setEnabled(enabled); } public void setSuspendPolicy(int policy) { underlying().setSuspendPolicy(policy); } public int suspendPolicy() { return underlying().suspendPolicy(); } @Override protected EventRequest underlying() { return (EventRequest) super.underlying(); } // static utils for wrapping/unwrapping event request objects public static VisageEventRequest wrap(VisageVirtualMachine visagevm, EventRequest req) { if (req == null) { return null; } if (req instanceof AccessWatchpointRequest) { return new VisageAccessWatchpointRequest(visagevm, (AccessWatchpointRequest)req); } else if (req instanceof BreakpointRequest) { return new VisageBreakpointRequest(visagevm, (BreakpointRequest)req); } else if (req instanceof ClassPrepareRequest) { return new VisageClassPrepareRequest(visagevm, (ClassPrepareRequest)req); } else if (req instanceof ClassUnloadRequest) { return new VisageClassUnloadRequest(visagevm, (ClassUnloadRequest)req); } else if (req instanceof ExceptionRequest) { return new VisageExceptionRequest(visagevm, (ExceptionRequest)req); } else if (req instanceof MethodEntryRequest) { return new VisageMethodEntryRequest(visagevm, (MethodEntryRequest)req); } else if (req instanceof MethodExitRequest) { return new VisageMethodExitRequest(visagevm, (MethodExitRequest)req); } else if (req instanceof ModificationWatchpointRequest) { return new VisageModificationWatchpointRequest(visagevm, (ModificationWatchpointRequest)req); } else if (req instanceof MonitorContendedEnterRequest) { return new VisageMonitorContendedEnterRequest(visagevm, (MonitorContendedEnterRequest)req); } else if (req instanceof MonitorContendedEnteredRequest) { return new VisageMonitorContendedEnteredRequest(visagevm, (MonitorContendedEnteredRequest)req); } else if (req instanceof MonitorWaitRequest) { return new VisageMonitorWaitRequest(visagevm, (MonitorWaitRequest)req); } else if (req instanceof MonitorWaitedRequest) { return new VisageMonitorWaitedRequest(visagevm, (MonitorWaitedRequest)req); } else if (req instanceof StepRequest) { return new VisageStepRequest(visagevm, (StepRequest)req); } else if (req instanceof ThreadDeathRequest) { return new VisageThreadDeathRequest(visagevm, (ThreadDeathRequest)req); } else if (req instanceof ThreadStartRequest) { return new VisageThreadStartRequest(visagevm, (ThreadStartRequest)req); } else if (req instanceof VMDeathRequest) { return new VisageVMDeathRequest(visagevm, (VMDeathRequest)req); } else if (req instanceof WatchpointRequest) { return new VisageWatchpointRequest(visagevm, (WatchpointRequest)req); } else { return new VisageEventRequest(visagevm, req); } } public static VisageAccessWatchpointRequest wrap( VisageVirtualMachine visagevm, AccessWatchpointRequest req) { return (req == null)? null : new VisageAccessWatchpointRequest(visagevm, req); } public static VisageBreakpointRequest wrap( VisageVirtualMachine visagevm, BreakpointRequest req) { return (req == null)? null : new VisageBreakpointRequest(visagevm, req); } public static VisageClassPrepareRequest wrap( VisageVirtualMachine visagevm, ClassPrepareRequest req) { return (req == null)? null : new VisageClassPrepareRequest(visagevm, req); } public static VisageClassUnloadRequest wrap( VisageVirtualMachine visagevm, ClassUnloadRequest req) { return (req == null)? null : new VisageClassUnloadRequest(visagevm, req); } public static VisageExceptionRequest wrap( VisageVirtualMachine visagevm, ExceptionRequest req) { return (req == null)? null : new VisageExceptionRequest(visagevm, req); } public static VisageMethodEntryRequest wrap( VisageVirtualMachine visagevm, MethodEntryRequest req) { return (req == null)? null : new VisageMethodEntryRequest(visagevm, req); } public static VisageMethodExitRequest wrap( VisageVirtualMachine visagevm, MethodExitRequest req) { return (req == null)? null : new VisageMethodExitRequest(visagevm, req); } public static VisageModificationWatchpointRequest wrap( VisageVirtualMachine visagevm, ModificationWatchpointRequest req) { return (req == null)? null : new VisageModificationWatchpointRequest(visagevm, req); } public static VisageMonitorContendedEnterRequest wrap( VisageVirtualMachine visagevm, MonitorContendedEnterRequest req) { return (req == null)? null : new VisageMonitorContendedEnterRequest(visagevm, req); } public static VisageMonitorContendedEnteredRequest wrap( VisageVirtualMachine visagevm, MonitorContendedEnteredRequest req) { return (req == null)? null : new VisageMonitorContendedEnteredRequest(visagevm, req); } public static VisageMonitorWaitRequest wrap( VisageVirtualMachine visagevm, MonitorWaitRequest req) { return (req == null)? null : new VisageMonitorWaitRequest(visagevm, req); } public static VisageMonitorWaitedRequest wrap( VisageVirtualMachine visagevm, MonitorWaitedRequest req) { return (req == null)? null : new VisageMonitorWaitedRequest(visagevm, req); } public static VisageStepRequest wrap( VisageVirtualMachine visagevm, StepRequest req) { return (req == null)? null : new VisageStepRequest(visagevm, req); } public static VisageThreadDeathRequest wrap( VisageVirtualMachine visagevm, ThreadDeathRequest req) { return (req == null)? null : new VisageThreadDeathRequest(visagevm, req); } public static VisageThreadStartRequest wrap( VisageVirtualMachine visagevm, ThreadStartRequest req) { return (req == null)? null : new VisageThreadStartRequest(visagevm, req); } public static VisageVMDeathRequest wrap(VisageVirtualMachine visagevm, VMDeathRequest req) { return (req == null)? null : new VisageVMDeathRequest(visagevm, req); } public static List<AccessWatchpointRequest> wrapAccessWatchpointRequests( VisageVirtualMachine visagevm, List<AccessWatchpointRequest> reqs) { if (reqs == null) { return null; } List<AccessWatchpointRequest> result = new ArrayList<AccessWatchpointRequest>(); for (AccessWatchpointRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<BreakpointRequest> wrapBreakpointRequests( VisageVirtualMachine visagevm, List<BreakpointRequest> reqs) { if (reqs == null) { return null; } List<BreakpointRequest> result = new ArrayList<BreakpointRequest>(); for (BreakpointRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<ClassPrepareRequest> wrapClassPrepareRequests( VisageVirtualMachine visagevm, List<ClassPrepareRequest> reqs) { if (reqs == null) { return null; } List<ClassPrepareRequest> result = new ArrayList<ClassPrepareRequest>(); for (ClassPrepareRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<ClassUnloadRequest> wrapClassUnloadRequests( VisageVirtualMachine visagevm, List<ClassUnloadRequest> reqs) { if (reqs == null) { return null; } List<ClassUnloadRequest> result = new ArrayList<ClassUnloadRequest>(); for (ClassUnloadRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<ExceptionRequest> wrapExceptionRequests( VisageVirtualMachine visagevm, List<ExceptionRequest> reqs) { if (reqs == null) { return null; } List<ExceptionRequest> result = new ArrayList<ExceptionRequest>(); for (ExceptionRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<MethodEntryRequest> wrapMethodEntryRequests( VisageVirtualMachine visagevm, List<MethodEntryRequest> reqs) { if (reqs == null) { return null; } List<MethodEntryRequest> result = new ArrayList<MethodEntryRequest>(); for (MethodEntryRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<MethodExitRequest> wrapMethodExitRequests( VisageVirtualMachine visagevm, List<MethodExitRequest> reqs) { if (reqs == null) { return null; } List<MethodExitRequest> result = new ArrayList<MethodExitRequest>(); for (MethodExitRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<ModificationWatchpointRequest> wrapModificationWatchpointRequests( VisageVirtualMachine visagevm, List<ModificationWatchpointRequest> reqs) { if (reqs == null) { return null; } List<ModificationWatchpointRequest> result = new ArrayList<ModificationWatchpointRequest>(); for (ModificationWatchpointRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<MonitorContendedEnterRequest> wrapMonitorContendedEnterRequests( VisageVirtualMachine visagevm, List<MonitorContendedEnterRequest> reqs) { if (reqs == null) { return null; } List<MonitorContendedEnterRequest> result = new ArrayList<MonitorContendedEnterRequest>(); for (MonitorContendedEnterRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<MonitorContendedEnteredRequest> wrapMonitorContendedEnteredRequests( VisageVirtualMachine visagevm, List<MonitorContendedEnteredRequest> reqs) { if (reqs == null) { return null; } List<MonitorContendedEnteredRequest> result = new ArrayList<MonitorContendedEnteredRequest>(); for (MonitorContendedEnteredRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<MonitorWaitRequest> wrapMonitorWaitRequests( VisageVirtualMachine visagevm, List<MonitorWaitRequest> reqs) { if (reqs == null) { return null; } List<MonitorWaitRequest> result = new ArrayList<MonitorWaitRequest>(); for (MonitorWaitRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<MonitorWaitedRequest> wrapMonitorWaitedRequests( VisageVirtualMachine visagevm, List<MonitorWaitedRequest> reqs) { if (reqs == null) { return null; } List<MonitorWaitedRequest> result = new ArrayList<MonitorWaitedRequest>(); for (MonitorWaitedRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<StepRequest> wrapStepRequests( VisageVirtualMachine visagevm, List<StepRequest> reqs) { if (reqs == null) { return null; } List<StepRequest> result = new ArrayList<StepRequest>(); for (StepRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<ThreadDeathRequest> wrapThreadDeathRequests( VisageVirtualMachine visagevm, List<ThreadDeathRequest> reqs) { if (reqs == null) { return null; } List<ThreadDeathRequest> result = new ArrayList<ThreadDeathRequest>(); for (ThreadDeathRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<ThreadStartRequest> wrapThreadStartRequests( VisageVirtualMachine visagevm, List<ThreadStartRequest> reqs) { if (reqs == null) { return null; } List<ThreadStartRequest> result = new ArrayList<ThreadStartRequest>(); for (ThreadStartRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } public static List<VMDeathRequest> wrapVMDeathRequests( VisageVirtualMachine visagevm, List<VMDeathRequest> reqs) { if (reqs == null) { return null; } List<VMDeathRequest> result = new ArrayList<VMDeathRequest>(); for (VMDeathRequest req : reqs) { result.add(wrap(visagevm, req)); } return result; } // unwrap methods public static EventRequest unwrap(EventRequest req) { return (req instanceof VisageEventRequest)? ((VisageEventRequest)req).underlying() : req; } public static <T extends EventRequest> List<T> unwrapEventRequests(List<T> requests) { List result = new ArrayList(); for (EventRequest req : requests) { result.add(unwrap(req)); } return result; } }