test_class.declarator: client
test_class.modifier: @Mock
  	@Bind
  	private
test_class.original_string: @Mock
  	@Bind
  	private Client client;
test_class.type: Client
test_class.var_name: client
test_class.declarator: chatFilterConfig
test_class.modifier: @Mock
  	@Bind
  	private
test_class.original_string: @Mock
  	@Bind
  	private ChatFilterConfig chatFilterConfig;
test_class.type: ChatFilterConfig
test_class.var_name: chatFilterConfig
test_class.declarator: friendChatManager
test_class.modifier: @Mock
  	@Bind
  	private
test_class.original_string: @Mock
  	@Bind
  	private FriendChatManager friendChatManager;
test_class.type: FriendChatManager
test_class.var_name: friendChatManager
test_class.declarator: localPlayer
test_class.modifier: @Mock
  	private
test_class.original_string: @Mock
  	private Player localPlayer;
test_class.type: Player
test_class.var_name: localPlayer
test_class.declarator: chatFilterPlugin
test_class.modifier: @Inject
  	private
test_class.original_string: @Inject
  	private ChatFilterPlugin chatFilterPlugin;
test_class.type: ChatFilterPlugin
test_class.var_name: chatFilterPlugin
test_class.file: runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java
test_class.identifier: ChatFilterPluginTest
test_case.body: @Test
  	public void testMessageFromFriendsChatIsNotFiltered()
  	{
  		when(friendChatManager.isMember("B0aty")).thenReturn(true);
  		when(chatFilterConfig.filterFriendsChat()).thenReturn(false);
  		assertFalse(chatFilterPlugin.shouldFilterPlayerMessage("B0aty"));
  	}
test_case.class_method_signature: ChatFilterPluginTest.testMessageFromFriendsChatIsNotFiltered()
test_case.full_signature: @Test public void testMessageFromFriendsChatIsNotFiltered()
test_case.identifier: testMessageFromFriendsChatIsNotFiltered
test_case.invocations: thenReturn when isMember thenReturn when filterFriendsChat assertFalse shouldFilterPlayerMessage
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testMessageFromFriendsChatIsNotFiltered()
focal_class.declarator: NEWLINE_SPLITTER = Splitter
  		.on("\n")
  		.omitEmptyStrings()
  		.trimResults()
focal_class.modifier: private static final
focal_class.original_string: private static final Splitter NEWLINE_SPLITTER = Splitter
  		.on("\n")
  		.omitEmptyStrings()
  		.trimResults();
focal_class.type: Splitter
focal_class.var_name: NEWLINE_SPLITTER
focal_class.declarator: CENSOR_MESSAGE = "Hey, everyone, I just tried to say something very silly!"
focal_class.modifier: @VisibleForTesting
  	static final
focal_class.original_string: @VisibleForTesting
  	static final String CENSOR_MESSAGE = "Hey, everyone, I just tried to say something very silly!";
focal_class.type: String
focal_class.var_name: CENSOR_MESSAGE
focal_class.declarator: COLLAPSIBLE_MESSAGETYPES = ImmutableSet.of(
  		ENGINE,
  		GAMEMESSAGE,
  		ITEM_EXAMINE,
  		NPC_EXAMINE,
  		OBJECT_EXAMINE,
  		SPAM,
  		PUBLICCHAT,
  		MODCHAT
  	)
focal_class.modifier: private static final
focal_class.original_string: private static final Set<ChatMessageType> COLLAPSIBLE_MESSAGETYPES = ImmutableSet.of(
  		ENGINE,
  		GAMEMESSAGE,
  		ITEM_EXAMINE,
  		NPC_EXAMINE,
  		OBJECT_EXAMINE,
  		SPAM,
  		PUBLICCHAT,
  		MODCHAT
  	);
