Skip to content

Commit bb85000

Browse files
committed
Removed static part from PluginRegistry to avoid static initializer
1 parent c4cb8f4 commit bb85000

File tree

3 files changed

+35
-32
lines changed

3 files changed

+35
-32
lines changed

logstash-core/src/main/java/org/logstash/plugins/PluginLookup.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.jruby.runtime.builtin.IRubyObject;
3333
import org.logstash.RubyUtil;
3434
import org.logstash.plugins.discovery.PluginRegistry;
35+
import org.logstash.plugins.factory.PluginFactoryExt;
3536

3637
import java.util.stream.Collectors;
3738
import java.util.stream.Stream;
@@ -40,20 +41,23 @@
4041
* Java Implementation of the plugin that is implemented by wrapping the Ruby
4142
* {@code LogStash::Plugin} class for the Ruby plugin lookup.
4243
*/
43-
public final class PluginLookup {
44+
public final class PluginLookup implements PluginFactoryExt.PluginResolver {
4445

4546
private static final IRubyObject RUBY_REGISTRY = RubyUtil.RUBY.executeScript(
4647
"require 'logstash/plugins/registry'\nrequire 'logstash/plugin'\nLogStash::Plugin",
4748
""
4849
);
4950

50-
private PluginLookup() {
51-
// Utility Class
51+
private final PluginRegistry pluginRegistry;
52+
53+
public PluginLookup(PluginRegistry pluginRegistry) {
54+
this.pluginRegistry = pluginRegistry;
5255
}
5356

5457
@SuppressWarnings("rawtypes")
55-
public static PluginLookup.PluginClass lookup(final PluginLookup.PluginType type, final String name) {
56-
Class<?> javaClass = PluginRegistry.getPluginClass(type, name);
58+
@Override
59+
public PluginClass resolve(PluginType type, String name) {
60+
Class<?> javaClass = pluginRegistry.getPluginClass(type, name);
5761
if (javaClass != null) {
5862

5963
if (!PluginValidator.validatePlugin(type, javaClass)) {

logstash-core/src/main/java/org/logstash/plugins/discovery/PluginRegistry.java

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,36 +41,34 @@
4141
*/
4242
public final class PluginRegistry {
4343

44-
private static final Map<String, Class<Input>> INPUTS = new HashMap<>();
45-
private static final Map<String, Class<Filter>> FILTERS = new HashMap<>();
46-
private static final Map<String, Class<Output>> OUTPUTS = new HashMap<>();
47-
private static final Map<String, Class<Codec>> CODECS = new HashMap<>();
44+
private final Map<String, Class<Input>> inputs = new HashMap<>();
45+
private final Map<String, Class<Filter>> filters = new HashMap<>();
46+
private final Map<String, Class<Output>> outputs = new HashMap<>();
47+
private final Map<String, Class<Codec>> codecs = new HashMap<>();
4848

49-
static {
49+
public PluginRegistry() {
5050
discoverPlugins();
5151
}
52-
53-
private PluginRegistry() {} // utility class
54-
52+
5553
@SuppressWarnings("unchecked")
56-
private static void discoverPlugins() {
54+
private void discoverPlugins() {
5755
Reflections reflections = new Reflections("org.logstash.plugins");
5856
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(LogstashPlugin.class);
5957
for (final Class<?> cls : annotated) {
6058
for (final Annotation annotation : cls.getAnnotations()) {
6159
if (annotation instanceof LogstashPlugin) {
6260
String name = ((LogstashPlugin) annotation).name();
6361
if (Filter.class.isAssignableFrom(cls)) {
64-
FILTERS.put(name, (Class<Filter>) cls);
62+
filters.put(name, (Class<Filter>) cls);
6563
}
6664
if (Output.class.isAssignableFrom(cls)) {
67-
OUTPUTS.put(name, (Class<Output>) cls);
65+
outputs.put(name, (Class<Output>) cls);
6866
}
6967
if (Input.class.isAssignableFrom(cls)) {
70-
INPUTS.put(name, (Class<Input>) cls);
68+
inputs.put(name, (Class<Input>) cls);
7169
}
7270
if (Codec.class.isAssignableFrom(cls)) {
73-
CODECS.put(name, (Class<Codec>) cls);
71+
codecs.put(name, (Class<Codec>) cls);
7472
}
7573

7674
break;
@@ -79,7 +77,7 @@ private static void discoverPlugins() {
7977
}
8078
}
8179

82-
public static Class<?> getPluginClass(PluginLookup.PluginType pluginType, String pluginName) {
80+
public Class<?> getPluginClass(PluginLookup.PluginType pluginType, String pluginName) {
8381
if (pluginType == PluginLookup.PluginType.FILTER) {
8482
return getFilterClass(pluginName);
8583
}
@@ -97,31 +95,31 @@ public static Class<?> getPluginClass(PluginLookup.PluginType pluginType, String
9795

9896
}
9997

100-
public static Class<Input> getInputClass(String name) {
101-
return INPUTS.get(name);
98+
public Class<Input> getInputClass(String name) {
99+
return inputs.get(name);
102100
}
103101

104-
public static Class<Filter> getFilterClass(String name) {
105-
return FILTERS.get(name);
102+
public Class<Filter> getFilterClass(String name) {
103+
return filters.get(name);
106104
}
107105

108-
public static Class<Codec> getCodecClass(String name) {
109-
return CODECS.get(name);
106+
public Class<Codec> getCodecClass(String name) {
107+
return codecs.get(name);
110108
}
111109

112-
public static Class<Output> getOutputClass(String name) {
113-
return OUTPUTS.get(name);
110+
public Class<Output> getOutputClass(String name) {
111+
return outputs.get(name);
114112
}
115113

116-
public static Codec getCodec(String name, Configuration configuration, Context context) {
117-
if (name != null && CODECS.containsKey(name)) {
118-
return instantiateCodec(CODECS.get(name), configuration, context);
114+
public Codec getCodec(String name, Configuration configuration, Context context) {
115+
if (name != null && codecs.containsKey(name)) {
116+
return instantiateCodec(codecs.get(name), configuration, context);
119117
}
120118
return null;
121119
}
122120

123121
@SuppressWarnings({"unchecked","rawtypes"})
124-
private static Codec instantiateCodec(Class clazz, Configuration configuration, Context context) {
122+
private Codec instantiateCodec(Class clazz, Configuration configuration, Context context) {
125123
try {
126124
Constructor<Codec> constructor = clazz.getConstructor(Configuration.class, Context.class);
127125
return constructor.newInstance(configuration, context);

logstash-core/src/main/java/org/logstash/plugins/factory/PluginFactoryExt.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.logstash.instrument.metrics.MetricKeys;
2121
import org.logstash.plugins.ConfigVariableExpander;
2222
import org.logstash.plugins.PluginLookup;
23+
import org.logstash.plugins.discovery.PluginRegistry;
2324

2425
import java.util.*;
2526
import java.util.concurrent.ConcurrentHashMap;
@@ -81,7 +82,7 @@ public static IRubyObject filterDelegator(final ThreadContext context,
8182
}
8283

8384
public PluginFactoryExt(final Ruby runtime, final RubyClass metaClass) {
84-
this(runtime, metaClass, PluginLookup::lookup);
85+
this(runtime, metaClass, new PluginLookup(new PluginRegistry()));
8586
}
8687

8788
PluginFactoryExt(final Ruby runtime, final RubyClass metaClass, PluginResolver pluginResolver) {

0 commit comments

Comments
 (0)