1466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers/* 20f3c55331439970e01af67f80ac117c473bc04cfElliott Hughes * Copyright (C) 2011 The Android Open Source Project 3466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * 4466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 5466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * you may not use this file except in compliance with the License. 6466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * You may obtain a copy of the License at 7466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * 8466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * http://www.apache.org/licenses/LICENSE-2.0 9466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * 10466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * Unless required by applicable law or agreed to in writing, software 11466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * distributed under the License is distributed on an "AS IS" BASIS, 12466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * See the License for the specific language governing permissions and 14466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers * limitations under the License. 15466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers */ 16466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogersimport java.lang.reflect.*; 17466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 18466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogerspublic class ReturnsAndArgPassing { 19466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 20466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers public static final String testName = "ReturnsAndArgPassing"; 21466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 22466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers static void check(boolean x) { 23466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers if (!x) { 24466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers throw new AssertionError(testName + " Check failed"); 25466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 26466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 27466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 28466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers interface MyInterface { 29466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers void voidFoo(); 30466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers void voidBar(); 31466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers boolean booleanFoo(); 32466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers boolean booleanBar(); 33466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers byte byteFoo(); 34466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers byte byteBar(); 35466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers char charFoo(); 36466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers char charBar(); 37466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers short shortFoo(); 38466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers short shortBar(); 39466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers int intFoo(); 40466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers int intBar(); 41466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers long longFoo(); 42466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers long longBar(); 43466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers float floatFoo(); 44466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers float floatBar(); 45466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers double doubleFoo(); 46466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers double doubleBar(); 47466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Object selectArg(int select, int a, long b, float c, double d, Object x); 48466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 49466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 50466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers static int fooInvocations = 0; 51466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers static int barInvocations = 0; 52466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 53466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers static class MyInvocationHandler implements InvocationHandler { 5462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers boolean causeNpeOnReturn = false; 5562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers Class<?> returnType = null; 56466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers public Object invoke(Object proxy, Method method, Object[] args) { 57466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxy instanceof Proxy); 58466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(method.getDeclaringClass() == MyInterface.class); 59466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers String name = method.getName(); 60466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers if (name.endsWith("Foo")) { 61466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(args == null); 62466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers fooInvocations++; 63466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } else if (name.endsWith("Bar")) { 64466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(args == null); 65466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers barInvocations++; 66466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 6762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers if (causeNpeOnReturn) { 6862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers return null; 6962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } else if (name.equals("voidFoo") || name.equals("voidBar")) { 7062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers return null; 7162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } else if (name.equals("booleanFoo")) { 7262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers return true; 7362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } else if (name.equals("booleanBar")) { 7462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers return false; 7562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } else if (name.equals("selectArg")) { 76466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(args.length == 6); 77466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers int select = (Integer)args[0]; 78466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers return args[select]; 79466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } else { 8062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 8162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers if (name.endsWith("Foo")) { 8262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers return returnType.getField("MAX_VALUE").get(null); 8362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } else { 8462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(name.endsWith("Bar")); 8562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers return returnType.getField("MIN_VALUE").get(null); 8662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 8762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (Exception e) { 8862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new Error("return type = " + returnType, e); 8962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 90466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 91466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 92466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 93466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 94466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers static void testProxyReturns() { 95466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers System.out.println(testName + ".testProxyReturns RUNNING"); 96466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers MyInvocationHandler myHandler = new MyInvocationHandler(); 97466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers MyInterface proxyMyInterface = 98466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers (MyInterface)Proxy.newProxyInstance(ReturnsAndArgPassing.class.getClassLoader(), 99466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers new Class[] { MyInterface.class }, 100466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers myHandler); 101466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 0); 102466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers proxyMyInterface.voidFoo(); 103466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 1); 104466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 105466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 0); 106466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers proxyMyInterface.voidBar(); 107466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 1); 108466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 109466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 1); 11062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Boolean.class; 111466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.booleanFoo() == true); 112466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 2); 113466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 114466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 1); 115466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.booleanBar() == false); 116466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 2); 117466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 118466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 2); 11962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Byte.class; 120466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.byteFoo() == Byte.MAX_VALUE); 121466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 3); 122466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 123466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 2); 124466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.byteBar() == Byte.MIN_VALUE); 125466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 3); 126466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 127466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 3); 12862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Character.class; 129466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.charFoo() == Character.MAX_VALUE); 130466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 4); 131466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 132466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 3); 133466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.charBar() == Character.MIN_VALUE); 134466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 4); 135466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 136466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 4); 13762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Short.class; 138466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.shortFoo() == Short.MAX_VALUE); 139466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 5); 140466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 141466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 4); 142466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.shortBar() == Short.MIN_VALUE); 143466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 5); 144466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 145466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 5); 14662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Integer.class; 147466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.intFoo() == Integer.MAX_VALUE); 148466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 6); 149466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 150466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 5); 151466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.intBar() == Integer.MIN_VALUE); 152466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 6); 153466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 154466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 6); 15562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Long.class; 156466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.longFoo() == Long.MAX_VALUE); 157466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 7); 158466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 159466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 6); 160466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.longBar() == Long.MIN_VALUE); 161466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 7); 162466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 163466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 7); 16462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Float.class; 165466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.floatFoo() == Float.MAX_VALUE); 166466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 8); 167466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 168466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 7); 169466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.floatBar() == Float.MIN_VALUE); 170466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 8); 171466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 172466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 8); 17362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Double.class; 174466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.doubleFoo() == Double.MAX_VALUE); 175466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(fooInvocations == 9); 176466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 177466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 8); 178466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.doubleBar() == Double.MIN_VALUE); 179466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(barInvocations == 9); 180466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 18162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers // Toggle flag to get return values to cause NPEs 18262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.causeNpeOnReturn = true; 18362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 18462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 9); 18562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 18662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.booleanFoo(); 18762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 18862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 18962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 19062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 10); 19162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 19262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 9); 19362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 19462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.booleanBar(); 19562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 19662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 19762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 19862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 10); 19962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 20062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 10); 20162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 20262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 20362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 20462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 20562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 20662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 11); 20762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 20862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 10); 20962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 21062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 21162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 21262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 21362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 21462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 11); 21562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 21662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 11); 21762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 21862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.charFoo(); 21962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 22062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 22162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 22262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 12); 22362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 22462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 11); 22562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 22662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.charBar(); 22762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 22862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 22962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 23062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 12); 23162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 23262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 12); 23362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 23462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.shortFoo(); 23562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 23662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 23762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 23862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 13); 23962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 24062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 12); 24162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 24262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.shortBar(); 24362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 24462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 24562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 24662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 13); 24762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 24862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 13); 24962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 25062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.intFoo(); 25162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 25262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 25362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 25462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 14); 25562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 25662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 13); 25762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 25862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.intBar(); 25962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 26062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 26162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 26262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 14); 26362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 26462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 14); 26562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 26662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.longFoo(); 26762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 26862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 26962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 27062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 15); 27162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 27262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 14); 27362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 27462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.longBar(); 27562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 27662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 27762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 27862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 15); 27962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 28062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 15); 28162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 28262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.floatFoo(); 28362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 28462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 28562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 28662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 16); 28762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 28862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 15); 28962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 29062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.floatBar(); 29162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 29262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 29362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 29462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 16); 29562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 29662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 16); 29762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 29862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.doubleFoo(); 29962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 30062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 30162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 30262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 17); 30362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 30462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 16); 30562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 30662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.doubleBar(); 30762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 30862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (NullPointerException e) { 30962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 31062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 17); 31162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 31262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers // Toggle flag to stop NPEs 31362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.causeNpeOnReturn = false; 31462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 31562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 17); 31662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Double.class; // Double -> byte == fail 31762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 31862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 31962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 32062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 32162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 32262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 18); 32362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 32462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 17); 32562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 32662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 32762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 32862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 32962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 33062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 18); 33162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 33262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 18); 33362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Float.class; // Float -> byte == fail 33462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 33562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 33662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 33762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 33862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 33962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 19); 34062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 34162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 18); 34262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 34362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 34462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 34562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 34662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 34762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 19); 34862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 34962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 19); 35062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Long.class; // Long -> byte == fail 35162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 35262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 35362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 35462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 35562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 35662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 20); 35762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 35862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 19); 35962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 36062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 36162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 36262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 36362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 36462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 20); 36562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 36662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 20); 36762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Integer.class; // Int -> byte == fail 36862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 36962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 37062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 37162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 37262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 37362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 21); 37462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 37562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 20); 37662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 37762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 37862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 37962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 38062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 38162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 21); 38262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 38362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 21); 38462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Short.class; // Short -> byte == fail 38562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 38662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 38762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 38862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 38962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 39062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 22); 39162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 39262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 21); 39362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 39462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 39562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 39662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 39762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 39862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 22); 39962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 40062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 22); 40162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Character.class; // Char -> byte == fail 40262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 40362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteFoo(); 40462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 40562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 40662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 40762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 23); 40862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 40962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 22); 41062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 41162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.byteBar(); 41262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 41362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 41462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 41562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 23); 41662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 41762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 23); 41862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers myHandler.returnType = Character.class; // Char -> short == fail 41962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 42062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.shortFoo(); 42162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected ClassCastException"); 42262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 42362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 42462d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(fooInvocations == 24); 42562d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 42662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 23); 42762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers try { 42862d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers proxyMyInterface.shortBar(); 42962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers throw new AssertionError("Expected NPE"); 43062d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } catch (ClassCastException e) { 43162d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers } 43262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers check(barInvocations == 24); 43362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 434466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers System.out.println(testName + ".testProxyReturns PASSED"); 435466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 436466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 437466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers static void testProxyArgPassing() { 438466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers System.out.println(testName + ".testProxyArgPassing RUNNING"); 439466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers MyInvocationHandler myHandler = new MyInvocationHandler(); 440466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers MyInterface proxyMyInterface = 441466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers (MyInterface)Proxy.newProxyInstance(ReturnsAndArgPassing.class.getClassLoader(), 442466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers new Class[] { MyInterface.class }, 443466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers myHandler); 444466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 445466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check((Integer)proxyMyInterface.selectArg(0, Integer.MAX_VALUE, Long.MAX_VALUE, 446466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Float.MAX_VALUE, Double.MAX_VALUE, Object.class) == 0); 447466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check((Integer)proxyMyInterface.selectArg(1, Integer.MAX_VALUE, Long.MAX_VALUE, 448466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Float.MAX_VALUE, Double.MAX_VALUE, Object.class) == Integer.MAX_VALUE); 449466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check((Long)proxyMyInterface.selectArg(2, Integer.MAX_VALUE, Long.MAX_VALUE, 450466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Float.MAX_VALUE, Double.MAX_VALUE, Object.class) == Long.MAX_VALUE); 451466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check((Float)proxyMyInterface.selectArg(3, Integer.MAX_VALUE, Long.MAX_VALUE, 452466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Float.MAX_VALUE, Double.MAX_VALUE, Object.class) == Float.MAX_VALUE); 453466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check((Double)proxyMyInterface.selectArg(4, Integer.MAX_VALUE, Long.MAX_VALUE, 454466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Float.MAX_VALUE, Double.MAX_VALUE, Object.class) == Double.MAX_VALUE); 455466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers check(proxyMyInterface.selectArg(5, Integer.MAX_VALUE, Long.MAX_VALUE, 456466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers Float.MAX_VALUE, Double.MAX_VALUE, Object.class) == Object.class); 457466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 458466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers System.out.println(testName + ".testProxyArgPassing PASSED"); 459466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 460466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers 461466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers public static void main(String args[]) { 462466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers testProxyReturns(); 463466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers testProxyArgPassing(); 464466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers } 465466bb25416b88fabd5d4387b7c7e5cc1ece78b8cIan Rogers} 466