Skip to content

Commit 033f5c9

Browse files
authored
Fixed SonarCloud findings (ReactiveX#425)
1 parent 0b563c3 commit 033f5c9

File tree

9 files changed

+106
-78
lines changed

9 files changed

+106
-78
lines changed

resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/CircuitBreakerStateMachine.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,22 @@
1919
package io.github.resilience4j.circuitbreaker.internal;
2020

2121

22-
import static io.github.resilience4j.circuitbreaker.CircuitBreaker.State.CLOSED;
23-
import static io.github.resilience4j.circuitbreaker.CircuitBreaker.State.DISABLED;
24-
import static io.github.resilience4j.circuitbreaker.CircuitBreaker.State.FORCED_OPEN;
25-
import static io.github.resilience4j.circuitbreaker.CircuitBreaker.State.HALF_OPEN;
26-
import static io.github.resilience4j.circuitbreaker.CircuitBreaker.State.OPEN;
22+
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
23+
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
24+
import io.github.resilience4j.circuitbreaker.event.*;
25+
import io.github.resilience4j.core.EventConsumer;
26+
import io.github.resilience4j.core.EventProcessor;
27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
2729

2830
import java.time.Duration;
2931
import java.util.concurrent.CompletionException;
3032
import java.util.concurrent.atomic.AtomicReference;
31-
import java.util.function.Function;
3233
import java.util.function.Predicate;
3334
import java.util.function.Supplier;
35+
import java.util.function.UnaryOperator;
3436

35-
import org.slf4j.Logger;
36-
import org.slf4j.LoggerFactory;
37-
38-
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
39-
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
40-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerEvent;
41-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnCallNotPermittedEvent;
42-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnErrorEvent;
43-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnIgnoredErrorEvent;
44-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnResetEvent;
45-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnStateTransitionEvent;
46-
import io.github.resilience4j.circuitbreaker.event.CircuitBreakerOnSuccessEvent;
47-
import io.github.resilience4j.core.EventConsumer;
48-
import io.github.resilience4j.core.EventProcessor;
37+
import static io.github.resilience4j.circuitbreaker.CircuitBreaker.State.*;
4938

5039
/**
5140
* A CircuitBreaker finite state machine.
@@ -189,7 +178,7 @@ public void reset() {
189178
publishResetEvent();
190179
}
191180

192-
private void stateTransition(State newState, Function<CircuitBreakerState, CircuitBreakerState> newStateGenerator) {
181+
private void stateTransition(State newState, UnaryOperator<CircuitBreakerState> newStateGenerator) {
193182
CircuitBreakerState previousState = stateReference.getAndUpdate(currentState -> {
194183
if (currentState.getState() == newState) {
195184
return currentState;

resilience4j-spring/src/main/java/io/github/resilience4j/bulkhead/configure/BulkheadAspect.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,10 @@
1515
*/
1616
package io.github.resilience4j.bulkhead.configure;
1717

18-
import java.lang.reflect.Method;
19-
import java.util.List;
20-
import java.util.concurrent.CompletionException;
21-
import java.util.concurrent.CompletionStage;
22-
18+
import io.github.resilience4j.bulkhead.BulkheadRegistry;
19+
import io.github.resilience4j.bulkhead.annotation.Bulkhead;
20+
import io.github.resilience4j.core.lang.Nullable;
21+
import io.github.resilience4j.utils.AnnotationExtractor;
2322
import org.aspectj.lang.ProceedingJoinPoint;
2423
import org.aspectj.lang.annotation.Around;
2524
import org.aspectj.lang.annotation.Aspect;
@@ -30,9 +29,10 @@
3029
import org.springframework.beans.factory.annotation.Autowired;
3130
import org.springframework.core.Ordered;
3231

33-
import io.github.resilience4j.bulkhead.BulkheadRegistry;
34-
import io.github.resilience4j.bulkhead.annotation.Bulkhead;
35-
import io.github.resilience4j.utils.AnnotationExtractor;
32+
import java.lang.reflect.Method;
33+
import java.util.List;
34+
import java.util.concurrent.CompletionException;
35+
import java.util.concurrent.CompletionStage;
3636

3737
/**
3838
* This Spring AOP aspect intercepts all methods which are annotated with a {@link Bulkhead} annotation.
@@ -46,7 +46,7 @@ public class BulkheadAspect implements Ordered {
4646

4747
private final BulkheadConfigurationProperties bulkheadConfigurationProperties;
4848
private final BulkheadRegistry bulkheadRegistry;
49-
private final List<BulkheadAspectExt> bulkheadAspectExts;
49+
private final @Nullable List<BulkheadAspectExt> bulkheadAspectExts;
5050

5151
public BulkheadAspect(BulkheadConfigurationProperties backendMonitorPropertiesRegistry, BulkheadRegistry bulkheadRegistry, @Autowired(required = false) List<BulkheadAspectExt> bulkheadAspectExts) {
5252
this.bulkheadConfigurationProperties = backendMonitorPropertiesRegistry;
@@ -59,12 +59,15 @@ public void matchAnnotatedClassOrMethod(Bulkhead Bulkhead) {
5959
}
6060

6161
@Around(value = "matchAnnotatedClassOrMethod(backendMonitored)", argNames = "proceedingJoinPoint, backendMonitored")
62-
public Object bulkheadAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, Bulkhead backendMonitored) throws Throwable {
62+
public Object bulkheadAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, @Nullable Bulkhead backendMonitored) throws Throwable {
6363
Method method = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod();
6464
String methodName = method.getDeclaringClass().getName() + "#" + method.getName();
6565
if (backendMonitored == null) {
6666
backendMonitored = getBackendMonitoredAnnotation(proceedingJoinPoint);
6767
}
68+
if(backendMonitored == null) { //because annotations wasn't found
69+
return proceedingJoinPoint.proceed();
70+
}
6871
String backend = backendMonitored.name();
6972
io.github.resilience4j.bulkhead.Bulkhead bulkhead = getOrCreateBulkhead(methodName, backend);
7073
Class<?> returnType = method.getReturnType();
@@ -94,6 +97,7 @@ private io.github.resilience4j.bulkhead.Bulkhead getOrCreateBulkhead(String meth
9497
return bulkhead;
9598
}
9699

100+
@Nullable
97101
private Bulkhead getBackendMonitoredAnnotation(ProceedingJoinPoint proceedingJoinPoint) {
98102
if (logger.isDebugEnabled()) {
99103
logger.debug("bulkhead parameter is null");
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
*
3+
* Copyright 2018: Clint Checketts
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*
18+
*/
19+
@NonNullApi
20+
@NonNullFields
21+
package io.github.resilience4j.bulkhead.configure;
22+
23+
import io.github.resilience4j.core.lang.NonNullApi;
24+
import io.github.resilience4j.core.lang.NonNullFields;

resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerAspect.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@
1515
*/
1616
package io.github.resilience4j.circuitbreaker.configure;
1717

18-
import java.lang.reflect.Method;
19-
import java.util.List;
20-
import java.util.concurrent.CompletableFuture;
21-
import java.util.concurrent.CompletionStage;
22-
18+
import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException;
19+
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
20+
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
2321
import io.github.resilience4j.core.lang.Nullable;
22+
import io.github.resilience4j.utils.AnnotationExtractor;
2423
import org.aspectj.lang.ProceedingJoinPoint;
2524
import org.aspectj.lang.annotation.Around;
2625
import org.aspectj.lang.annotation.Aspect;
@@ -31,10 +30,10 @@
3130
import org.springframework.beans.factory.annotation.Autowired;
3231
import org.springframework.core.Ordered;
3332

34-
import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException;
35-
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
36-
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
37-
import io.github.resilience4j.utils.AnnotationExtractor;
33+
import java.lang.reflect.Method;
34+
import java.util.List;
35+
import java.util.concurrent.CompletableFuture;
36+
import java.util.concurrent.CompletionStage;
3837

3938
/**
4039
* This Spring AOP aspect intercepts all methods which are annotated with a {@link CircuitBreaker} annotation.
@@ -48,7 +47,7 @@ public class CircuitBreakerAspect implements Ordered {
4847

4948
private final CircuitBreakerConfigurationProperties circuitBreakerProperties;
5049
private final CircuitBreakerRegistry circuitBreakerRegistry;
51-
private final List<CircuitBreakerAspectExt> circuitBreakerAspectExtList;
50+
private final @Nullable List<CircuitBreakerAspectExt> circuitBreakerAspectExtList;
5251

5352
public CircuitBreakerAspect(CircuitBreakerConfigurationProperties backendMonitorPropertiesRegistry, CircuitBreakerRegistry circuitBreakerRegistry, @Autowired(required = false) List<CircuitBreakerAspectExt> circuitBreakerAspectExtList) {
5453
this.circuitBreakerProperties = backendMonitorPropertiesRegistry;

resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/RateLimiterAspect.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
*/
1616
package io.github.resilience4j.ratelimiter.configure;
1717

18-
import java.lang.reflect.Method;
19-
import java.util.List;
20-
import java.util.concurrent.CompletionException;
21-
import java.util.concurrent.CompletionStage;
22-
18+
import io.github.resilience4j.core.lang.Nullable;
19+
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
20+
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
21+
import io.github.resilience4j.ratelimiter.annotation.RateLimiter;
22+
import io.github.resilience4j.utils.AnnotationExtractor;
2323
import org.aspectj.lang.ProceedingJoinPoint;
2424
import org.aspectj.lang.annotation.Around;
2525
import org.aspectj.lang.annotation.Aspect;
@@ -30,10 +30,10 @@
3030
import org.springframework.beans.factory.annotation.Autowired;
3131
import org.springframework.core.Ordered;
3232

33-
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
34-
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
35-
import io.github.resilience4j.ratelimiter.annotation.RateLimiter;
36-
import io.github.resilience4j.utils.AnnotationExtractor;
33+
import java.lang.reflect.Method;
34+
import java.util.List;
35+
import java.util.concurrent.CompletionException;
36+
import java.util.concurrent.CompletionStage;
3737

3838
/**
3939
* This Spring AOP aspect intercepts all methods which are annotated with a {@link RateLimiter} annotation.
@@ -47,7 +47,7 @@ public class RateLimiterAspect implements Ordered {
4747
private static final Logger logger = LoggerFactory.getLogger(RateLimiterAspect.class);
4848
private final RateLimiterRegistry rateLimiterRegistry;
4949
private final RateLimiterConfigurationProperties properties;
50-
private final List<RateLimiterAspectExt> rateLimiterAspectExtList;
50+
private final @Nullable List<RateLimiterAspectExt> rateLimiterAspectExtList;
5151

5252
public RateLimiterAspect(RateLimiterRegistry rateLimiterRegistry, RateLimiterConfigurationProperties properties, @Autowired(required = false) List<RateLimiterAspectExt> rateLimiterAspectExtList) {
5353
this.rateLimiterRegistry = rateLimiterRegistry;
@@ -66,7 +66,7 @@ public void matchAnnotatedClassOrMethod(RateLimiter rateLimiter) {
6666
}
6767

6868
@Around(value = "matchAnnotatedClassOrMethod(limitedService)", argNames = "proceedingJoinPoint, limitedService")
69-
public Object rateLimiterAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, RateLimiter limitedService) throws Throwable {
69+
public Object rateLimiterAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, @Nullable RateLimiter limitedService) throws Throwable {
7070
RateLimiter targetService = limitedService;
7171
Method method = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod();
7272
String methodName = method.getDeclaringClass().getName() + "#" + method.getName();
@@ -104,6 +104,7 @@ private io.github.resilience4j.ratelimiter.RateLimiter getOrCreateRateLimiter(St
104104
return rateLimiter;
105105
}
106106

107+
@Nullable
107108
private RateLimiter getRateLimiterAnnotation(ProceedingJoinPoint proceedingJoinPoint) {
108109
return AnnotationExtractor.extract(proceedingJoinPoint.getTarget().getClass(), RateLimiter.class);
109110
}

resilience4j-spring/src/main/java/io/github/resilience4j/retry/configure/RetryAspect.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
*/
1616
package io.github.resilience4j.retry.configure;
1717

18+
import io.github.resilience4j.core.lang.Nullable;
1819
import io.github.resilience4j.retry.RetryRegistry;
1920
import io.github.resilience4j.retry.annotation.Retry;
21+
import io.github.resilience4j.utils.AnnotationExtractor;
2022
import io.vavr.CheckedFunction0;
2123
import org.aspectj.lang.ProceedingJoinPoint;
2224
import org.aspectj.lang.annotation.Around;
@@ -44,7 +46,7 @@ public class RetryAspect implements Ordered {
4446
private final static ScheduledExecutorService retryExecutorService = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
4547
private final RetryConfigurationProperties retryConfigurationProperties;
4648
private final RetryRegistry retryRegistry;
47-
private final List<RetryAspectExt> retryAspectExtList;
49+
private final @Nullable List<RetryAspectExt> retryAspectExtList;
4850

4951
/**
5052
* @param retryConfigurationProperties spring retry config properties
@@ -64,7 +66,7 @@ public void matchAnnotatedClassOrMethod(Retry retry) {
6466
}
6567

6668
@Around(value = "matchAnnotatedClassOrMethod(backendMonitored)", argNames = "proceedingJoinPoint, backendMonitored")
67-
public Object retryAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, Retry backendMonitored) throws Throwable {
69+
public Object retryAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, @Nullable Retry backendMonitored) throws Throwable {
6870
Method method = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod();
6971
String methodName = method.getDeclaringClass().getName() + "#" + method.getName();
7072
if (backendMonitored == null) {
@@ -109,23 +111,9 @@ private io.github.resilience4j.retry.Retry getOrCreateRetry(String methodName, S
109111
* @param proceedingJoinPoint the aspect joint point
110112
* @return the retry annotation
111113
*/
114+
@Nullable
112115
private Retry getBackendMonitoredAnnotation(ProceedingJoinPoint proceedingJoinPoint) {
113-
if (logger.isDebugEnabled()) {
114-
logger.debug("circuitBreaker parameter is null");
115-
}
116-
Retry retry = null;
117-
Class<?> targetClass = proceedingJoinPoint.getTarget().getClass();
118-
if (targetClass.isAnnotationPresent(Retry.class)) {
119-
retry = targetClass.getAnnotation(Retry.class);
120-
if (retry == null && logger.isDebugEnabled()) {
121-
logger.debug("TargetClass has no annotation 'Retry'");
122-
retry = targetClass.getDeclaredAnnotation(Retry.class);
123-
if (retry == null && logger.isDebugEnabled()) {
124-
logger.debug("TargetClass has no declared annotation 'Retry'");
125-
}
126-
}
127-
}
128-
return retry;
116+
return AnnotationExtractor.extract(proceedingJoinPoint.getTarget().getClass(), Retry.class);
129117
}
130118

131119
/**
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
*
3+
* Copyright 2018: Clint Checketts
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*
18+
*/
19+
@NonNullApi
20+
@NonNullFields
21+
package io.github.resilience4j.retry.configure;
22+
23+
import io.github.resilience4j.core.lang.NonNullApi;
24+
import io.github.resilience4j.core.lang.NonNullFields;

resilience4j-spring/src/main/java/io/github/resilience4j/utils/AnnotationExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.resilience4j.utils;
22

3+
import io.github.resilience4j.core.lang.Nullable;
34
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
56

@@ -18,6 +19,7 @@ private AnnotationExtractor() {
1819
* @param annotationClass annotation class
1920
* @return annotation
2021
*/
22+
@Nullable
2123
public static <T extends Annotation> T extract(Class<?> targetClass, Class<T> annotationClass) {
2224
T annotation = null;
2325
if (targetClass.isAnnotationPresent(annotationClass)) {
@@ -30,7 +32,6 @@ public static <T extends Annotation> T extract(Class<?> targetClass, Class<T> an
3032
}
3133
}
3234
}
33-
3435
return annotation;
3536
}
3637
}

resilience4j-vertx/src/main/java/io/github/resilience4j/circuitbreaker/VertxCircuitBreaker.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@
1818
*/
1919
package io.github.resilience4j.circuitbreaker;
2020

21-
import java.time.Duration;
22-
import java.util.function.Supplier;
23-
24-
import io.github.resilience4j.core.StopWatch;
2521
import io.vertx.core.Future;
2622

23+
import java.util.function.Supplier;
24+
2725
/**
2826
* CircuitBreaker decorators for Vert.x
2927
*/
@@ -71,10 +69,10 @@ static <T> Supplier<Future<T>> decorateFuture(CircuitBreaker circuitBreaker, Sup
7169
future.complete(result.result());
7270
}
7371
});
74-
} catch (Throwable throwable) {
72+
} catch (Exception exception) {
7573
long durationInNanos = System.nanoTime() - start;
76-
circuitBreaker.onError(durationInNanos, throwable);
77-
future.fail(throwable);
74+
circuitBreaker.onError(durationInNanos, exception);
75+
future.fail(exception);
7876
}
7977
}
8078
return future;

0 commit comments

Comments
 (0)