RFR: 8490: Include numeric types without Persister in "Add Filter from Attribute" menu [v6]
youngledo
duke at openjdk.org
Wed Feb 4 01:48:41 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 one additional commit since the last revision:
Restore .classpath files required for Eclipse IDE development
This commit restores the .classpath files that were previously removed.
These files are essential for JMC development in Eclipse IDE due to the
project's hybrid nature as both a Maven and PDE/OSGi application.
-------------
Changes:
- all: https://git.openjdk.org/jmc/pull/699/files
- new: https://git.openjdk.org/jmc/pull/699/files/271713e9..6510b3bd
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jmc&pr=699&range=05
- incr: https://webrevs.openjdk.org/?repo=jmc&pr=699&range=04-05
Stats: 3290 lines in 131 files changed: 3290 ins; 0 del; 0 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