public resolve ( Hal\Pattern\Resolver\ResolvedClass $resolved ) | ||
$resolved | Hal\Pattern\Resolver\ResolvedClass |
public function resolve(ResolvedClass $resolved)
{
$class = $resolved->getClass();
$pattern = new Structure($class->getFullname());
// extends one class
if ($class->getParent()) {
return;
}
// we don't look private methods
$collection1 = (new Collection($class->getMethods()))->where('method => method.getVisibility() == "public"');
// at least 2 public methods
if (sizeof($collection1) < 2) {
return;
}
// list getters and setters
$collection2 = (new Collection($class->getMethods()))->where('method => (method.isGetter() or method.isSetter()) and method.getVisibility() == "public"');
if (sizeof($collection1) === sizeof($collection2)) {
$resolved->pushPattern($pattern);
}
}
public function testStructureIsDetected() { $filename = __DIR__ . '/../../../../resources/patterns/structure.php'; $extractor = new Extractor(new Tokenizer()); $result = $extractor->extract($filename); $classes = $result->getClasses(); $resolver = new StructureResolver($classes); $resolved = new ResolvedClass($classes[0]); $resolver->resolve($resolved); $this->assertEquals(1, sizeof($resolved->getPatterns())); $resolved = new ResolvedClass($classes[1]); $resolver->resolve($resolved); $this->assertEquals(0, sizeof($resolved->getPatterns())); }