focal_class.type: Set<ChatMessageType>
focal_class.var_name: COLLAPSIBLE_MESSAGETYPES
focal_class.declarator: jagexPrintableCharMatcher = Text.JAGEX_PRINTABLE_CHAR_MATCHER
focal_class.modifier: private final
focal_class.original_string: private final CharMatcher jagexPrintableCharMatcher = Text.JAGEX_PRINTABLE_CHAR_MATCHER;
focal_class.type: CharMatcher
focal_class.var_name: jagexPrintableCharMatcher
focal_class.declarator: filteredPatterns = new ArrayList<>()
focal_class.modifier: private final
focal_class.original_string: private final List<Pattern> filteredPatterns = new ArrayList<>();
focal_class.type: List<Pattern>
focal_class.var_name: filteredPatterns
focal_class.declarator: filteredNamePatterns = new ArrayList<>()
focal_class.modifier: private final
focal_class.original_string: private final List<Pattern> filteredNamePatterns = new ArrayList<>();
focal_class.type: List<Pattern>
focal_class.var_name: filteredNamePatterns
focal_class.declarator: duplicateChatCache = new LinkedHashMap<String, Duplicate>()
  	{
  		private static final int MAX_ENTRIES = 100;
  
  		@Override
  		protected boolean removeEldestEntry(Map.Entry<String, Duplicate> eldest)
  		{
  			return size() > MAX_ENTRIES;
  		}
  	}
focal_class.modifier: private final
focal_class.original_string: private final LinkedHashMap<String, Duplicate> duplicateChatCache = new LinkedHashMap<String, Duplicate>()
  	{
  		private static final int MAX_ENTRIES = 100;
  
  		@Override
  		protected boolean removeEldestEntry(Map.Entry<String, Duplicate> eldest)
  		{
  			return size() > MAX_ENTRIES;
  		}
  	};
focal_class.type: LinkedHashMap<String, Duplicate>
focal_class.var_name: duplicateChatCache
focal_class.declarator: client
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private Client client;
focal_class.type: Client
focal_class.var_name: client
focal_class.declarator: config
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private ChatFilterConfig config;
focal_class.type: ChatFilterConfig
focal_class.var_name: config
focal_class.declarator: friendChatManager
focal_class.modifier: @Inject
  	private
focal_class.original_string: @Inject
  	private FriendChatManager friendChatManager;
