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
|