InvokeMH.java revision 673:584365f256a7
1192067Snwhitehorn/*
2192067Snwhitehorn * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
3192067Snwhitehorn * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4192067Snwhitehorn *
5192067Snwhitehorn * This code is free software; you can redistribute it and/or modify it
6192067Snwhitehorn * under the terms of the GNU General Public License version 2 only, as
7192067Snwhitehorn * published by the Free Software Foundation.
8192067Snwhitehorn *
9192067Snwhitehorn * This code is distributed in the hope that it will be useful, but WITHOUT
10192067Snwhitehorn * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11192067Snwhitehorn * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12192067Snwhitehorn * version 2 for more details (a copy is included in the LICENSE file that
13192067Snwhitehorn * accompanied this code).
14192067Snwhitehorn *
15192067Snwhitehorn * You should have received a copy of the GNU General Public License version
16192067Snwhitehorn * 2 along with this work; if not, write to the Free Software Foundation,
17192067Snwhitehorn * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18192067Snwhitehorn *
19192067Snwhitehorn * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20192067Snwhitehorn * or visit www.oracle.com if you need additional information or have any
21192067Snwhitehorn * questions.
22192067Snwhitehorn */
23192067Snwhitehorn
24192067Snwhitehorn/*
25192067Snwhitehorn * @test
26192067Snwhitehorn * @bug 6754038 6979327
27192067Snwhitehorn * @summary Generate call sites for method handle
28192067Snwhitehorn * @author jrose
29192067Snwhitehorn *
30192067Snwhitehorn * @compile -source 7 -target 7 -XDallowTransitionalJSR292=no InvokeMH.java
31192067Snwhitehorn */
32192067Snwhitehorn
33192067Snwhitehorn/*
34192067Snwhitehorn * Standalone testing:
35192067Snwhitehorn * <code>
36192067Snwhitehorn * $ cd $MY_REPO_DIR/langtools
37192067Snwhitehorn * $ (cd make; make)
38192067Snwhitehorn * $ ./dist/bootstrap/bin/javac -d dist test/tools/javac/meth/InvokeMH.java
39192067Snwhitehorn * $ javap -c -classpath dist meth.InvokeMH
40192067Snwhitehorn * </code>
41192067Snwhitehorn */
42192067Snwhitehorn
43192067Snwhitehornpackage meth;
44192067Snwhitehorn
45192067Snwhitehornimport java.dyn.MethodHandle;
46192067Snwhitehorn
47209908Srajpublic class InvokeMH {
48209908Sraj    void test(MethodHandle mh_SiO,
49209908Sraj              MethodHandle mh_vS,
50209908Sraj              MethodHandle mh_vi,
51209908Sraj              MethodHandle mh_vv) throws Throwable {
52192067Snwhitehorn        Object o; String s; int i;  // for return type testing
53192067Snwhitehorn
54192067Snwhitehorn        // next five must have sig = (String,int)Object
55192067Snwhitehorn        mh_SiO.invokeExact("world", 123);
56192532Sraj        mh_SiO.invokeExact("mundus", 456);
57192532Sraj        Object k = "kosmos";
58192532Sraj        mh_SiO.invokeExact((String)k, 789);
59224611Smarcel        o = mh_SiO.invokeExact((String)null, 000);
60192532Sraj        o = (Object) mh_SiO.invokeExact("arda", -123);
61192532Sraj
62217523Smarcel        // sig = ()String
63217523Smarcel        s = (String) mh_vS.invokeExact();
64193492Sraj
65192067Snwhitehorn        // sig = ()int
66192067Snwhitehorn        i = (int) mh_vi.invokeExact();
67192067Snwhitehorn        o = (int) mh_vi.invokeExact();
68192067Snwhitehorn
69192067Snwhitehorn        // sig = ()void
70192067Snwhitehorn        mh_vv.invokeExact();
71192067Snwhitehorn    }
72192067Snwhitehorn
73192067Snwhitehorn    void testGen(MethodHandle mh_SiO,
74192067Snwhitehorn                 MethodHandle mh_vS,
75212054Snwhitehorn                 MethodHandle mh_vi,
76212054Snwhitehorn                 MethodHandle mh_vv) throws Throwable {
77192067Snwhitehorn        Object o; String s; int i;  // for return type testing
78192067Snwhitehorn
79192067Snwhitehorn        // next five must have sig = (*,*)*
80192067Snwhitehorn        o = mh_SiO.invokeGeneric((Object)"world", (Object)123);
81192067Snwhitehorn        mh_SiO.invokeGeneric((Object)"mundus", (Object)456);
82192067Snwhitehorn        Object k = "kosmos";
83192067Snwhitehorn        o = mh_SiO.invokeGeneric(k, 789);
84192067Snwhitehorn        o = mh_SiO.invokeGeneric(null, 000);
85192067Snwhitehorn        o = mh_SiO.invokeGeneric("arda", -123);
86192067Snwhitehorn
87212453Smav        // sig = ()String
88212054Snwhitehorn        o = mh_vS.invokeGeneric();
89192067Snwhitehorn
90192067Snwhitehorn        // sig = ()int
91192067Snwhitehorn        i = (int) mh_vi.invokeGeneric();
92192067Snwhitehorn        o = (int) mh_vi.invokeGeneric();
93192067Snwhitehorn        mh_vi.invokeGeneric();
94192067Snwhitehorn
95192067Snwhitehorn        // sig = ()void
96192067Snwhitehorn        mh_vv.invokeGeneric();
97192067Snwhitehorn        o = mh_vv.invokeGeneric();
98192067Snwhitehorn    }
99192067Snwhitehorn}
100192067Snwhitehorn