< prev index next >

test/hotspot/jtreg/vmTestbase/vm/runtime/defmeth/BasicTest.java

Print this page
rev 50606 : imported patch jep181-rev3


 140      *
 141      * ...
 142      */
 143     public void testNonPublic() {
 144         TestBuilder b = factory.getBuilder();
 145 
 146         Interface I = b.intf("I")
 147                 .defaultMethod("m1", "()V").private_().emptyBody().build()
 148                 .defaultMethod("m2", "()I").private_().returns(1).build()
 149             .build();
 150 
 151         ConcreteClass C = b.clazz("C").implement(I).build();
 152 
 153         b.test().callSite(C, C, "m1",  "()V").throws_(NoSuchMethodError.class).done()
 154          .test().callSite(C, C, "m2",  "()I").throws_(NoSuchMethodError.class).done()
 155 
 156         .run();
 157     }
 158 
 159     /*
 160      * Default method override w/ non-public concrete method

 161      *
 162      * interface I { void m() default {} }
 163      * class C implements I {
 164      *   [private/package-private/protected]
 165      *   void m() {}
 166      * }
 167      *
 168      */
 169     @KnownFailure(modes = {INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY}) // NPE, instead of IAE
 170     public void testNonPublicOverride() {
 171         TestBuilder b = factory.getBuilder();
 172 
 173         Interface I = b.intf("I")
 174                 .defaultMethod("m","()V").emptyBody().build()
 175             .build();
 176 
 177         ConcreteClass C = b.clazz("C").implement(I)
 178                 .concreteMethod("m", "()V").private_().emptyBody().build()
 179             .build();
 180 
 181         ConcreteClass D = b.clazz("D").implement(I)
 182                 .concreteMethod("m", "()V").protected_().emptyBody().build()
 183             .build();
 184 
 185          ConcreteClass E = b.clazz("E").implement(I)
 186                 .concreteMethod("m", "()V").package_private().emptyBody().build()
 187             .build();
 188 
 189         b.test().callSite(I, C, "m", "()V").throws_(IllegalAccessError.class).done()
 190          .test().callSite(I, D, "m", "()V").throws_(IllegalAccessError.class).done()
 191          .test().callSite(I, E, "m", "()V").throws_(IllegalAccessError.class).done()
 192 
 193         .run();
 194     }
 195 
 196 
 197     /**
 198      * interface I {
 199      *   static { throw new RE()}
 200      *   public default void m() {}
 201      * }
 202      *
 203      * class C implements I {}
 204      *
 205      * TEST: C c = new C(); ==> LinkageError
 206      * Static initialization of class C will trigger
 207      * I's static initialization due to I's default method.
 208      */
 209     public void testStaticInit() throws ClassNotFoundException {
 210         TestBuilder b = factory.getBuilder();
 211 




 140      *
 141      * ...
 142      */
 143     public void testNonPublic() {
 144         TestBuilder b = factory.getBuilder();
 145 
 146         Interface I = b.intf("I")
 147                 .defaultMethod("m1", "()V").private_().emptyBody().build()
 148                 .defaultMethod("m2", "()I").private_().returns(1).build()
 149             .build();
 150 
 151         ConcreteClass C = b.clazz("C").implement(I).build();
 152 
 153         b.test().callSite(C, C, "m1",  "()V").throws_(NoSuchMethodError.class).done()
 154          .test().callSite(C, C, "m2",  "()I").throws_(NoSuchMethodError.class).done()
 155 
 156         .run();
 157     }
 158 
 159     /*
 160      * Default method override attempt w/ non-public concrete method.
 161      * Private methods never override any other method.
 162      *
 163      * interface I { int m() default { returns 1; } }
 164      * class C/D/E implements I {
 165      *   [private/protected/package-private]
 166      *   int m() { returns 2;}
 167      * }
 168      *
 169      */

 170     public void testNonPublicOverride() {
 171         TestBuilder b = factory.getBuilder();
 172 
 173         Interface I = b.intf("I")
 174                 .defaultMethod("m", "()I").returns(1).build()
 175             .build();
 176 
 177         ConcreteClass C = b.clazz("C").implement(I)
 178             .concreteMethod("m", "()I").private_().returns(2).build()
 179             .build();
 180 
 181         ConcreteClass D = b.clazz("D").implement(I)
 182                 .concreteMethod("m", "()I").protected_().returns(2).build()
 183             .build();
 184 
 185          ConcreteClass E = b.clazz("E").implement(I)
 186                 .concreteMethod("m", "()I").package_private().returns(2).build()
 187             .build();
 188 
 189          b.test().callSite(I, C, "m", "()I").returns(1).done()
 190           .test().callSite(I, D, "m", "()I").throws_(IllegalAccessError.class).done()
 191           .test().callSite(I, E, "m", "()I").throws_(IllegalAccessError.class).done()
 192 
 193         .run();
 194     }
 195 
 196 
 197     /**
 198      * interface I {
 199      *   static { throw new RE()}
 200      *   public default void m() {}
 201      * }
 202      *
 203      * class C implements I {}
 204      *
 205      * TEST: C c = new C(); ==> LinkageError
 206      * Static initialization of class C will trigger
 207      * I's static initialization due to I's default method.
 208      */
 209     public void testStaticInit() throws ClassNotFoundException {
 210         TestBuilder b = factory.getBuilder();
 211 


< prev index next >