test_class.declarator: registry = new HashMap<>()
test_class.modifier: private
test_class.original_string: private Map<String, Object> registry = new HashMap<>();
test_class.type: Map<String, Object>
test_class.var_name: registry
test_class.declarator: context
test_class.modifier: private
test_class.original_string: private DefaultPluginContext context;
test_class.type: DefaultPluginContext
test_class.var_name: context
test_class.declarator: plugin = new TestPlugin()
test_class.modifier: private
test_class.original_string: private TestPlugin plugin = new TestPlugin();
test_class.type: TestPlugin
test_class.var_name: plugin
test_class.declarator: optionalPlugin = new OptionalPlugin()
test_class.modifier: private
test_class.original_string: private OptionalPlugin optionalPlugin = new OptionalPlugin();
test_class.type: OptionalPlugin
test_class.var_name: optionalPlugin
test_class.file: plugface-core/src/test/java/org/plugface/core/impl/DefaultPluginContextTest.java
test_class.identifier: DefaultPluginContextTest
test_case.body: @Test
      public void shouldAddAPlugin() {
          context.addPlugin(plugin);
          assertTrue(registry.containsKey("test"));
          final Object test = registry.get("test");
          assertEquals(plugin, test);
      }
test_case.class_method_signature: DefaultPluginContextTest.shouldAddAPlugin()
test_case.full_signature: @Test public void shouldAddAPlugin()
test_case.identifier: shouldAddAPlugin
test_case.invocations: addPlugin assertTrue containsKey get assertEquals
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void shouldAddAPlugin()
focal_class.declarator: registry
focal_class.modifier: private final
focal_class.original_string: private final Map<String, Object> registry;
focal_class.type: Map<String, Object>
focal_class.var_name: registry
focal_class.file: plugface-core/src/main/java/org/plugface/core/impl/DefaultPluginContext.java
focal_class.identifier: DefaultPluginContext
focal_class.interfaces: implements PluginContext
focal_class.class_method_signature: DefaultPluginContext.DefaultPluginContext()
focal_class.full_signature: public  DefaultPluginContext()
focal_class.identifier: DefaultPluginContext
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.signature:  DefaultPluginContext()
focal_class.class_method_signature: DefaultPluginContext.DefaultPluginContext(Map<String, Object> registry)
focal_class.full_signature: public  DefaultPluginContext(Map<String, Object> registry)
focal_class.identifier: DefaultPluginContext
focal_class.modifiers: public
focal_class.parameters: (Map<String, Object> registry)
focal_class.signature:  DefaultPluginContext(Map<String, Object> registry)
focal_class.class_method_signature: DefaultPluginContext.getPlugin(String pluginName)
focal_class.full_signature: @Override @Nullable public T getPlugin(String pluginName)
focal_class.identifier: getPlugin
focal_class.modifiers: @Override @Nullable public
focal_class.parameters: (String pluginName)
focal_class.return: T
focal_class.signature: T getPlugin(String pluginName)
focal_class.class_method_signature: DefaultPluginContext.getPlugin(Class<T> pluginClass)
focal_class.full_signature: @Override @Nullable public T getPlugin(Class<T> pluginClass)
focal_class.identifier: getPlugin
focal_class.modifiers: @Override @Nullable public
focal_class.parameters: (Class<T> pluginClass)
focal_class.return: T
focal_class.signature: T getPlugin(Class<T> pluginClass)
focal_class.class_method_signature: DefaultPluginContext.getAllPlugins()
focal_class.full_signature: @Override public Collection<PluginRef> getAllPlugins()
focal_class.identifier: getAllPlugins
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: Collection<PluginRef>
focal_class.signature: Collection<PluginRef> getAllPlugins()
focal_class.class_method_signature: DefaultPluginContext.addPlugin(T plugin)
focal_class.full_signature: @Override public void addPlugin(T plugin)
focal_class.identifier: addPlugin
focal_class.modifiers: @Override public
focal_class.parameters: (T plugin)
focal_class.return: void
focal_class.signature: void addPlugin(T plugin)
focal_class.class_method_signature: DefaultPluginContext.addPlugin(String name, T plugin)
focal_class.full_signature: @Override public void addPlugin(String name, T plugin)
focal_class.identifier: addPlugin
focal_class.modifiers: @Override public
focal_class.parameters: (String name, T plugin)
focal_class.return: void
focal_class.signature: void addPlugin(String name, T plugin)
focal_class.class_method_signature: DefaultPluginContext.removePlugin(T plugin)
focal_class.full_signature: @Override @Nullable public T removePlugin(T plugin)
focal_class.identifier: removePlugin
focal_class.modifiers: @Override @Nullable public
focal_class.parameters: (T plugin)
focal_class.return: T
focal_class.signature: T removePlugin(T plugin)
focal_class.class_method_signature: DefaultPluginContext.removePlugin(String pluginName)
focal_class.full_signature: @Override @Nullable public T removePlugin(String pluginName)
focal_class.identifier: removePlugin
focal_class.modifiers: @Override @Nullable public
focal_class.parameters: (String pluginName)
focal_class.return: T
focal_class.signature: T removePlugin(String pluginName)
focal_class.class_method_signature: DefaultPluginContext.hasPlugin(String pluginName)
focal_class.full_signature: @Override public boolean hasPlugin(String pluginName)
focal_class.identifier: hasPlugin
focal_class.modifiers: @Override public
focal_class.parameters: (String pluginName)
focal_class.return: boolean
focal_class.signature: boolean hasPlugin(String pluginName)
focal_class.class_method_signature: DefaultPluginContext.hasPlugin(Class<T> pluginClass)
focal_class.full_signature: @Override public boolean hasPlugin(Class<T> pluginClass)
focal_class.identifier: hasPlugin
focal_class.modifiers: @Override public
focal_class.parameters: (Class<T> pluginClass)
focal_class.return: boolean
focal_class.signature: boolean hasPlugin(Class<T> pluginClass)
focal_class.class_method_signature: DefaultPluginContext.isImplementingInterface(Class<?> clazz, Class<?> wanted)
focal_class.full_signature: private boolean isImplementingInterface(Class<?> clazz, Class<?> wanted)
focal_class.identifier: isImplementingInterface
focal_class.modifiers: private
focal_class.parameters: (Class<?> clazz, Class<?> wanted)
focal_class.return: boolean
focal_class.signature: boolean isImplementingInterface(Class<?> clazz, Class<?> wanted)
focal_method.body: @Override
      public <T> void addPlugin(T plugin) {
          Objects.requireNonNull(plugin, "Plugin to register cannot be null");
          final String name = AnnotationProcessor.getPluginName(plugin);
          addPlugin(name, plugin);
      }
focal_method.class_method_signature: DefaultPluginContext.addPlugin(T plugin)
focal_method.full_signature: @Override public void addPlugin(T plugin)
focal_method.identifier: addPlugin
focal_method.invocations: requireNonNull getPluginName addPlugin
focal_method.modifiers: @Override public
focal_method.parameters: (T plugin)
focal_method.return: void
focal_method.signature: void addPlugin(T plugin)