Skip to content

fix(sitemanage): Xlint batch 3 — serial-field concrete collections (#2870) - #2896

Merged
natechadwick merged 2 commits into
mainfrom
fix/issue-2870-sitemanage-xlint-serial-field
Aug 11, 2026
Merged

natechadwick merged 2 commits into
mainfrom
fix/issue-2870-sitemanage-xlint-serial-field

Conversation

@natechadwick-intsof

Copy link
Copy Markdown
Collaborator

Summary

Partial Xlint cleanup for sitemanage residual issue #2870 (parent module issue #2032, monorepo tracker #2200). Batch 3 clears the dominant serial-field cluster on main-source JAXB/JSON DTOs by using concrete serializable collection field types.

Main changes

  • Field types: List/Collection → ArrayList, Map → HashMap, Set → HashSet, and one Vector bindings field (PSProxyAssemblyTemplate)
  • Public getters/setters keep interface types (List/Map/Set) — no REST/API contract change
  • Setters share when the argument is already the concrete type (JAXB collection population + shared-map tests), otherwise copy into a new concrete collection
  • @SuppressWarnings("unchecked") on share-if-concrete setters for the generic cast after instanceof

Tests

  • Extended PSSerializableListWrappersTest — concrete field-type guards + LinkedList input defensive-copy behavior

Inventory (main-source, uncapped -Xmaxwarns)

Metric Before After
Total WARNING lines ~227 ~165
serial-field 86 14
this-escape 55 55

Residual

Remaining main diagnostics: this-escape, unchecked/raw, ~14 non-collection serial-field. Residual child filed after this PR.

Test plan

  • cd projects/sitemanage && ../../mvnw.cmd clean install — BUILD SUCCESS
  • Tests run: 970, Failures: 0, Errors: 0, Skipped: 127
  • Main-source serial-field 86 → 14
  • No production REST contract changes

Product documentation

  • N/A — pure compiler lint tech debt; no operator/user/API surface change

Gates / evidence (C3)

  • modules_built: projects/sitemanage
  • build_evidence: cd projects/sitemanage && ../../mvnw.cmd clean install → BUILD SUCCESS; Tests run: 970, Failures: 0, Errors: 0, Skipped: 127
  • downstream_checked: none (no public API signature / final / sealed changes; C2 N/A)
  • Erlang-style self-review: docs/ai-generated/code-reviews/issue-2870-sitemanage-xlint-serial-field-erlang.md
  • Operator: Grok: night-issue-prs (model grok-4.5)

Fixes #2870
Refs #2032 #2200 #2421

Co-Authored by Grok Build using grok-4.5 with agent main.

…2870)

Convert main-source serializable DTO collection fields from bare List/Map/Set
interfaces to ArrayList/HashMap/HashSet/Vector so -Xlint:serial serial-field
diagnostics clear. Public getter/setter API types stay interfaces.

Setters share the argument when it is already the concrete type (JAXB-safe)
and copy otherwise. Extends PSSerializableListWrappersTest for field types
and LinkedList defensive-copy behavior.

Live main warnings ~227->165; serial-field 86->14.

Fixes #2870
Refs #2032 #2200 #2421

> Co-Authored by Grok Build using grok-4.5 with agent main.
Comment thread projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCSS.java Outdated
Comment thread projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCssList.java Outdated
@kilo-code-bot

kilo-code-bot Bot commented Aug 11, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (7 files)
  • projects/sitemanage/src/main/java/com/percussion/share/dao/impl/PSContentItem.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSectionNode.java
  • projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCSS.java
  • projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCssList.java
  • projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderFieldsListData.java
  • projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderResourceListData.java
  • projects/sitemanage/src/test/java/com/percussion/share/data/PSSerializableListWrappersTest.java
Previous Review Summary (commit 84ee7b8)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 84ee7b8)

Status: 6 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 1
WARNING 1
SUGGESTION 4
Issue Details (click to expand)

CRITICAL

File Line Issue
projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSectionNode.java 109 Malformed nested ternary in setChildNodes() with dead branches; always defensive-copies even when input is already ArrayList, diverging from the share-if-concrete pattern used in all other setters in this PR

WARNING

File Line Issue
projects/sitemanage/src/test/java/com/percussion/share/data/PSSerializableListWrappersTest.java (missing) No defensive-copy test for PSSectionNode.setChildNodes() with a non-ArrayList input (e.g. LinkedList); the botched ternary at the production line would have been caught by the same pattern used for PSUser, PSItemStateTransition, and PSSiteSection

SUGGESTION

