You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by "pjfanning (via GitHub)" <gi...@apache.org> on 2026/10/11 11:22:53 UTC
[PR] Stop POI depending on public mutable statics [poi]
pjfanning opened a new pull request, #1374:
URL: https://github.com/apache/poi/pull/1374
SpotBugs flags public/protected static fields that callers can change (MS_SHOULD_BE_FINAL / MS_PKGPROTECT / MS_MUTABLE_ARRAY). This PR fixes them without breaking any API that shipped in 5.5.1.
### Made private
These are safe to narrow:
- **`HwmfBitmapDib.MAX_HEIGHT_WIDTH`**: added after 5.5.1, and `setMaxHeightWidth`/`getMaxHeightWidth` already exist.
- **`FunctionEval.functions`**: the class is `final` with a private constructor, so `protected` gave no extra access.
### POI uses a private copy; the old field is deprecated
For these arrays, changing an element changed POI's behaviour globally. POI now reads its own private array, and the existing field is a deprecated copy, `@Removal(version = "7.0.0")`:
- **`VariantSupport.SUPPORTED_TYPES`**: the replacement is `isSupportedType(int)`.
- **`XSSFPictureData.RELATIONS`** and **`XWPFPictureData.RELATIONS`**: POI uses a new package-private `getRelationForType(int)`.
- **`HSLFSimpleShape.ADJUST_VALUES`**: POI uses a new package-private `getAdjustValueProperty(int)`.
The only behaviour change is for code that wrote into one of these arrays to change POI's behaviour; that no longer has any effect.
### Deprecated only
- **`HwmfPicture.MAX_RECORD_LENGTH`** (public) and **`EscherRecord.MAX_NUMBER_OF_CHILDREN`** (protected) hold the live limit, so making them private would break code that sets them directly. They are deprecated for removal in 7.0.0 in favour of the setters/getters that already exist. The Escher subclasses now read the limit through `getMaxNumberOfChildren()`.
### Not changed
- **`DocumentSummaryInformation.FORMAT_ID`**: its elements are the same mutable `ClassID` instances that `ClassIDPredefined` hands out, so copying the array wouldn't protect anything. Fixing it needs `ClassID` itself to change.
- **`PropertyIDMap`** getters and **`RandomSingleton.getInstance()`**: these are false positives. The maps are unmodifiable, and returning the instance is the point of a singleton.
- **`Insets2D`**: the public fields are instance fields, like `java.awt.Insets`.
Tests: the hpsf, ddf and formula-eval tests in poi; the picture-data, `TestXSSFWorkbook` and xwpf usermodel tests in poi-ooxml; and the HSLF shape, HWMF and Escher tests in scratchpad all pass.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org
Re: [PR] Stop POI depending on public mutable statics [poi]
Posted by "pjfanning (via GitHub)" <gi...@apache.org>.
pjfanning merged PR #1374:
URL: https://github.com/apache/poi/pull/1374
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org