We pass `null` for the class name here:

https://github.com/elastic/elasticsearch/blob/f086dd18ddc705bf84a1ff99d35196ec2498fd52/server/src/main/java/org/elasticsearch/plugins/PluginDescriptor.java#L261

However the class name is mandatory for the transport protocol today:

https://github.com/elastic/elasticsearch/blob/f086dd18ddc705bf84a1ff99d35196ec2498fd52/server/src/main/java/org/elasticsearch/plugins/PluginDescriptor.java#L156

This prevents various APIs from working in a cluster with stable plugins installed.
server/src/test/java/org/elasticsearch/plugins/PluginsServiceTests.java
@SuppressWarnings("unused")
            public TooManyParametersPlugin(Settings settings, Path configPath, Object object) {
            }
        }
        class TwoParametersFirstIncorrectType extends Plugin {
            @SuppressWarnings("unused")
            public TwoParametersFirstIncorrectType(Object object, Path configPath) {
            }
        }
        class TwoParametersSecondIncorrectType extends Plugin {
            @SuppressWarnings("unused")
            public TwoParametersSecondIncorrectType(Settings settings, Object object) {
            }
        }
        class OneParameterIncorrectType extends Plugin {