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 { |