192 Path classFile = Paths.get("p", "Provider.class");
193 Files.copy(output.resolve(classFile),
194 mods.resolve(TEST2_MODULE).resolve(classFile),
195 StandardCopyOption.REPLACE_EXISTING);
196
197 // load providers and instantiate each one
198 loadProviders(mods, TEST2_MODULE).forEach(Provider::get);
199 }
200
201
202 /**
203 * Test a service provider that defines more than one no-args
204 * public static "provider" method.
205 */
206 @Test(expectedExceptions = ServiceConfigurationError.class)
207 public void testWithTwoFactoryMethods() throws Exception {
208 Path mods = compileTest(TEST1_MODULE);
209
210 ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS
211 + ClassWriter.COMPUTE_FRAMES);
212 cw.visit(V1_9,
213 ACC_PUBLIC + ACC_SUPER,
214 "p/ProviderFactory",
215 null,
216 "java/lang/Object",
217 null);
218
219 // public static p.Service provider()
220 MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC,
221 "provider",
222 "()Lp/Service;",
223 null,
224 null);
225 mv.visitTypeInsn(NEW, "p/ProviderFactory$1");
226 mv.visitInsn(DUP);
227 mv.visitMethodInsn(INVOKESPECIAL,
228 "p/ProviderFactory$1",
229 "<init>", "()V",
230 false);
231 mv.visitInsn(ARETURN);
232 mv.visitMaxs(0, 0);
|
192 Path classFile = Paths.get("p", "Provider.class");
193 Files.copy(output.resolve(classFile),
194 mods.resolve(TEST2_MODULE).resolve(classFile),
195 StandardCopyOption.REPLACE_EXISTING);
196
197 // load providers and instantiate each one
198 loadProviders(mods, TEST2_MODULE).forEach(Provider::get);
199 }
200
201
202 /**
203 * Test a service provider that defines more than one no-args
204 * public static "provider" method.
205 */
206 @Test(expectedExceptions = ServiceConfigurationError.class)
207 public void testWithTwoFactoryMethods() throws Exception {
208 Path mods = compileTest(TEST1_MODULE);
209
210 ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS
211 + ClassWriter.COMPUTE_FRAMES);
212 cw.visit(V9,
213 ACC_PUBLIC + ACC_SUPER,
214 "p/ProviderFactory",
215 null,
216 "java/lang/Object",
217 null);
218
219 // public static p.Service provider()
220 MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC,
221 "provider",
222 "()Lp/Service;",
223 null,
224 null);
225 mv.visitTypeInsn(NEW, "p/ProviderFactory$1");
226 mv.visitInsn(DUP);
227 mv.visitMethodInsn(INVOKESPECIAL,
228 "p/ProviderFactory$1",
229 "<init>", "()V",
230 false);
231 mv.visitInsn(ARETURN);
232 mv.visitMaxs(0, 0);
|