test_class.declarator: PLUGIN_PACKAGE = "net.runelite.client.plugins"
test_class.modifier: private static final
test_class.original_string: private static final String PLUGIN_PACKAGE = "net.runelite.client.plugins";
test_class.type: String
test_class.var_name: PLUGIN_PACKAGE
test_class.declarator: folder = new TemporaryFolder()
test_class.modifier: @Rule
  	public
test_class.original_string: @Rule
  	public TemporaryFolder folder = new TemporaryFolder();
test_class.type: TemporaryFolder
test_class.var_name: folder
test_class.declarator: applet
test_class.modifier: @Mock
  	@Bind
  	public
test_class.original_string: @Mock
  	@Bind
  	public Applet applet;
test_class.type: Applet
test_class.var_name: applet
test_class.declarator: client
test_class.modifier: @Mock
  	@Bind
  	public
test_class.original_string: @Mock
  	@Bind
  	public Client client;
test_class.type: Client
test_class.var_name: client
test_class.declarator: pluginClasses
test_class.modifier: private
test_class.original_string: private Set<Class<?>> pluginClasses;
test_class.type: Set<Class<?>>
test_class.var_name: pluginClasses
test_class.declarator: configClasses
test_class.modifier: private
test_class.original_string: private Set<Class<?>> configClasses;
test_class.type: Set<Class<?>>
test_class.var_name: configClasses
test_class.file: runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java
test_class.identifier: PluginManagerTest
test_case.body: @Test
  	public void ensureNoDuplicateConfigKeyNames()
  	{
  		for (final Class<?> clazz : configClasses)
  		{
  			final Set<String> configKeyNames = new HashSet<>();
  
  			for (final Method method : clazz.getMethods())
  			{
  				if (!method.isDefault())
  				{
  					continue;
  				}
  
  				final ConfigItem annotation = method.getAnnotation(ConfigItem.class);
  
  				if (annotation == null)
  				{
  					continue;
  				}
  
  				final String configKeyName = annotation.keyName();
  
  				if (configKeyNames.contains(configKeyName))
  				{
  					throw new IllegalArgumentException("keyName " + configKeyName + " is duplicated in " + clazz);
  				}
  
  				configKeyNames.add(configKeyName);
  			}
  		}
  	}
test_case.class_method_signature: PluginManagerTest.ensureNoDuplicateConfigKeyNames()
test_case.full_signature: @Test public void ensureNoDuplicateConfigKeyNames()
test_case.identifier: ensureNoDuplicateConfigKeyNames
test_case.invocations: getMethods isDefault getAnnotation keyName contains add
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void ensureNoDuplicateConfigKeyNames()
focal_class.declarator: PLUGIN_PACKAGE = "net.runelite.client.plugins"
focal_class.modifier: private static final
focal_class.original_string: private static final String PLUGIN_PACKAGE = "net.runelite.client.plugins";
focal_class.type: String
focal_class.var_name: PLUGIN_PACKAGE
focal_class.declarator: developerMode
focal_class.modifier: private final
focal_class.original_string: private final boolean developerMode;
focal_class.type: boolean
focal_class.var_name: developerMode
focal_class.declarator: safeMode
focal_class.modifier: private final
focal_class.original_string: private final boolean safeMode;
focal_class.type: boolean
focal_class.var_name: safeMode
focal_class.declarator: eventBus
focal_class.modifier: private final
focal_class.original_string: private final EventBus eventBus;
focal_class.type: EventBus
focal_class.var_name: eventBus
focal_class.declarator: scheduler
focal_class.modifier: private final
focal_class.original_string: private final Scheduler scheduler;
focal_class.type: Scheduler
focal_class.var_name: scheduler
focal_class.declarator: configManager
focal_class.modifier: private final
focal_class.original_string: private final ConfigManager configManager;
focal_class.type: ConfigManager
focal_class.var_name: configManager
focal_class.declarator: executor
focal_class.modifier: private final
focal_class.original_string: private final ScheduledExecutorService executor;
focal_class.type: ScheduledExecutorService
focal_class.var_name: executor
focal_class.declarator: sceneTileManager
focal_class.modifier: private final
focal_class.original_string: private final Provider<GameEventManager> sceneTileManager;
focal_class.type: Provider<GameEventManager>
focal_class.var_name: sceneTileManager
focal_class.declarator: plugins = new CopyOnWriteArrayList<>()
focal_class.modifier: private final
focal_class.original_string: private final List<Plugin> plugins = new CopyOnWriteArrayList<>();
focal_class.type: List<Plugin>
focal_class.var_name: plugins
focal_class.declarator: activePlugins = new CopyOnWriteArrayList<>()
focal_class.modifier: private final
focal_class.original_string: private final List<Plugin> activePlugins = new CopyOnWriteArrayList<>();
focal_class.type: List<Plugin>
focal_class.var_name: activePlugins
focal_class.declarator: isOutdated
focal_class.modifier: @Setter
focal_class.original_string: @Setter
  	boolean isOutdated;
