提交 2eea7569 编写于 作者: oldratlee's avatar oldratlee 🔥

use edu.umd.cs.findbugs.annotations instead of jsr305

JSR305 is already Dormant status, so SpotBugs does not release jsr305 jar file.
Please continue using findbugs’ one.
depend on spotbugs-annotations instead.

https://spotbugs.readthedocs.io/en/stable/migration.html
上级 14a31ece
......@@ -113,6 +113,12 @@
<artifactId>spotbugs-annotations</artifactId>
<version>${spotbugs.version}</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Testing frameworks and related dependencies -->
<dependency>
......
......@@ -113,6 +113,12 @@
<artifactId>spotbugs-annotations</artifactId>
<version>${spotbugs.version}</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Testing frameworks and related dependencies -->
<dependency>
......
......@@ -136,7 +136,7 @@ mvnCopyDependencies() {
if [ ! -e "$dependencies_dir" ]; then
# https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html
# exclude repackaged and shaded javassist libs
runCmd "${MVN_CMD[@]}" dependency:copy-dependencies -DincludeScope=test -DexcludeArtifactIds=javassist,jsr305 || die "fail to mvn copy-dependencies!"
runCmd "${MVN_CMD[@]}" dependency:copy-dependencies -DincludeScope=test -DexcludeArtifactIds=javassist,jsr305,spotbugs-annotations || die "fail to mvn copy-dependencies!"
fi
}
......
package com.alibaba.ttl;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.util.*;
import java.util.concurrent.Callable;
import java.util.function.Supplier;
......@@ -281,7 +282,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @return the captured {@link TransmittableThreadLocal} values
* @since 2.3.0
*/
@Nonnull
@NonNull
public static Object capture() {
Map<TransmittableThreadLocal<?>, Object> captured = new HashMap<TransmittableThreadLocal<?>, Object>();
for (TransmittableThreadLocal<?> threadLocal : holder.get().keySet()) {
......@@ -299,8 +300,8 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @see #capture()
* @since 2.3.0
*/
@Nonnull
public static Object replay(@Nonnull Object captured) {
@NonNull
public static Object replay(@NonNull Object captured) {
@SuppressWarnings("unchecked")
Map<TransmittableThreadLocal<?>, Object> capturedMap = (Map<TransmittableThreadLocal<?>, Object>) captured;
Map<TransmittableThreadLocal<?>, Object> backup = new HashMap<TransmittableThreadLocal<?>, Object>();
......@@ -337,7 +338,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @return the backup {@link TransmittableThreadLocal} values before clear
* @since 2.9.0
*/
@Nonnull
@NonNull
public static Object clear() {
return replay(Collections.emptyMap());
}
......@@ -350,7 +351,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @see #clear()
* @since 2.3.0
*/
public static void restore(@Nonnull Object backup) {
public static void restore(@NonNull Object backup) {
@SuppressWarnings("unchecked")
Map<TransmittableThreadLocal<?>, Object> backupMap = (Map<TransmittableThreadLocal<?>, Object>) backup;
// call afterExecute callback
......@@ -373,7 +374,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
setTtlValuesTo(backupMap);
}
private static void setTtlValuesTo(@Nonnull Map<TransmittableThreadLocal<?>, Object> ttlValues) {
private static void setTtlValuesTo(@NonNull Map<TransmittableThreadLocal<?>, Object> ttlValues) {
for (Map.Entry<TransmittableThreadLocal<?>, Object> entry : ttlValues.entrySet()) {
@SuppressWarnings("unchecked")
TransmittableThreadLocal<Object> threadLocal = (TransmittableThreadLocal<Object>) entry.getKey();
......@@ -393,7 +394,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @see #restore(Object)
* @since 2.3.1
*/
public static <R> R runSupplierWithCaptured(@Nonnull Object captured, @Nonnull Supplier<R> bizLogic) {
public static <R> R runSupplierWithCaptured(@NonNull Object captured, @NonNull Supplier<R> bizLogic) {
Object backup = replay(captured);
try {
return bizLogic.get();
......@@ -412,7 +413,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @see #restore(Object)
* @since 2.9.0
*/
public static <R> R runSupplierWithClear(@Nonnull Supplier<R> bizLogic) {
public static <R> R runSupplierWithClear(@NonNull Supplier<R> bizLogic) {
Object backup = clear();
try {
return bizLogic.get();
......@@ -434,7 +435,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @see #restore(Object)
* @since 2.3.1
*/
public static <R> R runCallableWithCaptured(@Nonnull Object captured, @Nonnull Callable<R> bizLogic) throws Exception {
public static <R> R runCallableWithCaptured(@NonNull Object captured, @NonNull Callable<R> bizLogic) throws Exception {
Object backup = replay(captured);
try {
return bizLogic.call();
......@@ -454,7 +455,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
* @see #restore(Object)
* @since 2.9.0
*/
public static <R> R runCallableWithClear(@Nonnull Callable<R> bizLogic) throws Exception {
public static <R> R runCallableWithClear(@NonNull Callable<R> bizLogic) throws Exception {
Object backup = clear();
try {
return bizLogic.call();
......
......@@ -3,9 +3,9 @@ package com.alibaba.ttl;
import com.alibaba.ttl.spi.TtlAttachments;
import com.alibaba.ttl.spi.TtlAttachmentsDelegate;
import com.alibaba.ttl.spi.TtlEnhanced;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
......@@ -37,7 +37,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
private final Callable<V> callable;
private final boolean releaseTtlValueReferenceAfterCall;
private TtlCallable(@Nonnull Callable<V> callable, boolean releaseTtlValueReferenceAfterCall) {
private TtlCallable(@NonNull Callable<V> callable, boolean releaseTtlValueReferenceAfterCall) {
this.capturedRef = new AtomicReference<Object>(capture());
this.callable = callable;
this.releaseTtlValueReferenceAfterCall = releaseTtlValueReferenceAfterCall;
......@@ -61,7 +61,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
}
}
@Nonnull
@NonNull
public Callable<V> getCallable() {
return callable;
}
......@@ -141,7 +141,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
* @param tasks task to be wrapped
* @return Wrapped {@link Callable}
*/
@Nonnull
@NonNull
public static <T> List<TtlCallable<T>> gets(@Nullable Collection<? extends Callable<T>> tasks) {
return gets(tasks, false, false);
}
......@@ -153,7 +153,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
* @param releaseTtlValueReferenceAfterCall release TTL value reference after run, avoid memory leak even if {@link TtlRunnable} is referred.
* @return Wrapped {@link Callable}
*/
@Nonnull
@NonNull
public static <T> List<TtlCallable<T>> gets(@Nullable Collection<? extends Callable<T>> tasks, boolean releaseTtlValueReferenceAfterCall) {
return gets(tasks, releaseTtlValueReferenceAfterCall, false);
}
......@@ -166,7 +166,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
* @param idempotent is idempotent or not. {@code true} will cover up bugs! <b>DO NOT</b> set, only when you know why.
* @return Wrapped {@link Callable}
*/
@Nonnull
@NonNull
public static <T> List<TtlCallable<T>> gets(@Nullable Collection<? extends Callable<T>> tasks, boolean releaseTtlValueReferenceAfterCall, boolean idempotent) {
if (null == tasks) return Collections.emptyList();
......@@ -205,7 +205,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
* @see #unwrap(Callable)
* @since 2.10.2
*/
@Nonnull
@NonNull
public static <T> List<Callable<T>> unwraps(@Nullable Collection<? extends Callable<T>> tasks) {
if (null == tasks) return Collections.emptyList();
......@@ -225,7 +225,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
* @since 2.11.0
*/
@Override
public void setTtlAttachment(@Nonnull String key, Object value) {
public void setTtlAttachment(@NonNull String key, Object value) {
ttlAttachment.setTtlAttachment(key, value);
}
......@@ -235,7 +235,7 @@ public final class TtlCallable<V> implements Callable<V>, TtlEnhanced, TtlAttach
* @since 2.11.0
*/
@Override
public <T> T getTtlAttachment(@Nonnull String key) {
public <T> T getTtlAttachment(@NonNull String key) {
return ttlAttachment.getTtlAttachment(key);
}
}
......@@ -3,9 +3,9 @@ package com.alibaba.ttl;
import com.alibaba.ttl.spi.TtlAttachments;
import com.alibaba.ttl.spi.TtlAttachmentsDelegate;
import com.alibaba.ttl.spi.TtlEnhanced;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
......@@ -34,7 +34,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
private final Runnable runnable;
private final boolean releaseTtlValueReferenceAfterRun;
private TtlRunnable(@Nonnull Runnable runnable, boolean releaseTtlValueReferenceAfterRun) {
private TtlRunnable(@NonNull Runnable runnable, boolean releaseTtlValueReferenceAfterRun) {
this.capturedRef = new AtomicReference<Object>(capture());
this.runnable = runnable;
this.releaseTtlValueReferenceAfterRun = releaseTtlValueReferenceAfterRun;
......@@ -61,7 +61,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
/**
* return original/unwrapped {@link Runnable}.
*/
@Nonnull
@NonNull
public Runnable getRunnable() {
return runnable;
}
......@@ -141,7 +141,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
* @return wrapped tasks
* @throws IllegalStateException when input is {@link TtlRunnable} already.
*/
@Nonnull
@NonNull
public static List<TtlRunnable> gets(@Nullable Collection<? extends Runnable> tasks) {
return gets(tasks, false, false);
}
......@@ -154,7 +154,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
* @return wrapped tasks
* @throws IllegalStateException when input is {@link TtlRunnable} already.
*/
@Nonnull
@NonNull
public static List<TtlRunnable> gets(@Nullable Collection<? extends Runnable> tasks, boolean releaseTtlValueReferenceAfterRun) {
return gets(tasks, releaseTtlValueReferenceAfterRun, false);
}
......@@ -170,7 +170,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
* @return wrapped tasks
* @throws IllegalStateException when input is {@link TtlRunnable} already and not idempotent.
*/
@Nonnull
@NonNull
public static List<TtlRunnable> gets(@Nullable Collection<? extends Runnable> tasks, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) {
if (null == tasks) return Collections.emptyList();
......@@ -209,7 +209,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
* @see #unwrap(Runnable)
* @since 2.10.2
*/
@Nonnull
@NonNull
public static List<Runnable> unwraps(@Nullable Collection<? extends Runnable> tasks) {
if (null == tasks) return Collections.emptyList();
......@@ -229,7 +229,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
* @since 2.11.0
*/
@Override
public void setTtlAttachment(@Nonnull String key, Object value) {
public void setTtlAttachment(@NonNull String key, Object value) {
ttlAttachment.setTtlAttachment(key, value);
}
......@@ -239,7 +239,7 @@ public final class TtlRunnable implements Runnable, TtlEnhanced, TtlAttachments
* @since 2.11.0
*/
@Override
public <T> T getTtlAttachment(@Nonnull String key) {
public <T> T getTtlAttachment(@NonNull String key) {
return ttlAttachment.getTtlAttachment(key);
}
}
package com.alibaba.ttl;
import com.alibaba.ttl.spi.TtlEnhanced;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
......@@ -32,7 +32,7 @@ public final class TtlTimerTask extends TimerTask implements TtlEnhanced {
private final TimerTask timerTask;
private final boolean releaseTtlValueReferenceAfterRun;
private TtlTimerTask(@Nonnull TimerTask timerTask, boolean releaseTtlValueReferenceAfterRun) {
private TtlTimerTask(@NonNull TimerTask timerTask, boolean releaseTtlValueReferenceAfterRun) {
this.capturedRef = new AtomicReference<Object>(capture());
this.timerTask = timerTask;
this.releaseTtlValueReferenceAfterRun = releaseTtlValueReferenceAfterRun;
......@@ -62,7 +62,7 @@ public final class TtlTimerTask extends TimerTask implements TtlEnhanced {
return super.cancel();
}
@Nonnull
@NonNull
public TimerTask getTimerTask() {
return timerTask;
}
......@@ -156,7 +156,7 @@ public final class TtlTimerTask extends TimerTask implements TtlEnhanced {
* @see #unwrap(TimerTask)
* @since 2.10.2
*/
@Nonnull
@NonNull
public static List<TimerTask> unwraps(@Nullable Collection<? extends TimerTask> tasks) {
if (null == tasks) return Collections.emptyList();
......
package com.alibaba.ttl.spi;
import javax.annotation.Nonnull;
import edu.umd.cs.findbugs.annotations.NonNull;
/**
* The TTL attachments for TTL tasks, eg: {@link com.alibaba.ttl.TtlRunnable}, {@link com.alibaba.ttl.TtlCallable}.
......@@ -16,7 +16,7 @@ public interface TtlAttachments extends TtlEnhanced {
* @param value attachment value
* @since 2.11.0
*/
void setTtlAttachment(@Nonnull String key, Object value);
void setTtlAttachment(@NonNull String key, Object value);
/**
* get the TTL attachment for TTL tasks
......@@ -24,7 +24,7 @@ public interface TtlAttachments extends TtlEnhanced {
* @param key attachment key
* @since 2.11.0
*/
<T> T getTtlAttachment(@Nonnull String key);
<T> T getTtlAttachment(@NonNull String key);
/**
* The attachment key of TTL task, weather this task is a auto wrapper task.
......
package com.alibaba.ttl.spi;
import javax.annotation.Nonnull;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
......@@ -16,13 +17,13 @@ public class TtlAttachmentsDelegate implements TtlAttachments {
private volatile ConcurrentMap<String, Object> attachments = new ConcurrentHashMap<String, Object>();
@Override
public void setTtlAttachment(@Nonnull String key, Object value) {
public void setTtlAttachment(@NonNull String key, Object value) {
attachments.put(key, value);
}
@Override
@SuppressWarnings("unchecked")
public <T> T getTtlAttachment(@Nonnull String key) {
public <T> T getTtlAttachment(@NonNull String key) {
return (T) attachments.get(key);
}
}
package com.alibaba.ttl.threadpool;
import javax.annotation.Nonnull;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory;
/**
......@@ -13,6 +14,6 @@ public interface DisableInheritableForkJoinWorkerThreadFactory extends ForkJoinW
/**
* Unwrap {@link DisableInheritableThreadFactory} to the original/underneath one.
*/
@Nonnull
@NonNull
ForkJoinWorkerThreadFactory unwrap();
}
package com.alibaba.ttl.threadpool;
import javax.annotation.Nonnull;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory;
import java.util.concurrent.ForkJoinWorkerThread;
......@@ -15,7 +16,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.restore;
class DisableInheritableForkJoinWorkerThreadFactoryWrapper implements DisableInheritableForkJoinWorkerThreadFactory {
private final ForkJoinWorkerThreadFactory threadFactory;
DisableInheritableForkJoinWorkerThreadFactoryWrapper(@Nonnull ForkJoinWorkerThreadFactory threadFactory) {
DisableInheritableForkJoinWorkerThreadFactoryWrapper(@NonNull ForkJoinWorkerThreadFactory threadFactory) {
this.threadFactory = threadFactory;
}
......@@ -29,8 +30,8 @@ class DisableInheritableForkJoinWorkerThreadFactoryWrapper implements DisableInh
}
}
@Nonnull
@Override
@NonNull
public ForkJoinWorkerThreadFactory unwrap() {
return threadFactory;
}
......
package com.alibaba.ttl.threadpool;
import javax.annotation.Nonnull;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.concurrent.ThreadFactory;
/**
......@@ -14,6 +15,6 @@ public interface DisableInheritableThreadFactory extends ThreadFactory {
/**
* Unwrap {@link DisableInheritableThreadFactory} to the original/underneath one.
*/
@Nonnull
@NonNull
ThreadFactory unwrap();
}
package com.alibaba.ttl.threadpool;
import javax.annotation.Nonnull;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.concurrent.ThreadFactory;
import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.clear;
......@@ -13,12 +14,12 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.restore;
class DisableInheritableThreadFactoryWrapper implements DisableInheritableThreadFactory {
private final ThreadFactory threadFactory;
DisableInheritableThreadFactoryWrapper(@Nonnull ThreadFactory threadFactory) {
DisableInheritableThreadFactoryWrapper(@NonNull ThreadFactory threadFactory) {
this.threadFactory = threadFactory;
}
@Override
public Thread newThread(@Nonnull Runnable r) {
public Thread newThread(@NonNull Runnable r) {
final Object backup = clear();
try {
return threadFactory.newThread(r);
......@@ -27,7 +28,7 @@ class DisableInheritableThreadFactoryWrapper implements DisableInheritableThread
}
}
@Nonnull
@NonNull
@Override
public ThreadFactory unwrap() {
return threadFactory;
......
......@@ -2,10 +2,10 @@ package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlCallable;
import com.alibaba.ttl.spi.TtlEnhanced;
import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.spi.TtlEnhanced;
import edu.umd.cs.findbugs.annotations.NonNull;
import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.*;
......@@ -21,7 +21,7 @@ import java.util.concurrent.*;
class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorService, TtlEnhanced {
private final ExecutorService executorService;
ExecutorServiceTtlWrapper(@Nonnull ExecutorService executorService) {
ExecutorServiceTtlWrapper(@NonNull ExecutorService executorService) {
super(executorService);
this.executorService = executorService;
}
......@@ -31,7 +31,7 @@ class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorSe
executorService.shutdown();
}
@Nonnull
@NonNull
@Override
public List<Runnable> shutdownNow() {
return executorService.shutdownNow();
......@@ -48,52 +48,52 @@ class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorSe
}
@Override
public boolean awaitTermination(long timeout, @Nonnull TimeUnit unit) throws InterruptedException {
public boolean awaitTermination(long timeout, @NonNull TimeUnit unit) throws InterruptedException {
return executorService.awaitTermination(timeout, unit);
}
@Nonnull
@NonNull
@Override
public <T> Future<T> submit(@Nonnull Callable<T> task) {
public <T> Future<T> submit(@NonNull Callable<T> task) {
return executorService.submit(TtlCallable.get(task));
}
@Nonnull
@NonNull
@Override
public <T> Future<T> submit(@Nonnull Runnable task, T result) {
public <T> Future<T> submit(@NonNull Runnable task, T result) {
return executorService.submit(TtlRunnable.get(task), result);
}
@Nonnull
@NonNull
@Override
public Future<?> submit(@Nonnull Runnable task) {
public Future<?> submit(@NonNull Runnable task) {
return executorService.submit(TtlRunnable.get(task));
}
@Nonnull
@NonNull
@Override
public <T> List<Future<T>> invokeAll(@Nonnull Collection<? extends Callable<T>> tasks) throws InterruptedException {
public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException {
return executorService.invokeAll(TtlCallable.gets(tasks));
}
@Nonnull
@NonNull
@Override
public <T> List<Future<T>> invokeAll(@Nonnull Collection<? extends Callable<T>> tasks, long timeout, @Nonnull TimeUnit unit) throws InterruptedException {
public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException {
return executorService.invokeAll(TtlCallable.gets(tasks), timeout, unit);
}
@Nonnull
@NonNull
@Override
public <T> T invokeAny(@Nonnull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
return executorService.invokeAny(TtlCallable.gets(tasks));
}
@Override
public <T> T invokeAny(@Nonnull Collection<? extends Callable<T>> tasks, long timeout, @Nonnull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
return executorService.invokeAny(TtlCallable.gets(tasks), timeout, unit);
}
@Nonnull
@NonNull
@Override
public ExecutorService unwrap() {
return executorService;
......
package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.spi.TtlEnhanced;
import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.spi.TtlEnhanced;
import edu.umd.cs.findbugs.annotations.NonNull;
import javax.annotation.Nonnull;
import java.util.concurrent.Executor;
/**
......@@ -18,16 +18,16 @@ import java.util.concurrent.Executor;
class ExecutorTtlWrapper implements Executor, TtlEnhanced {
private final Executor executor;
ExecutorTtlWrapper(@Nonnull Executor executor) {
ExecutorTtlWrapper(@NonNull Executor executor) {
this.executor = executor;
}
@Override
public void execute(@Nonnull Runnable command) {
public void execute(@NonNull Runnable command) {
executor.execute(TtlRunnable.get(command));
}
@Nonnull
@NonNull
public Executor unwrap() {
return executor;
}
......
......@@ -2,11 +2,14 @@ package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlCallable;
import com.alibaba.ttl.spi.TtlEnhanced;
import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.spi.TtlEnhanced;
import edu.umd.cs.findbugs.annotations.NonNull;
import javax.annotation.Nonnull;
import java.util.concurrent.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* {@link TransmittableThreadLocal} Wrapper of {@link ScheduledExecutorService},
......@@ -19,37 +22,37 @@ import java.util.concurrent.*;
class ScheduledExecutorServiceTtlWrapper extends ExecutorServiceTtlWrapper implements ScheduledExecutorService, TtlEnhanced {
final ScheduledExecutorService scheduledExecutorService;
public ScheduledExecutorServiceTtlWrapper(@Nonnull ScheduledExecutorService scheduledExecutorService) {
public ScheduledExecutorServiceTtlWrapper(@NonNull ScheduledExecutorService scheduledExecutorService) {
super(scheduledExecutorService);
this.scheduledExecutorService = scheduledExecutorService;
}
@Nonnull
@NonNull
@Override
public ScheduledFuture<?> schedule(@Nonnull Runnable command, long delay, @Nonnull TimeUnit unit) {
public ScheduledFuture<?> schedule(@NonNull Runnable command, long delay, @NonNull TimeUnit unit) {
return scheduledExecutorService.schedule(TtlRunnable.get(command), delay, unit);
}
@Nonnull
@NonNull
@Override
public <V> ScheduledFuture<V> schedule(@Nonnull Callable<V> callable, long delay, @Nonnull TimeUnit unit) {
public <V> ScheduledFuture<V> schedule(@NonNull Callable<V> callable, long delay, @NonNull TimeUnit unit) {
return scheduledExecutorService.schedule(TtlCallable.get(callable), delay, unit);
}
@Nonnull
@NonNull
@Override
public ScheduledFuture<?> scheduleAtFixedRate(@Nonnull Runnable command, long initialDelay, long period, @Nonnull TimeUnit unit) {
public ScheduledFuture<?> scheduleAtFixedRate(@NonNull Runnable command, long initialDelay, long period, @NonNull TimeUnit unit) {
return scheduledExecutorService.scheduleAtFixedRate(TtlRunnable.get(command), initialDelay, period, unit);
}
@Nonnull
@NonNull
@Override
public ScheduledFuture<?> scheduleWithFixedDelay(@Nonnull Runnable command, long initialDelay, long delay, @Nonnull TimeUnit unit) {
public ScheduledFuture<?> scheduleWithFixedDelay(@NonNull Runnable command, long initialDelay, long delay, @NonNull TimeUnit unit) {
return scheduledExecutorService.scheduleWithFixedDelay(TtlRunnable.get(command), initialDelay, delay, unit);
}
@Override
@Nonnull
@NonNull
public ScheduledExecutorService unwrap() {
return scheduledExecutorService;
}
......
......@@ -3,8 +3,8 @@ package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.spi.TtlEnhanced;
import com.alibaba.ttl.threadpool.agent.TtlAgent;
import edu.umd.cs.findbugs.annotations.Nullable;
import javax.annotation.Nullable;
import java.util.concurrent.*;
/**
......
package com.alibaba.ttl.threadpool;
import javax.annotation.Nullable;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory;
......
......@@ -6,8 +6,8 @@ import com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlExecutorTr
import com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlForkJoinTransformlet;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.TtlTimerTaskTransformlet;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.util.ArrayList;
......@@ -116,7 +116,7 @@ public final class TtlAgent {
* @see Logger#STDERR
* @see Logger#STDOUT
*/
public static void premain(String agentArgs, @Nonnull Instrumentation inst) {
public static void premain(String agentArgs, @NonNull Instrumentation inst) {
kvs = splitCommaColonStringToKV(agentArgs);
Logger.setLoggerImplType(getLogImplTypeFromAgentArgs(kvs));
......@@ -145,7 +145,7 @@ public final class TtlAgent {
}
}
private static String getLogImplTypeFromAgentArgs(@Nonnull final Map<String, String> kvs) {
private static String getLogImplTypeFromAgentArgs(@NonNull final Map<String, String> kvs) {
return kvs.get(Logger.TTL_AGENT_LOGGER_KEY);
}
......@@ -190,7 +190,7 @@ public final class TtlAgent {
return isOptionSet(kvs, TTL_AGENT_ENABLE_TIMER_TASK_KEY);
}
private static boolean isOptionSet(@Nullable final Map<String, String> kvs, @Nonnull String key) {
private static boolean isOptionSet(@Nullable final Map<String, String> kvs, @NonNull String key) {
if (null == kvs) return false;
final boolean hasEnableKey = kvs.containsKey(key);
......@@ -202,7 +202,7 @@ public final class TtlAgent {
/**
* Split to {@code json} like String({@code "k1:v1,k2:v2"}) to KV map({@code "k1"->"v1", "k2"->"v2"}).
*/
@Nonnull
@NonNull
static Map<String, String> splitCommaColonStringToKV(@Nullable String commaColonString) {
Map<String, String> ret = new HashMap<String, String>();
if (commaColonString == null || commaColonString.trim().length() == 0) return ret;
......
......@@ -3,9 +3,9 @@ package com.alibaba.ttl.threadpool.agent;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.ClassInfo;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.lang.instrument.ClassFileTransformer;
import java.security.ProtectionDomain;
import java.util.ArrayList;
......@@ -36,7 +36,7 @@ public class TtlTransformer implements ClassFileTransformer {
@Override
public final byte[] transform(@Nullable final ClassLoader loader, @Nullable final String classFile, final Class<?> classBeingRedefined,
final ProtectionDomain protectionDomain, @Nonnull final byte[] classFileBuffer) {
final ProtectionDomain protectionDomain, @NonNull final byte[] classFileBuffer) {
try {
// Lambda has no class file, no need to transform, just return.
if (classFile == null) return EMPTY_BYTE_ARRAY;
......@@ -58,7 +58,7 @@ public class TtlTransformer implements ClassFileTransformer {
return EMPTY_BYTE_ARRAY;
}
private static String toClassName(@Nonnull final String classFile) {
private static String toClassName(@NonNull final String classFile) {
return classFile.replace('/', '.');
}
}
package com.alibaba.ttl.threadpool.agent.internal.transformlet;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.LoaderClassPath;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.ByteArrayInputStream;
import java.io.IOException;
......@@ -23,20 +23,20 @@ public class ClassInfo {
// [ERROR] new com.alibaba.ttl.threadpool.agent.internal.transformlet.ClassInfo(String, byte[], ClassLoader)
// may expose internal representation by storing an externally mutable object
// into ClassInfo.classFileBuffer
public ClassInfo(@Nonnull String className, @Nonnull @SuppressFBWarnings({"EI_EXPOSE_REP2"}) byte[] classFileBuffer, @Nullable ClassLoader loader) {
public ClassInfo(@NonNull String className, @NonNull @SuppressFBWarnings({"EI_EXPOSE_REP2"}) byte[] classFileBuffer, @Nullable ClassLoader loader) {
this.className = className;
this.classFileBuffer = classFileBuffer;
this.loader = loader;
}
@Nonnull
@NonNull
public String getClassName() {
return className;
}
private CtClass ctClass;
@Nonnull
@NonNull
public CtClass getCtClass() throws IOException {
if (ctClass != null) return ctClass;
......
package com.alibaba.ttl.threadpool.agent.internal.transformlet;
import edu.umd.cs.findbugs.annotations.NonNull;
import javassist.CannotCompileException;
import javassist.NotFoundException;
import javax.annotation.Nonnull;
import java.io.IOException;
/**
......@@ -13,5 +13,5 @@ import java.io.IOException;
* @since 2.5.1
*/
public interface JavassistTransformlet {
void doTransform(@Nonnull ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException;
void doTransform(@NonNull ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException;
}
......@@ -4,10 +4,10 @@ import com.alibaba.ttl.threadpool.TtlExecutors;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.ClassInfo;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import javassist.*;
import javax.annotation.Nonnull;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.util.HashMap;
......@@ -56,7 +56,7 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
}
@Override
public void doTransform(@Nonnull final ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException {
public void doTransform(@NonNull final ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException {
if (EXECUTOR_CLASS_NAMES.contains(classInfo.getClassName())) {
final CtClass clazz = classInfo.getCtClass();
......@@ -88,7 +88,7 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
* @see com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils#setAutoWrapperAttachment(Object)
*/
@SuppressFBWarnings("VA_FORMAT_STRING_USES_NEWLINE") // [ERROR] Format string should use %n rather than \n
private void updateSubmitMethodsOfExecutorClass_decorateToTtlWrapperAndSetAutoWrapperAttachment(@Nonnull final CtMethod method) throws NotFoundException, CannotCompileException {
private void updateSubmitMethodsOfExecutorClass_decorateToTtlWrapperAndSetAutoWrapperAttachment(@NonNull final CtMethod method) throws NotFoundException, CannotCompileException {
final int modifiers = method.getModifiers();
if (!Modifier.isPublic(modifiers) || Modifier.isStatic(modifiers)) return;
......@@ -113,7 +113,7 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
/**
* @see TtlExecutors#getDisableInheritableThreadFactory(java.util.concurrent.ThreadFactory)
*/
private void updateConstructorDisableInheritable(@Nonnull final CtClass clazz) throws NotFoundException, CannotCompileException {
private void updateConstructorDisableInheritable(@NonNull final CtClass clazz) throws NotFoundException, CannotCompileException {
for (CtConstructor constructor : clazz.getDeclaredConstructors()) {
final CtClass[] parameterTypes = constructor.getParameterTypes();
final StringBuilder insertCode = new StringBuilder();
......@@ -132,7 +132,7 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
/**
* @see Utils#unwrapIfIsAutoWrapper(Runnable)
*/
private boolean updateBeforeAndAfterExecuteMethodOfExecutorSubclass(@Nonnull final CtClass clazz) throws NotFoundException, CannotCompileException {
private boolean updateBeforeAndAfterExecuteMethodOfExecutorSubclass(@NonNull final CtClass clazz) throws NotFoundException, CannotCompileException {
final CtClass runnableClass = clazz.getClassPool().get(RUNNABLE_CLASS_NAME);
final CtClass threadClass = clazz.getClassPool().get("java.lang.Thread");
final CtClass throwableClass = clazz.getClassPool().get("java.lang.Throwable");
......
......@@ -4,9 +4,9 @@ import com.alibaba.ttl.spi.TtlEnhanced;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.ClassInfo;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import edu.umd.cs.findbugs.annotations.NonNull;
import javassist.*;
import javax.annotation.Nonnull;
import java.io.IOException;
import static com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.*;
......@@ -34,7 +34,7 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
}
@Override
public void doTransform(@Nonnull final ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException {
public void doTransform(@NonNull final ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException {
if (FORK_JOIN_TASK_CLASS_NAME.equals(classInfo.getClassName())) {
updateForkJoinTaskClass(classInfo.getCtClass());
classInfo.setModified();
......@@ -47,7 +47,7 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
/**
* @see Utils#doCaptureWhenNotTtlEnhanced(java.lang.Object)
*/
private void updateForkJoinTaskClass(@Nonnull final CtClass clazz) throws CannotCompileException, NotFoundException {
private void updateForkJoinTaskClass(@NonNull final CtClass clazz) throws CannotCompileException, NotFoundException {
final String className = clazz.getName();
// add new field
......@@ -69,7 +69,7 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
doTryFinallyForMethod(doExecMethod, doExec_renamed_method_rename, beforeCode, finallyCode);
}
private void updateConstructorDisableInheritable(@Nonnull final CtClass clazz) throws NotFoundException, CannotCompileException {
private void updateConstructorDisableInheritable(@NonNull final CtClass clazz) throws NotFoundException, CannotCompileException {
for (CtConstructor constructor : clazz.getDeclaredConstructors()) {
final CtClass[] parameterTypes = constructor.getParameterTypes();
final StringBuilder insertCode = new StringBuilder();
......
......@@ -3,9 +3,9 @@ package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.ClassInfo;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import edu.umd.cs.findbugs.annotations.NonNull;
import javassist.*;
import javax.annotation.Nonnull;
import java.io.IOException;
import static com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.doTryFinallyForMethod;
......@@ -26,7 +26,7 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
private static final String RUN_METHOD_NAME = "run";
@Override
public void doTransform(@Nonnull final ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException {
public void doTransform(@NonNull final ClassInfo classInfo) throws IOException, NotFoundException, CannotCompileException {
if (TIMER_TASK_CLASS_NAME.equals(classInfo.getClassName())) return; // No need transform TimerTask class
final CtClass clazz = classInfo.getCtClass();
......@@ -52,7 +52,7 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
/**
* @see Utils#doCaptureWhenNotTtlEnhanced(java.lang.Object)
*/
private void updateTimerTaskClass(@Nonnull final CtClass clazz) throws CannotCompileException, NotFoundException {
private void updateTimerTaskClass(@NonNull final CtClass clazz) throws CannotCompileException, NotFoundException {
final String className = clazz.getName();
// add new field
......
......@@ -4,10 +4,10 @@ import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.spi.TtlAttachments;
import com.alibaba.ttl.spi.TtlEnhanced;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import javassist.*;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.lang.reflect.Modifier;
import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.capture;
......@@ -26,8 +26,8 @@ public class Utils {
* @param method method object
* @return method signature string
*/
@Nonnull
static String signatureOfMethod(@Nonnull final CtBehavior method) throws NotFoundException {
@NonNull
static String signatureOfMethod(@NonNull final CtBehavior method) throws NotFoundException {
final StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Modifier.toString(method.getModifiers()));
......@@ -48,16 +48,16 @@ public class Utils {
return stringBuilder.toString();
}
@Nonnull
static String renamedMethodNameByTtl(@Nonnull CtMethod method) {
@NonNull
static String renamedMethodNameByTtl(@NonNull CtMethod method) {
return "original$" + method.getName() + "$method$renamed$by$ttl";
}
static void doTryFinallyForMethod(@Nonnull CtMethod method, @Nonnull String beforeCode, @Nonnull String finallyCode) throws CannotCompileException, NotFoundException {
static void doTryFinallyForMethod(@NonNull CtMethod method, @NonNull String beforeCode, @NonNull String finallyCode) throws CannotCompileException, NotFoundException {
doTryFinallyForMethod(method, renamedMethodNameByTtl(method), beforeCode, finallyCode);
}
static void doTryFinallyForMethod(@Nonnull CtMethod method, @Nonnull String renamedMethodName, @Nonnull String beforeCode, @Nonnull String finallyCode) throws CannotCompileException, NotFoundException {
static void doTryFinallyForMethod(@NonNull CtMethod method, @NonNull String renamedMethodName, @NonNull String beforeCode, @NonNull String finallyCode) throws CannotCompileException, NotFoundException {
final CtClass clazz = method.getDeclaringClass();
final CtMethod new_method = CtNewMethod.copy(method, clazz, null);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册