diff options
author | 2017-03-27 08:00:18 +0000 | |
---|---|---|
committer | 2017-03-27 09:02:22 +0100 | |
commit | 18ea1c9e9281b5c143b8c376d76c3ff9cae885fb (patch) | |
tree | 1b2a4a2d8c15fc9a01e539f29275a05833cb44f9 /test/616-cha-proxy-method-inline/src/Main.java | |
parent | 624dc59e7d0ab8b916a986b502cb358d16182234 (diff) |
"Revert^6 "CHA for interface method."""
Update test expectations for CHA tests flaking on no-dex2oat.
bug:36344221
This reverts commit 27ef25f084017421ca05508208f436b5fc11df73.
Change-Id: Ie92adc7a2ec3b3081a1c57d71f8c89247e58cd46
Diffstat (limited to 'test/616-cha-proxy-method-inline/src/Main.java')
-rw-r--r-- | test/616-cha-proxy-method-inline/src/Main.java | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/test/616-cha-proxy-method-inline/src/Main.java b/test/616-cha-proxy-method-inline/src/Main.java new file mode 100644 index 0000000000..be7bc820b3 --- /dev/null +++ b/test/616-cha-proxy-method-inline/src/Main.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + +class DebugProxy implements java.lang.reflect.InvocationHandler { + private Object obj; + static Class<?>[] interfaces = {Foo.class}; + + public static Object newInstance(Object obj) { + return java.lang.reflect.Proxy.newProxyInstance( + Foo.class.getClassLoader(), + interfaces, + new DebugProxy(obj)); + } + + private DebugProxy(Object obj) { + this.obj = obj; + } + + public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { + Object result; + if (obj == null) { + return null; + } + try { + System.out.println("before invoking method " + m.getName()); + result = m.invoke(obj, args); + } catch (InvocationTargetException e) { + throw e.getTargetException(); + } catch (Exception e) { + throw new RuntimeException("unexpected invocation exception: " + e.getMessage()); + } finally { + System.out.println("after invoking method " + m.getName()); + } + return result; + } +} + +public class Main { + public static void call(Foo foo) { + if (foo == null) { + return; + } + foo.bar(null); + } + + public static void main(String[] args) { + System.loadLibrary(args[0]); + Foo foo = (Foo)DebugProxy.newInstance(null); + ensureJitCompiled(Main.class, "call"); + call(foo); + } + + private static native void ensureJitCompiled(Class<?> itf, String method_name); +} |