diff --git a/src/main/java/org/springframework/retry/annotation/RecoverAnnotationRecoveryHandler.java b/src/main/java/org/springframework/retry/annotation/RecoverAnnotationRecoveryHandler.java index 9a3c8fe..9598848 100644 --- a/src/main/java/org/springframework/retry/annotation/RecoverAnnotationRecoveryHandler.java +++ b/src/main/java/org/springframework/retry/annotation/RecoverAnnotationRecoveryHandler.java @@ -106,8 +106,8 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco result = method; } else if (distance == min) { - boolean parametersMatch = compareParameters(args, meta.getArgCount(), - method.getParameterTypes()); + boolean parametersMatch = compareParameters(args, + meta.getArgCount(), method.getParameterTypes()); if (parametersMatch) { result = method; } @@ -120,8 +120,8 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco Method method = entry.getKey(); if (method.getName().equals(this.recoverMethodName)) { SimpleMetadata meta = entry.getValue(); - if (meta.type.isAssignableFrom(cause) - && compareParameters(args, meta.getArgCount(), method.getParameterTypes())) { + if (meta.type.isAssignableFrom(cause) && compareParameters(args, + meta.getArgCount(), method.getParameterTypes())) { result = method; break; } @@ -131,7 +131,8 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco return result; } - private int calculateDistance(Class cause, Class type) { + private int calculateDistance(Class cause, + Class type) { int result = 0; Class current = cause; while (current != type && current != Throwable.class) { @@ -141,14 +142,17 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco return result; } - private boolean compareParameters(Object[] args, int argCount, Class[] parameterTypes) { + private boolean compareParameters(Object[] args, int argCount, + Class[] parameterTypes) { if (argCount == (args.length + 1)) { int startingIndex = 0; - if (parameterTypes.length > 0 && Throwable.class.isAssignableFrom(parameterTypes[0])) { + if (parameterTypes.length > 0 + && Throwable.class.isAssignableFrom(parameterTypes[0])) { startingIndex = 1; } for (int i = startingIndex; i < parameterTypes.length; i++) { - final Object argument = i - startingIndex < args.length ? args[i - startingIndex] : null; + final Object argument = i - startingIndex < args.length + ? args[i - startingIndex] : null; if (argument == null) { continue; } @@ -170,19 +174,24 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco } ReflectionUtils.doWithMethods(target.getClass(), new MethodCallback() { @Override - public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException { + public void doWith(Method method) + throws IllegalArgumentException, IllegalAccessException { Recover recover = AnnotationUtils.findAnnotation(method, Recover.class); if (recover == null) { recover = findAnnotationOnTarget(target, method); } - if (recover != null && failingMethod.getGenericReturnType() instanceof ParameterizedType + if (recover != null + && failingMethod + .getGenericReturnType() instanceof ParameterizedType && method.getGenericReturnType() instanceof ParameterizedType) { - if (isParameterizedTypeAssignable((ParameterizedType) method.getGenericReturnType(), + if (isParameterizedTypeAssignable( + (ParameterizedType) method.getGenericReturnType(), (ParameterizedType) failingMethod.getGenericReturnType())) { putToMethodsMap(method, types); } } - else if (recover != null && method.getReturnType().isAssignableFrom(failingMethod.getReturnType())) { + else if (recover != null && method.getReturnType() + .isAssignableFrom(failingMethod.getReturnType())) { putToMethodsMap(method, types); } } @@ -198,7 +207,7 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco * @param methodReturnType * @param failingMethodReturnType * @return true if the parameterized return types match. - * @since 1.3.1 + * @since 1.3.2 */ private boolean isParameterizedTypeAssignable(ParameterizedType methodReturnType, ParameterizedType failingMethodReturnType) { @@ -212,7 +221,8 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco for (int i = startingIndex; i < methodActualArgs.length; i++) { Type methodArgType = methodActualArgs[i]; Type failingMethodArgType = failingMethodActualArgs[i]; - if (methodArgType instanceof ParameterizedType && failingMethodArgType instanceof ParameterizedType) { + if (methodArgType instanceof ParameterizedType + && failingMethodArgType instanceof ParameterizedType) { return isParameterizedTypeAssignable((ParameterizedType) methodArgType, (ParameterizedType) failingMethodArgType); } @@ -224,23 +234,28 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco return true; } - private void putToMethodsMap(Method method, Map, Method> types) { + private void putToMethodsMap(Method method, + Map, Method> types) { Class[] parameterTypes = method.getParameterTypes(); - if (parameterTypes.length > 0 && Throwable.class.isAssignableFrom(parameterTypes[0])) { + if (parameterTypes.length > 0 + && Throwable.class.isAssignableFrom(parameterTypes[0])) { @SuppressWarnings("unchecked") Class type = (Class) parameterTypes[0]; types.put(type, method); - RecoverAnnotationRecoveryHandler.this.methods.put(method, new SimpleMetadata(parameterTypes.length, type)); + RecoverAnnotationRecoveryHandler.this.methods.put(method, + new SimpleMetadata(parameterTypes.length, type)); } else { RecoverAnnotationRecoveryHandler.this.classifier.setDefaultValue(method); - RecoverAnnotationRecoveryHandler.this.methods.put(method, new SimpleMetadata(parameterTypes.length, null)); + RecoverAnnotationRecoveryHandler.this.methods.put(method, + new SimpleMetadata(parameterTypes.length, null)); } } private Recover findAnnotationOnTarget(Object target, Method method) { try { - Method targetMethod = target.getClass().getMethod(method.getName(), method.getParameterTypes()); + Method targetMethod = target.getClass().getMethod(method.getName(), + method.getParameterTypes()); return AnnotationUtils.findAnnotation(targetMethod, Recover.class); } catch (Exception e) { @@ -287,7 +302,8 @@ public class RecoverAnnotationRecoveryHandler implements MethodInvocationReco result[0] = t; startArgs = 1; } - int length = result.length - startArgs > args.length ? args.length : result.length - startArgs; + int length = result.length - startArgs > args.length ? args.length + : result.length - startArgs; if (length == 0) { return result; }