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(); }
final long time = System.currentTimeMillis(); final MethodBlockBuilder<?> loadProxies = classBuilder.publicMethod(void.class, "loadProxies", Parameter.of(MessageBus.class, "bus", true));
private void appendPageShownMethod(AnonymousClassStructureBuilder pageImplBuilder, MetaClass pageClass) { BlockBuilder<?> method = pageImplBuilder.publicMethod(void.class, createMethodNameFromAnnotation(PageShown.class), Parameter.of(pageClass, "widget"), Parameter.of(HistoryToken.class, "state")) .body(); appendPageShowMethod(method, pageImplBuilder, pageClass, PageShown.class, false, Parameter.of(HistoryToken.class, "state")); method.finish(); }
private void appendPageUpdateMethod(AnonymousClassStructureBuilder pageImplBuilder, MetaClass pageClass) { BlockBuilder<?> method = pageImplBuilder.publicMethod(void.class, createMethodNameFromAnnotation(PageUpdate.class), Parameter.of(pageClass, "widget"), Parameter.of(HistoryToken.class, "state")) .body(); appendPageShowMethod(method, pageImplBuilder, pageClass, PageUpdate.class, false, Parameter.of(HistoryToken.class, "state")); method.finish(); }
private void appendPageShownMethod(AnonymousClassStructureBuilder pageImplBuilder, MetaClass pageClass) { BlockBuilder<?> method = pageImplBuilder.publicMethod(void.class, createMethodNameFromAnnotation(PageShown.class), Parameter.of(pageClass, "widget"), Parameter.of(HistoryToken.class, "state")) .body(); appendPageShowMethod(method, pageImplBuilder, pageClass, PageShown.class, false, Parameter.of(HistoryToken.class, "state")); method.finish(); }
private void appendPageUpdateMethod(AnonymousClassStructureBuilder pageImplBuilder, MetaClass pageClass) { BlockBuilder<?> method = pageImplBuilder.publicMethod(void.class, createMethodNameFromAnnotation(PageUpdate.class), Parameter.of(pageClass, "widget"), Parameter.of(HistoryToken.class, "state")) .body(); appendPageShowMethod(method, pageImplBuilder, pageClass, PageUpdate.class, false, Parameter.of(HistoryToken.class, "state")); method.finish(); }
public static Parameter[] of(MetaParameter[] parameters) { Parameter[] ps = new Parameter[parameters.length]; for (int i = 0; i < ps.length; i++) { String name = parameters[i].getName(); if (name == null) { name = "a" + i; } ps[i] = of(parameters[i].getType(), name); } return ps; }
public static DefParameters from(final MetaMethod method) { final List<Parameter> parameters = new ArrayList<Parameter>(); int i = 0; for (final MetaParameter parm : method.getParameters()) { parameters.add(Parameter.of(parm.getType(), "a" + i++)); } return new DefParameters(parameters); }
public static Parameter[] of(MetaParameter[] parameters) { Parameter[] ps = new Parameter[parameters.length]; for (int i = 0; i < ps.length; i++) { String name = parameters[i].getName(); if (name == null) { name = "a" + i; } ps[i] = of(parameters[i].getType(), name); } return ps; }
public static DefParameters from(final MetaMethod method) { final List<Parameter> parameters = new ArrayList<Parameter>(); int i = 0; for (final MetaParameter parm : method.getParameters()) { parameters.add(Parameter.of(parm.getType(), "a" + i++)); } return new DefParameters(parameters); }
public static DefParameters from(final MetaMethod method, final Parameter... parms) { final List<Parameter> parameters = new ArrayList<Parameter>(); int i = 0; for (final MetaParameter parm : method.getParameters()) { parameters.add(Parameter.of(parm.getType(), parms[i].getName(), parms[i++].isFinal())); } return new DefParameters(parameters); }
private List<MetaMethod> getSpecialTypeMethods() { final List<MetaMethod> meths = new ArrayList<>(); final JEnumType type = getEnclosedMetaObject().isEnum(); if (type != null) { meths.add(new GWTSpecialMethod(this, DefModifiers.none(), Scope.Public, String.class, "name")); meths.add(new GWTSpecialMethod(this, DefModifiers.none(), Scope.Public, Enum.class, "valueOf", Parameter.of( String.class, "p").getMetaParameter())); meths.add(new GWTSpecialMethod(this, DefModifiers.none(), Scope.Public, Enum[].class, "values")); } return meths; }
private Parameter[] getParametersForDeclaration(final MetaMethod method) { final MetaParameter[] metaParams = method.getParameters(); final Parameter[] params = new Parameter[metaParams.length]; for (int i = 0; i < params.length; i++) { params[i] = Parameter.of(metaParams[i].getType().getErased(), metaParams[i].getName()); } return params; }
private void createPutMarshallerMethod() { classStructureBuilder .privateMethod(boolean.class, "putMarshaller", Parameter.of(String.class, "fqcn"), Parameter.of(Marshaller.class, "m")) .append(Stmt.loadVariable(MARSHALLERS_VAR).invoke("put", Stmt.loadVariable("fqcn"), Stmt.loadVariable("m"))) .append(Stmt.loadLiteral(true).returnValue()) .finish(); }
private void createPutMarshallerMethod() { classStructureBuilder .privateMethod(boolean.class, "putMarshaller", Parameter.of(String.class, "fqcn"), Parameter.of(Marshaller.class, "m")) .append(Stmt.loadVariable(MARSHALLERS_VAR).invoke("put", Stmt.loadVariable("fqcn"), Stmt.loadVariable("m"))) .append(Stmt.loadLiteral(true).returnValue()) .finish(); }
private ObjectBuilder createAnonymousImpl(final MetaClass type) { final AnonymousClassStructureBuilder builder = newObject(type).extend(); stream(type.getMethods()) .filter(m -> m.isPublic() && m.isAbstract()) .forEach(m -> { builder .publicOverridesMethod(m.getName(), of(m.getParameters())) .append(Stmt.throw_(RuntimeException.class)) .finish(); }); return builder.finish(); }
/** * Generates an anonymous {@link DataSyncCallback} that will invoke the decorated sync method. */ private Statement createSyncCallback(Decorable decorable) { return Stmt.newObject(DataSyncCallback.class) .extend() .publicOverridesMethod("onSync", Parameter.of(SyncResponses.class, "responses", true)) .append(decorable.getAccessStatement(Stmt.loadVariable("responses"))) .finish() .finish(); }
private void generateCommonSetter(final ClassStructureBuilder<?> classBuilder) { classBuilder.privateMethod(void.class, "changeAndFire", Parameter.of(String.class, "property"), Parameter.of(Object.class, "value")) .append(Stmt.declareFinalVariable("oldValue", Object.class, Stmt.loadVariable("this").invoke("get", loadVariable("property")))) .append(Stmt.loadVariable("this").invoke("set", loadVariable("property"), loadVariable("value"))) .append(agent().invoke("updateWidgetsAndFireEvent", false, loadVariable("property"), Variable.get("oldValue"), loadVariable("value"))) .finish(); }
private void implementEquals(final ClassStructureBuilder<?> proxyImpl) { proxyImpl.publicMethod(boolean.class, "equals", Parameter.of(Object.class, "obj")).body() .append(loadVariable("obj").assignValue(invokeStatic(Factory.class, "maybeUnwrapProxy", loadVariable("obj")))) .append(loadVariable("proxyHelper").invoke("getInstance", loadVariable("this")).invoke("equals", loadVariable("obj")).returnValue()) .finish(); }
@Test public void testDefineClassWithParent() { final String cls = ClassBuilder .define("org.foo.Foo", String.class) .publicScope() .body() .publicConstructor(Parameter.of(int.class, "i")) .finish() .toJavaString(); assertEquals("failed to generate class with parent", CLASS_WITH_PARENT, cls); }