[duplicates] enable duplicates analysis in PyCharm/WebStorm/PhpStorm/RubyMine
[idea/community.git] / platform / core-api / src / com / intellij / openapi / util / AsyncResult.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.util;
3
4 import com.intellij.util.Consumer;
5 import org.jetbrains.annotations.NotNull;
6 import org.jetbrains.annotations.Nullable;
7
8 /** @deprecated use {@link java.util.concurrent.CompletableFuture} or {@link org.jetbrains.concurrency.Promise} */
9 @Deprecated
10 @SuppressWarnings({"DeprecatedIsStillUsed", "LambdaUnfriendlyMethodOverload", "BoundedWildcard"})
11 public class AsyncResult<T> extends ActionCallback {
12   protected T myResult;
13
14   public AsyncResult() { }
15
16   @NotNull
17   public AsyncResult<T> setDone(T result) {
18     myResult = result;
19     setDone();
20     return this;
21   }
22
23   @NotNull
24   public AsyncResult<T> setRejected(T result) {
25     myResult = result;
26     setRejected();
27     return this;
28   }
29
30   @NotNull
31   public AsyncResult<T> doWhenDone(@NotNull final Handler<T> handler) {
32     doWhenDone(() -> handler.run(myResult));
33     return this;
34   }
35
36   @NotNull
37   public AsyncResult<T> doWhenDone(@NotNull final Consumer<T> consumer) {
38     doWhenDone(() -> consumer.consume(myResult));
39     return this;
40   }
41
42   @Override
43   @NotNull
44   public final AsyncResult<T> notify(@NotNull final ActionCallback child) {
45     super.notify(child);
46     return this;
47   }
48
49   public T getResult() {
50     return myResult;
51   }
52
53   public T getResultSync() {
54     return getResultSync(-1);
55   }
56
57   @Nullable
58   public T getResultSync(long msTimeout) {
59     waitFor(msTimeout);
60     return myResult;
61   }
62
63   public interface Handler<T> {
64     void run(T t);
65   }
66
67   @NotNull
68   public static <R> AsyncResult<R> done(@Nullable R result) {
69     return new AsyncResult<R>().setDone(result);
70   }
71 }