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

Aymane Harmaz aharmaz at openjdk.org
Mon Jan 12 10:04:29 UTC 2026


On Fri, 9 Jan 2026 07:06:55 GMT, Huang Xiao <duke at openjdk.org> wrote:

>> ### 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.IDEN...
>
> I don't have access to JBS yet. Could someone please create an issue for this PR?
> 
> @aymane-harmaz  Hello, Can you help me? 
> May I ask, what are the ways I can apply for this account?

@youngledo Thanks for opening this PR.

I have opened a JBS ticket for you here : https://bugs.openjdk.org/browse/JMC-8490

In order to obtain write access to JBS you need to have the Author role, You can find more information about the process and requirements here : https://openjdk.org/guide/#becoming-an-author

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

PR Comment: https://git.openjdk.org/jmc/pull/699#issuecomment-3737400035


More information about the jmc-dev mailing list