1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-12-01 11:12:41 +01:00

Memoize paths

Summary: Ref T7892. Memoize paths returned from `ARcanistLinter::getPaths()` to improve runtime performance.

Test Plan: Wiped ~0.5 seconds off the total time to lint rARC.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin, epriestley

Maniphest Tasks: T7892

Differential Revision: https://secure.phabricator.com/D12520
This commit is contained in:
Joshua Spence 2015-04-27 23:20:31 +10:00
parent 805ae12408
commit 46ce8a5a35

View file

@ -16,8 +16,9 @@ abstract class ArcanistLinter {
const GRANULARITY_GLOBAL = 4; const GRANULARITY_GLOBAL = 4;
private $id; private $id;
protected $paths = array(); protected $paths = array();
protected $data = array(); private $filteredPaths = null;
protected $data = array();
protected $engine; protected $engine;
protected $activePath; protected $activePath;
protected $messages = array(); protected $messages = array();
@ -274,19 +275,24 @@ abstract class ArcanistLinter {
final public function addPath($path) { final public function addPath($path) {
$this->paths[$path] = $path; $this->paths[$path] = $path;
$this->filteredPaths = null;
return $this; return $this;
} }
final public function setPaths(array $paths) { final public function setPaths(array $paths) {
$this->paths = $paths; $this->paths = $paths;
$this->filteredPaths = null;
return $this; return $this;
} }
/** /**
* Filter out paths which this linter doesn't act on (for example, because * Filter out paths which this linter doesn't act on (for example, because
* they are binaries and the linter doesn't apply to binaries). * they are binaries and the linter doesn't apply to binaries).
*
* @param list<string>
* @return list<string>
*/ */
final private function filterPaths($paths) { final private function filterPaths(array $paths) {
$engine = $this->getEngine(); $engine = $this->getEngine();
$keep = array(); $keep = array();
@ -314,7 +320,11 @@ abstract class ArcanistLinter {
} }
final public function getPaths() { final public function getPaths() {
return $this->filterPaths(array_values($this->paths)); if ($this->filteredPaths === null) {
$this->filteredPaths = $this->filterPaths(array_values($this->paths));
}
return $this->filteredPaths;
} }
final public function addData($path, $data) { final public function addData($path, $data) {