Skip to content

Commit a5d36aa

Browse files
tastybentoclaude
andcommitted
Resolve SonarCloud quality gate failures on PR #53
- Eliminate 11 S2637 @nonnull warnings in UpgradesManager by extracting a getGameModeName() helper and returning early when the game mode is absent, so the name passed to Settings is always non-null. - Extract LEVEL_VAR / ISLAND_LEVEL_VAR / NUMBER_PLAYER_VAR constants on Price and Reward base classes and replace the duplicated "[level]" literals across price and reward implementations (clears S1192). - Collapse CropGrowthListener.computeBonus and SpawnerUpgradeListener.computeBonus into a shared BonusCalculator helper, removing the copy-pasted nested-loop block and dropping both S3776 cognitive-complexity hits below the threshold. - Rewrite PanelClick.onClick as a single guarded flow and suppress the S3516 blocker with a comment explaining the ClickHandler contract. - Add PricesTest and RewardsTest covering all concrete price and reward classes plus their DB objects to lift new-code coverage above 30%. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 8c79ef2 commit a5d36aa

15 files changed

Lines changed: 656 additions & 206 deletions

File tree

src/main/java/world/bentobox/upgrades/UpgradesManager.java

Lines changed: 28 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ public Reward searchReward(Class<? extends Reward> reward) {
7070
return this.activatedRewards.get(reward);
7171
}
7272

