/**
  * Adds new policies to the provider.
  * @param array $mappedPolicies The mapped policies
  * @param Line $policiesCodeLine The found code line.
  * @param string $rawMatch
  * @return PolicyWriter
  */
 protected function addNewPoliciesToProvider(array $mappedPolicies, Line $policiesCodeLine, $rawMatch)
 {
     $file = $this->getAuthProviderFile();
     $newPolicyLines = '';
     foreach ($mappedPolicies as $model => $policy) {
         $newPolicyLines .= $model . ' => ' . $policy . ",\n";
     }
     // foreach
     $policiesCodeLine->setContent(str_replace($rawMatch, "\n" . trim($newPolicyLines, ",\n") . "\n", $policiesCodeLine));
     $file->save();
     return $this;
 }
 /**
  * Parses a single line out of the given tokens. Removes the found token for the created line from the tokens array.
  * @param array $tokens
  * @return Line|null
  */
 protected function parseLine(array &$tokens)
 {
     $content = '';
     $return = null;
     $tokenIdent = null;
     while ($token = array_shift($tokens)) {
         $isSimpleString = !is_array($token);
         if ($isSimpleString && $token === '}') {
             break;
         }
         if ($tokenIdent === null) {
             // Every line starts with a token. As long as there is no token, whitespace, etc. skip it!
             if ($isSimpleString || in_array($token[0], [T_WHITESPACE])) {
                 continue;
             }
             // if
             $tokenIdent = $token[0];
         }
         // if
         if (!$isSimpleString) {
             $token = $token[1];
         }
         // if
         // Ignore line ends.
         if (!in_array($token, [';', '}', '{'])) {
             $content .= $token;
         }
         // if
         // Change or break depth
         $isComment = in_array($tokenIdent, array(T_DOC_COMMENT, T_COMMENT), true);
         if (in_array($token, [';', '{']) || $isComment) {
             $return = new Line($content, $tokenIdent);
             // Dive into depth.
             if ($token === '{') {
                 $return->setChildLines($this->parseLines($tokens));
             }
             // if
             break;
         }
         // if
     }
     // while
     return $return;
 }
 /**
  * Prepends a line.
  * @param Line $line
  * @return Line The line itself.
  */
 public function prependLine(Line $line)
 {
     array_unshift($this->ChildLines, $line->setNestingLevel($this->getNestingLevel() + 1)->setParent($this));
     return $line;
 }