16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 8044537 8200301
27 * @summary Checking ACC_SYNTHETIC flag is generated for bridge method
28 * generated for lambda expressions and method references.
29 * @modules jdk.compiler/com.sun.tools.javac.api
30 * jdk.compiler/com.sun.tools.javac.main
31 * jdk.jdeps/com.sun.tools.classfile
32 * @library /tools/lib /tools/javac/lib ../lib
33 * @build toolbox.ToolBox InMemoryFileManager TestResult TestBase
34 * @build SyntheticTestDriver ExpectedClass ExpectedClasses
35 * @compile -XDdeduplicateLambdas=false BridgeMethodsForLambdaTest.java
36 * @run main SyntheticTestDriver BridgeMethodsForLambdaTest 1
37 */
38
39 import java.util.Comparator;
40 import java.util.stream.IntStream;
41
42 /**
43 * Synthetic members:
44 * 1. inner class for Inner1.
45 * 2. method for () -> {} in Inner1
46 * 3. method for () -> {} in Inner2
47 * 4. method references to private methods.
48 * 5. method for super::function()
49 * 6. method references to private static methods.
50 * 7. access method for private method function().
51 * 8. access method for private static method staticFunction().
52 * 9. method reference to vararg method.
53 * 10. method reference to array's method.
54 * 11. constructors for Inner1 and Inner2.
55 */
56 @ExpectedClass(className = "BridgeMethodsForLambdaTest",
57 expectedMethods = {"<init>()", "<clinit>()", "function(java.lang.Integer[])"},
58 expectedNumberOfSyntheticMethods = 6)
59 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner1",
60 expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()", "run()"},
61 expectedFields = "lambda1",
62 expectedNumberOfSyntheticMethods = 4,
63 expectedNumberOfSyntheticFields = 1)
64 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner2",
65 expectedMethods = {"<init>()", "staticFunction()"},
66 expectedFields = "lambda1",
67 expectedNumberOfSyntheticMethods = 3)
68 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner3",
69 expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()"},
70 expectedNumberOfSyntheticMethods = 1,
71 expectedNumberOfSyntheticFields = 1)
72 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner4",
73 expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()"},
74 expectedNumberOfSyntheticMethods = 1,
75 expectedNumberOfSyntheticFields = 1)
76 public class BridgeMethodsForLambdaTest {
77
78 private class Inner1 implements Runnable {
79 private Inner1() {
80 }
81 private Runnable lambda1 = () -> {
82 };
83 private void function() {
84 }
85 @Override
86 public void run() {
87 }
88 }
89
90 private static class Inner2 {
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 8044537 8200301
27 * @summary Checking ACC_SYNTHETIC flag is generated for bridge method
28 * generated for lambda expressions and method references.
29 * @modules jdk.compiler/com.sun.tools.javac.api
30 * jdk.compiler/com.sun.tools.javac.main
31 * jdk.jdeps/com.sun.tools.classfile
32 * @library /tools/lib /tools/javac/lib ../lib
33 * @build toolbox.ToolBox InMemoryFileManager TestResult TestBase
34 * @build SyntheticTestDriver ExpectedClass ExpectedClasses
35 * @compile -XDdeduplicateLambdas=false BridgeMethodsForLambdaTest.java
36 * @run main SyntheticTestDriver BridgeMethodsForLambdaTest
37 */
38
39 import java.util.Comparator;
40 import java.util.stream.IntStream;
41
42 /**
43 * Synthetic members:
44 * 1. inner class for Inner1.
45 * 2. method for () -> {} in Inner1
46 * 3. method for () -> {} in Inner2
47 * 4. method references to private methods.
48 * 5. method for super::function()
49 * 6. method references to private static methods.
50 * 7. access method for private method function().
51 * 8. access method for private static method staticFunction().
52 * 9. method reference to vararg method.
53 * 10. method reference to array's method.
54 * 11. constructors for Inner1 and Inner2.
55 */
56 @ExpectedClass(className = "BridgeMethodsForLambdaTest",
57 expectedMethods = {"<init>()", "<clinit>()", "function(java.lang.Integer[])"},
58 expectedNumberOfSyntheticMethods = 6)
59 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner1",
60 expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()", "run()"},
61 expectedFields = "lambda1",
62 expectedNumberOfSyntheticMethods = 1,
63 expectedNumberOfSyntheticFields = 1)
64 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner2",
65 expectedMethods = {"<init>()", "staticFunction()"},
66 expectedFields = "lambda1",
67 expectedNumberOfSyntheticMethods = 1)
68 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner3",
69 expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()"},
70 expectedNumberOfSyntheticFields = 1)
71 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner4",
72 expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()"},
73 expectedNumberOfSyntheticMethods = 1,
74 expectedNumberOfSyntheticFields = 1)
75 public class BridgeMethodsForLambdaTest {
76
77 private class Inner1 implements Runnable {
78 private Inner1() {
79 }
80 private Runnable lambda1 = () -> {
81 };
82 private void function() {
83 }
84 @Override
85 public void run() {
86 }
87 }
88
89 private static class Inner2 {
|