private MetaMethod validateExceptionHandlingMethod(final Decorable decorable) { // Ensure that method has exactly one parameter of type Throwable final MetaMethod method = decorable.getAsMethod(); final MetaParameter[] parms = method.getParameters(); if (!(parms.length == 1 && parms[0].getType().equals(MetaClassFactory.get(Throwable.class)))) { throw new GenerationException("Methods annotated with " + UncaughtExceptionHandler.class.getName() + " must have exactly one parameter of type " + Throwable.class.getName() + ". Invalid parameters in method: " + GenUtil.getMethodString(method) + " of type " + method.getDeclaringClass() + "."); } return method; }
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { if (decorable.getAsMethod().getParameters() == null || decorable.getAsMethod().getParameters().length != 1) throw new GenerationException("@ModelSetter method needs to have exactly one parameter: " + decorable.getAsMethod()); final MetaClass modelType = (MetaClass) controller.getAttribute(DataBindingUtil.BINDER_MODEL_TYPE_VALUE); if (!decorable.getAsMethod().getParameters()[0].getType().equals(modelType)) { throw new GenerationException("@ModelSetter method parameter must be of type: " + modelType); } final Statement dataBinder = controller.getReferenceStmt(DataBindingUtil.BINDER_VAR_NAME, DataBinder.class); final Statement proxyProperty = controller.addProxyProperty("dataBinder", DataBinder.class, dataBinder); final String modelParamName = decorable.getAsMethod().getParameters()[0].getName(); controller.addInvokeBefore(decorable.getAsMethod(), nestedCall(proxyProperty) .invoke("setModel", Refs.get(modelParamName), loadStatic(StateSync.class, "FROM_MODEL"))); controller.addInvokeBefore( decorable.getAsMethod(), loadVariable(modelParamName).assignValue( Cast.to(decorable.getAsMethod().getParameters()[0].getType(), nestedCall( proxyProperty).invoke("getModel")))); } }
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { if (decorable.getAsMethod().getParameters() == null || decorable.getAsMethod().getParameters().length != 1) throw new GenerationException("@ModelSetter method needs to have exactly one parameter: " + decorable.getAsMethod()); final MetaClass modelType = (MetaClass) controller.getAttribute(DataBindingUtil.BINDER_MODEL_TYPE_VALUE); if (!decorable.getAsMethod().getParameters()[0].getType().equals(modelType)) { throw new GenerationException("@ModelSetter method parameter must be of type: " + modelType); } final Statement dataBinder = controller.getReferenceStmt(DataBindingUtil.BINDER_VAR_NAME, DataBinder.class); final Statement proxyProperty = controller.addProxyProperty("dataBinder", DataBinder.class, dataBinder); final String modelParamName = decorable.getAsMethod().getParameters()[0].getName(); controller.addInvokeBefore(decorable.getAsMethod(), nestedCall(proxyProperty) .invoke("setModel", Refs.get(modelParamName), loadStatic(StateSync.class, "FROM_MODEL"))); controller.addInvokeBefore( decorable.getAsMethod(), loadVariable(modelParamName).assignValue( Cast.to(decorable.getAsMethod().getParameters()[0].getType(), nestedCall( proxyProperty).invoke("getModel")))); } }
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { MetaMethod metaMethod = decorable.getAsMethod(); PermissionCheck securedResource = metaMethod.getAnnotation(PermissionCheck.class); String permission = securedResource.value(); String onGranted = securedResource.onGranted(); String onDenied = securedResource.onDenied(); String declaringClass = metaMethod.getDeclaringClassName(); // The method must return void if (!metaMethod.getReturnType().getName().equals("void")) { throw new RuntimeException("The @PermissionCheck annotated method \"" + declaringClass + "#" + metaMethod.getName() + "\" must return void"); } // Permission check if (permission == null || permission.trim().length() == 0) { Statement stmt = createPermissionCheck(permission, onGranted, onDenied); controller.addInvokeBefore(metaMethod, stmt); } }
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { MetaMethod metaMethod = decorable.getAsMethod(); PermissionCheck securedResource = metaMethod.getAnnotation(PermissionCheck.class); String permission = securedResource.value(); String onGranted = securedResource.onGranted(); String onDenied = securedResource.onDenied(); String declaringClass = metaMethod.getDeclaringClassName(); // The method must return void if (!metaMethod.getReturnType().getName().equals("void")) { throw new RuntimeException("The @PermissionCheck annotated method \"" + declaringClass + "#" + metaMethod.getName() + "\" must return void"); } // Permission check if (permission == null || permission.trim().length() == 0) { Statement stmt = createPermissionCheck(permission, onGranted, onDenied); controller.addInvokeBefore(metaMethod, stmt); } }
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { MetaMethod method = decorable.getAsMethod(); MetaParameter[] params = method.getParameters(); if (params.length != 1 || !params[0].getType().getErased().equals(MetaClassFactory.get(SyncResponses.class))) { throw new GenerationException("Methods annotated with @" + Sync.class.getName() + " need to have exactly one parameter of type: " + SyncResponses.class.getName() + ". Check method: " + GenUtil.getMethodString(method) + " in class " + method.getDeclaringClass().getFullyQualifiedName()); } Sync syncAnnotation = (Sync) decorable.getAnnotation(); controller.addInitializationStatements(createInitStatements(decorable.getDecorableDeclaringType(), "obj", syncAnnotation, decorable, controller)); final Statement syncWorker = controller.getReferenceStmt("syncWorker", ClientSyncWorker.class); final Statement destruction = Stmt.nestedCall(syncWorker).invoke("stop"); controller.addDestructionStatements(Collections.singletonList(destruction)); }
@Override public void generateDecorator(Decorable decorable, FactoryController controller) { controller.addInvokeBefore(decorable.getAsMethod(), Stmt.invokeStatic(TestDataCollector.class, "beforeInvoke", Refs.get("text"), Refs.get("blah"))); controller.addInvokeAfter(decorable.getAsMethod(), Stmt.invokeStatic(TestDataCollector.class, "afterInvoke", Refs.get("text"), Refs.get("blah"))); final Statement foobar = controller.addProxyProperty("foobar", String.class, Stmt.load("foobie!")); controller.addInvokeAfter(decorable.getAsMethod(), Stmt.invokeStatic(TestDataCollector.class, "property", "foobar", foobar) ); controller.addInitializationStatements(Arrays.<Statement>asList(Stmt.loadVariable("instance").invoke("setFlag", true))); controller.addDestructionStatements(Arrays.<Statement>asList(Stmt.loadVariable("instance").invoke("setFlag", false))); } }
.finish().finish()); final String timerVarName = decorable.getAsMethod().getName() + "Timer"; final Statement timerVar = controller.getReferenceStmt(timerVarName, Timer.class);
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { MetaMethod metaMethod = decorable.getAsMethod(); ResourceCheck securedResource = metaMethod.getAnnotation(ResourceCheck.class); String resourceType = securedResource.type();
@Override public void generateDecorator(final Decorable decorable, final FactoryController controller) { MetaMethod metaMethod = decorable.getAsMethod(); ResourceCheck securedResource = metaMethod.getAnnotation(ResourceCheck.class); String resourceType = securedResource.type();
final MetaMethod method = decorable.getAsMethod(); final MetaParameter[] parameters = method.getParameters(); if (!method.getReturnType().isVoid() && parameters.length == 0) {
final MetaMethod method = decorable.getAsMethod(); final MetaParameter[] parameters = method.getParameters(); if (!method.getReturnType().isVoid() && parameters.length == 0) {