From 067964eaad9ca0909440d4166ebfa75874394a30 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 10 Aug 2026 20:46:40 +0200
Subject: [PATCH 1/5] [ci skip] Update dependency
com.puppycrawl.tools:checkstyle to v13.10.0 (#1044)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
gradle/libs.versions.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 8c5fa29c9..39f2f049b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -21,7 +21,7 @@ brigadier = "com.velocitypowered:velocity-brigadier:1.0.0-SNAPSHOT"
bstats = "org.bstats:bstats-base:3.2.1"
caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.4"
checker-qual = "org.checkerframework:checker-qual:4.2.2"
-checkstyle = "com.puppycrawl.tools:checkstyle:13.9.0"
+checkstyle = "com.puppycrawl.tools:checkstyle:13.10.0"
completablefutures = "com.spotify:completable-futures:0.3.6"
component = "gg.gemstone:component:1.0.2"
configurate3-hocon = { module = "org.spongepowered:configurate-hocon", version.ref = "configurate3" }
From 71c50a75eb50a575466192a263b8fc054d58bed7 Mon Sep 17 00:00:00 2001
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
Date: Wed, 12 Aug 2026 10:25:15 -0700
Subject: [PATCH 2/5] Export JSpecify annotations at runtime (#1861)
JSpecify annotations have runtime retention, so expose them through the API variant as recommended by JSpecify.
---
api/build.gradle.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/api/build.gradle.kts b/api/build.gradle.kts
index c8afb7169..65a03a049 100644
--- a/api/build.gradle.kts
+++ b/api/build.gradle.kts
@@ -18,7 +18,7 @@ java {
}
dependencies {
- compileOnlyApi(libs.jspecify)
+ api(libs.jspecify)
api(libs.gson)
api(libs.guava)
From 14a69904f9d3603af2cb90c2116df1b6966ee94c Mon Sep 17 00:00:00 2001
From: Radmir Noirusov <83647537+bejiihiu@users.noreply.github.com>
Date: Wed, 12 Aug 2026 22:29:30 +0500
Subject: [PATCH 3/5] fix: retain reference-counted packets forwarded via
handleGeneric (#1856)
During configuration, a ServerboundCustomClickActionPacket arriving
when connectionInFlight is null falls through to handleGeneric, which
writes it to the connected backend without retaining. The encoder
releases the packet, then MinecraftConnection.channelRead's finally
block releases again - double-free.
Two fixes:
- handle() now uses getConnectionInFlightOrConnectedServer() so the
packet is properly retained before being written
- handleGeneric() retains any ByteBufHolder packet before write, not
just PluginMessagePacket
Closes #1841
---
.../client/ClientConfigSessionHandler.java | 10 +-
.../ClientConfigSessionHandlerTest.java | 119 ++++++++++++++++++
2 files changed, 125 insertions(+), 4 deletions(-)
create mode 100644 proxy/src/test/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandlerTest.java
diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandler.java
index 5cb7188e1..b86041035 100644
--- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandler.java
+++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandler.java
@@ -47,6 +47,7 @@
import com.velocitypowered.proxy.protocol.packet.config.KnownPacksPacket;
import com.velocitypowered.proxy.protocol.util.PluginMessageUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufHolder;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import java.util.concurrent.CompletableFuture;
@@ -212,8 +213,9 @@ public boolean handle(ServerboundCookieResponsePacket packet) {
@Override
public boolean handle(ServerboundCustomClickActionPacket packet) {
- if (player.getConnectionInFlight() != null) {
- player.getConnectionInFlight().ensureConnected().write(packet.retain());
+ VelocityServerConnection serverConnection = player.getConnectionInFlightOrConnectedServer();
+ if (serverConnection != null) {
+ serverConnection.ensureConnected().write(packet.retain());
return true;
}
@@ -240,8 +242,8 @@ public void handleGeneric(MinecraftPacket packet) {
MinecraftConnection smc = serverConnection.getConnection();
if (smc != null && serverConnection.getPhase().consideredComplete()) {
- if (packet instanceof PluginMessagePacket) {
- ((PluginMessagePacket) packet).retain();
+ if (packet instanceof ByteBufHolder bufHolder) {
+ bufHolder.retain();
}
smc.write(packet);
}
diff --git a/proxy/src/test/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandlerTest.java b/proxy/src/test/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandlerTest.java
new file mode 100644
index 000000000..96e27766e
--- /dev/null
+++ b/proxy/src/test/java/com/velocitypowered/proxy/connection/client/ClientConfigSessionHandlerTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2018-2026 Velocity Contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.velocitypowered.proxy.connection.client;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.velocitypowered.proxy.VelocityServer;
+import com.velocitypowered.proxy.connection.MinecraftConnection;
+import com.velocitypowered.proxy.connection.backend.BackendConnectionPhase;
+import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
+import com.velocitypowered.proxy.protocol.packet.ServerboundCustomClickActionPacket;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.util.ReferenceCountUtil;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+class ClientConfigSessionHandlerTest {
+
+ private VelocityServer server;
+ private ConnectedPlayer player;
+ private ClientConfigSessionHandler handler;
+
+ @BeforeEach
+ void setUp() {
+ server = mock(VelocityServer.class);
+ player = mock(ConnectedPlayer.class);
+ handler = new ClientConfigSessionHandler(server, player);
+ }
+
+ @AfterEach
+ void tearDown() {
+ // nothing to clean up; each test manages its own ByteBufs
+ }
+
+ private ServerboundCustomClickActionPacket makePacket() {
+ ByteBuf frame = Unpooled.buffer().writeByte(0);
+ ServerboundCustomClickActionPacket pkt = new ServerboundCustomClickActionPacket();
+ pkt.replace(frame.readRetainedSlice(frame.readableBytes()));
+ return pkt;
+ }
+
+ @Test
+ void handleForwardsToInFlightServer() {
+ VelocityServerConnection inFlight = mock(VelocityServerConnection.class);
+ MinecraftConnection backend = mock(MinecraftConnection.class);
+ when(player.getConnectionInFlightOrConnectedServer()).thenReturn(inFlight);
+ when(inFlight.ensureConnected()).thenReturn(backend);
+
+ ServerboundCustomClickActionPacket pkt = makePacket();
+ assertTrue(handler.handle(pkt));
+ verify(backend).write(pkt);
+ ReferenceCountUtil.release(pkt);
+ }
+
+ @Test
+ void handleForwardsToConnectedServerWhenInFlightIsNull() {
+ VelocityServerConnection connected = mock(VelocityServerConnection.class);
+ MinecraftConnection backend = mock(MinecraftConnection.class);
+ when(player.getConnectionInFlightOrConnectedServer()).thenReturn(connected);
+ when(connected.ensureConnected()).thenReturn(backend);
+
+ ServerboundCustomClickActionPacket pkt = makePacket();
+ assertTrue(handler.handle(pkt));
+ verify(backend).write(pkt);
+ ReferenceCountUtil.release(pkt);
+ }
+
+ @Test
+ void handleReturnsFalseWhenNoServer() {
+ when(player.getConnectionInFlightOrConnectedServer()).thenReturn(null);
+
+ ServerboundCustomClickActionPacket pkt = makePacket();
+ assertFalse(handler.handle(pkt));
+ ReferenceCountUtil.release(pkt);
+ }
+
+ @Test
+ void handleGenericRetainsAndForwards() {
+ VelocityServerConnection connected = mock(VelocityServerConnection.class);
+ MinecraftConnection backend = mock(MinecraftConnection.class);
+ BackendConnectionPhase phase = mock(BackendConnectionPhase.class);
+ when(player.getConnectedServer()).thenReturn(connected);
+ when(connected.getConnection()).thenReturn(backend);
+ when(connected.getPhase()).thenReturn(phase);
+ when(phase.consideredComplete()).thenReturn(true);
+
+ ServerboundCustomClickActionPacket pkt = makePacket();
+ int refBefore = pkt.refCnt();
+
+ handler.handleGeneric(pkt);
+
+ // retain() was called (+1) before write
+ assertEquals(refBefore + 1, pkt.refCnt());
+ verify(backend).write(pkt);
+ ReferenceCountUtil.release(pkt);
+ }
+}
From e6fbcc9196c110b9fb458d8fc1ac9812e8f36f58 Mon Sep 17 00:00:00 2001
From: Wouter Gritter
Date: Wed, 12 Aug 2026 19:32:24 +0200
Subject: [PATCH 4/5] Various dependency bumps (#1860)
* Bump fastutil to 8.5.19 and remove exclusions
* Various dependency bumps
---
gradle/libs.versions.toml | 32 ++++++++++-----------
proxy/build.gradle.kts | 59 ---------------------------------------
2 files changed, 16 insertions(+), 75 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f3e5a9ad1..9c12ac2dd 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,24 +2,24 @@
configurate3 = "3.7.3"
configurate4 = "4.2.0"
flare = "2.0.1"
-log4j = "2.26.0"
+log4j = "2.26.1"
netty = "4.2.16.Final"
[plugins]
fill = "io.papermc.fill.gradle:1.0.12"
-shadow = "com.gradleup.shadow:9.5.1"
-spotless = "com.diffplug.spotless:8.2.0"
+shadow = "com.gradleup.shadow:9.6.1"
+spotless = "com.diffplug.spotless:8.9.0"
[libraries]
adventure-bom = "net.kyori:adventure-bom:5.2.0"
adventure-text-serializer-json-legacy-impl = "net.kyori:adventure-text-serializer-json-legacy-impl:5.2.0"
-asm = "org.ow2.asm:asm:9.9.1"
+asm = "org.ow2.asm:asm:9.10.1"
auto-service = "com.google.auto.service:auto-service:1.1.1"
auto-service-annotations = "com.google.auto.service:auto-service-annotations:1.1.1"
brigadier = "com.velocitypowered:velocity-brigadier:1.0.0-SNAPSHOT"
-bstats = "org.bstats:bstats-base:3.1.0"
-caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.3"
-checker-qual = "org.checkerframework:checker-qual:3.53.0"
+bstats = "org.bstats:bstats-base:3.2.1"
+caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.4"
+checker-qual = "org.checkerframework:checker-qual:4.2.1"
checkstyle = "com.puppycrawl.tools:checkstyle:10.9.3"
completablefutures = "com.spotify:completable-futures:0.3.6"
configurate3-hocon = { module = "org.spongepowered:configurate-hocon", version.ref = "configurate3" }
@@ -29,24 +29,24 @@ configurate4-hocon = { module = "org.spongepowered:configurate-hocon", version.r
configurate4-yaml = { module = "org.spongepowered:configurate-yaml", version.ref = "configurate4" }
configurate4-gson = { module = "org.spongepowered:configurate-gson", version.ref = "configurate4" }
disruptor = "com.lmax:disruptor:4.0.0"
-fastutil = "it.unimi.dsi:fastutil:8.5.18"
+fastutil = "it.unimi.dsi:fastutil:8.5.19"
flare-core = { module = "space.vectrix.flare:flare", version.ref = "flare" }
flare-fastutil = { module = "space.vectrix.flare:flare-fastutil", version.ref = "flare" }
jline = "org.jline:jline-terminal-ffm:4.3.1"
jopt = "net.sf.jopt-simple:jopt-simple:5.0.4"
-junit = "org.junit.jupiter:junit-jupiter:6.0.3"
-jspecify = "org.jspecify:jspecify:1.0.0"
+junit = "org.junit.jupiter:junit-jupiter:6.1.2"
+jspecify = "org.jspecify:jspecify:1.0.1"
kyori-ansi = "net.kyori:ansi:1.1.1"
guava = "com.google.guava:guava:33.6.0-jre"
gson = "com.google.code.gson:gson:2.14.0"
guice = "com.google.inject:guice:7.0.0"
-lmbda = "org.lanternpowered:lmbda:2.0.0"
+lmbda = "org.lanternpowered:lmbda:3.0.0"
log4j-api = { module = "org.apache.logging.log4j:log4j-api", version.ref = "log4j" }
log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "log4j" }
log4j-slf4j-impl = { module = "org.apache.logging.log4j:log4j-slf4j2-impl", version.ref = "log4j" }
log4j-iostreams = { module = "org.apache.logging.log4j:log4j-iostreams", version.ref = "log4j" }
log4j-jul = { module = "org.apache.logging.log4j:log4j-jul", version.ref = "log4j" }
-mockito = "org.mockito:mockito-core:5.22.0"
+mockito = "org.mockito:mockito-core:5.23.0"
netty-codec = { module = "io.netty:netty-codec", version.ref = "netty" }
netty-codec-haproxy = { module = "io.netty:netty-codec-haproxy", version.ref = "netty" }
netty-codec-http = { module = "io.netty:netty-codec-http", version.ref = "netty" }
@@ -54,10 +54,10 @@ netty-handler = { module = "io.netty:netty-handler", version.ref = "netty" }
netty-transport-native-epoll = { module = "io.netty:netty-transport-native-epoll", version.ref = "netty" }
netty-transport-native-kqueue = { module = "io.netty:netty-transport-native-kqueue", version.ref = "netty" }
netty-transport-native-iouring = { module = "io.netty:netty-transport-native-io_uring", version.ref = "netty" }
-nightconfig = "com.electronwill.night-config:toml:3.8.3"
-slf4j = "org.slf4j:slf4j-api:2.0.17"
-snakeyaml = "org.yaml:snakeyaml:2.5"
-spotbugs-annotations = "com.github.spotbugs:spotbugs-annotations:4.9.8"
+nightconfig = "com.electronwill.night-config:toml:3.9.0"
+slf4j = "org.slf4j:slf4j-api:2.0.18"
+snakeyaml = "org.yaml:snakeyaml:2.6"
+spotbugs-annotations = "com.github.spotbugs:spotbugs-annotations:4.10.3"
terminalconsoleappender = "net.minecrell:terminalconsoleappender:1.3.0"
[bundles]
diff --git a/proxy/build.gradle.kts b/proxy/build.gradle.kts
index c026bda46..136f66a7c 100644
--- a/proxy/build.gradle.kts
+++ b/proxy/build.gradle.kts
@@ -33,65 +33,6 @@ tasks {
transform(Log4j2PluginsCacheFileTransformer::class.java)
- // Exclude all the collection types we don"t intend to use
- exclude("it/unimi/dsi/fastutil/booleans/**")
- exclude("it/unimi/dsi/fastutil/bytes/**")
- exclude("it/unimi/dsi/fastutil/chars/**")
- exclude("it/unimi/dsi/fastutil/doubles/**")
- exclude("it/unimi/dsi/fastutil/floats/**")
- exclude("it/unimi/dsi/fastutil/longs/**")
- exclude("it/unimi/dsi/fastutil/shorts/**")
-
- // Exclude the fastutil IO utilities - we don"t use them.
- exclude("it/unimi/dsi/fastutil/io/**")
-
- // Exclude most of the int types - Object2IntMap have a values() method that returns an
- // IntCollection, and we need Int2ObjectMap
- exclude("it/unimi/dsi/fastutil/ints/*Int2Boolean*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Byte*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Char*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Double*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Float*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Int*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Long*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Short*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Reference*")
- exclude("it/unimi/dsi/fastutil/ints/IntAVL*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayF*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayI*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayL*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayP*")
- exclude("it/unimi/dsi/fastutil/ints/IntArraySet*")
- exclude("it/unimi/dsi/fastutil/ints/*IntBi*")
- exclude("it/unimi/dsi/fastutil/ints/Int*Pair")
- exclude("it/unimi/dsi/fastutil/ints/IntLinked*")
- exclude("it/unimi/dsi/fastutil/ints/IntList*")
- exclude("it/unimi/dsi/fastutil/ints/IntHeap*")
- exclude("it/unimi/dsi/fastutil/ints/IntOpen*")
- exclude("it/unimi/dsi/fastutil/ints/IntRB*")
- exclude("it/unimi/dsi/fastutil/ints/IntSorted*")
- exclude("it/unimi/dsi/fastutil/ints/*Priority*")
- exclude("it/unimi/dsi/fastutil/ints/*BigList*")
-
- // Try to exclude everything BUT Object2Int{LinkedOpen,Open,CustomOpen}HashMap
- exclude("it/unimi/dsi/fastutil/objects/*ObjectArray*")
- exclude("it/unimi/dsi/fastutil/objects/*ObjectAVL*")
- exclude("it/unimi/dsi/fastutil/objects/*Object*Big*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Boolean*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Byte*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Char*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Double*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Float*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2IntArray*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2IntAVL*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2IntRB*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Long*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Object*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Reference*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Short*")
- exclude("it/unimi/dsi/fastutil/objects/*ObjectRB*")
- exclude("it/unimi/dsi/fastutil/objects/*Reference*")
-
// Exclude Checker Framework annotations
exclude("org/checkerframework/checker/**")
From c20a83149cdbcae1efc9da2e18b05f340529d292 Mon Sep 17 00:00:00 2001
From: RootBeer
Date: Wed, 12 Aug 2026 13:42:28 -0400
Subject: [PATCH 5/5] Rebase
---
proxy/build.gradle.kts | 58 ------------------------------------------
1 file changed, 58 deletions(-)
diff --git a/proxy/build.gradle.kts b/proxy/build.gradle.kts
index ad4dbc475..cdb9d2d9a 100644
--- a/proxy/build.gradle.kts
+++ b/proxy/build.gradle.kts
@@ -82,64 +82,6 @@ tasks {
transform(Log4j2PluginsCacheFileTransformer::class.java)
- // Exclude all the collection types we don't intend to use
- exclude("it/unimi/dsi/fastutil/booleans/**")
- exclude("it/unimi/dsi/fastutil/bytes/**")
- exclude("it/unimi/dsi/fastutil/chars/**")
- exclude("it/unimi/dsi/fastutil/doubles/**")
- exclude("it/unimi/dsi/fastutil/floats/**")
- exclude("it/unimi/dsi/fastutil/longs/**")
- exclude("it/unimi/dsi/fastutil/shorts/**")
-
- // Exclude the fastutil IO utilities - we don't use them.
- exclude("it/unimi/dsi/fastutil/io/**")
-
- // Exclude most of the int types - Object2IntMap have a values() method that returns an
- // IntCollection, and we need Int2ObjectMap
- exclude("it/unimi/dsi/fastutil/ints/*Int2Boolean*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Byte*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Char*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Double*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Float*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Int*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Long*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Short*")
- exclude("it/unimi/dsi/fastutil/ints/*Int2Reference*")
- exclude("it/unimi/dsi/fastutil/ints/IntAVL*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayF*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayI*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayL*")
- exclude("it/unimi/dsi/fastutil/ints/IntArrayP*")
- exclude("it/unimi/dsi/fastutil/ints/IntArraySet*")
- exclude("it/unimi/dsi/fastutil/ints/*IntBi*")
- exclude("it/unimi/dsi/fastutil/ints/Int*Pair")
- exclude("it/unimi/dsi/fastutil/ints/IntLinked*")
- exclude("it/unimi/dsi/fastutil/ints/IntList*")
- exclude("it/unimi/dsi/fastutil/ints/IntHeap*")
- exclude("it/unimi/dsi/fastutil/ints/IntOpen*")
- exclude("it/unimi/dsi/fastutil/ints/IntRB*")
- exclude("it/unimi/dsi/fastutil/ints/IntSorted*")
- exclude("it/unimi/dsi/fastutil/ints/*Priority*")
- exclude("it/unimi/dsi/fastutil/ints/*BigList*")
-
- // Try to exclude everything BUT Object2Int{LinkedOpen,Open,CustomOpen}HashMap
- exclude("it/unimi/dsi/fastutil/objects/*ObjectAVL*")
- exclude("it/unimi/dsi/fastutil/objects/*Object*Big*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Boolean*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Byte*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Char*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Double*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Float*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2IntArray*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2IntAVL*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2IntRB*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Long*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Object*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Reference*")
- exclude("it/unimi/dsi/fastutil/objects/*Object2Short*")
- exclude("it/unimi/dsi/fastutil/objects/*ObjectRB*")
- exclude("it/unimi/dsi/fastutil/objects/*Reference*")
-
// Exclude Checker Framework annotations
exclude("org/checkerframework/checker/**")