Completed
Branch master (06cb84)
by Tomáš
06:00
created

SniffFinder::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 2
crap 1
1
<?php
2
3
/*
4
 * This file is part of Symplify
5
 * Copyright (c) 2016 Tomas Votruba (http://tomasvotruba.cz).
6
 */
7
8
namespace Symplify\PHP7_CodeSniffer\Sniff\Finder;
9
10
use Symplify\PHP7_CodeSniffer\Composer\VendorDirProvider;
11
12
final class SniffFinder
13
{
14
    /**
15
     * @var string[]
16
     */
17
    private $sniffClassesPerDirectory = [];
18
19
    /**
20
     * @var SniffClassRobotLoaderFactory
21
     */
22
    private $sniffClassRobotLoaderFactory;
23
24
    /**
25
     * @var SniffClassFilter
26
     */
27
    private $sniffClassFilter;
28
29 4
    public function __construct(
30
        SniffClassRobotLoaderFactory $sniffClassRobotLoaderFactory,
31
        SniffClassFilter $sniffClassFilter
32
    ) {
33 4
        $this->sniffClassRobotLoaderFactory = $sniffClassRobotLoaderFactory;
34 4
        $this->sniffClassFilter = $sniffClassFilter;
35 4
    }
36
37 2
    public function findAllSniffClasses() : array
38
    {
39 2
        return $this->findAllSniffClassesInDirectory(VendorDirProvider::provide());
40
    }
41
42 3
    public function findAllSniffClassesInDirectory(string $directory) : array
43
    {
44 3
        if (isset($this->sniffClassesPerDirectory[$directory])) {
45 1
            return $this->sniffClassesPerDirectory[$directory];
46
        }
47
48 3
        $robotLoader = $this->sniffClassRobotLoaderFactory->createForDirectory($directory);
49
50 3
        $sniffClasses = $this->sniffClassFilter->filterOutAbstractAndNonPhpSniffClasses(
51 3
            array_keys($robotLoader->getIndexedClasses())
52
        );
53
54 3
        return $this->sniffClassesPerDirectory[$directory] = $sniffClasses;
55
    }
56
}
57