■ ■ ■ ■ ■ ■
jadx-gui/src/main/java/jadx/gui/utils/search/SimpleIndex.java
| skipped 11 lines |
12 | 12 | | private final List<String> keys = new ArrayList<>(); |
13 | 13 | | private final List<T> values = new ArrayList<>(); |
14 | 14 | | |
| 15 | + | private final Object syncData = new Object(); |
| 16 | + | |
15 | 17 | | @Override |
16 | 18 | | public void put(String str, T value) { |
17 | | - | keys.add(str); |
18 | | - | values.add(value); |
| 19 | + | synchronized (syncData) { |
| 20 | + | keys.add(str); |
| 21 | + | values.add(value); |
| 22 | + | } |
19 | 23 | | } |
20 | 24 | | |
21 | 25 | | @Override |
| skipped 17 lines |
39 | 43 | | @Override |
40 | 44 | | public Flowable<T> search(final String searchStr, final boolean caseInsensitive) { |
41 | 45 | | return Flowable.create(emitter -> { |
42 | | - | int size = size(); |
43 | | - | for (int i = 0; i < size; i++) { |
44 | | - | if (isMatched(keys.get(i), searchStr, caseInsensitive)) { |
45 | | - | emitter.onNext(values.get(i)); |
46 | | - | } |
47 | | - | if (emitter.isCancelled()) { |
48 | | - | return; |
| 46 | + | synchronized (syncData) { |
| 47 | + | int size = keys.size(); |
| 48 | + | for (int i = 0; i < size; i++) { |
| 49 | + | if (isMatched(keys.get(i), searchStr, caseInsensitive)) { |
| 50 | + | emitter.onNext(values.get(i)); |
| 51 | + | } |
| 52 | + | if (emitter.isCancelled()) { |
| 53 | + | return; |
| 54 | + | } |
49 | 55 | | } |
50 | 56 | | } |
51 | 57 | | emitter.onComplete(); |
| skipped 2 lines |
54 | 60 | | |
55 | 61 | | @Override |
56 | 62 | | public int size() { |
57 | | - | return keys.size(); |
| 63 | + | synchronized (syncData) { |
| 64 | + | return keys.size(); |
| 65 | + | } |
58 | 66 | | } |
59 | 67 | | } |
60 | 68 | | |