{"record":{"id":"75a521dd86bafd64","repo":"apache/pulsar","slug":"unsupportedoperationexception-75a521","errorCode":null,"errorMessage":"UnsupportedOperationException","messagePattern":"UnsupportedOperationException","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"warning","filePath":"pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/LongPairRangeSet.java","lineNumber":141,"sourceCode":"     */\n    int size();\n\n    /**\n     * It returns very first smallest range in the rangeSet.\n     *\n     * @return first smallest range into the set\n     */\n    Range<T> firstRange();\n\n    /**\n     * It returns very last biggest range in the rangeSet.\n     *\n     * @return last biggest range into the set\n     */\n    Range<T> lastRange();\n\n    default Map<Long, long[]> toRanges(int maxRanges) {\n        throw new UnsupportedOperationException();\n    }\n\n    /**\n     * Build {@link LongPairRangeSet} using internal ranges returned by {@link #toRanges(int)} .\n     *\n     * @param ranges\n     */\n    default void build(Map<Long, long[]> ranges) {\n        throw new UnsupportedOperationException();\n    }\n\n    /**\n     * Return the number bit sets to true from lower (inclusive) to upper (inclusive).\n     */\n    int cardinality(long lowerKey, long lowerValue, long upperKey, long upperValue);\n\n    /**\n     * Represents a function that accepts two long arguments and produces a result.","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/LongPairRangeSet.java#L123-L159","documentation":"LongPairRangeSet.toRanges(int) is a default interface method that throws UnsupportedOperationException; only implementations that support exporting ranges (e.g. RangeSetLongPairStore-backed ones) override it. Calling it on a non-supporting implementation fails.","triggerScenarios":"Calling toRanges(maxRanges) on a LongPairRangeSet implementation that does not override the default (custom or legacy implementation).","commonSituations":"Persistence/serialization code or topic-level range export calling toRanges generically on any LongPairRangeSet without knowing the concrete type.","solutions":["Use an implementation that overrides toRanges (e.g. the NavigableSet-backed RangeSetLongPairStore implementation)","Check concrete type before calling and provide an alternative path","Implement toRanges in your custom LongPairRangeSet implementation"],"exampleFix":"// before\nMap<Long, long[]> ranges = longPairSet.toRanges(maxRanges); // may throw\n// after\nif (longPairSet instanceof RangeSetLongPairStore) {\n    Map<Long, long[]> ranges = longPairSet.toRanges(maxRanges);\n} else {\n    // fallback: iterate individual ranges via ranges()/lastRange()\n}","handlingStrategy":"try-catch","validationCode":"static boolean supportsRangeExport(LongPairRangeSet<?> set) {\n    return !(set.getClass().getSimpleName().equals(\"LongPairRangeSet\") ); // must be an overriding impl\n}","typeGuard":"static boolean supportsToRanges(LongPairRangeSet<?> set) {\n    return set instanceof RangeSetLongPairStore; // implementation known to override toRanges\n}","tryCatchPattern":"try {\n    Map<Long, long[]> ranges = set.toRanges(maxRanges);\n} catch (UnsupportedOperationException e) {\n    // fall back to iterating ranges()/individual entries\n}","preventionTips":["Read interface default methods: UnsupportedOperationException default means opt-in feature","Use implementations known to support toRanges for persistence/export paths","Add tests covering toRanges for every custom LongPairRangeSet implementation"],"tags":["java","unsupported-operation","interface-default-method"],"backgroundTag":"unsupported-operation-iterator","analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}