public function apply($testable, array $config = array()) {
		$message = 'Protected method {:name} must start with an underscore';
		$tokens = $testable->tokens();
		$filtered = $testable->findAll(array(T_PROTECTED));

		foreach ($filtered as $tokenId) {
			$token = $tokens[$tokenId];
			$parent = $testable->findNext(array(T_FUNCTION, T_VARIABLE), $tokenId);
			$parentLabel = Parser::label($parent, $tokens);
			if (substr($parentLabel, 0, 1) !== '_') {
				$classTokenId = $testable->findNext(array(T_STRING), $token['parent']);
				$classname = $tokens[$classTokenId]['content'];
				$params = array(
					'message' => String::insert($message, array(
						'name' => $parentLabel,
					)),
					'line' => $token['line']
				);
				if ($this->_strictMode($classname)) {
					$this->addViolation($params);
				} else {
					$this->addWarning($params);
				}
			}
		}
	}