Home | History | Annotate | Download | only in debuggee
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one or more
      3  * contributor license agreements.  See the NOTICE file distributed with
      4  * this work for additional information regarding copyright ownership.
      5  * The ASF licenses this file to You under the Apache License, Version 2.0
      6  * (the "License"); you may not use this file except in compliance with
      7  * the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *
     15  *  See the License for the specific language governing permissions and
     16  *  limitations under the License.
     17  */
     18 
     19 package org.apache.harmony.jpda.tests.jdwp.share.debuggee;
     20 
     21 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
     22 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
     23 
     24 import java.lang.reflect.InvocationHandler;
     25 import java.lang.reflect.Method;
     26 import java.lang.reflect.Proxy;
     27 
     28 public class ProxyDebuggee extends SyncDebuggee {
     29     public static Object checkedProxyObject = null;
     30 
     31     public static final int ARG_INT = 5;
     32     public static final long ARG_LONG = 135l;
     33     public static final String ARG_OBJECT = "a string argument";
     34 
     35     public void breakpointMethodFromProxy() {
     36         System.out.println("breakpointMethodFromProxy");
     37     }
     38 
     39     static interface InterfaceForProxy {
     40         public void call(int i, long l, Object obj);
     41     }
     42 
     43     static class ProxyInvocationHandler implements InvocationHandler {
     44         private final ProxyDebuggee mDebuggee;
     45 
     46         public ProxyInvocationHandler(ProxyDebuggee debuggee) {
     47             mDebuggee = debuggee;
     48         }
     49 
     50         @Override
     51         public Object invoke(Object proxy, Method method, Object[] args)
     52                 throws Throwable {
     53             mDebuggee.breakpointMethodFromProxy();
     54             return null;
     55         }
     56     }
     57 
     58     public void invokeBreakpointMethodFromProxy() {
     59         checkedProxyObject = Proxy.newProxyInstance(getClass().getClassLoader(),
     60                 new Class<?>[] { InterfaceForProxy.class },
     61                 new ProxyInvocationHandler(this));
     62         InterfaceForProxy proxy = (InterfaceForProxy) checkedProxyObject;
     63         proxy.call(ARG_INT, ARG_LONG, ARG_OBJECT);
     64     }
     65 
     66     @Override
     67     public void run() {
     68         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
     69 
     70         logWriter.println("ProxyDebuggee started");
     71 
     72         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     73 
     74         invokeBreakpointMethodFromProxy();
     75 
     76         logWriter.println("ProxyDebuggee finished");
     77     }
     78 
     79     public static void main(String[] args) {
     80         runDebuggee(ProxyDebuggee.class);
     81     }
     82 
     83 }
     84