private void generateMethod(ClassStructureBuilder<?> classBuilder, MetaMethod method) { final List<Class<?>> interceptors = interceptorProvider.getInterceptors(remote, method); final boolean intercepted = !interceptors.isEmpty(); final Parameter[] parms = DefParameters.from(method).getParameters().toArray(new Parameter[0]); final Parameter[] finalParms = new Parameter[parms.length]; final List<Statement> parmVars = new ArrayList<Statement>(); for (int i = 0; i < parms.length; i++) { finalParms[i] = Parameter.of(parms[i].getType().getErased(), parms[i].getName(), true); parmVars.add(Stmt.loadVariable(parms[i].getName())); } final Statement parameters = (intercepted) ? new StringStatement("getParameters()", MetaClassFactory.get(Object[].class)) : Stmt.newArray(Object.class).initialize(parmVars.toArray()); final BlockBuilder<?> methodBlock = classBuilder.publicMethod(method.getReturnType().getErased(), method.getName(), finalParms); if (intercepted) { methodBlock.append(generateInterceptorLogic(classBuilder, method, generateRequest(classBuilder, method, parameters, true), parmVars, interceptors)); } else { methodBlock.append(generateRequest(classBuilder, method, parameters, false)); } final Statement returnStmt = ProxyUtil.generateProxyMethodReturnStatement(method); if (returnStmt != null) { methodBlock.append(returnStmt); } methodBlock.finish(); }
private void generateMethod(ClassStructureBuilder<?> classBuilder, MetaMethod method) { final List<Class<?>> interceptors = interceptorProvider.getInterceptors(remote, method); final boolean intercepted = !interceptors.isEmpty(); final Parameter[] parms = DefParameters.from(method).getParameters().toArray(new Parameter[0]); final Parameter[] finalParms = new Parameter[parms.length]; final List<Statement> parmVars = new ArrayList<Statement>(); for (int i = 0; i < parms.length; i++) { finalParms[i] = Parameter.of(parms[i].getType().getErased(), parms[i].getName(), true); parmVars.add(Stmt.loadVariable(parms[i].getName())); } final Statement parameters = (intercepted) ? new StringStatement("getParameters()", MetaClassFactory.get(Object[].class)) : Stmt.newArray(Object.class).initialize(parmVars.toArray()); final BlockBuilder<?> methodBlock = classBuilder.publicMethod(method.getReturnType().getErased(), method.getName(), finalParms); if (intercepted) { methodBlock.append(generateInterceptorLogic(classBuilder, method, generateRequest(classBuilder, method, parameters, true), parmVars, interceptors)); } else { methodBlock.append(generateRequest(classBuilder, method, parameters, false)); } final Statement returnStmt = ProxyUtil.generateProxyMethodReturnStatement(method); if (returnStmt != null) { methodBlock.append(returnStmt); } methodBlock.finish(); }
public void generate() { if (resourceMethod.getHttpMethod() != null) { final JaxrsResourceMethodParameters jaxrsParams = resourceMethod.getParameters(); methodBlock.append(generateUrl(jaxrsParams)); methodBlock.append(generateRequestBuilder()); methodBlock.append(generateHeaders(jaxrsParams)); final List<Class<?>> interceptors = interceptorProvider.getInterceptors(remote, resourceMethod.getMethod()); if (!interceptors.isEmpty()) { methodBlock.append(generateInterceptorLogic(interceptors)); } else { methodBlock.append(generateRequest()); } } generateReturnStatement(); }
public InterceptorProvider(final Collection<MetaClass> featureInterceptors, final Collection<MetaClass> standaloneInterceptors) { setFeatureInterceptors(featureInterceptors); setStandaloneInterceptors(standaloneInterceptors); }
/** * Returns an {@link InterceptorProvider} that can be used to retrieve interceptors for the remote * interface/method. */ private InterceptorProvider getInterceptorProvider(final GeneratorContext context) { final Collection<MetaClass> featureInterceptors = ClassScanner.getTypesAnnotatedWith(FeatureInterceptor.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(featureInterceptors); final Collection<MetaClass> standaloneInterceptors = ClassScanner.getTypesAnnotatedWith(InterceptsRemoteCall.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(standaloneInterceptors); return new InterceptorProvider(featureInterceptors, standaloneInterceptors); }
public InterceptorProvider(final Collection<MetaClass> featureInterceptors, final Collection<MetaClass> standaloneInterceptors) { setFeatureInterceptors(featureInterceptors); setStandaloneInterceptors(standaloneInterceptors); }
private InterceptorProvider getInterceptorProvider(final GeneratorContext context) { final Collection<MetaClass> featureInterceptors = ClassScanner.getTypesAnnotatedWith(FeatureInterceptor.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(featureInterceptors); final Collection<MetaClass> standaloneInterceptors = ClassScanner.getTypesAnnotatedWith(InterceptsRemoteCall.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(standaloneInterceptors); return new InterceptorProvider(featureInterceptors, standaloneInterceptors); }
private InterceptorProvider getInterceptorProvider(final GeneratorContext context) { final Collection<MetaClass> featureInterceptors = ClassScanner.getTypesAnnotatedWith(FeatureInterceptor.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(featureInterceptors); final Collection<MetaClass> standaloneInterceptors = ClassScanner.getTypesAnnotatedWith(InterceptsRemoteCall.class, RebindUtils.findTranslatablePackages(context), context); addCacheRelevantClasses(standaloneInterceptors); return new InterceptorProvider(featureInterceptors, standaloneInterceptors); }