RFR: 8490: Include numeric types without Persister in "Add Filter from Attribute" menu [v5]
Marcus Hirt
hirt at openjdk.org
Tue Feb 3 18:09:43 UTC 2026
On Sat, 31 Jan 2026 14:55:49 GMT, youngledo <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...
>
> youngledo has updated the pull request incrementally with two additional commits since the last revision:
>
> - Update copyright year to 2026
> - Remove .claude/settings.local.json from version control
>
> This file should not be tracked as it contains local settings.
> Added .claude/ to .gitignore to prevent future commits.
>
> Co-Authored-By: Claude Sonnet 4.5 <noreply at anthropic.com>
Will the removal of the .classpath files cause any trouble running JMC from within the Eclipse development environment? I am not perfectly sure, but I have a faint memory of a few of them being slightly specialized.
-------------
PR Comment: https://git.openjdk.org/jmc/pull/699#issuecomment-3842847737
More information about the jmc-dev
mailing list