public static function createCodeInfo(string $fileName, int $line = null, int $startLineNo = null, int $endLineNo = null, string $message = null) { if ($line == 0) { $line = null; if ($startLineNo === null) { $startLineNo = 1; } if ($endLineNo === null) { $endLineNo = 4; } } $codeInfo = new CodeInfo($fileName, $line, $message); if ($line !== null) { if ($startLineNo === null) { $startLineNo = $line <= 2 ? 1 : $line - 2; } if ($endLineNo === null) { $endLineNo = $line + 2; } } if ($startLineNo === null || $endLineNo === null) { return $codeInfo; } $codeInfo->setStartLineNo($startLineNo); $codeInfo->setEndLineNo($endLineNo); $fileLines = null; try { $fileLines = IoUtils::file($fileName); } catch (IoException $e) { return $codeInfo; } $numLines = sizeof($fileLines); $startIndex = $startLineNo - 1; $endIndex = $endLineNo - 1; $snippetLines = array(); for ($i = $startIndex; $i < $numLines && $i <= $endIndex; $i++) { $snippetLines[$i + 1] = $fileLines[$i]; } $codeInfo->setSnippetLines($snippetLines); return $codeInfo; }