From d37a430f5a682c36fa4d1c7f05e6560428a0d12b Mon Sep 17 00:00:00 2001 From: Outfluencer Date: Fri, 26 Sep 2025 10:03:05 +1000 Subject: [PATCH] #3882: Reduce lock boilerplate by using lomboks `@Locked` --- .../md_5/bungee/api/plugin/PluginManager.java | 97 ++++++------------- .../reconnect/yaml/YamlReconnectHandler.java | 23 +---- .../main/java/net/md_5/bungee/BungeeCord.java | 61 +++--------- 3 files changed, 49 insertions(+), 132 deletions(-) diff --git a/api/src/main/java/net/md_5/bungee/api/plugin/PluginManager.java b/api/src/main/java/net/md_5/bungee/api/plugin/PluginManager.java index b16fda4a..5eb7728e 100644 --- a/api/src/main/java/net/md_5/bungee/api/plugin/PluginManager.java +++ b/api/src/main/java/net/md_5/bungee/api/plugin/PluginManager.java @@ -30,6 +30,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Level; +import lombok.Locked; import lombok.RequiredArgsConstructor; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; @@ -98,21 +99,15 @@ public final class PluginManager * @param plugin the plugin owning this command * @param command the command to register */ + @Locked.Write("commandsLock") public void registerCommand(Plugin plugin, Command command) { - commandsLock.writeLock().lock(); - try + commandMap.put( command.getName().toLowerCase( Locale.ROOT ), command ); + for ( String alias : command.getAliases() ) { - commandMap.put( command.getName().toLowerCase( Locale.ROOT ), command ); - for ( String alias : command.getAliases() ) - { - commandMap.put( alias.toLowerCase( Locale.ROOT ), command ); - } - commandsByPlugin.put( plugin, command ); - } finally - { - commandsLock.writeLock().unlock(); + commandMap.put( alias.toLowerCase( Locale.ROOT ), command ); } + commandsByPlugin.put( plugin, command ); } /** @@ -120,17 +115,11 @@ public final class PluginManager * * @param command the command to unregister */ + @Locked.Write("commandsLock") public void unregisterCommand(Command command) { - commandsLock.writeLock().lock(); - try - { - while ( commandMap.values().remove( command ) ); - commandsByPlugin.values().remove( command ); - } finally - { - commandsLock.writeLock().unlock(); - } + while ( commandMap.values().remove( command ) ); + commandsByPlugin.values().remove( command ); } /** @@ -138,20 +127,14 @@ public final class PluginManager * * @param plugin the plugin to register the commands of */ + @Locked.Write("commandsLock") public void unregisterCommands(Plugin plugin) { - commandsLock.writeLock().lock(); - try + for ( Iterator it = commandsByPlugin.get( plugin ).iterator(); it.hasNext(); ) { - for ( Iterator it = commandsByPlugin.get( plugin ).iterator(); it.hasNext(); ) - { - Command command = it.next(); - while ( commandMap.values().remove( command ) ); - it.remove(); - } - } finally - { - commandsLock.writeLock().unlock(); + Command command = it.next(); + while ( commandMap.values().remove( command ) ); + it.remove(); } } @@ -467,21 +450,15 @@ public final class PluginManager * @param plugin the owning plugin * @param listener the listener to register events for */ + @Locked("listenersLock") public void registerListener(Plugin plugin, Listener listener) { - listenersLock.lock(); - try + for ( Method method : listener.getClass().getDeclaredMethods() ) { - for ( Method method : listener.getClass().getDeclaredMethods() ) - { - Preconditions.checkArgument( !method.isAnnotationPresent( Subscribe.class ), "Listener %s has registered using deprecated subscribe annotation! Please update to @EventHandler.", listener ); - } - eventBus.register( listener ); - listenersByPlugin.put( plugin, listener ); - } finally - { - listenersLock.unlock(); + Preconditions.checkArgument( !method.isAnnotationPresent( Subscribe.class ), "Listener %s has registered using deprecated subscribe annotation! Please update to @EventHandler.", listener ); } + eventBus.register( listener ); + listenersByPlugin.put( plugin, listener ); } /** @@ -489,17 +466,11 @@ public final class PluginManager * * @param listener the listener to unregister */ + @Locked("listenersLock") public void unregisterListener(Listener listener) { - listenersLock.lock(); - try - { - eventBus.unregister( listener ); - listenersByPlugin.values().remove( listener ); - } finally - { - listenersLock.unlock(); - } + eventBus.unregister( listener ); + listenersByPlugin.values().remove( listener ); } /** @@ -507,19 +478,13 @@ public final class PluginManager * * @param plugin target plugin */ + @Locked("listenersLock") public void unregisterListeners(Plugin plugin) { - listenersLock.lock(); - try + for ( Iterator it = listenersByPlugin.get( plugin ).iterator(); it.hasNext(); ) { - for ( Iterator it = listenersByPlugin.get( plugin ).iterator(); it.hasNext(); ) - { - eventBus.unregister( it.next() ); - it.remove(); - } - } finally - { - listenersLock.unlock(); + eventBus.unregister( it.next() ); + it.remove(); } } @@ -528,16 +493,10 @@ public final class PluginManager * * @return commands */ + @Locked.Read("commandsLock") public Collection> getCommands() { - commandsLock.readLock().lock(); - try - { - return Collections.unmodifiableCollection( commandMap.entrySet() ); - } finally - { - commandsLock.readLock().unlock(); - } + return Collections.unmodifiableCollection( commandMap.entrySet() ); } boolean isTransitiveDepend(PluginDescription plugin, PluginDescription depend) diff --git a/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java b/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java index 3a514a76..4b95efbf 100644 --- a/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java +++ b/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.logging.Level; +import lombok.Locked; import net.md_5.bungee.api.AbstractReconnectHandler; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; @@ -53,31 +54,17 @@ public class YamlReconnectHandler extends AbstractReconnectHandler } @Override + @Locked.Read("lock") protected ServerInfo getStoredServer(ProxiedPlayer player) { - ServerInfo server = null; - lock.readLock().lock(); - try - { - server = ProxyServer.getInstance().getServerInfo( data.get( key( player ) ) ); - } finally - { - lock.readLock().unlock(); - } - return server; + return ProxyServer.getInstance().getServerInfo( data.get( key( player ) ) ); } @Override + @Locked.Write("lock") public void setServer(ProxiedPlayer player) { - lock.writeLock().lock(); - try - { - data.put( key( player ), ( player.getReconnectServer() != null ) ? player.getReconnectServer().getName() : player.getServer().getInfo().getName() ); - } finally - { - lock.writeLock().unlock(); - } + data.put( key( player ), ( player.getReconnectServer() != null ) ? player.getReconnectServer().getName() : player.getServer().getInfo().getName() ); } private String key(ProxiedPlayer player) diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java index 3576d6ae..23f22da8 100644 --- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java +++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java @@ -45,6 +45,7 @@ import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import lombok.Getter; +import lombok.Locked; import lombok.Setter; import lombok.Synchronized; import net.md_5.bungee.api.CommandSender; @@ -525,18 +526,12 @@ public class BungeeCord extends ProxyServer * * @param packet the packet to send */ + @Locked.Read("connectionLock") public void broadcast(DefinedPacket packet) { - connectionLock.readLock().lock(); - try + for ( UserConnection con : connections.values() ) { - for ( UserConnection con : connections.values() ) - { - con.unsafe().sendPacket( packet ); - } - } finally - { - connectionLock.readLock().unlock(); + con.unsafe().sendPacket( packet ); } } @@ -598,17 +593,11 @@ public class BungeeCord extends ProxyServer } @Override + @Locked.Read("connectionLock") @SuppressWarnings("unchecked") public Collection getPlayers() { - connectionLock.readLock().lock(); - try - { - return Collections.unmodifiableCollection( new HashSet( connections.values() ) ); - } finally - { - connectionLock.readLock().unlock(); - } + return Collections.unmodifiableCollection( new HashSet( connections.values() ) ); } @Override @@ -618,16 +607,10 @@ public class BungeeCord extends ProxyServer } @Override + @Locked.Read("connectionLock") public ProxiedPlayer getPlayer(String name) { - connectionLock.readLock().lock(); - try - { - return connections.get( name ); - } finally - { - connectionLock.readLock().unlock(); - } + return connections.get( name ); } public UserConnection getPlayerByOfflineUUID(UUID uuid) @@ -647,16 +630,10 @@ public class BungeeCord extends ProxyServer } @Override + @Locked.Read("connectionLock") public ProxiedPlayer getPlayer(UUID uuid) { - connectionLock.readLock().lock(); - try - { - return connectionsByUUID.get( uuid ); - } finally - { - connectionLock.readLock().unlock(); - } + return connectionsByUUID.get( uuid ); } @Override @@ -782,21 +759,15 @@ public class BungeeCord extends ProxyServer return true; } + @Locked.Write("connectionLock") public void removeConnection(UserConnection con) { - connectionLock.writeLock().lock(); - try + // TODO See #1218 + if ( connections.get( con.getName() ) == con ) { - // TODO See #1218 - if ( connections.get( con.getName() ) == con ) - { - connections.remove( con.getName() ); - connectionsByUUID.remove( con.getUniqueId() ); - connectionsByOfflineUUID.remove( con.getPendingConnection().getOfflineId() ); - } - } finally - { - connectionLock.writeLock().unlock(); + connections.remove( con.getName() ); + connectionsByUUID.remove( con.getUniqueId() ); + connectionsByOfflineUUID.remove( con.getPendingConnection().getOfflineId() ); } }