@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isPublicMethod(); } }
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isTopLevelMethod() && methodInfo.isPublicMethod(); } }
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isPublicMethod() && methodInfo.matchMethodName("set*") && methodInfo.hasOneArgument() ; } }
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isPublicMethod() && methodInfo.hasReturnValue() && (methodInfo.matchMethodName("get*") || (methodInfo.matchMethodName("is*"))) && methodInfo.hasNoArguments() ; } }
@Override public boolean apply(final MethodInfo methodInfo) { if (methodInfo.hasReturnValue() && (methodInfo.matchMethodName("get*") || (methodInfo.matchMethodName("is*"))) && methodInfo.hasNoArguments()) { // getter return false; } if (methodInfo.matchMethodName("set*") && methodInfo.hasOneArgument()) { // setter return false; } return methodInfo.isPublicMethod(); } }
/** * Returns {@link WrapperProxetta} used for building loggable prepared statements. * Initializes proxetta when called for the first time. */ protected BaseLoggableFactory(final Class<T> targetClass) { this.targetClass = targetClass; this.proxetta = Proxetta.wrapperProxetta().withAspect(ProxyAspect.of(LoggableAdvice.class, methodInfo -> { int argumentsCount = methodInfo.getArgumentsCount(); char argumentType = 0; if (argumentsCount >= 1) { argumentType = methodInfo.getArgument(1).getOpcode(); } return methodInfo.getReturnType().getOpcode() == 'V' && // void-returning method argumentType == 'I' && // first argument type methodInfo.isPublicMethod() && methodInfo.getMethodName().startsWith("set") && // set* (argumentsCount == 2 || argumentsCount == 3); // number of arguments })); }
Calc calc = new CalcImpl(); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspects(new ProxyAspect(StatCounterAdvice.class, methodInfo -> !methodInfo.isRootMethod() && methodInfo.isPublicMethod()));
@Test void testClassWrapperCastToInterface() throws Exception { Calc calc = new CalcImpl(); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspect(new ProxyAspect(StatCounterAdvice.class, methodInfo -> !methodInfo.isRootMethod() && methodInfo.isPublicMethod())); //proxetta.setDebugFolder("/Users/igor"); // wrapper over CLASS casted to interface, // resulting object has ONE interface // ALL target methods are wrapped WrapperProxettaFactory builder = proxetta.proxy().setTarget(calc.getClass()).setTargetInterface(Calc.class).setTargetProxyClassName(".CalcImpl2"); Class<Calc> calc2Class = builder.define(); Calc calc2 = calc2Class.newInstance(); builder.injectTargetIntoWrapper(calc, calc2); assertEquals(1, StatCounter.counter); // counter in static block !!! calc2.hello(); assertEquals(2, StatCounter.counter); assertEquals(10, calc2.calculate(3, 7)); assertEquals(3, StatCounter.counter); assertNotNull(calc2Class.getMethod("customMethod")); }
@Test void testInterfaceWrapper() throws Exception { Calc calc = new CalcImpl(); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspect(new ProxyAspect(StatCounterAdvice.class, methodInfo -> methodInfo.isTopLevelMethod() && methodInfo.isPublicMethod())); //proxetta.setDebugFolder("/Users/igor"); // wrapper over INTERFACE // resulting object has ONE interface // only interface methods are wrapped WrapperProxettaFactory builder = proxetta.proxy().setTarget(Calc.class).setTargetProxyClassName(".CalcImpl3"); Class<Calc> calc2Class = builder.define(); Calc calc2 = calc2Class.newInstance(); builder.injectTargetIntoWrapper(calc, calc2); assertEquals(1, StatCounter.counter); // counter in static block !!! calc2.hello(); assertEquals(2, StatCounter.counter); assertEquals(10, calc2.calculate(3, 7)); assertEquals(3, StatCounter.counter); try { calc2Class.getMethod("customMethod"); fail("error"); } catch (Exception ex) { } }
WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspect(new ProxyAspect(StatCounterAdvice.class, methodInfo -> methodInfo.isPublicMethod() && (methodInfo.getMethodName().equals("hello") || methodInfo.getMethodName().equals("ola"))));
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isPublicMethod(); } }
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isTopLevelMethod() && methodInfo.isPublicMethod(); } }
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isPublicMethod() && methodInfo.matchMethodName("set*") && methodInfo.hasOneArgument() ; } }
@Override public boolean apply(final MethodInfo methodInfo) { return methodInfo.isPublicMethod() && methodInfo.hasReturnValue() && (methodInfo.matchMethodName("get*") || (methodInfo.matchMethodName("is*"))) && methodInfo.hasNoArguments() ; } }
@Override public boolean apply(final MethodInfo methodInfo) { if (methodInfo.hasReturnValue() && (methodInfo.matchMethodName("get*") || (methodInfo.matchMethodName("is*"))) && methodInfo.hasNoArguments()) { // getter return false; } if (methodInfo.matchMethodName("set*") && methodInfo.hasOneArgument()) { // setter return false; } return methodInfo.isPublicMethod(); } }
/** * Returns {@link WrapperProxetta} used for building loggable prepared statements. * Initializes proxetta when called for the first time. */ protected BaseLoggableFactory(final Class<T> targetClass) { this.targetClass = targetClass; this.proxetta = Proxetta.wrapperProxetta().withAspect(ProxyAspect.of(LoggableAdvice.class, methodInfo -> { int argumentsCount = methodInfo.getArgumentsCount(); char argumentType = 0; if (argumentsCount >= 1) { argumentType = methodInfo.getArgument(1).getOpcode(); } return methodInfo.getReturnType().getOpcode() == 'V' && // void-returning method argumentType == 'I' && // first argument type methodInfo.isPublicMethod() && methodInfo.getMethodName().startsWith("set") && // set* (argumentsCount == 2 || argumentsCount == 3); // number of arguments })); }