/** * @return array */ public function save() { $map = array('class' => 'classes', 'trait' => 'traits', 'interface' => 'interfaces'); foreach ($map as $col) { $path = $this->xmlDir . '/' . $col; if (!file_exists($path)) { mkdir($path, 0755, TRUE); } } $indexDom = $this->index->export(); $reportUnits = $this->saveUnits; foreach($this->saveUnits as $unit) { /** @var AbstractUnitObject $unit */ $indexNode = $this->index->findUnitNodeByName($unit->getNamespace(), $unit->getLocalName()); if (!$indexNode) { throw new ProjectException( sprintf( "Internal Error: Unit '%s' not found in index (ns: %s, n: %s).", $unit->getName(), $unit->getNamespace(), $unit->getLocalName() ), ProjectException::UnitNotFoundInIndex ); } $name = str_replace('\\', '_', $unit->getName()); $dom = $unit->export(); $dom->formatOutput = TRUE; $dom->preserveWhiteSpace = FALSE; $fname = $map[$dom->documentElement->localName] . '/' . $name . '.xml'; if ($indexNode->hasAttribute('xml')) { $reportUnits = array_merge($reportUnits, $this->findAffectedUnits($fname)); } else { $indexNode->setAttribute('xml', $fname); } $dom->save($this->xmlDir . '/' . $fname); } $indexDom->formatOutput = TRUE; $indexDom->preserveWhiteSpace = FALSE; $indexDom->save($this->xmlDir . '/index.xml'); $sourceDom = $this->source->export(); $sourceDom->formatOutput = TRUE; $sourceDom->preserveWhiteSpace = FALSE; $sourceDom->save($this->xmlDir . '/source.xml'); $this->saveUnits = array(); return $reportUnits; }
private function saveSources() { foreach ($this->files as $file) { $tokenDom = $file->getTokens(); $tokenDom->formatOutput = TRUE; $tokenDom->preserveWhiteSpace = FALSE; $relName = 'tokens/' . $file->getRelative($this->srcDir, FALSE) . '.xml'; $fname = $this->xmlDir . '/' . $relName; $dir = dirname($fname); if (!file_exists($dir)) { mkdir($dir, 0777, true); } try { $tokenDom->save($fname); } catch (fDOMException $e) { throw new ProjectException(sprintf("Internal Error: Token xml file '%s' could not be saved.", $fname), ProjectException::UnitCouldNotBeSaved, $e); } $this->source->setTokenFileReference($file, $relName); } $sourceDom = $this->source->export(); $sourceDom->formatOutput = TRUE; $sourceDom->preserveWhiteSpace = FALSE; $sourceDom->save($this->xmlDir . '/source.xml'); }