focal_class.type: FriendChatManager
focal_class.var_name: friendChatManager
focal_class.file: runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java
focal_class.identifier: ChatFilterPlugin
focal_class.class_method_signature: ChatFilterPlugin.provideConfig(ConfigManager configManager)
focal_class.full_signature: @Provides ChatFilterConfig provideConfig(ConfigManager configManager)
focal_class.identifier: provideConfig
focal_class.modifiers: @Provides
focal_class.parameters: (ConfigManager configManager)
focal_class.return: ChatFilterConfig
focal_class.signature: ChatFilterConfig provideConfig(ConfigManager configManager)
focal_class.class_method_signature: ChatFilterPlugin.startUp()
focal_class.full_signature: @Override protected void startUp()
focal_class.identifier: startUp
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void startUp()
focal_class.class_method_signature: ChatFilterPlugin.shutDown()
focal_class.full_signature: @Override protected void shutDown()
focal_class.identifier: shutDown
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void shutDown()
focal_class.class_method_signature: ChatFilterPlugin.onScriptCallbackEvent(ScriptCallbackEvent event)
focal_class.full_signature: @Subscribe public void onScriptCallbackEvent(ScriptCallbackEvent event)
focal_class.identifier: onScriptCallbackEvent
focal_class.modifiers: @Subscribe public
focal_class.parameters: (ScriptCallbackEvent event)
focal_class.return: void
focal_class.signature: void onScriptCallbackEvent(ScriptCallbackEvent event)
focal_class.class_method_signature: ChatFilterPlugin.onOverheadTextChanged(OverheadTextChanged event)
focal_class.full_signature: @Subscribe public void onOverheadTextChanged(OverheadTextChanged event)
focal_class.identifier: onOverheadTextChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (OverheadTextChanged event)
focal_class.return: void
focal_class.signature: void onOverheadTextChanged(OverheadTextChanged event)
focal_class.class_method_signature: ChatFilterPlugin.onChatMessage(ChatMessage chatMessage)
focal_class.full_signature: @Subscribe(priority = -2) // run after ChatMessageManager public void onChatMessage(ChatMessage chatMessage)
focal_class.identifier: onChatMessage
focal_class.modifiers: @Subscribe(priority = -2) // run after ChatMessageManager public
focal_class.parameters: (ChatMessage chatMessage)
focal_class.return: void
focal_class.signature: void onChatMessage(ChatMessage chatMessage)
focal_class.class_method_signature: ChatFilterPlugin.shouldFilterPlayerMessage(String playerName)
focal_class.full_signature:  boolean shouldFilterPlayerMessage(String playerName)
focal_class.identifier: shouldFilterPlayerMessage
focal_class.parameters: (String playerName)
focal_class.return: boolean
focal_class.signature: boolean shouldFilterPlayerMessage(String playerName)
focal_class.class_method_signature: ChatFilterPlugin.censorMessage(final String username, final String message)
focal_class.full_signature:  String censorMessage(final String username, final String message)
focal_class.identifier: censorMessage
focal_class.parameters: (final String username, final String message)
focal_class.return: String
focal_class.signature: String censorMessage(final String username, final String message)
focal_class.class_method_signature: ChatFilterPlugin.updateFilteredPatterns()
focal_class.full_signature:  void updateFilteredPatterns()
focal_class.identifier: updateFilteredPatterns
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void updateFilteredPatterns()
focal_class.class_method_signature: ChatFilterPlugin.compilePattern(String pattern)
focal_class.full_signature: private static Pattern compilePattern(String pattern)
focal_class.identifier: compilePattern
focal_class.modifiers: private static
focal_class.parameters: (String pattern)
focal_class.return: Pattern
focal_class.signature: Pattern compilePattern(String pattern)
focal_class.class_method_signature: ChatFilterPlugin.onConfigChanged(ConfigChanged event)
focal_class.full_signature: @Subscribe public void onConfigChanged(ConfigChanged event)
focal_class.identifier: onConfigChanged
focal_class.modifiers: @Subscribe public
focal_class.parameters: (ConfigChanged event)
focal_class.return: void
focal_class.signature: void onConfigChanged(ConfigChanged event)
focal_class.class_method_signature: ChatFilterPlugin.shouldFilterByName(final String playerName)
focal_class.full_signature: @VisibleForTesting boolean shouldFilterByName(final String playerName)
focal_class.identifier: shouldFilterByName
focal_class.modifiers: @VisibleForTesting
focal_class.parameters: (final String playerName)
focal_class.return: boolean
focal_class.signature: boolean shouldFilterByName(final String playerName)
focal_class.superclass: extends Plugin
focal_method.body: boolean shouldFilterPlayerMessage(String playerName)
  	{
  		boolean isMessageFromSelf = playerName.equals(client.getLocalPlayer().getName());
  		return !isMessageFromSelf &&
  			(config.filterFriends() || !client.isFriended(playerName, false)) &&
  			(config.filterFriendsChat() || !friendChatManager.isMember(playerName));
  	}
focal_method.class_method_signature: ChatFilterPlugin.shouldFilterPlayerMessage(String playerName)
focal_method.full_signature:  boolean shouldFilterPlayerMessage(String playerName)
focal_method.identifier: shouldFilterPlayerMessage
focal_method.invocations: equals getName getLocalPlayer filterFriends isFriended filterFriendsChat isMember
focal_method.parameters: (String playerName)
focal_method.return: boolean
focal_method.signature: boolean shouldFilterPlayerMessage(String playerName)