diff --git a/code/src/java/pcgen/cdom/base/CDOMObject.java b/code/src/java/pcgen/cdom/base/CDOMObject.java index ed4b98ec6f3..fc128b623d7 100644 --- a/code/src/java/pcgen/cdom/base/CDOMObject.java +++ b/code/src/java/pcgen/cdom/base/CDOMObject.java @@ -66,6 +66,8 @@ import pcgen.core.analysis.BonusActivation; import pcgen.core.bonus.BonusObj; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + public abstract class CDOMObject extends ConcretePrereqObject implements Cloneable, BonusContainer, Loadable, Reducible, PCGenScoped, VarHolder, VarContainer @@ -1032,6 +1034,10 @@ public final void overlayCDOMObject(CDOMObject cdo) } } + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CLONE", + justification = "ownBonuses is intentionally overridable: PCClass overrides it to " + + "recursively re-own bonuses on its PCClassLevel children. The override only " + + "reads the clone's BONUS list, which super.clone() already populated.") @Override public CDOMObject clone() throws CloneNotSupportedException { diff --git a/code/src/java/pcgen/cdom/content/factset/FactSetParser.java b/code/src/java/pcgen/cdom/content/factset/FactSetParser.java index 9b65f3fab9f..22fc1af4506 100644 --- a/code/src/java/pcgen/cdom/content/factset/FactSetParser.java +++ b/code/src/java/pcgen/cdom/content/factset/FactSetParser.java @@ -33,6 +33,8 @@ import pcgen.rules.context.LoadContext; import pcgen.rules.persistence.token.AbstractTokenWithSeparator; import pcgen.rules.persistence.token.CDOMSecondaryToken; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import pcgen.rules.persistence.token.ParseResult; /** @@ -120,6 +122,9 @@ public String getParentToken() return "FACTSET"; } + @SuppressFBWarnings(value = "PZLA_PREFER_ZERO_LENGTH_ARRAYS", + justification = "null signals 'unparse errored'; empty array signals 'no output'. " + + "Same convention as TemplateFeatToken.unparse.") @Override public String[] unparse(LoadContext context, T obj) { diff --git a/code/src/java/pcgen/cdom/enumeration/Region.java b/code/src/java/pcgen/cdom/enumeration/Region.java index 8995713ea64..76255b91025 100644 --- a/code/src/java/pcgen/cdom/enumeration/Region.java +++ b/code/src/java/pcgen/cdom/enumeration/Region.java @@ -35,11 +35,6 @@ */ public final class Region implements TypeSafeConstant, Comparable { - /** - * A "None" region for universal use. - */ - public static final Region NONE = new Region(Constants.NONE); - /** * This Map contains the mappings from Strings to the Type Safe Constant */ @@ -48,7 +43,15 @@ public final class Region implements TypeSafeConstant, Comparable /** * This is used to provide a unique ordinal to each constant in this class */ - private static int ordinalCount = 0; + private static int ordinalCount; + + /** + * A "None" region for universal use. + * + * Declared after the mutable counters above so the constructor sees a + * defined `ordinalCount` — silences SpotBugs SI_INSTANCE_BEFORE_FINALS_ASSIGNED. + */ + public static final Region NONE = new Region(Constants.NONE); /** * The name of this Constant diff --git a/code/src/java/pcgen/cdom/facet/HitPointFacet.java b/code/src/java/pcgen/cdom/facet/HitPointFacet.java index 4f49b8af533..f8a56aa9eed 100644 --- a/code/src/java/pcgen/cdom/facet/HitPointFacet.java +++ b/code/src/java/pcgen/cdom/facet/HitPointFacet.java @@ -36,6 +36,7 @@ import pcgen.core.PCTemplate; import pcgen.core.PlayerCharacter; import pcgen.core.SettingsHandler; +import pcgen.util.Logging; /** * HitPointFacet stores information about hit points for a Player Character. @@ -92,7 +93,11 @@ private static int rollHP(final int min, final int max, final int totalLevel) case Constants.HP_PERCENTAGE -> roll = (min - 1) + (int) ((SettingsHandler.getHPPercent() * ((max - min) + 1)) / 100.0); case Constants.HP_AVERAGE_ROUNDED_UP -> roll = (int) Math.ceil((min + max) / 2.0); case Constants.HP_STANDARD -> roll = Math.abs(RandomUtil.getRandomInt((max - min) + 1)) + min; - default -> roll = Math.abs(RandomUtil.getRandomInt((max - min) + 1)) + min; + default -> { + Logging.errorPrint("Unknown HP roll method " + + SettingsHandler.getHPRollMethod() + "; falling back to HP_STANDARD"); + roll = Math.abs(RandomUtil.getRandomInt((max - min) + 1)) + min; + } } return roll;