Merge pull request #668 from falnyr/final-abstract-class

Added support for abstract/final models.
This commit is contained in:
Barry vd. Heuvel
2018-06-13 10:16:26 +02:00
committed by GitHub
+22 -3
View File
@@ -15,6 +15,7 @@ use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Filesystem\Filesystem; use Illuminate\Filesystem\Filesystem;
use ReflectionClass;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
@@ -185,7 +186,7 @@ class ModelsCommand extends Command
if (class_exists($name)) { if (class_exists($name)) {
try { try {
// handle abstract classes, interfaces, ... // handle abstract classes, interfaces, ...
$reflectionClass = new \ReflectionClass($name); $reflectionClass = new ReflectionClass($name);
if (!$reflectionClass->isSubclassOf('Illuminate\Database\Eloquent\Model')) { if (!$reflectionClass->isSubclassOf('Illuminate\Database\Eloquent\Model')) {
continue; continue;
@@ -597,10 +598,11 @@ class ModelsCommand extends Command
protected function createPhpDocs($class) protected function createPhpDocs($class)
{ {
$reflection = new \ReflectionClass($class); $reflection = new ReflectionClass($class);
$namespace = $reflection->getNamespaceName(); $namespace = $reflection->getNamespaceName();
$classname = $reflection->getShortName(); $classname = $reflection->getShortName();
$originalDoc = $reflection->getDocComment(); $originalDoc = $reflection->getDocComment();
$keyword = $this->getClassKeyword($reflection);
if ($this->reset) { if ($this->reset) {
$phpdoc = new DocBlock('', new Context($namespace)); $phpdoc = new DocBlock('', new Context($namespace));
@@ -688,7 +690,7 @@ class ModelsCommand extends Command
} }
} }
$output = "namespace {$namespace}{\n{$docComment}\n\tclass {$classname} extends \Eloquent {}\n}\n\n"; $output = "namespace {$namespace}{\n{$docComment}\n\t{$keyword}class {$classname} extends \Eloquent {}\n}\n\n";
return $output; return $output;
} }
@@ -791,4 +793,21 @@ class ModelsCommand extends Command
$this->setMethod('onlyTrashed', '\Illuminate\Database\Query\Builder|\\' . get_class($model), []); $this->setMethod('onlyTrashed', '\Illuminate\Database\Query\Builder|\\' . get_class($model), []);
} }
} }
/**
* @param ReflectionClass $reflection
* @return string
*/
private function getClassKeyword(ReflectionClass $reflection)
{
if ($reflection->isFinal()) {
$keyword = 'final ';
} elseif ($reflection->isAbstract()) {
$keyword = 'abstract ';
} else {
$keyword = '';
}
return $keyword;
}
} }