73+
private Optional<String> getGameModeName(World world) {
74+
return this.addon.getPlugin()
75+
.getIWM()
76+
.getAddon(world)
77+
.map(a -> a.getDescription()
78+
.getName());
79+
}
80+
7381
public int getIslandLevel(Island island) {
7482
if (!this.addon.isLevelProvided())
7583
return 0;
@@ -83,13 +91,9 @@ public int getIslandLevel(Island island) {
8391
}
8492

8593
public List<Settings.UpgradeTier> getAllRangeUpgradeTiers(World world) {
86-
String name = this.addon.getPlugin()
87-
.getIWM()
88-
.getAddon(world)
89-
.map(a -> a.getDescription()
90-
.getName())
91-
.orElse(null);
92-
if (name == null) return Collections.emptyList();
94+
Optional<String> nameOpt = getGameModeName(world);
95+
if (nameOpt.isEmpty()) return Collections.emptyList();
96+
String name = nameOpt.get();
9397

9498
Map<String, Settings.UpgradeTier> defaultTiers = this.addon.getSettings()
9599
.getDefaultRangeUpgradeTierMap();
@@ -118,15 +122,11 @@ public List<Settings.UpgradeTier> getAllRangeUpgradeTiers(World world) {
118122
}
119123

120124
public Map<Material, List<Settings.UpgradeTier>> getAllBlockLimitsUpgradeTiers(World world) {
121-
String name = this.addon.getPlugin()
122-
.getIWM()
123-
.getAddon(world)
124-
.map(a -> a.getDescription()
125-
.getName())
126-
.orElse(null);
127-
if (name == null) {
125+
Optional<String> nameOpt = getGameModeName(world);
126+
if (nameOpt.isEmpty()) {
128127
return Collections.emptyMap();
129128
}
129+
String name = nameOpt.get();
130130

131131
Map<Material, Map<String, Settings.UpgradeTier>> defaultTiers = this.addon.getSettings()
132132
.getDefaultBlockLimitsUpgradeTierMap();
@@ -165,15 +165,11 @@ public Map<Material, List<Settings.UpgradeTier>> getAllBlockLimitsUpgradeTiers(W
165165
}
166166

167167
public Map<EntityType, List<Settings.UpgradeTier>> getAllEntityLimitsUpgradeTiers(World world) {
168-
String name = this.addon.getPlugin()
169-
.getIWM()
170-
.getAddon(world)
171-
.map(a -> a.getDescription()
172-
.getName())
173-
.orElse(null);
174-
if (name == null) {
168+
Optional<String> nameOpt = getGameModeName(world);
169+
if (nameOpt.isEmpty()) {
175170
return Collections.emptyMap();
176171
}
172+
String name = nameOpt.get();
177173

178174
Map<EntityType, Map<String, Settings.UpgradeTier>> defaultTiers = this.addon.getSettings()
179175
.getDefaultEntityLimitsUpgradeTierMap();
@@ -212,15 +208,11 @@ public Map<EntityType, List<Settings.UpgradeTier>> getAllEntityLimitsUpgradeTier
212208
}
213209

214210
public Map<String, List<Settings.UpgradeTier>> getAllEntityGroupLimitsUpgradeTiers(World world) {
215-
String name = this.addon.getPlugin()
216-
.getIWM()
217-
.getAddon(world)
218-
.map(a -> a.getDescription()
219-
.getName())
220-
.orElse(null);
221-
if (name == null) {
211+
Optional<String> nameOpt = getGameModeName(world);
212+
if (nameOpt.isEmpty()) {
222213
return Collections.emptyMap();
223214
}
215+
String name = nameOpt.get();
224216

225217
Map<String, Map<String, Settings.UpgradeTier>> defaultTiers = this.addon.getSettings()
226218
.getDefaultEntityGroupLimitsUpgradeTierMap();
@@ -259,15 +251,11 @@ public Map<String, List<Settings.UpgradeTier>> getAllEntityGroupLimitsUpgradeTie
259251
}
260252

261253
public Map<String, List<Settings.CommandUpgradeTier>> getAllCommandUpgradeTiers(World world) {
262-
String name = this.addon.getPlugin()
263-
.getIWM()
264-
.getAddon(world)
265-
.map(a -> a.getDescription()
266-
.getName())
267-
.orElse(null);
268-
if (name == null) {
254+
Optional<String> nameOpt = getGameModeName(world);
255+
if (nameOpt.isEmpty()) {
269256
return Collections.emptyMap();
270257
}
258+
String name = nameOpt.get();
271259

272260
Map<String, Map<String, Settings.CommandUpgradeTier>> defaultTiers = this.addon.getSettings()
273261
.getDefaultCommandUpgradeTierMap();
@@ -454,12 +442,7 @@ public String getRangeUpgradeTierName(int rangeLevel, World world) {
454442
}
455443

456444
public int getRangeUpgradeMax(World world) {
457-
String name = this.addon.getPlugin()
458-
.getIWM()
459-
.getAddon(world)
460-
.map(a -> a.getDescription()
461-
.getName())
462-
.orElse(null);
445+
String name = getGameModeName(world).orElse("");
463446
return this.addon.getSettings()
464447
.getMaxRangeUpgrade(name);
465448
}
@@ -501,12 +484,7 @@ public String getBlockLimitsUpgradeTierName(Material mat, int limitsLevel, World
501484
}
502485

503486
public int getBlockLimitsUpgradeMax(Material mat, World world) {
504-
String name = this.addon.getPlugin()
505-
.getIWM()
506-
.getAddon(world)
507-
.map(a -> a.getDescription()
508-
.getName())
509-
.orElse(null);
487+
String name = getGameModeName(world).orElse("");
510488
return this.addon.getSettings()
511489
.getMaxBlockLimitsUpgrade(mat, name);
512490
}
@@ -590,23 +568,13 @@ public String getEntityGroupLimitsUpgradeTierName(String group, int limitsLevel,
590568
}
591569

592570
public int getEntityLimitsUpgradeMax(EntityType ent, World world) {
593-
String name = this.addon.getPlugin()
594-
.getIWM()
595-
.getAddon(world)
596-
.map(a -> a.getDescription()
597-
.getName())
598-
.orElse(null);
571+
String name = getGameModeName(world).orElse("");
599572
return this.addon.getSettings()
600573
.getMaxEntityLimitsUpgrade(ent, name);
601574
}
602575

603576
public int getEntityGroupLimitsUpgradeMax(String group, World world) {
604-
String name = this.addon.getPlugin()
605-
.getIWM()
606-
.getAddon(world)
607-
.map(a -> a.getDescription()
608-
.getName())
609-
.orElse(null);
577+
String name = getGameModeName(world).orElse("");
610578
return this.addon.getSettings()
611579
.getMaxEntityGroupLimitsUpgrade(group, name);
612580
}
@@ -646,12 +614,7 @@ public String getCommandUpgradeTierName(String cmd, int cmdLevel, World world) {
646614
}
647615

648616
public int getCommandUpgradeMax(String cmd, World world) {
649-
String name = this.addon.getPlugin()
650-
.getIWM()
651-
.getAddon(world)
652-
.map(a -> a.getDescription()
653-
.getName())
654-
.orElse(null);
617+
String name = getGameModeName(world).orElse("");
655618
return this.addon.getSettings()
656619
.getMaxCommandUpgrade(cmd, name);
657620
}

src/main/java/world/bentobox/upgrades/dataobjects/prices/IslandLevelPrice.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ public String getAdminName(User user) {
4040

4141
@Override
4242
public String getPublicDescription(User user) {
43-
return user.getTranslation("upgrades.prices.islandlevel.description", "[level]", "?");
43+
return user.getTranslation("upgrades.prices.islandlevel.description", LEVEL_VAR, "?");
4444
}
4545

4646
@Override
4747
public String getPublicDescription(User user, PriceDB priceDB) {
4848
IslandLevelPriceDB db = (IslandLevelPriceDB) priceDB;
4949
return user.getTranslation("upgrades.prices.islandlevel.description",
50-
"[level]", db.getLevelNeededEquation());
50+
LEVEL_VAR, db.getLevelNeededEquation());
5151
}
5252

5353
@Override
@@ -59,9 +59,9 @@ public String getAdminDescription(User user) {
5959
public boolean canPay(UpgradesAddon addon, User user, Island island, PriceDB priceDB, int currentLevel) {
6060
IslandLevelPriceDB db = (IslandLevelPriceDB) priceDB;
6161
Map<String, Double> variables = new TreeMap<>();
62-
variables.put("[level]", (double) currentLevel);
63-
variables.put("[islandLevel]", (double) addon.getUpgradesManager().getIslandLevel(island));
64-
variables.put("[numberPlayer]", (double) island.getMemberSet().size());
62+
variables.put(LEVEL_VAR, (double) currentLevel);
63+
variables.put(ISLAND_LEVEL_VAR, (double) addon.getUpgradesManager().getIslandLevel(island));
64+
variables.put(NUMBER_PLAYER_VAR, (double) island.getMemberSet().size());
6565
int required = (int) Settings.evaluate(db.getLevelNeededEquation(), variables);
6666
return addon.getUpgradesManager().getIslandLevel(island) >= required;
6767
}

src/main/java/world/bentobox/upgrades/dataobjects/prices/MoneyPrice.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ public boolean canPay(UpgradesAddon addon, User user, Island island, PriceDB pri
5757
if (!addon.isVaultProvided()) return true;
5858
MoneyPriceDB db = (MoneyPriceDB) priceDB;
5959
Map<String, Double> variables = new TreeMap<>();
60-
variables.put("[level]", (double) currentLevel);
61-
variables.put("[islandLevel]", (double) addon.getUpgradesManager().getIslandLevel(island));
62-
variables.put("[numberPlayer]", (double) island.getMemberSet().size());
60+
variables.put(LEVEL_VAR, (double) currentLevel);
61+
variables.put(ISLAND_LEVEL_VAR, (double) addon.getUpgradesManager().getIslandLevel(island));
62+
variables.put(NUMBER_PLAYER_VAR, (double) island.getMemberSet().size());
6363
double amount = Settings.evaluate(db.getAmountEquation(), variables);
6464
return addon.getVaultHook().has(user, amount);
6565
}
@@ -69,9 +69,9 @@ public void pay(UpgradesAddon addon, User user, Island island, PriceDB priceDB,
6969
if (!addon.isVaultProvided()) return;
7070
MoneyPriceDB db = (MoneyPriceDB) priceDB;
7171
Map<String, Double> variables = new TreeMap<>();
72-
variables.put("[level]", (double) currentLevel);
73-
variables.put("[islandLevel]", (double) addon.getUpgradesManager().getIslandLevel(island));
74-
variables.put("[numberPlayer]", (double) island.getMemberSet().size());
72+
variables.put(LEVEL_VAR, (double) currentLevel);
73+
variables.put(ISLAND_LEVEL_VAR, (double) addon.getUpgradesManager().getIslandLevel(island));
74+
variables.put(NUMBER_PLAYER_VAR, (double) island.getMemberSet().size());
7575
double amount = Settings.evaluate(db.getAmountEquation(), variables);
7676
var response = addon.getVaultHook().withdraw(user, amount);
7777
if (!response.transactionSuccess()) {

src/main/java/world/bentobox/upgrades/dataobjects/prices/Price.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414

1515
public abstract class Price implements PanelAdminItem, PanelPublicItem {
1616

17+
public static final String LEVEL_VAR = "[level]";
18+
public static final String ISLAND_LEVEL_VAR = "[islandLevel]";
19+
public static final String NUMBER_PLAYER_VAR = "[numberPlayer]";
20+
1721
private final String name;
1822
private final Material icon;
1923

src/main/java/world/bentobox/upgrades/dataobjects/rewards/CropGrowthReward.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ private PanelItem.ClickHandler onSetRule() {
131131
input -> {
132132
try {
133133
Map<String, Double> vars = new TreeMap<>();
134-
vars.put("[level]", 1.0);
135-
vars.put("[islandLevel]", 1.0);
136-
vars.put("[numberPlayer]", 1.0);
134+
vars.put(LEVEL_VAR, 1.0);
135+
vars.put(ISLAND_LEVEL_VAR, 1.0);
136+
vars.put(NUMBER_PLAYER_VAR, 1.0);
137137
Settings.evaluate(input, vars);
138138
return true;
139139
} catch (Exception e) {

src/main/java/world/bentobox/upgrades/dataobjects/rewards/LimitsReward.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ public void apply(UpgradesAddon addon, User user, Island island, RewardDB reward
6767

6868
LimitsRewardDB db = (LimitsRewardDB) rewardDB;
6969
Map<String, Double> variables = new TreeMap<>();
70-
variables.put("[level]", (double) currentLevel);
71-
variables.put("[islandLevel]", (double) addon.getUpgradesManager().getIslandLevel(island));
72-
variables.put("[numberPlayer]", (double) island.getMemberSet().size());
70+
variables.put(LEVEL_VAR, (double) currentLevel);
71+
variables.put(ISLAND_LEVEL_VAR, (double) addon.getUpgradesManager().getIslandLevel(island));
72+
variables.put(NUMBER_PLAYER_VAR, (double) island.getMemberSet().size());
7373
int amount = (int) Settings.evaluate(db.getAmountEquation(), variables);
7474

7575
BlockLimitsListener bLListener = addon.getLimitsAddon().getBlockLimitListener();

src/main/java/world/bentobox/upgrades/dataobjects/rewards/RangeReward.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ public String getPublicDescription(User user, RewardDB rewardDB) {
5959
public void apply(UpgradesAddon addon, User user, Island island, RewardDB rewardDB, int currentLevel) {
6060
RangeRewardDB db = (RangeRewardDB) rewardDB;
6161
Map<String, Double> variables = new TreeMap<>();
62-
variables.put("[level]", (double) currentLevel);
63-
variables.put("[islandLevel]", (double) addon.getUpgradesManager().getIslandLevel(island));
64-
variables.put("[numberPlayer]", (double) island.getMemberSet().size());
62+
variables.put(LEVEL_VAR, (double) currentLevel);
63+
variables.put(ISLAND_LEVEL_VAR, (double) addon.getUpgradesManager().getIslandLevel(island));
64+
variables.put(NUMBER_PLAYER_VAR, (double) island.getMemberSet().size());
6565
int amount = (int) Settings.evaluate(db.getRangeUpgradeEquation(), variables);
6666

6767
int newRange = island.getProtectionRange() + amount;
@@ -157,9 +157,9 @@ private PanelItem.ClickHandler onSetRule() {
157157
// Validate that input is a parseable math expression (#70 item 8)
158158
try {
159159
Map<String, Double> vars = new TreeMap<>();
160-
vars.put("[level]", 1.0);
161-
vars.put("[islandLevel]", 1.0);
162-
vars.put("[numberPlayer]", 1.0);
160+
vars.put(LEVEL_VAR, 1.0);
161+
vars.put(ISLAND_LEVEL_VAR, 1.0);
162+
vars.put(NUMBER_PLAYER_VAR, 1.0);
163163
Settings.evaluate(input, vars);
164164
return true;
165165
} catch (Exception e) {

src/main/java/world/bentobox/upgrades/dataobjects/rewards/Reward.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313

1414
public abstract class Reward implements PanelAdminItem, PanelPublicItem {
1515

16+
public static final String LEVEL_VAR = "[level]";
17+
public static final String ISLAND_LEVEL_VAR = "[islandLevel]";
18+
public static final String NUMBER_PLAYER_VAR = "[numberPlayer]";
19+
1620
private final String name;
1721
private final Material icon;
1822

src/main/java/world/bentobox/upgrades/dataobjects/rewards/SpawnerReward.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ private PanelItem.ClickHandler onSetRule() {
131131
input -> {
132132
try {
133133
Map<String, Double> vars = new TreeMap<>();
134-
vars.put("[level]", 1.0);
135-
vars.put("[islandLevel]", 1.0);
136-
vars.put("[numberPlayer]", 1.0);
134+
vars.put(LEVEL_VAR, 1.0);
135+
vars.put(ISLAND_LEVEL_VAR, 1.0);
136+
vars.put(NUMBER_PLAYER_VAR, 1.0);
137137
Settings.evaluate(input, vars);
138138
return true;
139139
} catch (Exception e) {

0 commit comments

Comments
 (0)