cmm.append(Stmt.declareVariable("metamodel", Stmt.newObject(ErraiMetamodel.class))); while (superclass != null) { if (entityTypes.contains(superclass)) { cmm.append(Stmt.loadVariable(entitySnapshotVarName(superclass)) .invoke("addSubtype", Stmt.loadVariable(entityTypeVarName))); cmm.append(new StringStatement("metamodel.freeze()")); cmm.append(Stmt.loadVariable("metamodel").returnValue()); cmm.finish();
loadProxies.append(registerConverterStatement);
loadProxies.append(registerConverterStatement);
cmm.append(Stmt.declareVariable(ErraiEntityType.class).asFinal().named("entityType") .initializeWith(entityTypeSubclass.finish().withParameters(et.getName(), et.getJavaType()))); attrib, SingularAttribute.class, ErraiSingularAttribute.class, methodBodyCallback, EntityType.class, ManagedType.class, Type.class); cmm.append(Stmt.loadVariable("entityType").invoke("addAttribute", attribSnapshot)); attrib, PluralAttribute.class, ErraiPluralAttribute.class, methodBodyCallback, EntityType.class, ManagedType.class, Type.class); cmm.append(Stmt.loadVariable("entityType").invoke("addAttribute", attribSnapshot)); cmm.append(Stmt.loadVariable("entityType").returnValue()); cmm.finish(); pmm.append(Stmt.loadVariable(entityTypeVarName).assignValue(Stmt.loadVariable("this").invoke(entityTypeMethodName)));
@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(); }