< prev index next >

test/langtools/tools/javac/classfiles/attributes/Synthetic/BridgeMethodsForLambdaTest.java

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com


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




  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 for super::function()
  48  * 5. method reference to vararg method.
  49  * 6. method reference to array's method.
  50  * 7. constructors for Inner1 and Inner2.




  51  */
  52 @ExpectedClass(className = "BridgeMethodsForLambdaTest",
  53         expectedMethods = {"<init>()", "<clinit>()", "function(java.lang.Integer[])"},
  54         expectedNumberOfSyntheticMethods = 3)
  55 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner1",
  56         expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()", "run()"},
  57         expectedFields = "lambda1",
  58         expectedNumberOfSyntheticMethods = 1,
  59         expectedNumberOfSyntheticFields = 1)
  60 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner2",
  61         expectedMethods = {"<init>()", "staticFunction()"},
  62         expectedFields = "lambda1",
  63         expectedNumberOfSyntheticMethods = 1)
  64 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner3",
  65         expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()"},
  66         expectedNumberOfSyntheticFields = 1)
  67 @ExpectedClass(className = "BridgeMethodsForLambdaTest$Inner4",
  68         expectedMethods = {"<init>(BridgeMethodsForLambdaTest)", "function()"},
  69         expectedNumberOfSyntheticMethods = 1,
  70         expectedNumberOfSyntheticFields = 1)
  71 public class BridgeMethodsForLambdaTest {
  72 
  73     private class Inner1 implements Runnable {
  74         private Inner1() {


< prev index next >