File Line Issue
projects/sitemanage/src/main/java/com/percussion/share/dao/impl/PSContentItem.java 44 Unreachable if (fields == null) branch after notNull(fields, "fields") guard
projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCSS.java 149 Unreachable if (props == null) branch after notNull(props) guard
projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCssList.java 41 Unreachable if (regionList == null) branch after notNull(regionList) guard
projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderFieldsListData.java 65 Unreachable if (fields == null) branch after Objects.requireNonNull(fields, ...) guard
projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderResourceListData.java 61 Unreachable if (resourceList == null) branch after Objects.requireNonNull(resourceList, ...) guard
Files Reviewed (31 files)
  • projects/sitemanage/src/main/java/com/percussion/pagemanagement/data/PSResourceDefinitionGroup.java
  • projects/sitemanage/src/main/java/com/percussion/pagemanagement/data/PSWidgetDefinition.java
  • projects/sitemanage/src/main/java/com/percussion/pagemanagement/data/PSWidgetItem.java
  • projects/sitemanage/src/main/java/com/percussion/pathmanagement/data/PSFolderPermission.java
  • projects/sitemanage/src/main/java/com/percussion/pathmanagement/data/PSPathItem.java
  • projects/sitemanage/src/main/java/com/percussion/role/data/PSRole.java
  • projects/sitemanage/src/main/java/com/percussion/share/dao/impl/PSContentItem.java
  • projects/sitemanage/src/main/java/com/percussion/share/data/PSDataItemSummary.java
  • projects/sitemanage/src/main/java/com/percussion/share/data/PSEnumVals.java
  • projects/sitemanage/src/main/java/com/percussion/share/data/PSItemProperties.java
  • projects/sitemanage/src/main/java/com/percussion/share/data/PSUnassignedResults.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSectionNode.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSiteArchitecture.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSiteBlogPosts.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSitePublishPurgeRequest.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSiteSection.java
  • projects/sitemanage/src/main/java/com/percussion/sitemanage/data/PSSiteStatisticsSummary.java
  • projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCSS.java
  • projects/sitemanage/src/main/java/com/percussion/theme/data/PSRegionCssList.java
  • projects/sitemanage/src/main/java/com/percussion/user/data/PSCurrentUser.java
  • projects/sitemanage/src/main/java/com/percussion/user/data/PSLdapConfig.java
  • projects/sitemanage/src/main/java/com/percussion/user/data/PSRoleList.java
  • projects/sitemanage/src/main/java/com/percussion/user/data/PSUser.java
  • projects/sitemanage/src/main/java/com/percussion/user/data/PSUserList.java
  • projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderFieldsListData.java
  • projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderResourceListData.java
  • projects/sitemanage/src/main/java/com/percussion/widgetbuilder/data/PSWidgetBuilderValidationResults.java
  • projects/sitemanage/src/main/java/com/percussion/workflow/data/PSUiWorkflow.java
  • projects/sitemanage/src/main/java/com/percussion/workflow/data/PSUiWorkflowStep.java
  • projects/sitemanage/src/main/java/com/percussion/workflow/data/PSUiWorkflowStepRole.java
  • projects/sitemanage/src/test/java/com/percussion/share/data/PSSerializableListWrappersTest.java

Fix these issues in Kilo Cloud


Reviewed by step-3.7-flash · Input: 68.2K · Output: 13.9K · Cached: 703.9K

Review guidance: REVIEW.md from base branch main

- Fix PSSectionNode.setChildNodes malformed nested ternary; share-if-concrete ArrayList
- Drop dead null branches after notNull/requireNonNull in PSContentItem, PSRegionCSS,
  PSRegionCssList, PSWidgetBuilderFieldsListData, PSWidgetBuilderResourceListData
- Extend PSSerializableListWrappersTest for share/copy behavior on reviewed setters

Evidence: cd projects/sitemanage; ../../mvnw.cmd clean install → BUILD SUCCESS
(Tests run: 898, Failures: 0, Errors: 0, Skipped: 127)

> Co-Authored by Grok CLI using grok-4 with agent night-issue-prs-post-work.
@natechadwick
natechadwick merged commit 1c97c72 into main Aug 11, 2026
6 checks passed
@natechadwick
natechadwick deleted the fix/issue-2870-sitemanage-xlint-serial-field branch August 11, 2026 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

model:grok-4.5 Grok 4.5 model operator:grok Changes authored by Grok operator:night-issue-prs night-issue-prs workflow

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[8.2] sitemanage Xlint residual after batch 2 (#2032 / #2421)

2 participants