private function generateEvents() { $class = new ClassGenerator($this->project->namespace, "EventHandler"); $class->addImport("pocketmine\\event\\Listener"); $class->addInterface("Listener"); $constructor = new GeneratedFunctionContainer(); $constructor->name = "__construct"; $constructor->params = ['MainClass $main']; $constructor->code = '$this->main = $main;'; $class->addFunction($constructor); $class->addField(\T_PRIVATE, "main"); $i = 0; foreach ($this->project->events as $event) { $fx = new GeneratedFunctionContainer(); $fx->name = "h_{$i}"; $i++; $class->addImport($event->eventClassName); $fx->params = [$event->eventName . ' $event']; foreach ($event->eventHandler as $stmt) { $fx->code .= $stmt->getPhpCode(0); $fx->code .= ClassGenerator::STANDARD_EOL; } $class->addFunction($fx); } }
private function generateMainClass() { $class = new ClassGenerator($this->project->namespace, "MainClass"); $class->addImport("pocketmine\\plugin\\PluginBase"); $class->setSuperClass("PluginBase"); $onEnable = new GeneratedFunctionContainer(); $onEnable->name = "onEnable"; foreach ($this->project->cmds as $cmd) { $pluginName = strtolower(str_replace([":", " "], "-", $this->project->getDesc()->getName())); $onEnable->code .= '$this->getServer()->getCommandMap()->register(' . var_export($pluginName, true) . ', new cmds\\' . $cmd->getClassName() . '($this)); // this line registers the command /' . str_replace(["\r", "\n"], "<br>", $cmd->name); } $class->addFunction($onEnable); $this->addFile("src/" . $this->project->namespace . "/MainClass.php", $class); }
protected function getTemplateData() { $templateData = parent::getTemplateData(); $formTypeNamespaceName = $this->getNamespace(); $fieldsInfo = $this->getFieldsInfo(); foreach ($fieldsInfo as $key => $field) { $fieldsInfo[$key]['formType'] = $this->types[$field['type']]; } return array_merge($templateData, ["formTypeNamespace" => $formTypeNamespaceName, "fieldsInfo" => $fieldsInfo]); }
public function toString() { $out = ClassGenerator::visibilityToString($this->visibility); $out .= " function {$this->name}("; $out .= implode(", ", $this->params); $out .= "){"; $out .= ClassGenerator::STANDARD_EOL; $out .= "\t\t"; $out .= str_replace(ClassGenerator::STANDARD_EOL, ClassGenerator::STANDARD_EOL . "\t\t", $this->code); $out .= ClassGenerator::STANDARD_EOL . "\t}"; return $out; }
/** * Creates a proxied class and writes it to a file * @param string $className Original class name * @param string $destination File path * @return void */ protected function createProxyFile($className, $destination) { $classStr = $this->generator->build($className, $this->getProxiedNamespace(), $this->getProxiedClassName($className)); $tempFile = tempnam(sys_get_temp_dir(), 'accessinterceptor'); if ($tempFile && file_put_contents($tempFile, $classStr)) { if (!rename($tempFile, $destination)) { trigger_error("Could not move {$tempFile} to {$destination}", E_USER_WARNING); //If it cannot be renamed we won't be able to autoload it, so we make it available now. eval($classStr); } } }
public function generateFile() { $file = new ClassGenerator($this->project->namespace, $this->getClassName()); $file->addImport($this->project->namespace . "\\resources\\GeneratedPluginCommandAbstract"); $file->setSuperClass("GeneratedPluginCommandAbstract"); $__construct = new GeneratedFunctionContainer(); $__construct->name = "__construct"; $file->addImport($this->project->namespace . "\\MainClass"); $__construct->params = ['MainClass $main']; $__construct->code = "parent::__construct({$this->ex($this->name)}, {$this->ex($this->desc)}, {$this->ex($this->usage)}, {$this->ex($this->aliases)}, {$this->ex($this->permission)}, \$main);"; $file->addFunction($__construct); $e = new GeneratedFunctionContainer(); $e->name = "e"; $e->params = ['CommandSender $sender', '$args']; $e->code = $this->executor->exportExecuteFunction(); $file->addFunction($e); return $file; }
protected function getTemplateData() { $fieldsInfo = $this->getExtendedFieldsInfo($this->getFieldsInfo()); $templateData = parent::getTemplateData(); return array_merge($templateData, ["field" => $this->fieldName, "fieldParam" => $fieldsInfo[$this->fieldName]]); }
public function __construct($modelsFolder, $di, $namespaceName = 'Model') { $filter = new \Zend_Filter_Word_UnderscoreToCamelCase(); $phalconGenerator = new \Models\Phalcon\Generator($di); $tables = $phalconGenerator->getTablesData(); if (!is_dir($modelsFolder . "\\" . 'Generated')) { mkdir($modelsFolder . "\\" . 'Generated', 0777, true); } $namespace = $namespaceName; $namespaceGenerated = $namespace . "\\Generated"; foreach ($tables as $table) { $cg = new ClassGenerator($table['model'], 'Common', $namespaceGenerated); $fieldList = array(); foreach ($table['columns'] as $field) { $cg->addProperty($field, 'protected'); $fieldList[] = lcfirst($filter->filter($field)); } $cg->addProperty('fieldList', 'protected', $fieldList); $content = " return \"{$table['name']}\";"; $cg->addMethod('getSource', 'public', array(), $content); $content = ""; if (isset($table['ref_one_to_many'])) { foreach ($table['ref_one_to_many'] as $ref) { $content .= " \$this->belongsTo(\"{$ref['column']}\", '{$namespaceName}\\{$ref['model']}', \"{$ref['ref_column']}\", array('alias' => '{$ref['model']}'));\n"; $content2 = " return \$this->getRelated('{$ref['model']}', \$parameters);"; $cg->addMethod('get' . $ref['model'], 'public', array(array('name' => 'parameters', 'default' => 'null')), $content2, "@return \\{$namespaceName}\\{$ref['model']}"); } } if (isset($table['ref_many_to_one'])) { foreach ($table['ref_many_to_one'] as $ref) { $content .= " \$this->hasMany(\"{$ref['column']}\", '{$namespaceName}\\{$ref['model']}', \"{$ref['ref_column']}\", array('alias' => '{$ref['model']}'));\n"; $content2 = " return \$this->getRelated('{$ref['model']}', \$parameters);"; $cg->addMethod('get' . self::getNameMany($ref['model']), 'public', array(array('name' => 'parameters', 'default' => 'null')), $content2, "@return \\{$namespaceName}\\{$ref['model']}[] "); $varName = lcfirst($ref['model']); $content3 = " \$this->{$ref['model']} = array(\${$varName});"; $cg->addMethod('add' . $ref['model'], 'public', array(array('name' => $varName, 'type' => "\\{$namespaceName}\\{$ref['model']}")), $content3, "@return void"); } } if (isset($table['ref_one_to_one'])) { foreach ($table['ref_one_to_one'] as $ref) { $content .= " \$this->hasOne(\"{$ref['column']}\", '{$namespaceName}\\{$ref['model']}', \"{$ref['ref_column']}\", array('alias' => '{$ref['model']}'));\n"; $content2 = " return \$this->getRelated('{$ref['model']}', \$parameters);"; $cg->addMethod('get' . $ref['model'], 'public', array(array('name' => 'parameters', 'default' => 'null')), $content2, "@return \\{$namespaceName}\\{$ref['model']}"); } } if ($content) { $cg->addMethod('initialize', 'public', array(), $content); } $content = " return parent::findFirst(\$parameters);"; $cg->addMethod('findFirst', 'public static', array(array('name' => 'parameters', 'default' => 'null')), $content, "@return \\{$namespaceName}\\{$table['model']}"); $content = " return parent::find(\$parameters);"; $cg->addMethod('find', 'public static', array(array('name' => 'parameters', 'default' => 'null')), $content, "@return \\{$namespaceName}\\{$table['model']}[]"); $content = " return new \\{$namespaceName}\\{$table['model']}();"; $cg->addMethod('get', 'public static', array(), $content, "@return \\{$namespaceName}\\{$table['model']}"); $cg->generateGettersAndSetters(); file_put_contents($modelsFolder . "\\Generated\\" . $table['model'] . '.php', $cg); if (!is_file($modelsFolder . "\\" . $table['model'] . '.php')) { $cg = new ClassGenerator($table['model'], "\\{$namespaceGenerated}\\{$table['model']}", 'Model'); file_put_contents($modelsFolder . "\\" . $table['model'] . '.php', $cg); } } $cg = new ClassGenerator("Common", "\\Phalcon\\Mvc\\Model", "{$namespaceGenerated}"); $content = " \$query = new \\Phalcon\\Mvc\\Model\\Query(\$phql);\n"; $content .= " \$query->setDI(\$this->getDI());\n"; $content .= " return \$query;\n"; $cg->addMethod('getQuery', 'public', array(array('name' => 'phql', 'default' => '')), $content, "@return \\Phalcon\\Mvc\\Model\\Query"); $cg->addProperty('fieldList', 'protected', 'array()'); $content = " \$filter = new \\Zend_Filter_Word_UnderscoreToCamelCase();\n"; $content .= " foreach (\$data as \$k => \$v) {\n"; $content .= " if (in_array(\$k, \$this->fieldList)) {\n"; $content .= " \$fn = \"set\" . ucfirst(\$filter->filter(\$k));\n"; $content .= " \$this->\$fn(\$v);\n"; $content .= " }\n"; $content .= " }\n"; $cg->addMethod('populate', 'public', array(array('name' => 'data', 'default' => 'array()')), $content, "@return null"); file_put_contents($modelsFolder . "\\Generated\\Common.php", $cg); }
/** * @return string */ public function generate() { $code = parent::generate(); $code = str_replace('class ' . $this->getName(), 'trait ' . $this->getName(), $code); return $code; }
$test_namespace = $namespace . '\\test'; // the use string for the test cases $use = '\\' . $namespace . '\\' . $className; $conf_target_dir = $parser->getTargetDir(); $target_dir = $base_dir . '/' . $conf_target_dir . '/' . $className . '/'; $target_test_dir = $target_dir . '/test/'; checkDirExists($target_dir); checkDirExists($target_test_dir); $operations = $parser->getOperations(); $queries = $parser->getQueries(); $states = $parser->getStates(); $generator = new InterfaceGenerator(); $generator->generate($namespace, $operations, $interfaceName, $target_dir); $generator = new TransitionExceptionGenerator(); $generator->generate($namespace, $target_dir); $generator = new AbstractStateClassGenerator(); $generator->generate($namespace, $operations, $abstractClassName, $interfaceName, $target_dir); $generator = new ClassGenerator(); $generator->generate($namespace, $operations, $states, $className, $interfaceName, $target_dir); $codeGenerator = new StateClassGenerator(); $testGenerator = new TestGenerator(); // namespace of the class to be tested foreach ($states as $state => $data) { echo "Generating {$className} -> {$state}\n"; $codeGenerator->generate($namespace, $data, $state, $abstractClassName, $target_dir); $testGenerator->generate($use, $namespace, $test_namespace, $data, $operations, $queries, $states, $state, $className, $abstractClassName, $target_test_dir); } echo "===========================================\n"; } echo "Done\n"; echo "===========================================\n";
protected function getTemplateData() { $templateData = parent::getTemplateData(); return array_merge($templateData, ["lcObjectName" => strtolower($this->getEntityShortName()), "listConfigNamespaceName" => "@to do", "associated" => $templateData["associations"]]); }
#!/usr/bin/env php <?php if (!file_exists(__DIR__ . '/../vendor/autoload.php')) { die('You need to set up the project dependencies using the following commands:' . PHP_EOL . 'wget https://getcomposer.org/composer.phar' . PHP_EOL . 'php composer.phar install' . PHP_EOL); } require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/autoload.php'; $parser = new SpecificationParser(new SpecificationFilename()); $className = $parser->getClassName(); $abstractClassName = $parser->getAbstractClassName(); $interfaceName = $parser->getInterfaceClassName(); $operations = $parser->getOperations(); $queries = $parser->getQueries(); $states = $parser->getStates(); $generator = new InterfaceGenerator(); $generator->generate($operations, $interfaceName); $generator = new AbstractStateClassGenerator(); $generator->generate($operations, $abstractClassName, $interfaceName); $generator = new ClassGenerator(); $generator->generate($operations, $states, $className, $interfaceName); $codeGenerator = new StateClassGenerator(); $testGenerator = new TestGenerator(); foreach ($states as $state => $data) { $codeGenerator->generate($data, $state, $abstractClassName); $testGenerator->generate($data, $operations, $queries, $states, $state, $className, $abstractClassName); }