Skip to content

Commit 1ff8bf0

Browse files
authored
Show alliances in sorted order in the player list. (#10507)
* Show alliances in sorted order in the player list. Also use new syntax for game locking. * Improve comments and use local gameData variable.
1 parent 7358e0a commit 1ff8bf0

File tree

1 file changed

+13
-25
lines changed
  • game-app/game-core/src/main/java/games/strategy/triplea/ui

1 file changed

+13
-25
lines changed

game-app/game-core/src/main/java/games/strategy/triplea/ui/StatPanel.java

+13-25
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.HashMap;
2727
import java.util.List;
2828
import java.util.Map;
29+
import java.util.stream.Collectors;
2930
import javax.swing.ImageIcon;
3031
import javax.swing.JComponent;
3132
import javax.swing.JLabel;
@@ -171,10 +172,9 @@ void setStatColumns() {
171172
}
172173

173174
private synchronized void loadData() {
174-
// copy so acquire/release read lock are on the same object!
175+
// copy so that the object doesn't change underneath us
175176
final GameData gameData = StatPanel.this.gameData;
176-
gameData.acquireReadLock();
177-
try {
177+
try (GameData.Unlocker ignored = gameData.acquireReadLock()) {
178178
final List<GamePlayer> players = gameData.getPlayerList().getSortedPlayers();
179179
final Collection<String> alliances = gameData.getAllianceTracker().getAlliances();
180180
collectedData = new String[players.size() + alliances.size()][stats.length + 1];
@@ -188,7 +188,7 @@ private synchronized void loadData() {
188188
}
189189
row++;
190190
}
191-
for (final String alliance : alliances) {
191+
for (final String alliance : alliances.stream().sorted().collect(Collectors.toList())) {
192192
collectedData[row][0] = alliance;
193193
for (int i = 0; i < stats.length; i++) {
194194
collectedData[row][i + 1] =
@@ -197,8 +197,6 @@ private synchronized void loadData() {
197197
}
198198
row++;
199199
}
200-
} finally {
201-
gameData.releaseReadLock();
202200
}
203201
}
204202

@@ -263,18 +261,16 @@ class TechTableModel extends AbstractTableModel {
263261
colMap.put(colList[i], i + 1);
264262
}
265263
boolean useTech = false;
264+
// copy so that the object doesn't change underneath us
266265
final GameData gameData = StatPanel.this.gameData;
267-
try {
268-
gameData.acquireReadLock();
266+
try (GameData.Unlocker ignored = gameData.acquireReadLock()) {
269267
final int numTechs = TechAdvance.getTechAdvances(gameData.getTechnologyFrontier()).size();
270268
if (gameData.getResourceList().getResource(Constants.TECH_TOKENS) != null) {
271269
useTech = true;
272270
data = new String[numTechs + 1][colList.length + 2];
273271
} else {
274272
data = new String[numTechs][colList.length + 1];
275273
}
276-
} finally {
277-
gameData.releaseReadLock();
278274
}
279275
/* Load the technology -> row mapping */
280276
int row = 0;
@@ -313,41 +309,36 @@ private void initColList() {
313309

314310
void update() {
315311
clearAdvances();
316-
// copy so acquire/release read lock are on the same object!
312+
// copy so that the object doesn't change underneath us
317313
final GameData gameData = StatPanel.this.gameData;
318-
gameData.acquireReadLock();
319-
try {
314+
try (GameData.Unlocker ignored = gameData.acquireReadLock()) {
320315
for (final GamePlayer pid : gameData.getPlayerList().getPlayers()) {
321316
if (colMap.get(pid.getName()) == null) {
322317
throw new IllegalStateException(
323318
"Unexpected player in GameData.getPlayerList()" + pid.getName());
324319
}
325320
final int col = colMap.get(pid.getName());
326321
int row = 0;
327-
if (StatPanel.this.gameData.getResourceList().getResource(Constants.TECH_TOKENS)
328-
!= null) {
322+
if (gameData.getResourceList().getResource(Constants.TECH_TOKENS) != null) {
329323
final int tokens = pid.getResources().getQuantity(Constants.TECH_TOKENS);
330324
data[row][col] = Integer.toString(tokens);
331325
}
332326
final List<TechAdvance> advancesAll =
333-
TechAdvance.getTechAdvances(StatPanel.this.gameData.getTechnologyFrontier());
327+
TechAdvance.getTechAdvances(gameData.getTechnologyFrontier());
334328
final List<TechAdvance> has =
335-
TechAdvance.getTechAdvances(StatPanel.this.gameData.getTechnologyFrontier(), pid);
329+
TechAdvance.getTechAdvances(gameData.getTechnologyFrontier(), pid);
336330
for (final TechAdvance advance : advancesAll) {
337331
if (!has.contains(advance)) {
338332
row = rowMap.get(advance.getName());
339333
data[row][col] = "-";
340334
}
341335
}
342336
for (final TechAdvance advance :
343-
TechTracker.getCurrentTechAdvances(
344-
pid, StatPanel.this.gameData.getTechnologyFrontier())) {
337+
TechTracker.getCurrentTechAdvances(pid, gameData.getTechnologyFrontier())) {
345338
row = rowMap.get(advance.getName());
346339
data[row][col] = "X";
347340
}
348341
}
349-
} finally {
350-
gameData.releaseReadLock();
351342
}
352343
}
353344

@@ -396,11 +387,8 @@ class PuStat extends ResourceStat {
396387

397388
private static Resource getResourcePUs(final GameData data) {
398389
final Resource pus;
399-
try {
400-
data.acquireReadLock();
390+
try (GameData.Unlocker ignored = data.acquireReadLock()) {
401391
pus = data.getResourceList().getResource(Constants.PUS);
402-
} finally {
403-
data.releaseReadLock();
404392
}
405393
return pus;
406394
}

0 commit comments

Comments
 (0)