@Override protected String generate(final TreeLogger logger, final GeneratorContext context) { ClassStructureBuilder<?> classBuilder = ClassBuilder.implement(JaxrsProxyLoader.class); MethodBlockBuilder<?> loadProxies = classBuilder.publicMethod(void.class, "loadProxies"); final InterceptorProvider interceptorProvider = getInterceptorProvider(context); final Multimap<MetaClass, MetaClass> exceptionMappers = getClientExceptionMappers(context); Collection<MetaClass> remotes = ClassScanner.getTypesAnnotatedWith(Path.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(remotes); for (MetaClass remote : remotes) { if (remote.isInterface()) { // create the remote proxy for this interface ClassStructureBuilder<?> remoteProxy = new JaxrsProxyGenerator(remote, context, interceptorProvider, exceptionMappers).generate(); loadProxies.append(new InnerClass(remoteProxy.getClassDefinition())); // create the proxy provider Statement proxyProvider = ObjectBuilder.newInstanceOf(ProxyProvider.class) .extend() .publicOverridesMethod("getProxy") .append(Stmt.nestedCall(Stmt.newObject(remoteProxy.getClassDefinition())).returnValue()) .finish() .finish(); // create the call that registers the proxy provided for the generated proxy loadProxies.append(Stmt.invokeStatic(RemoteServiceProxyFactory.class, "addRemoteProxy", remote, proxyProvider)); } } classBuilder = (ClassStructureBuilder<?>) loadProxies.finish(); return classBuilder.toJavaString(); }