public function processFiles($sources, $excludes = array()) {
		// Start reporting the results
		$this->_reporter->start();

		// Define the custom error handler
		set_error_handler(array(
			$this,
			'customErrorHandler'
		), E_ALL);
		set_exception_handler(array(
			$this,
			'customErrorHandler'
		));

		$this->_excludeList = $excludes;

		$files = array();

		// Iterate over the sources to list the files to process
		foreach ($sources as $src) {
			$roots = explode(",", $src);
			foreach ($roots as $root) {
				$root = trim($root);
				$files = array_merge($files, $this->_getAllPhpFiles($root, $excludes));
			}
		}

		// Start counting the lines
		if ($this->_lineCountReporter !== null) {
			$this->_lineCountReporter->start();
		}

		// Process each file
		foreach ($files as $file) {
			if (is_array($file)) {
				continue;
			}

			if ($this->_displayProgress) {
				echo "Processing File: " . $file . "<br/>" . PHP_EOL;
			}

			$this->_reporter->currentlyProcessing($file);

			try {
				$this->_processFile($file);
			} catch (Exception $e) {
				$msg = $this->_getMessage('PHP_EXPCEPTION', $e->getMessage());
				$this->_writeError('phpException', $msg);
			}
		}

		// Stop reporting the results
		$this->_reporter->stop();

		// Write the count of lines for the complete project
		if ($this->_lineCountReporter !== null) {
			$this->_lineCountReporter->writeTotalCount(count($files), $this->_ncssTotalClasses, $this->_ncssTotalInterfaces, $this->_ncssTotalFunctions, $this->_ncssTotalLinesOfCode, $this->_ncssTotalPhpdoc, $this->_ncssTotalLinesPhpdoc, $this->_ncssTotalSingleComment, $this->_ncssTotalMultiComment);
		}

		// Stop counting the lines
		if ($this->_lineCountReporter !== null) {
			$this->_lineCountReporter->stop();
		}
	}