test_class.declarator: mockContext = mock(PluginContext.class)
test_class.modifier: private final
test_class.original_string: private final PluginContext mockContext = mock(PluginContext.class);
test_class.type: PluginContext
test_class.var_name: mockContext
test_class.declarator: mockProcessor = mock(AnnotationProcessor.class)
test_class.modifier: private final
test_class.original_string: private final AnnotationProcessor mockProcessor = mock(AnnotationProcessor.class);
test_class.type: AnnotationProcessor
test_class.var_name: mockProcessor
test_class.declarator: mockSource = mock(PluginSource.class)
test_class.modifier: private final
test_class.original_string: private final PluginSource mockSource = mock(PluginSource.class);
test_class.type: PluginSource
test_class.var_name: mockSource
test_class.declarator: mockResolver = mock(DependencyResolver.class)
test_class.modifier: private final
test_class.original_string: private final DependencyResolver mockResolver = mock(DependencyResolver.class);
test_class.type: DependencyResolver
test_class.var_name: mockResolver
test_class.declarator: manager
test_class.modifier: private
test_class.original_string: private DefaultPluginManager manager;
test_class.type: DefaultPluginManager
test_class.var_name: manager
test_class.declarator: plugin = new TestPlugin()
test_class.modifier: private final
test_class.original_string: private final TestPlugin plugin = new TestPlugin();
test_class.type: TestPlugin
test_class.var_name: plugin
test_class.file: plugface-core/src/test/java/org/plugface/core/impl/DefaultPluginManagerTest.java
test_class.identifier: DefaultPluginManagerTest
test_case.body: @Test
      public void shouldNotLoadAPluginTwice() throws Exception {
          manager.loadPlugins(mockSource);
          this.shouldLoadPluginsFromSource();
      }
