/** * Adds one (or multiple) properties found in a source code line to the classObject * * @param array $propertyMatches as returned from preg_match_all */ protected function addProperty(array $propertyMatches, $startLine = NULL) { $properties = array_combine($propertyMatches['name'], $propertyMatches['value']); $isFirstProperty = TRUE; foreach ($properties as $propertyName => $propertyValue) { try { // the property has to exist in the classReflection $reflectionProperty = $this->classReflection->getProperty($propertyName); if ($reflectionProperty) { $classProperty = new Tx_ExtensionBuilder_Domain_Model_Class_Property($propertyName); $classProperty->mapToReflectionProperty($reflectionProperty); // get the default value from regex matches if (!empty($propertyValue)) { if (strlen($classProperty->getVarType()) < 1) { // try to detect the varType from default value if (strpos($propertyValue, 'array') > -1) { $varType = 'array'; } else { eval('$varType = gettype(' . $propertyValue . ');'); } if (!empty($varType) && $varType != 'NULL') { $classProperty->setVarType($varType); } } $classProperty->setValue(trim($propertyValue)); $classProperty->setDefault(TRUE); } if ($isFirstProperty) { // only the first property will get the preceding block assigned $precedingBlock = $this->concatLinesFromArray($this->lines, $this->lastMatchedLineNumber, $startLine, FALSE); $classProperty->setPrecedingBlock($precedingBlock); $isFirstProperty = FALSE; } $this->classObject->addProperty($classProperty); $this->lastMatchedLineNumber = $this->lineCount; } else { throw new Tx_ExtensionBuilder_Exception_ParseError(' Property ' . $propertyName . ' does not exist. Parsed from line ' . $this->lineCount . 'in ' . $this->classReflection->getFileName()); } } catch (ReflectionException $e) { // ReflectionClass throws an exception if a property was not found t3lib_div::devlog('Exception in line : ' . $e->getMessage() . 'Property ' . $propertyName . ' found in line ' . $this->lineCount, 'extension_builder'); } } }