Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 5
0
 /**
  * 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);
         }
     }
 }
Ejemplo n.º 6
0
 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]]);
 }
Ejemplo n.º 8
0
 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);
 }
Ejemplo n.º 9
0
 /**
  * @return string
  */
 public function generate()
 {
     $code = parent::generate();
     $code = str_replace('class ' . $this->getName(), 'trait ' . $this->getName(), $code);
     return $code;
 }
Ejemplo n.º 10
0
    $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"]]);
 }
Ejemplo n.º 12
0
#!/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);
}