Hal\Pattern\Resolver\Micro\Structure\StructureResolver::resolve PHP Method

resolve() public method

extends nothing has only getter and setters
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);
        }
    }

Usage Example

 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()));
 }
StructureResolver