@Override public boolean visit(EntityProxyModel x) { visitExtraTypes(x); return true; }
void maybeVisit(JClassType type) { if (type == null) { return; } else if (!seen.add(type)) { // Short-circuit to prevent type-loops return; } examineTypeOnce(type); } }
@Override void examineTypeOnce(JClassType type) { JEnumType asEnum = type.isEnum(); if (asEnum != null) { referenced.add(asEnum); } super.examineTypeOnce(type); } };
private void writeContextImplementations() { for (ContextMethod method : model.getMethods()) { PrintWriter pw = context.tryCreate(logger, method.getPackageName(), method.getSimpleSourceName()); if (pw == null) { new ClassSourceFileComposerFactory(method.getPackageName(), method.getSimpleSourceName()); factory.setSuperclass(AbstractRequestContext.class.getCanonicalName()); factory.addImplementedInterface(method.getImplementedInterfaceQualifiedSourceName()); SourceWriter sw = factory.createSourceWriter(context, pw); .getSimpleSourceName(), AbstractRequestFactory.class.getCanonicalName(), Dialect.class .getCanonicalName(), method.getDialect().name()); Set<EntityProxyModel> models = findReferencedEntities(method); Set<JEnumType> extraEnumTypes = findExtraEnums(method); writeAutoBeanFactory(sw, models, extraEnumTypes); for (RequestMethod request : method.getRequestMethods()) { JMethod jmethod = request.getDeclarationMethod(); String operation = request.getOperation(); if (request.isInstance()) { request.getInstanceType() == null ? BaseProxy.class.getCanonicalName() : request.getInstanceType().getQualifiedSourceName(), request.getDataType().getParameterizedQualifiedSourceName(), jmethod.getReturnType().getParameterizedQualifiedSourceName()); sw.indent();
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { this.context = context; this.logger = logger; TypeOracle oracle = context.getTypeOracle(); JClassType toGenerate = oracle.findType(typeName).isInterface(); if (toGenerate == null) { logger.log(TreeLogger.ERROR, typeName + " is not an interface type"); throw new UnableToCompleteException(); } String packageName = toGenerate.getPackage().getName(); String simpleSourceName = toGenerate.getName().replace('.', '_') + "Impl"; PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return packageName + "." + simpleSourceName; } model = new RequestFactoryModel(logger, toGenerate); ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleSourceName); factory.setSuperclass(AbstractClientRequestFactory.class.getCanonicalName()); factory.addImplementedInterface(typeName); SourceWriter sw = factory.createSourceWriter(context, pw); writeAutoBeanFactory(sw, model.getAllProxyModels(), findExtraEnums(model)); writeContextMethods(sw); writeContextImplementations(); writeTypeMap(sw); sw.commit(logger); return factory.getCreatedClassName(); }
@Override public void endVisit(RequestMethod x) { // Request<Foo> -> Foo maybeVisit(x.getDataType()); // InstanceRequest<Proxy, Foo> -> Proxy if (x.getInstanceType() != null) { x.getInstanceType().accept(this); } // Request<Void> doSomething(Foo foo, Bar bar) -> Foo, Bar for (JType param : x.getDeclarationMethod().getParameterTypes()) { maybeVisit(param.isClassOrInterface()); } // setFoo(Foo foo) -> Foo for (JMethod method : x.getExtraSetters()) { maybeVisit(method.getParameterTypes()[0].isClassOrInterface()); } }
@Override void examineTypeOnce(JClassType type) { // Need this to handle List<Foo>, Map<Foo> JParameterizedType parameterized = type.isParameterized(); if (parameterized != null) { for (JClassType arg : parameterized.getTypeArgs()) { maybeVisit(arg); } } JClassType base = ModelUtils.ensureBaseType(type); EntityProxyModel peer = model.getPeer(base); if (peer == null) { return; } peer.accept(this); }
@Override void examineTypeOnce(JClassType type) { JEnumType asEnum = type.isEnum(); if (asEnum != null) { toReturn.add(asEnum); } else { JParameterizedType parameterized = type.isParameterized(); if (parameterized != null) { for (JClassType arg : parameterized.getTypeArgs()) { maybeVisit(arg); } } } } });
private void writeContextImplementations() { for (ContextMethod method : model.getMethods()) { PrintWriter pw = context.tryCreate(logger, method.getPackageName(), method.getSimpleSourceName()); if (pw == null) { new ClassSourceFileComposerFactory(method.getPackageName(), method.getSimpleSourceName()); factory.setSuperclass(AbstractRequestContext.class.getCanonicalName()); factory.addImplementedInterface(method.getImplementedInterfaceQualifiedSourceName()); SourceWriter sw = factory.createSourceWriter(context, pw); .getSimpleSourceName(), AbstractRequestFactory.class.getCanonicalName(), Dialect.class .getCanonicalName(), method.getDialect().name()); Set<EntityProxyModel> models = findReferencedEntities(method); Set<JEnumType> extraEnumTypes = findExtraEnums(method); writeAutoBeanFactory(sw, models, extraEnumTypes); for (RequestMethod request : method.getRequestMethods()) { JMethod jmethod = request.getDeclarationMethod(); String operation = request.getOperation(); if (request.isInstance()) { request.getInstanceType() == null ? BaseProxy.class.getCanonicalName() : request.getInstanceType().getQualifiedSourceName(), request.getDataType().getParameterizedQualifiedSourceName(), jmethod.getReturnType().getParameterizedQualifiedSourceName()); sw.indent();
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { this.context = context; this.logger = logger; TypeOracle oracle = context.getTypeOracle(); JClassType toGenerate = oracle.findType(typeName).isInterface(); if (toGenerate == null) { logger.log(TreeLogger.ERROR, typeName + " is not an interface type"); throw new UnableToCompleteException(); } String packageName = toGenerate.getPackage().getName(); String simpleSourceName = toGenerate.getName().replace('.', '_') + "Impl"; PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return packageName + "." + simpleSourceName; } model = new RequestFactoryModel(logger, toGenerate); ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleSourceName); factory.setSuperclass(AbstractClientRequestFactory.class.getCanonicalName()); factory.addImplementedInterface(typeName); SourceWriter sw = factory.createSourceWriter(context, pw); writeAutoBeanFactory(sw, model.getAllProxyModels(), findExtraEnums(model)); writeContextMethods(sw); writeContextImplementations(); writeTypeMap(sw); sw.commit(logger); return factory.getCreatedClassName(); }
@Override public void endVisit(RequestMethod x) { // Request<Foo> -> Foo maybeVisit(x.getDataType()); // InstanceRequest<Proxy, Foo> -> Proxy if (x.getInstanceType() != null) { x.getInstanceType().accept(this); } // Request<Void> doSomething(Foo foo, Bar bar) -> Foo, Bar for (JType param : x.getDeclarationMethod().getParameterTypes()) { maybeVisit(param.isClassOrInterface()); } // setFoo(Foo foo) -> Foo for (JMethod method : x.getExtraSetters()) { maybeVisit(method.getParameterTypes()[0].isClassOrInterface()); } }
@Override void examineTypeOnce(JClassType type) { // Need this to handle List<Foo>, Map<Foo> JParameterizedType parameterized = type.isParameterized(); if (parameterized != null) { for (JClassType arg : parameterized.getTypeArgs()) { maybeVisit(arg); } } JClassType base = ModelUtils.ensureBaseType(type); EntityProxyModel peer = model.getPeer(base); if (peer == null) { return; } peer.accept(this); }
@Override public boolean visit(EntityProxyModel x) { visitExtraTypes(x); return true; }
void maybeVisit(JClassType type) { if (type == null) { return; } else if (!seen.add(type)) { // Short-circuit to prevent type-loops return; } examineTypeOnce(type); } }
@Override void examineTypeOnce(JClassType type) { JEnumType asEnum = type.isEnum(); if (asEnum != null) { referenced.add(asEnum); } super.examineTypeOnce(type); } };
@Override void examineTypeOnce(JClassType type) { JEnumType asEnum = type.isEnum(); if (asEnum != null) { toReturn.add(asEnum); } else { JParameterizedType parameterized = type.isParameterized(); if (parameterized != null) { for (JClassType arg : parameterized.getTypeArgs()) { maybeVisit(arg); } } } } });
@Override public boolean visit(ContextMethod x) { visitExtraTypes(x); return true; }
@Override public boolean visit(ContextMethod x) { visitExtraTypes(x); return true; }
@Override public boolean visit(RequestFactoryModel x) { visitExtraTypes(x); return true; }
@Override public boolean visit(RequestFactoryModel x) { visitExtraTypes(x); return true; }