focal_class.type: boolean
focal_class.var_name: isOutdated
focal_class.file: runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java
focal_class.identifier: PluginManager
focal_class.class_method_signature: PluginManager.PluginManager(
  		@Named("developerMode") final boolean developerMode,
  		@Named("safeMode") final boolean safeMode,
  		final EventBus eventBus,
  		final Scheduler scheduler,
  		final ConfigManager configManager,
  		final ScheduledExecutorService executor,
  		final Provider<GameEventManager> sceneTileManager)
focal_class.full_signature: @Inject @VisibleForTesting  PluginManager(
  		@Named("developerMode") final boolean developerMode,
  		@Named("safeMode") final boolean safeMode,
  		final EventBus eventBus,
  		final Scheduler scheduler,
  		final ConfigManager configManager,
  		final ScheduledExecutorService executor,
  		final Provider<GameEventManager> sceneTileManager)
focal_class.identifier: PluginManager
focal_class.modifiers: @Inject @VisibleForTesting
focal_class.parameters: (
  		@Named("developerMode") final boolean developerMode,
  		@Named("safeMode") final boolean safeMode,
  		final EventBus eventBus,
  		final Scheduler scheduler,
  		final ConfigManager configManager,
  		final ScheduledExecutorService executor,
  		final Provider<GameEventManager> sceneTileManager)
focal_class.signature:  PluginManager(
  		@Named("developerMode") final boolean developerMode,
  		@Named("safeMode") final boolean safeMode,
  		final EventBus eventBus,
  		final Scheduler scheduler,
  		final ConfigManager configManager,
  		final ScheduledExecutorService executor,
  		final Provider<GameEventManager> sceneTileManager)
