/** * @return MetaClassProperty **/ private function makeProperty($name, $type, MetaClass $class, $size) { Assert::isFalse(strpos($name, '_'), 'naming convention violation spotted'); if (!$name || !$type) { throw new WrongArgumentException('strange name or type given: "' . $name . '" - "' . $type . '"'); } $typeClass = '\\Hesper\\Meta\\Type\\' . $type . 'Type'; if (!class_exists($typeClass)) { $typeClass = '\\Hesper\\Meta\\Type\\ObjectType'; } $property = new MetaClassProperty($name, new $typeClass($type), $class); if ($size) { $property->setSize($size); } else { Assert::isTrue(!$property->getType() instanceof FixedLengthStringType && !$property->getType() instanceof NumericType && !$property->getType() instanceof HttpUrlType, 'size is required for "' . $property->getName() . '"'); } return $property; }