@Override public MetaClass getType() { return p.getType(); }
@Override public MetaClass getType() { return p.getType(); }
@Override public MetaClass getType() { return p.getType(); }
@Override public MetaClass getType() { return p.getType(); }
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(); }
@Override public String toString() { final StringBuilder buf = new StringBuilder("("); for (int i = 0; i < parameters.size(); i++) { buf.append(parameters.get(i).getType().getFullyQualifiedName()) .append(' ').append(parameters.get(i).getName()); if (i + 1 < parameters.size()) { buf.append(", "); } } return buf.append(")").toString(); }
@Override public String toString() { final StringBuilder buf = new StringBuilder("("); for (int i = 0; i < parameters.size(); i++) { buf.append(parameters.get(i).getType().getFullyQualifiedName()) .append(' ').append(parameters.get(i).getName()); if (i + 1 < parameters.size()) { buf.append(", "); } } return buf.append(")").toString(); }
@Override public BlockBuilder<AnonymousClassStructureBuilder> publicOverridesMethod(final String name, final Parameter... args) { final List<MetaClass> types = new ArrayList<MetaClass>(); Arrays.stream(args).forEach(a -> types.add(a.getType())); final MetaMethod method = classDefinition.getSuperClass() .getBestMatchingMethod(name, types.toArray(new MetaClass[args.length])); if (method == null) throw new UndefinedMethodException("Can't override (inherited method not found):" + classDefinition.getFullyQualifiedNameWithTypeParms() + "." + name + "(" + types + ")"); return publicOverridesMethod(method, DefParameters.fromParameters(args)); }
@Override public BlockBuilder<AnonymousClassStructureBuilder> publicOverridesMethod(final String name, final Parameter... args) { final List<MetaClass> types = new ArrayList<MetaClass>(); Arrays.stream(args).forEach(a -> types.add(a.getType())); final MetaMethod method = classDefinition.getSuperClass() .getBestMatchingMethod(name, types.toArray(new MetaClass[args.length])); if (method == null) throw new UndefinedMethodException("Can't override (inherited method not found):" + classDefinition.getFullyQualifiedNameWithTypeParms() + "." + name + "(" + types + ")"); return publicOverridesMethod(method, DefParameters.fromParameters(args)); }
@Override public String toJavaString() { if (generatedCache != null) return generatedCache; final Context context = Context.create(declaringClass.getContext()); defParameters.getParameters().stream().forEach(p -> context.addVariable(Variable.create(p.getName(), p.getType()))); final StringBuilder build = new StringBuilder(512); if (constructorComment != null) { build.append(new Comment(constructorComment).generate(null)).append('\n'); } return generatedCache = build.append(scope.getCanonicalName()) .append(" ") .append(declaringClass.getName()) .append(defParameters.generate(context)) .append(" {\n").append(body.generate(context)).append("\n}\n") .toString(); }
@Override public String toJavaString() { if (generatedCache != null) return generatedCache; final Context context = Context.create(declaringClass.getContext()); defParameters.getParameters().stream().forEach(p -> context.addVariable(Variable.create(p.getName(), p.getType()))); final StringBuilder build = new StringBuilder(512); if (constructorComment != null) { build.append(new Comment(constructorComment).generate(null)).append('\n'); } return generatedCache = build.append(scope.getCanonicalName()) .append(" ") .append(declaringClass.getName()) .append(defParameters.generate(context)) .append(" {\n").append(body.generate(context)).append("\n}\n") .toString(); }
@Override public AnonymousClassStructureBuilder callback(final Statement statement) { addCallable(context -> { final Context subContext = Context.create(context); parameters.getParameters() .forEach(p -> subContext.addVariable(Variable.create(p.getName(), p.getType()))); final StringBuilder buf = new StringBuilder(256); final String returnType = getClassReference(method.getReturnType(), context); buf.append("public ").append(returnType) .append(" ") .append(method.getName()) .append(parameters.generate(context)).append(" {\n"); if (statement != null) { buf.append(statement.generate(subContext)).append("\n"); } buf.append("}\n"); return buf.toString(); }); return AnonymousClassStructureBuilderImpl.this; }
@Override public AnonymousClassStructureBuilder callback(final Statement statement) { addCallable(context -> { final Context subContext = Context.create(context); parameters.getParameters() .forEach(p -> subContext.addVariable(Variable.create(p.getName(), p.getType()))); final StringBuilder buf = new StringBuilder(256); final String returnType = getClassReference(method.getReturnType(), context); buf.append("public ").append(returnType) .append(" ") .append(method.getName()) .append(parameters.generate(context)).append(" {\n"); if (statement != null) { buf.append(statement.generate(subContext)).append("\n"); } buf.append("}\n"); return buf.toString(); }); return AnonymousClassStructureBuilderImpl.this; }
public static JaxrsResourceMethodParameters fromMethod(MetaMethod method, String parameterArrayVarName) { final List<Statement> params = new ArrayList<Statement>(); final Parameter[] defParms = DefParameters.from(method).getParameters().toArray(new Parameter[0]); for (int i = 0; i < defParms.length; i++) { final MetaClass type = defParms[i].getType().asBoxed(); final Statement s = Cast.to(type, Stmt.loadVariable(parameterArrayVarName, i)); params.add(new Statement() { @Override public String generate(Context context) { return s.generate(context); } @Override public MetaClass getType() { return type; } }); } return fromMethod(method, params); }
context.addVariable(Variable.create(p.getName(), p.getType()));
context.addVariable(Variable.create(p.getName(), p.getType()));
public static Statement marshal(final Statement statement, final String contentType) { if (statement instanceof Parameter) { final Parameter param = (Parameter) statement; return marshal(param.getType(), Variable.get(param.getName()), contentType); } return marshal(statement.getType(), statement, contentType); }
public JaxrsProxyMethodGenerator(final MetaClass remote, final ClassStructureBuilder<?> classBuilder, final JaxrsResourceMethod resourceMethod, final InterceptorProvider interceptorProvider, final GeneratorContext context) { this.remote = remote; this.declaringClass = classBuilder.getClassDefinition(); this.resourceMethod = resourceMethod; this.interceptorProvider = interceptorProvider; this.context = context; final Parameter[] parms = DefParameters.from(resourceMethod.getMethod()).getParameters().toArray(new Parameter[0]); final Parameter[] finalParms = new Parameter[parms.length]; parameters = new ArrayList<>(); for (int i = 0; i < parms.length; i++) { finalParms[i] = Parameter.of(parms[i].getType(), parms[i].getName(), true); parameters.add(Stmt.loadVariable(parms[i].getName())); } this.methodBlock = classBuilder.publicMethod(resourceMethod.getMethod().getReturnType(), resourceMethod.getMethod().getName(), finalParms); }
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(); }
MetaParameter realParam = metaMethod.getParameters()[i - 1]; if (realParam.getType().equals(MetaClassFactory.get(param.getType().asClass()))) { paramValues[i] = Stmt.loadVariable(param.getName()); } else {