diff --git a/core/src/main/java/com/google/bitcoin/core/Wallet.java b/core/src/main/java/com/google/bitcoin/core/Wallet.java index adbdadf0..9e8364f0 100644 --- a/core/src/main/java/com/google/bitcoin/core/Wallet.java +++ b/core/src/main/java/com/google/bitcoin/core/Wallet.java @@ -22,6 +22,7 @@ import com.google.bitcoin.crypto.KeyCrypter; import com.google.bitcoin.crypto.KeyCrypterException; import com.google.bitcoin.crypto.KeyCrypterScrypt; import com.google.bitcoin.store.WalletProtobufSerializer; +import com.google.bitcoin.utils.ListenerRegistration; import com.google.bitcoin.utils.Threading; import com.google.common.base.Objects; import com.google.common.base.Preconditions; @@ -116,16 +117,7 @@ public class Wallet implements Serializable, BlockChainListener { private Sha256Hash lastBlockSeenHash; private int lastBlockSeenHeight = -1; - private static class ListenerRegistration { - public WalletEventListener listener; - public Executor executor; - - public ListenerRegistration(WalletEventListener listener, Executor executor) { - this.listener = listener; - this.executor = executor; - } - } - private transient CopyOnWriteArrayList eventListeners; + private transient CopyOnWriteArrayList> eventListeners; // Auto-save code. This all should be generalized in future to not be file specific so you can easily store the // wallet into a database using the same mechanism. However we need to inform stores of each specific change with @@ -297,7 +289,7 @@ public class Wallet implements Serializable, BlockChainListener { spent = new HashMap(); pending = new HashMap(); dead = new HashMap(); - eventListeners = new CopyOnWriteArrayList(); + eventListeners = new CopyOnWriteArrayList>(); extensions = new HashMap(); confidenceChanged = new HashMap(); createTransientState(); @@ -3121,7 +3113,7 @@ public class Wallet implements Serializable, BlockChainListener { private void queueOnTransactionConfidenceChanged(final Transaction tx) { checkState(lock.isLocked()); - for (final ListenerRegistration registration : eventListeners) { + for (final ListenerRegistration registration : eventListeners) { registration.executor.execute(new Runnable() { @Override public void run() { @@ -3137,7 +3129,7 @@ public class Wallet implements Serializable, BlockChainListener { checkState(lock.isLocked()); checkState(onWalletChangedSuppressions >= 0); if (onWalletChangedSuppressions > 0) return; - for (final ListenerRegistration registration : eventListeners) { + for (final ListenerRegistration registration : eventListeners) { registration.executor.execute(new Runnable() { @Override public void run() { @@ -3149,7 +3141,7 @@ public class Wallet implements Serializable, BlockChainListener { private void queueOnCoinsReceived(final Transaction tx, final BigInteger balance, final BigInteger newBalance) { checkState(lock.isLocked()); - for (final ListenerRegistration registration : eventListeners) { + for (final ListenerRegistration registration : eventListeners) { registration.executor.execute(new Runnable() { @Override public void run() { @@ -3161,7 +3153,7 @@ public class Wallet implements Serializable, BlockChainListener { private void queueOnCoinsSent(final Transaction tx, final BigInteger prevBalance, final BigInteger newBalance) { checkState(lock.isLocked()); - for (final ListenerRegistration registration : eventListeners) { + for (final ListenerRegistration registration : eventListeners) { registration.executor.execute(new Runnable() { @Override public void run() { @@ -3174,7 +3166,7 @@ public class Wallet implements Serializable, BlockChainListener { private void queueOnReorganize() { checkState(lock.isLocked()); checkState(insideReorg); - for (final ListenerRegistration registration : eventListeners) { + for (final ListenerRegistration registration : eventListeners) { registration.executor.execute(new Runnable() { @Override public void run() { @@ -3186,7 +3178,7 @@ public class Wallet implements Serializable, BlockChainListener { private void queueOnKeysAdded(final List keys) { checkState(lock.isLocked()); - for (final ListenerRegistration registration : eventListeners) { + for (final ListenerRegistration registration : eventListeners) { registration.executor.execute(new Runnable() { @Override public void run() { diff --git a/core/src/main/java/com/google/bitcoin/utils/ListenerRegistration.java b/core/src/main/java/com/google/bitcoin/utils/ListenerRegistration.java new file mode 100644 index 00000000..fe99b784 --- /dev/null +++ b/core/src/main/java/com/google/bitcoin/utils/ListenerRegistration.java @@ -0,0 +1,18 @@ +package com.google.bitcoin.utils; + +import com.google.bitcoin.core.WalletEventListener; + +import java.util.concurrent.Executor; + +/** +* A simple wrapper around a listener and an executor. +*/ +public class ListenerRegistration { + public T listener; + public Executor executor; + + public ListenerRegistration(T listener, Executor executor) { + this.listener = listener; + this.executor = executor; + } +}