focal_class.class_method_signature: PluginManager.onSessionOpen(SessionOpen event)
focal_class.full_signature: @Subscribe public void onSessionOpen(SessionOpen event)
focal_class.identifier: onSessionOpen
focal_class.modifiers: @Subscribe public
focal_class.parameters: (SessionOpen event)
focal_class.return: void
focal_class.signature: void onSessionOpen(SessionOpen event)
focal_class.class_method_signature: PluginManager.onSessionClose(SessionClose event)
focal_class.full_signature: @Subscribe public void onSessionClose(SessionClose event)
focal_class.identifier: onSessionClose
focal_class.modifiers: @Subscribe public
focal_class.parameters: (SessionClose event)
focal_class.return: void
focal_class.signature: void onSessionClose(SessionClose event)
focal_class.class_method_signature: PluginManager.refreshPlugins()
focal_class.full_signature: private void refreshPlugins()
focal_class.identifier: refreshPlugins
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void refreshPlugins()
focal_class.class_method_signature: PluginManager.getPluginConfigProxy(Plugin plugin)
focal_class.full_signature: public Config getPluginConfigProxy(Plugin plugin)
focal_class.identifier: getPluginConfigProxy
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin)
focal_class.return: Config
focal_class.signature: Config getPluginConfigProxy(Plugin plugin)
focal_class.class_method_signature: PluginManager.getPluginConfigProxies(Collection<Plugin> plugins)
focal_class.full_signature: public List<Config> getPluginConfigProxies(Collection<Plugin> plugins)
focal_class.identifier: getPluginConfigProxies
focal_class.modifiers: public
focal_class.parameters: (Collection<Plugin> plugins)
focal_class.return: List<Config>
focal_class.signature: List<Config> getPluginConfigProxies(Collection<Plugin> plugins)
focal_class.class_method_signature: PluginManager.loadDefaultPluginConfiguration(Collection<Plugin> plugins)
focal_class.full_signature: public void loadDefaultPluginConfiguration(Collection<Plugin> plugins)
focal_class.identifier: loadDefaultPluginConfiguration
focal_class.modifiers: public
focal_class.parameters: (Collection<Plugin> plugins)
focal_class.return: void
focal_class.signature: void loadDefaultPluginConfiguration(Collection<Plugin> plugins)
focal_class.class_method_signature: PluginManager.startPlugins()
focal_class.full_signature: public void startPlugins()
focal_class.identifier: startPlugins
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void startPlugins()
focal_class.class_method_signature: PluginManager.loadCorePlugins()
focal_class.full_signature: public void loadCorePlugins()
focal_class.identifier: loadCorePlugins
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void loadCorePlugins()
focal_class.class_method_signature: PluginManager.loadPlugins(List<Class<?>> plugins, BiConsumer<Integer, Integer> onPluginLoaded)
focal_class.full_signature: public List<Plugin> loadPlugins(List<Class<?>> plugins, BiConsumer<Integer, Integer> onPluginLoaded)
focal_class.identifier: loadPlugins
focal_class.modifiers: public
focal_class.parameters: (List<Class<?>> plugins, BiConsumer<Integer, Integer> onPluginLoaded)
focal_class.return: List<Plugin>
focal_class.signature: List<Plugin> loadPlugins(List<Class<?>> plugins, BiConsumer<Integer, Integer> onPluginLoaded)
focal_class.class_method_signature: PluginManager.startPlugin(Plugin plugin)
focal_class.full_signature: public boolean startPlugin(Plugin plugin)
focal_class.identifier: startPlugin
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin)
focal_class.return: boolean
focal_class.signature: boolean startPlugin(Plugin plugin)
focal_class.class_method_signature: PluginManager.stopPlugin(Plugin plugin)
focal_class.full_signature: public boolean stopPlugin(Plugin plugin)
focal_class.identifier: stopPlugin
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin)
focal_class.return: boolean
focal_class.signature: boolean stopPlugin(Plugin plugin)
focal_class.class_method_signature: PluginManager.setPluginEnabled(Plugin plugin, boolean enabled)
focal_class.full_signature: public void setPluginEnabled(Plugin plugin, boolean enabled)
focal_class.identifier: setPluginEnabled
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin, boolean enabled)
focal_class.return: void
focal_class.signature: void setPluginEnabled(Plugin plugin, boolean enabled)
focal_class.class_method_signature: PluginManager.isPluginEnabled(Plugin plugin)
focal_class.full_signature: public boolean isPluginEnabled(Plugin plugin)
focal_class.identifier: isPluginEnabled
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin)
focal_class.return: boolean
focal_class.signature: boolean isPluginEnabled(Plugin plugin)
focal_class.class_method_signature: PluginManager.instantiate(List<Plugin> scannedPlugins, Class<Plugin> clazz)
focal_class.full_signature: private Plugin instantiate(List<Plugin> scannedPlugins, Class<Plugin> clazz)
focal_class.identifier: instantiate
focal_class.modifiers: private
focal_class.parameters: (List<Plugin> scannedPlugins, Class<Plugin> clazz)
focal_class.return: Plugin
focal_class.signature: Plugin instantiate(List<Plugin> scannedPlugins, Class<Plugin> clazz)
focal_class.class_method_signature: PluginManager.add(Plugin plugin)
focal_class.full_signature: public void add(Plugin plugin)
focal_class.identifier: add
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin)
focal_class.return: void
focal_class.signature: void add(Plugin plugin)
focal_class.class_method_signature: PluginManager.remove(Plugin plugin)
focal_class.full_signature: public void remove(Plugin plugin)
focal_class.identifier: remove
focal_class.modifiers: public
focal_class.parameters: (Plugin plugin)
focal_class.return: void
focal_class.signature: void remove(Plugin plugin)
focal_class.class_method_signature: PluginManager.getPlugins()
focal_class.full_signature: public Collection<Plugin> getPlugins()
focal_class.identifier: getPlugins
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: Collection<Plugin>
focal_class.signature: Collection<Plugin> getPlugins()
focal_class.class_method_signature: PluginManager.schedule(Plugin plugin)
focal_class.full_signature: private void schedule(Plugin plugin)
focal_class.identifier: schedule
focal_class.modifiers: private
focal_class.parameters: (Plugin plugin)
focal_class.return: void
focal_class.signature: void schedule(Plugin plugin)
focal_class.class_method_signature: PluginManager.unschedule(Plugin plugin)
focal_class.full_signature: private void unschedule(Plugin plugin)
focal_class.identifier: unschedule
focal_class.modifiers: private
focal_class.parameters: (Plugin plugin)
focal_class.return: void
focal_class.signature: void unschedule(Plugin plugin)
focal_class.class_method_signature: PluginManager.topologicalSort(Graph<T> graph)
focal_class.full_signature: private List<T> topologicalSort(Graph<T> graph)
focal_class.identifier: topologicalSort
focal_class.modifiers: private
focal_class.parameters: (Graph<T> graph)
focal_class.return: List<T>
focal_class.signature: List<T> topologicalSort(Graph<T> graph)
focal_method.body: public void add(Plugin plugin)
  	{
  		plugins.add(plugin);
  	}
focal_method.class_method_signature: PluginManager.add(Plugin plugin)
focal_method.full_signature: public void add(Plugin plugin)
focal_method.identifier: add
focal_method.invocations: add
focal_method.modifiers: public
focal_method.parameters: (Plugin plugin)
focal_method.return: void
focal_method.signature: void add(Plugin plugin)