test_case.class_method_signature: DefaultPluginManagerTest.shouldNotLoadAPluginTwice()
test_case.full_signature: @Test public void shouldNotLoadAPluginTwice()
test_case.identifier: shouldNotLoadAPluginTwice
test_case.invocations: loadPlugins shouldLoadPluginsFromSource
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void shouldNotLoadAPluginTwice()
focal_class.declarator: context
focal_class.modifier: protected final
focal_class.original_string: protected final PluginContext context;
focal_class.type: PluginContext
focal_class.var_name: context
focal_class.declarator: annotationProcessor
focal_class.modifier: protected final
focal_class.original_string: protected final AnnotationProcessor annotationProcessor;
focal_class.type: AnnotationProcessor
focal_class.var_name: annotationProcessor
focal_class.declarator: dependencyResolver
focal_class.modifier: protected final
focal_class.original_string: protected final DependencyResolver dependencyResolver;
focal_class.type: DependencyResolver
focal_class.var_name: dependencyResolver
focal_class.file: plugface-core/src/main/java/org/plugface/core/impl/DefaultPluginManager.java
focal_class.identifier: DefaultPluginManager
focal_class.interfaces: implements PluginManager
focal_class.class_method_signature: DefaultPluginManager.DefaultPluginManager(PluginContext context, AnnotationProcessor annotationProcessor, DependencyResolver dependencyResolver)
focal_class.full_signature: public  DefaultPluginManager(PluginContext context, AnnotationProcessor annotationProcessor, DependencyResolver dependencyResolver)
focal_class.identifier: DefaultPluginManager
focal_class.modifiers: public
focal_class.parameters: (PluginContext context, AnnotationProcessor annotationProcessor, DependencyResolver dependencyResolver)
focal_class.signature:  DefaultPluginManager(PluginContext context, AnnotationProcessor annotationProcessor, DependencyResolver dependencyResolver)
focal_class.class_method_signature: DefaultPluginManager.register(T plugin)
focal_class.full_signature: @Override public void register(T plugin)
focal_class.identifier: register
focal_class.modifiers: @Override public
focal_class.parameters: (T plugin)
focal_class.return: void
focal_class.signature: void register(T plugin)
focal_class.class_method_signature: DefaultPluginManager.register(String name, T plugin)
focal_class.full_signature: @Override public void register(String name, T plugin)
focal_class.identifier: register
focal_class.modifiers: @Override public
focal_class.parameters: (String name, T plugin)
focal_class.return: void
focal_class.signature: void register(String name, T plugin)
focal_class.class_method_signature: DefaultPluginManager.getPlugin(String name)
focal_class.full_signature: @Override public T getPlugin(String name)
focal_class.identifier: getPlugin
focal_class.modifiers: @Override public
focal_class.parameters: (String name)
focal_class.return: T
focal_class.signature: T getPlugin(String name)
focal_class.class_method_signature: DefaultPluginManager.getPlugin(Class<T> pluginClass)
focal_class.full_signature: @Override public T getPlugin(Class<T> pluginClass)
focal_class.identifier: getPlugin
focal_class.modifiers: @Override public
focal_class.parameters: (Class<T> pluginClass)
focal_class.return: T
focal_class.signature: T getPlugin(Class<T> pluginClass)
focal_class.class_method_signature: DefaultPluginManager.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: DefaultPluginManager.removePlugin(String name)
focal_class.full_signature: @Override public T removePlugin(String name)
focal_class.identifier: removePlugin
focal_class.modifiers: @Override public
focal_class.parameters: (String name)
focal_class.return: T
focal_class.signature: T removePlugin(String name)
focal_class.class_method_signature: DefaultPluginManager.removePlugin(T plugin)
focal_class.full_signature: @Override public T removePlugin(T plugin)
focal_class.identifier: removePlugin
focal_class.modifiers: @Override public
focal_class.parameters: (T plugin)
focal_class.return: T
focal_class.signature: T removePlugin(T plugin)
focal_class.class_method_signature: DefaultPluginManager.loadPlugins(PluginSource source)
focal_class.full_signature: @Override public Collection<Object> loadPlugins(PluginSource source)
focal_class.identifier: loadPlugins
focal_class.modifiers: @Override public
focal_class.parameters: (PluginSource source)
focal_class.return: Collection<Object>
focal_class.signature: Collection<Object> loadPlugins(PluginSource source)
focal_class.class_method_signature: DefaultPluginManager.createPlugins(Collection<Node<?>> nodes, Collection<Object> loaded)
focal_class.full_signature: private void createPlugins(Collection<Node<?>> nodes, Collection<Object> loaded)
focal_class.identifier: createPlugins
focal_class.modifiers: private
focal_class.parameters: (Collection<Node<?>> nodes, Collection<Object> loaded)
focal_class.return: void
focal_class.signature: void createPlugins(Collection<Node<?>> nodes, Collection<Object> loaded)
focal_class.class_method_signature: DefaultPluginManager.createPlugin(Node<?> node, Collection<Object> loaded)
focal_class.full_signature: private void createPlugin(Node<?> node, Collection<Object> loaded)
focal_class.identifier: createPlugin
focal_class.modifiers: private
focal_class.parameters: (Node<?> node, Collection<Object> loaded)
focal_class.return: void
focal_class.signature: void createPlugin(Node<?> node, Collection<Object> loaded)
focal_class.class_method_signature: DefaultPluginManager.create(Class<?> refClass)
focal_class.full_signature: protected Object create(Class<?> refClass)
focal_class.identifier: create
focal_class.modifiers: protected
focal_class.parameters: (Class<?> refClass)
focal_class.return: Object
focal_class.signature: Object create(Class<?> refClass)
focal_method.body: @Override
      public Collection<Object> loadPlugins(PluginSource source) throws Exception {
          final Collection<Class<?>> pluginClasses = Objects.requireNonNull(source, "Plugin Source cannot be null").load();
          final Collection<Object> loaded = new ArrayList<>();
  
          if (pluginClasses.isEmpty()) {
              return loaded;
          }
  
          final Iterator<Class<?>> itr = pluginClasses.iterator();
          while (itr.hasNext()) {
              Class<?> pluginClass = itr.next();
              if (pluginClass.getAnnotation(Plugin.class) == null) {
                  itr.remove();
                  continue;
              }
              if (context.hasPlugin(pluginClass)) {
                  itr.remove();
              }
          }
  
          Collection<Node<?>> nodes = dependencyResolver.resolve(pluginClasses);
          createPlugins(nodes, loaded);
          return loaded;
      }
focal_method.class_method_signature: DefaultPluginManager.loadPlugins(PluginSource source)
focal_method.full_signature: @Override public Collection<Object> loadPlugins(PluginSource source)
focal_method.identifier: loadPlugins
focal_method.invocations: load requireNonNull isEmpty iterator hasNext next getAnnotation remove hasPlugin remove resolve createPlugins
focal_method.modifiers: @Override public
focal_method.parameters: (PluginSource source)
focal_method.return: Collection<Object>
focal_method.signature: Collection<Object> loadPlugins(PluginSource source)