RFR: 8490: Include numeric types without Persister in "Add Filter from Attribute" menu [v4]

youngledo duke at openjdk.org
Sat Jan 31 14:43:00 UTC 2026


> ### Problem
> 
>   Attributes with numeric ContentTypes that don't have a Persister (such as primitive types: byte, short, int, long, float, double, char) are
>   excluded from the "Add Filter from Attribute" context menu in the Event Browser's filter editor.
> 
> #### Steps to reproduce:
>   1. Open a JFR file containing events with primitive numeric fields (e.g., Spring Framework's FlightRecorderStartupEvent with long eventId and
>   long parentId)
>   2. In Event Browser, right-click on a column → Select "Show Filter"
>   3. Right-click on the filter area → Select "Add Filter from Attribute"
>   4. Expected: All filterable attributes should appear in the menu
>   5. Actual: Primitive numeric type attributes are missing from the menu
> 
> <img width="2420" height="1362" alt="image" src="https://github.com/user-attachments/assets/70bcb795-7a7b-42f0-a83e-e34cb8e50361" />
> 
> #### Root Cause
> 
>   The getPersistableAttributes() method in DataPageToolkit.java (line 1006-1007) filters attributes based on whether their ContentType has a
>   Persister:
> 
>   ```java
>   .filter(a -> a.equals(JfrAttributes.EVENT_TYPE) || (a.getContentType() instanceof RangeContentType)
>       || (a.getContentType().getPersister() != null))
>   ```
> 
>   However, primitive numeric types use these ContentTypes which don't have a Persister:
>   - UnitLookup.RAW_NUMBER - used by all primitive numeric types (byte, short, int, long, float, double, char)
>   - UnitLookup.RAW_LONG - used by some custom Long attributes
>   - UnitLookup.COUNT, UnitLookup.INDEX, UnitLookup.IDENTIFIER - legacy numeric types
> 
>   These types return null from getPersister() (see ContentType.java:99-101), causing them to be filtered out.
> 
> ### Why this is incorrect:
> 
>   Even though these types cannot be persisted to strings, they fully support filtering via ItemFilters.equals(). Excluding them from the filter
>   menu is inconsistent with their actual capabilities.
> 
> ### Solution
> 
>   Add a helper method isFilterableNumericType() to identify numeric ContentTypes that support filtering even without a Persister, and include them
>    in the filter:
> 
> private static boolean isFilterableNumericType(IAttribute<?> attribute) {
>       org.openjdk.jmc.common.unit.ContentType<?> ct = attribute.getContentType();
>       return ct.equals(UnitLookup.RAW_NUMBER) || ct.equals(UnitLookup.RAW_LONG)|| ct.equals(UnitLookup.COUNT) || ct.equals(UnitLookup.INDEX)
>               || ct.equals(UnitLookup.IDENTIFIER);
>   }
> 
> 
> Update the filter condition to include these types:
> 
>   .filter(a -> a.equals(...

youngledo has updated the pull request incrementally with five additional commits since the last revision:

 - 8527: Add AGENTS.md file
   
   Reviewed-by: aptmac
 - 8512: Fixing various minor typos and nits
   
   Reviewed-by: aptmac, clanger
 - 8526: Update third parties for 10.0.0
   
   Reviewed-by: aptmac
 - 8479: Update jolokia third party for JMC 10.0.0
   
   Reviewed-by: schaturvedi
 - 8489: Inaccurate Chinese translations on TLAB page
   
   Reviewed-by: aptmac

-------------

Changes:
  - all: https://git.openjdk.org/jmc/pull/699/files
  - new: https://git.openjdk.org/jmc/pull/699/files/1c1601c3..3ba082fa

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jmc&pr=699&range=03
 - incr: https://webrevs.openjdk.org/?repo=jmc&pr=699&range=02-03

  Stats: 234 lines in 29 files changed: 142 ins; 1 del; 91 mod
  Patch: https://git.openjdk.org/jmc/pull/699.diff
  Fetch: git fetch https://git.openjdk.org/jmc.git pull/699/head:pull/699

PR: https://git.openjdk.org/jmc/pull/699


More information about the jmc-dev mailing list