diff --git a/core/src/main/java/bisq/core/dao/DaoFacade.java b/core/src/main/java/bisq/core/dao/DaoFacade.java index a3ccb9377e6..0a5b82fd45f 100644 --- a/core/src/main/java/bisq/core/dao/DaoFacade.java +++ b/core/src/main/java/bisq/core/dao/DaoFacade.java @@ -598,14 +598,14 @@ public Optional getLockTime(String txId) { } - public List getAllBonds() { - List bonds = new ArrayList<>(bondedReputationRepository.getBonds()); + public List> getAllBonds() { + List> bonds = new ArrayList<>(bondedReputationRepository.getBonds()); bonds.addAll(bondedRolesRepository.getBonds()); return bonds; } - public List getAllActiveBonds() { - List bonds = new ArrayList<>(bondedReputationRepository.getActiveBonds()); + public List> getAllActiveBonds() { + List> bonds = new ArrayList<>(bondedReputationRepository.getActiveBonds()); bonds.addAll(bondedRolesRepository.getActiveBonds()); return bonds; } @@ -739,7 +739,7 @@ public boolean isMyRole(Role role) { return bondedRolesRepository.isMyRole(role); } - public Optional getBondByLockupTxId(String lockupTxId) { + public Optional> getBondByLockupTxId(String lockupTxId) { return getAllBonds().stream().filter(e -> lockupTxId.equals(e.getLockupTxId())).findAny(); } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 9cb4ae808c5..41b7dd034a5 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -167,8 +167,7 @@ Map getBurningManCandidatesByName(int chainHeight, daoStateService.getGenesisTx() .ifPresent(tx -> tx.getTxOutputs().forEach(txOutput -> { String name = GENESIS_OUTPUT_PREFIX + txOutput.getIndex(); - burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); - BurningManCandidate candidate = burningManCandidatesByName.get(name); + BurningManCandidate candidate = burningManCandidatesByName.computeIfAbsent(name, n -> new BurningManCandidate()); // Issuance int issuanceHeight = txOutput.getBlockHeight(); @@ -262,8 +261,7 @@ Map> getProofOfBurnOpReturnTxOutputByHas .filter(txOutput -> txOutput.getBlockHeight() <= chainHeight) .forEach(txOutput -> { P2PDataStorage.ByteArray key = new P2PDataStorage.ByteArray(ProofOfBurnConsensus.getHashFromOpReturnData(txOutput.getOpReturnData())); - map.putIfAbsent(key, new HashSet<>()); - map.get(key).add(txOutput); + map.computeIfAbsent(key, k -> new HashSet<>()).add(txOutput); }); return map; } diff --git a/core/src/main/java/bisq/core/dao/governance/bond/BondRepository.java b/core/src/main/java/bisq/core/dao/governance/bond/BondRepository.java index ade5ecd783e..319dcfa2167 100644 --- a/core/src/main/java/bisq/core/dao/governance/bond/BondRepository.java +++ b/core/src/main/java/bisq/core/dao/governance/bond/BondRepository.java @@ -28,6 +28,8 @@ import bisq.core.dao.state.model.blockchain.TxOutput; import bisq.core.dao.state.model.blockchain.TxType; +import com.google.protobuf.ByteString; + import org.bitcoinj.core.Sha256Hash; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.TransactionInput; @@ -56,14 +58,17 @@ * unconfirmed txs. */ @Slf4j -public abstract class BondRepository implements DaoSetupService, +public abstract class BondRepository, T extends BondedAsset> implements DaoSetupService, BsqWalletService.WalletTransactionsChangeListener { /////////////////////////////////////////////////////////////////////////////////////////// // Static /////////////////////////////////////////////////////////////////////////////////////////// - public static void applyBondState(DaoStateService daoStateService, Bond bond, Tx lockupTx, TxOutput lockupTxOutput) { + public static void applyBondState(DaoStateService daoStateService, + Bond bond, + Tx lockupTx, + TxOutput lockupTxOutput) { if (bond.getBondState() != BondState.LOCKUP_TX_PENDING || bond.getBondState() != BondState.UNLOCK_TX_PENDING) bond.setBondState(BondState.LOCKUP_TX_CONFIRMED); @@ -110,7 +115,9 @@ public static boolean isLockupTxUnconfirmed(BsqWalletService bsqWalletService, B .anyMatch(data -> Arrays.equals(BondConsensus.getHashFromOpReturnData(data), bondedAsset.getHash())); } - public static boolean isUnlockTxUnconfirmed(BsqWalletService bsqWalletService, DaoStateService daoStateService, BondedAsset bondedAsset) { + public static boolean isUnlockTxUnconfirmed(BsqWalletService bsqWalletService, + DaoStateService daoStateService, + BondedAsset bondedAsset) { return bsqWalletService.getPendingWalletTransactionsStream() .filter(transaction -> transaction.getInputs().size() > 1) .flatMap(transaction -> transaction.getInputs().stream()) // We need to iterate all inputs @@ -127,7 +134,7 @@ public static boolean isUnlockTxUnconfirmed(BsqWalletService bsqWalletService, D .anyMatch(data -> Arrays.equals(BondConsensus.getHashFromOpReturnData(data), bondedAsset.getHash())); } - public static boolean isConfiscated(Bond bond, DaoStateService daoStateService) { + public static boolean isConfiscated(Bond bond, DaoStateService daoStateService) { return (bond.getLockupTxId() != null && daoStateService.isConfiscatedLockupTxOutput(bond.getLockupTxId())) || (bond.getUnlockTxId() != null && daoStateService.isConfiscatedUnlockTxOutput(bond.getUnlockTxId())); } @@ -136,10 +143,11 @@ public static boolean isConfiscated(Bond bond, DaoStateService daoStateService) protected final DaoStateService daoStateService; protected final BsqWalletService bsqWalletService; - // This map is just for convenience. The data which are used to fill the map are stored in the DaoState (role, txs). - protected final Map bondByUidMap = new HashMap<>(); + // These maps are just for convenience. The data which are used to fill the maps are stored in the DaoState (role, txs). + protected final Map bondByUidMap = new HashMap<>(); + private Map bondedAssetByHashMap; @Getter - protected final ObservableList bonds = FXCollections.observableArrayList(); + protected final ObservableList bonds = FXCollections.observableArrayList(); /////////////////////////////////////////////////////////////////////////////////////////// @@ -187,12 +195,12 @@ public void onWalletTransactionsChange() { // API /////////////////////////////////////////////////////////////////////////////////////////// - public boolean isBondedAssetAlreadyInBond(R bondedAsset) { + public boolean isBondedAssetAlreadyInBond(T bondedAsset) { boolean contains = bondByUidMap.containsKey(bondedAsset.getUid()); return contains && bondByUidMap.get(bondedAsset.getUid()).getLockupTxId() != null; } - public List getActiveBonds() { + public List getActiveBonds() { return bonds.stream().filter(Bond::isActive).collect(Collectors.toList()); } @@ -201,28 +209,35 @@ public List getActiveBonds() { // Protected /////////////////////////////////////////////////////////////////////////////////////////// - protected abstract T createBond(R bondedAsset); + protected abstract B createBond(T bondedAsset); + + protected abstract void updateBond(B bond, T bondedAsset, TxOutput lockupTxOutput); - protected abstract void updateBond(T bond, R bondedAsset, TxOutput lockupTxOutput); + protected abstract Stream getBondedAssetStream(); - protected abstract Stream getBondedAssetStream(); + protected Map getBondedAssetByHashMap() { + return bondedAssetByHashMap != null ? bondedAssetByHashMap + : (bondedAssetByHashMap = getBondedAssetStream() + .collect(Collectors.toMap(a -> ByteString.copyFrom(a.getHash()), a -> a, (a, b) -> a))); + } protected void update() { + long ts = System.currentTimeMillis(); log.debug("update"); + bondedAssetByHashMap = null; getBondedAssetStream().forEach(bondedAsset -> { String uid = bondedAsset.getUid(); - bondByUidMap.putIfAbsent(uid, createBond(bondedAsset)); - T bond = bondByUidMap.get(uid); + B bond = bondByUidMap.computeIfAbsent(uid, u -> createBond(bondedAsset)); - daoStateService.getLockupTxOutputs().forEach(lockupTxOutput -> { - updateBond(bond, bondedAsset, lockupTxOutput); - }); + daoStateService.getLockupTxOutputs().forEach(lockupTxOutput -> + updateBond(bond, bondedAsset, lockupTxOutput)); }); updateBondStateFromUnconfirmedLockupTxs(); updateBondStateFromUnconfirmedUnlockTxs(); bonds.setAll(bondByUidMap.values()); + log.debug("update took {} ms", System.currentTimeMillis() - ts); } diff --git a/core/src/main/java/bisq/core/dao/governance/bond/role/BondedRolesRepository.java b/core/src/main/java/bisq/core/dao/governance/bond/role/BondedRolesRepository.java index d7a10ae1e0b..64964f5cc12 100644 --- a/core/src/main/java/bisq/core/dao/governance/bond/role/BondedRolesRepository.java +++ b/core/src/main/java/bisq/core/dao/governance/bond/role/BondedRolesRepository.java @@ -27,12 +27,13 @@ import bisq.core.dao.state.model.governance.Role; import bisq.core.dao.state.model.governance.RoleProposal; +import com.google.protobuf.ByteString; + import org.bitcoinj.core.Sha256Hash; import org.bitcoinj.core.Transaction; import javax.inject.Inject; -import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.Set; @@ -107,18 +108,12 @@ protected void updateBond(BondedRole bond, Role bondedAsset, TxOutput lockupTxOu // We used the hash of the bonded bondedAsset object as our hash in OpReturn of the lock up tx to have a // unique binding of the tx to the data object. byte[] hash = BondConsensus.getHashFromOpReturnData(opReturnData); - Optional candidate = findBondedAssetByHash(hash); - if (candidate.isPresent() && bondedAsset.equals(candidate.get())) + Role candidateOrNull = getBondedAssetByHashMap().get(ByteString.copyFrom(hash)); + if (bondedAsset.equals(candidateOrNull)) applyBondState(daoStateService, bond, lockupTx, lockupTxOutput); }); } - private Optional findBondedAssetByHash(byte[] hash) { - return getBondedAssetStream() - .filter(bondedAsset -> Arrays.equals(bondedAsset.getHash(), hash)) - .findAny(); - } - private Stream getBondedRoleProposalStream() { return daoStateService.getEvaluatedProposalList().stream() .filter(evaluatedProposal -> evaluatedProposal.getProposal() instanceof RoleProposal) diff --git a/core/src/main/java/bisq/core/dao/monitoring/network/RequestStateHashesHandler.java b/core/src/main/java/bisq/core/dao/monitoring/network/RequestStateHashesHandler.java index 970c8933028..a6ec5627baf 100644 --- a/core/src/main/java/bisq/core/dao/monitoring/network/RequestStateHashesHandler.java +++ b/core/src/main/java/bisq/core/dao/monitoring/network/RequestStateHashesHandler.java @@ -45,7 +45,7 @@ import org.jetbrains.annotations.Nullable; @Slf4j -abstract class RequestStateHashesHandler implements MessageListener { +abstract class RequestStateHashesHandler> implements MessageListener { private static final long TIMEOUT = 180; @@ -53,7 +53,7 @@ abstract class RequestStateHashesHandler { + public interface Listener> { void onComplete(Res getStateHashesResponse, Optional peersNodeAddress); @SuppressWarnings("UnusedParameters") diff --git a/core/src/main/java/bisq/core/dao/monitoring/network/StateNetworkService.java b/core/src/main/java/bisq/core/dao/monitoring/network/StateNetworkService.java index af3e4eedae3..9ea397e6743 100644 --- a/core/src/main/java/bisq/core/dao/monitoring/network/StateNetworkService.java +++ b/core/src/main/java/bisq/core/dao/monitoring/network/StateNetworkService.java @@ -53,13 +53,13 @@ import javax.annotation.Nullable; @Slf4j -public abstract class StateNetworkService, Req extends GetStateHashesRequest, Res extends GetStateHashesResponse, - Han extends RequestStateHashesHandler, + Han extends RequestStateHashesHandler, StH extends StateHash> implements MessageListener { - public interface Listener { + public interface Listener, Req extends GetStateHashesRequest, StH extends StateHash> { void onNewStateHashMessage(Msg newStateHashMessage, Connection connection); void onGetStateHashRequest(Connection connection, Req getStateHashRequest); diff --git a/core/src/main/java/bisq/core/dao/state/model/blockchain/TxOutputKey.java b/core/src/main/java/bisq/core/dao/state/model/blockchain/TxOutputKey.java index 282d69d2783..af8468a9908 100644 --- a/core/src/main/java/bisq/core/dao/state/model/blockchain/TxOutputKey.java +++ b/core/src/main/java/bisq/core/dao/state/model/blockchain/TxOutputKey.java @@ -31,7 +31,7 @@ */ @Immutable @Value -public final class TxOutputKey implements ImmutableDaoStateModel, Comparable { +public final class TxOutputKey implements ImmutableDaoStateModel, Comparable { private final String txId; private final int index; @@ -47,7 +47,7 @@ public String toString() { public static TxOutputKey getKeyFromString(String keyAsString) { final String[] tokens = keyAsString.split(":"); - return new TxOutputKey(tokens[0], Integer.valueOf(tokens[1])); + return new TxOutputKey(tokens[0], Integer.parseInt(tokens[1])); } @Override diff --git a/core/src/main/java/bisq/core/locale/CurrencyUtil.java b/core/src/main/java/bisq/core/locale/CurrencyUtil.java index 61b83623f93..91f6b8923cb 100644 --- a/core/src/main/java/bisq/core/locale/CurrencyUtil.java +++ b/core/src/main/java/bisq/core/locale/CurrencyUtil.java @@ -88,8 +88,8 @@ public static List getAllFiatCurrencies() { return new ArrayList<>(fiatCurrencyMapSupplier.get().values()); } - public static Collection getAllSortedFiatCurrencies(Comparator comparator) { - return (List) getAllSortedFiatCurrencies().stream() + public static Collection getAllSortedFiatCurrencies(Comparator comparator) { + return getAllSortedFiatCurrencies().stream() .sorted(comparator) // sorted by comparator param .collect(Collectors.toList()); } diff --git a/core/src/test/java/bisq/core/dao/governance/proposal/MyProposalListServiceTest.java b/core/src/test/java/bisq/core/dao/governance/proposal/MyProposalListServiceTest.java index 1606c8250aa..52e2ef8482a 100644 --- a/core/src/test/java/bisq/core/dao/governance/proposal/MyProposalListServiceTest.java +++ b/core/src/test/java/bisq/core/dao/governance/proposal/MyProposalListServiceTest.java @@ -11,20 +11,24 @@ import javafx.beans.property.SimpleIntegerProperty; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +@ExtendWith(MockitoExtension.class) public class MyProposalListServiceTest { @Test - public void canInstantiate() { + public void canInstantiate(@Mock PersistenceManager persistenceManager) { P2PService p2PService = mock(P2PService.class); when(p2PService.getNumConnectedPeers()).thenReturn(new SimpleIntegerProperty(0)); - PersistenceManager persistenceManager = mock(PersistenceManager.class); - MyProposalListService service = new MyProposalListService(p2PService, - mock(DaoStateService.class), - mock(PeriodService.class), mock(WalletsManager.class), persistenceManager, mock(PubKeyRing.class) + + new MyProposalListService(p2PService, mock(DaoStateService.class), mock(PeriodService.class), + mock(WalletsManager.class), persistenceManager, mock(PubKeyRing.class) ); } } diff --git a/core/src/test/java/bisq/core/user/PreferencesTest.java b/core/src/test/java/bisq/core/user/PreferencesTest.java index d56ce3d4e53..aeb8af13d02 100644 --- a/core/src/test/java/bisq/core/user/PreferencesTest.java +++ b/core/src/test/java/bisq/core/user/PreferencesTest.java @@ -34,30 +34,37 @@ import java.util.Currency; import java.util.List; import java.util.Locale; +import java.util.function.Consumer; + +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +@ExtendWith(MockitoExtension.class) public class PreferencesTest { - private Preferences preferences; - private PersistenceManager persistenceManager; + @Mock + private PersistenceManager persistenceManager; @BeforeEach public void setUp() { - final Locale en_US = new Locale("en", "US"); + Locale en_US = new Locale("en", "US"); Locale.setDefault(en_US); GlobalSettings.setLocale(en_US); Res.setBaseCurrencyCode("BTC"); Res.setBaseCurrencyName("Bitcoin"); - persistenceManager = mock(PersistenceManager.class); Config config = new Config(); LocalBitcoinNode localBitcoinNode = new LocalBitcoinNode(config); preferences = new Preferences( @@ -65,11 +72,19 @@ public void setUp() { false, null, null, Config.UNSPECIFIED_PORT); } + @SuppressWarnings("unchecked") + private void addReadPersistedStub(PreferencesPayload payload) { + doAnswer(invocation -> { + ((Consumer) invocation.getArgument(1)).accept(payload); + return null; + }).when(persistenceManager).readPersisted(anyString(), any(), any()); + } + @Test public void testAddFiatCurrency() { - final FiatCurrency usd = new FiatCurrency("USD"); - final FiatCurrency usd2 = new FiatCurrency("USD"); - final ObservableList fiatCurrencies = preferences.getFiatCurrenciesAsObservable(); + FiatCurrency usd = new FiatCurrency("USD"); + FiatCurrency usd2 = new FiatCurrency("USD"); + ObservableList fiatCurrencies = preferences.getFiatCurrenciesAsObservable(); preferences.addFiatCurrency(usd); @@ -85,17 +100,18 @@ public void testGetUniqueListOfFiatCurrencies() { PreferencesPayload payload = mock(PreferencesPayload.class); List fiatCurrencies = CurrencyUtil.getMainFiatCurrencies(); - final FiatCurrency usd = new FiatCurrency("USD"); + int numMainFiatCurrencies = fiatCurrencies.size(); + FiatCurrency usd = new FiatCurrency("USD"); fiatCurrencies.add(usd); - when(persistenceManager.getPersisted(anyString())).thenReturn(payload); + addReadPersistedStub(payload); when(payload.getUserLanguage()).thenReturn("en"); when(payload.getUserCountry()).thenReturn(CountryUtil.getDefaultCountry()); when(payload.getPreferredTradeCurrency()).thenReturn(usd); when(payload.getFiatCurrencies()).thenReturn(fiatCurrencies); preferences.readPersisted(() -> { - assertEquals(7, preferences.getFiatCurrenciesAsObservable().size()); + assertEquals(numMainFiatCurrencies, preferences.getFiatCurrenciesAsObservable().size()); assertTrue(preferences.getFiatCurrenciesAsObservable().contains(usd)); }); } @@ -105,16 +121,18 @@ public void testGetUniqueListOfCryptoCurrencies() { PreferencesPayload payload = mock(PreferencesPayload.class); List cryptoCurrencies = CurrencyUtil.getMainCryptoCurrencies(); - final CryptoCurrency dash = new CryptoCurrency("DASH", "Dash"); + int numMainCryptoCurrencies = cryptoCurrencies.size(); + CryptoCurrency dash = new CryptoCurrency("DASH", "Dash"); cryptoCurrencies.add(dash); - when(persistenceManager.getPersisted(anyString())).thenReturn(payload); + addReadPersistedStub(payload); when(payload.getUserLanguage()).thenReturn("en"); when(payload.getUserCountry()).thenReturn(CountryUtil.getDefaultCountry()); when(payload.getPreferredTradeCurrency()).thenReturn(new FiatCurrency("USD")); when(payload.getCryptoCurrencies()).thenReturn(cryptoCurrencies); preferences.readPersisted(() -> { + assertEquals(numMainCryptoCurrencies, preferences.getCryptoCurrenciesAsObservable().size()); assertTrue(preferences.getCryptoCurrenciesAsObservable().contains(dash)); }); } @@ -124,19 +142,18 @@ public void testUpdateOfPersistedFiatCurrenciesAfterLocaleChanged() { PreferencesPayload payload = mock(PreferencesPayload.class); List fiatCurrencies = new ArrayList<>(); - final FiatCurrency usd = new FiatCurrency(Currency.getInstance("USD"), new Locale("de", "AT")); + FiatCurrency usd = new FiatCurrency(Currency.getInstance("USD"), new Locale("de", "AT")); fiatCurrencies.add(usd); assertEquals("US-Dollar (USD)", usd.getNameAndCode()); - when(persistenceManager.getPersisted(anyString())).thenReturn(payload); + addReadPersistedStub(payload); when(payload.getUserLanguage()).thenReturn("en"); when(payload.getUserCountry()).thenReturn(CountryUtil.getDefaultCountry()); when(payload.getPreferredTradeCurrency()).thenReturn(usd); when(payload.getFiatCurrencies()).thenReturn(fiatCurrencies); - preferences.readPersisted(() -> { - assertEquals("US Dollar (USD)", preferences.getFiatCurrenciesAsObservable().get(0).getNameAndCode()); - }); + preferences.readPersisted(() -> + assertEquals("US Dollar (USD)", preferences.getFiatCurrenciesAsObservable().get(0).getNameAndCode())); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/BondingView.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/BondingView.java index cbeb133f9b0..f86c8cc3a36 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/BondingView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/BondingView.java @@ -50,7 +50,6 @@ @FxmlView public class BondingView extends ActivatableView { - private final ViewLoader viewLoader; private final Navigation navigation; @@ -138,8 +137,7 @@ private void loadView(Class viewClass, @Nullable Object data) { else if (view instanceof BondsView) { toggleGroup.selectToggle(bonds); if (data instanceof Bond) - ((BondsView) view).setSelectedBond((Bond) data); + ((BondsView) view).setSelectedBond((Bond) data); } - } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondListItem.java index 6164a6a3409..77308b38954 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondListItem.java @@ -37,7 +37,7 @@ @Value @Slf4j class BondListItem { - private final Bond bond; + private final Bond bond; private final String bondType; private final String lockupTxId; private final String amount; @@ -47,7 +47,7 @@ class BondListItem { private final BondState bondState; private final String bondStateString; - BondListItem(Bond bond, BsqFormatter bsqFormatter) { + BondListItem(Bond bond, BsqFormatter bsqFormatter) { this.bond = bond; amount = bsqFormatter.formatCoin(Coin.valueOf(bond.getAmount())); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java index e78e6cc37f2..532e0b8deaa 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java @@ -76,7 +76,7 @@ public class BondsView extends ActivatableView { private ListChangeListener bondedRolesListener; private ListChangeListener bondedReputationListener; - private Bond selectedBond; + private Bond selectedBond; /////////////////////////////////////////////////////////////////////////////////////////// // Constructor, lifecycle @@ -124,7 +124,7 @@ protected void deactivate() { // API /////////////////////////////////////////////////////////////////////////////////////////// - public void setSelectedBond(Bond bond) { + public void setSelectedBond(Bond bond) { // Set the selected bond if it's found in the tableView, which listens to sortedList. // If this is called before the sortedList has been populated the selected bond is stored and // we try to apply again after the next update. @@ -141,7 +141,7 @@ public void setSelectedBond(Bond bond) { /////////////////////////////////////////////////////////////////////////////////////////// private void updateList() { - List combined = new ArrayList<>(bondedReputationRepository.getBonds()); + List> combined = new ArrayList<>(bondedReputationRepository.getBonds()); combined.addAll(bondedRolesRepository.getBonds()); observableList.setAll(combined.stream() .map(bond -> new BondListItem(bond, bsqFormatter)) @@ -149,7 +149,7 @@ private void updateList() { .collect(Collectors.toList())); GUIUtil.setFitToRowsForTableView(tableView, 37, 28, 2, 30); if (selectedBond != null) { - Bond bond = selectedBond; + Bond bond = selectedBond; selectedBond = null; setSelectedBond(bond); } @@ -259,8 +259,6 @@ public void updateItem(final BondListItem item, boolean empty) { @Override public TableCell call(TableColumn column) { return new TableCell<>() { - private InfoAutoTooltipLabel infoTextField; - @Override public void updateItem(final BondListItem item, boolean empty) { super.updateItem(item, empty); @@ -271,7 +269,7 @@ public void updateItem(final BondListItem item, boolean empty) { info = item.getBondDetails() + "\n" + info; } - infoTextField = new InfoAutoTooltipLabel(item.getBondDetails(), + InfoAutoTooltipLabel infoTextField = new InfoAutoTooltipLabel(item.getBondDetails(), AwesomeIcon.INFO_SIGN, ContentDisplay.LEFT, info, diff --git a/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java b/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java index abeef70dc11..302125a860d 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java @@ -120,7 +120,7 @@ public class ProposalDisplay { @Nullable public ComboBox paramComboBox; @Nullable - public ComboBox confiscateBondComboBox; + public ComboBox> confiscateBondComboBox; @Nullable public ComboBox bondedRoleTypeComboBox; @Nullable @@ -371,7 +371,7 @@ public BondedRoleType fromString(String string) { confiscateBondComboBox.setItems(FXCollections.observableArrayList(daoFacade.getAllActiveBonds())); confiscateBondComboBox.setConverter(new StringConverter<>() { @Override - public String toString(Bond bond) { + public String toString(Bond bond) { String details = " (" + Res.get("dao.bond.table.column.lockupTxId") + ": " + bond.getLockupTxId() + ")"; if (bond instanceof BondedRole) { return bond.getBondedAsset().getDisplayString() + details; @@ -381,7 +381,7 @@ public String toString(Bond bond) { } @Override - public Bond fromString(String string) { + public Bond fromString(String string) { return null; } }); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java b/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java index 8a4656938e9..a89c327cf05 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java @@ -453,7 +453,7 @@ private ProposalWithTransaction getProposalWithTransaction(ProposalType proposal case CONFISCATE_BOND: checkNotNull(proposalDisplay.confiscateBondComboBox, "proposalDisplay.confiscateBondComboBox must not be null"); - Bond bond = proposalDisplay.confiscateBondComboBox.getSelectionModel().getSelectedItem(); + Bond bond = proposalDisplay.confiscateBondComboBox.getSelectionModel().getSelectedItem(); if (!bond.isActive()) throw new VoteResultException.ValidationException("Bond is not locked and can't be confiscated"); diff --git a/desktop/src/test/java/bisq/desktop/maker/PreferenceMakers.java b/desktop/src/test/java/bisq/desktop/maker/PreferenceMakers.java index a6bbab9f547..d53f5d08601 100644 --- a/desktop/src/test/java/bisq/desktop/maker/PreferenceMakers.java +++ b/desktop/src/test/java/bisq/desktop/maker/PreferenceMakers.java @@ -20,6 +20,7 @@ import bisq.core.btc.nodes.LocalBitcoinNode; import bisq.core.provider.fee.FeeService; import bisq.core.user.Preferences; +import bisq.core.user.PreferencesPayload; import bisq.common.config.Config; import bisq.common.persistence.PersistenceManager; @@ -32,8 +33,7 @@ import static com.natpryce.makeiteasy.MakeItEasy.make; public class PreferenceMakers { - - public static final Property storage = new Property<>(); + public static final Property> storage = new Property<>(); public static final Property config = new Property<>(); public static final Property feeService = new Property<>(); public static final Property localBitcoinNode = new Property<>(); @@ -41,14 +41,13 @@ public class PreferenceMakers { public static final Property referralID = new Property<>(); public static final Instantiator Preferences = lookup -> new Preferences( - lookup.valueOf(storage, new SameValueDonor(null)), - lookup.valueOf(config, new SameValueDonor(null)), - lookup.valueOf(feeService, new SameValueDonor(null)), - lookup.valueOf(localBitcoinNode, new SameValueDonor(null)), - lookup.valueOf(useTorFlagFromOptions, new SameValueDonor(null)), - lookup.valueOf(referralID, new SameValueDonor(null)), + lookup.valueOf(storage, new SameValueDonor<>(null)), + lookup.valueOf(config, new SameValueDonor<>(null)), + lookup.valueOf(feeService, new SameValueDonor<>(null)), + lookup.valueOf(localBitcoinNode, new SameValueDonor<>(null)), + lookup.valueOf(useTorFlagFromOptions, new SameValueDonor<>(null)), + lookup.valueOf(referralID, new SameValueDonor<>(null)), Config.DEFAULT_FULL_DAO_NODE, false, null, null, Config.UNSPECIFIED_PORT); public static final Preferences empty = make(a(Preferences)); - }