mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 18:48:51 +02:00
complete Evaluators list + autoload
This commit is contained in:
@@ -469,29 +469,42 @@ return array(
|
||||
'Combodo\\iTop\\Form\\Validator\\NotEmptyExtKeyValidator' => $baseDir . '/sources/Form/Validator/NotEmptyExtKeyValidator.php',
|
||||
'Combodo\\iTop\\Form\\Validator\\SelectObjectValidator' => $baseDir . '/sources/Form/Validator/SelectObjectValidator.php',
|
||||
'Combodo\\iTop\\Kernel' => $baseDir . '/sources/Kernel.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\AbstractExprEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/AbstractExprEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ArrayDimFetchEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/ArrayDimFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ArrayEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/ArrayEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BinaryOpEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BinaryOpEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseAndEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BitwiseAndEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseNotEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BitwiseNotEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseOrEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BitwiseOrEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseXorEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BitwiseXorEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BooleanAndEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BooleanAndEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BooleanNotEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BooleanNotEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BooleanOrEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/BooleanOrEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\CastEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/CastEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ClassConstFetchEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/ClassConstFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\CoalesceEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/CoalesceEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ConcatEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/ConcatEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ConstFetchEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/ConstFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\EqualEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/EqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\FuncCallEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/FuncCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\GreaterEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/GreaterEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\GreaterOrEqualEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/GreaterOrEqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\IssetEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/IssetEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\MethodCallEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/MethodCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ModEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/ModEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\MulEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/MulEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\NotEqualEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/NotEqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\NullsafeMethodCallEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/NullsafeMethodCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\NullsafePropertyFetchEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/NullsafePropertyFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\PhpExpressionEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/PhpExpressionEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\PropertyFetchEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/PropertyFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\SmallerEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/SmallerEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\SmallerOrEqualEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/SmallerOrEqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\StaticCallEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/StaticCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\StaticPropertyFetchEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/StaticPropertyFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\TernaryEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/TernaryEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\UnaryMinusEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/UnaryMinusEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\UnaryPlusEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/UnaryPlusEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\VariableEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/VariableEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\iExprEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/iExprEvaluator.php',
|
||||
'Combodo\\iTop\\Renderer\\BlockRenderer' => $baseDir . '/sources/Renderer/BlockRenderer.php',
|
||||
|
||||
@@ -847,29 +847,42 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
|
||||
'Combodo\\iTop\\Form\\Validator\\NotEmptyExtKeyValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/NotEmptyExtKeyValidator.php',
|
||||
'Combodo\\iTop\\Form\\Validator\\SelectObjectValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/SelectObjectValidator.php',
|
||||
'Combodo\\iTop\\Kernel' => __DIR__ . '/../..' . '/sources/Kernel.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\AbstractExprEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/AbstractExprEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ArrayDimFetchEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/ArrayDimFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ArrayEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/ArrayEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BinaryOpEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BinaryOpEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseAndEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BitwiseAndEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseNotEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BitwiseNotEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseOrEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BitwiseOrEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BitwiseXorEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BitwiseXorEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BooleanAndEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BooleanAndEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BooleanNotEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BooleanNotEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\BooleanOrEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/BooleanOrEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\CastEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/CastEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ClassConstFetchEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/ClassConstFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\CoalesceEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/CoalesceEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ConcatEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/ConcatEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ConstFetchEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/ConstFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\EqualEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/EqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\FuncCallEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/FuncCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\GreaterEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/GreaterEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\GreaterOrEqualEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/GreaterOrEqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\IssetEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/IssetEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\MethodCallEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/MethodCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\ModEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/ModEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\MulEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/MulEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\NotEqualEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/NotEqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\NullsafeMethodCallEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/NullsafeMethodCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\NullsafePropertyFetchEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/NullsafePropertyFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\PhpExpressionEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/PhpExpressionEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\PropertyFetchEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/PropertyFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\SmallerEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/SmallerEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\SmallerOrEqualEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/SmallerOrEqualEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\StaticCallEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/StaticCallEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\StaticPropertyFetchEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/StaticPropertyFetchEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\TernaryEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/TernaryEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\UnaryMinusEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/UnaryMinusEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\UnaryPlusEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/UnaryPlusEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\VariableEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/VariableEvaluator.php',
|
||||
'Combodo\\iTop\\PhpParser\\Evaluation\\iExprEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/iExprEvaluator.php',
|
||||
'Combodo\\iTop\\Renderer\\BlockRenderer' => __DIR__ . '/../..' . '/sources/Renderer/BlockRenderer.php',
|
||||
|
||||
9
sources/PhpParser/Evaluation/AbstractExprEvaluator.php
Normal file
9
sources/PhpParser/Evaluation/AbstractExprEvaluator.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
abstract class AbstractExprEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionTypes(): ?array {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||
|
||||
class ArrayDimFetchEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class ArrayDimFetchEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return ArrayDimFetch::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use ModuleFileReaderException;
|
||||
use PhpParser\Node\Expr;
|
||||
@@ -9,8 +9,8 @@ use PhpParser\Node\Expr\ConstFetch;
|
||||
use PhpParser\Node\Scalar\Int_;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
|
||||
class ArrayEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class ArrayEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Array_::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\BinaryOp;
|
||||
|
||||
abstract class BinaryOpEvaluator implements iExprEvaluator {
|
||||
abstract class BinaryOpEvaluator extends AbstractExprEvaluator {
|
||||
abstract function EvaluateBinaryOperation(mixed $left, mixed $right) : mixed;
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\BitwiseAnd;
|
||||
|
||||
class BitwiseAndEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BitwiseAnd::class;
|
||||
}
|
||||
|
||||
|
||||
18
sources/PhpParser/Evaluation/BitwiseNotEvaluator.php
Normal file
18
sources/PhpParser/Evaluation/BitwiseNotEvaluator.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\BitwiseNot;
|
||||
|
||||
class BitwiseNotEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BitwiseNot::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var BitwiseNot $oExpr */
|
||||
|
||||
return ~ PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->expr);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\BitwiseOr;
|
||||
|
||||
class BitwiseOrEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BitwiseOr::class;
|
||||
}
|
||||
|
||||
|
||||
16
sources/PhpParser/Evaluation/BitwiseXorEvaluator.php
Normal file
16
sources/PhpParser/Evaluation/BitwiseXorEvaluator.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\BitwiseXor;
|
||||
|
||||
class BitwiseXorEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BitwiseXor::class;
|
||||
}
|
||||
|
||||
function EvaluateBinaryOperation(mixed $left, mixed $right) : mixed
|
||||
{
|
||||
return $left ^ $right;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\BooleanAnd;
|
||||
|
||||
class BooleanAndEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BooleanAnd::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\BooleanNot;
|
||||
|
||||
class BooleanNotEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class BooleanNotEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BooleanNot::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\BooleanOr;
|
||||
|
||||
class BooleanOrEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return BooleanOr::class;
|
||||
}
|
||||
|
||||
|
||||
59
sources/PhpParser/Evaluation/CastEvaluator.php
Normal file
59
sources/PhpParser/Evaluation/CastEvaluator.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\Cast;
|
||||
use PhpParser\Node\Expr\StaticPropertyFetch;
|
||||
|
||||
class CastEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetHandledExpressionTypes(): ?array {
|
||||
return [
|
||||
Cast\Array_::class,
|
||||
Cast\Bool_::class,
|
||||
Cast\Double::class,
|
||||
Cast\Int_::class,
|
||||
Cast\Object_::class,
|
||||
Cast\String_::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
$oSubExpr = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->expr);
|
||||
switch (get_class($oExpr)){
|
||||
case Cast\Array_::class:
|
||||
return (array) $oSubExpr;
|
||||
|
||||
case Cast\Bool_::class:
|
||||
return (bool) $oSubExpr;
|
||||
|
||||
case Cast\Double::class:
|
||||
/** @var Cast\Double $oExpr */
|
||||
switch ($oExpr->getAttribute("kind")){
|
||||
case Cast\Double::KIND_DOUBLE:
|
||||
return (double) $oSubExpr;
|
||||
|
||||
case Cast\Double::KIND_FLOAT:
|
||||
case Cast\Double::KIND_REAL:
|
||||
return (float) $oSubExpr;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case Cast\Int_::class:
|
||||
return (int) $oSubExpr;
|
||||
|
||||
case Cast\Object_::class:
|
||||
return (object) $oSubExpr;
|
||||
|
||||
case Cast\String_::class:
|
||||
return (string) $oSubExpr;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\ClassConstFetch;
|
||||
|
||||
class ClassConstFetchEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class ClassConstFetchEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return ClassConstFetch::class;
|
||||
}
|
||||
|
||||
|
||||
23
sources/PhpParser/Evaluation/CoalesceEvaluator.php
Normal file
23
sources/PhpParser/Evaluation/CoalesceEvaluator.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\BinaryOp\Coalesce;
|
||||
|
||||
class CoalesceEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Coalesce::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var Coalesce $oExpr */
|
||||
|
||||
$oLeftEval = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->left);
|
||||
if (! is_null($oLeftEval)) {
|
||||
return $oLeftEval;
|
||||
}
|
||||
|
||||
return PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->right);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\Concat;
|
||||
|
||||
class ConcatEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Concat::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\ConstFetch;
|
||||
|
||||
class ConstFetchEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class ConstFetchEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return ConstFetch::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\Equal;
|
||||
|
||||
class EqualEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Equal::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use ModuleFileReaderException;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\FuncCall;
|
||||
use ReflectionFunction;
|
||||
|
||||
class FuncCallEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class FuncCallEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return FuncCall::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\Greater;
|
||||
|
||||
class GreaterEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Greater::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\GreaterOrEqual;
|
||||
|
||||
class GreaterOrEqualEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return GreaterOrEqual::class;
|
||||
}
|
||||
|
||||
|
||||
26
sources/PhpParser/Evaluation/IssetEvaluator.php
Normal file
26
sources/PhpParser/Evaluation/IssetEvaluator.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\ConstFetch;
|
||||
use PhpParser\Node\Expr\Isset_;
|
||||
|
||||
class IssetEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Isset_::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var Isset_ $oExpr */
|
||||
|
||||
foreach ($oExpr->vars as $oVar){
|
||||
$var = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oVar);
|
||||
if (! isset($var)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
36
sources/PhpParser/Evaluation/MethodCallEvaluator.php
Normal file
36
sources/PhpParser/Evaluation/MethodCallEvaluator.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use ReflectionClass;
|
||||
|
||||
class MethodCallEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return MethodCall::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var MethodCall $oExpr */
|
||||
|
||||
$oVar = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->var);
|
||||
if (is_null($oVar)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$aArgs = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->args);
|
||||
$sName = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->name);
|
||||
$oReflectionClass = new ReflectionClass(get_class($oVar));
|
||||
|
||||
$oMethods = $oReflectionClass->getMethods();
|
||||
if (array_key_exists($sName, $oMethods)){
|
||||
$oMethods = $oMethods[$sName];
|
||||
if ($oMethods->isPublic()){
|
||||
return $oMethods->invokeArgs($oVar, $aArgs);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
16
sources/PhpParser/Evaluation/ModEvaluator.php
Normal file
16
sources/PhpParser/Evaluation/ModEvaluator.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\Mod;
|
||||
|
||||
class ModEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Mod::class;
|
||||
}
|
||||
|
||||
function EvaluateBinaryOperation(mixed $left, mixed $right) : mixed
|
||||
{
|
||||
return $left % $right;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\Mul;
|
||||
|
||||
class MulEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Mul::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\NotEqual;
|
||||
|
||||
class NotEqualEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return NotEqual::class;
|
||||
}
|
||||
|
||||
|
||||
36
sources/PhpParser/Evaluation/NullsafeMethodCallEvaluator.php
Normal file
36
sources/PhpParser/Evaluation/NullsafeMethodCallEvaluator.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\NullsafeMethodCall;
|
||||
use ReflectionClass;
|
||||
|
||||
class NullsafeMethodCallEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return NullsafeMethodCall::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var NullsafeMethodCall $oExpr */
|
||||
|
||||
$oVar = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->var);
|
||||
if (is_null($oVar)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$aArgs = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->args);
|
||||
$sName = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->name);
|
||||
$oReflectionClass = new ReflectionClass(get_class($oVar));
|
||||
|
||||
$oMethods = $oReflectionClass->getMethods();
|
||||
if (array_key_exists($sName, $oMethods)){
|
||||
$oMethods = $oMethods[$sName];
|
||||
if ($oMethods->isPublic()){
|
||||
return $oMethods->invokeArgs($oVar, $aArgs);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\NullsafePropertyFetch;
|
||||
use ReflectionClass;
|
||||
|
||||
class NullsafePropertyFetchEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return NullsafePropertyFetch::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var NullsafePropertyFetch $oExpr */
|
||||
|
||||
$oVar = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->var);
|
||||
if (is_null($oVar)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$sName = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->name);
|
||||
$oReflectionClass = new ReflectionClass(get_class($oVar));
|
||||
|
||||
$oProperties = $oReflectionClass->getProperties();
|
||||
if (array_key_exists($sName, $oProperties)){
|
||||
$oProperty = $oProperties[$sName];
|
||||
if ($oProperty->isPublic()){
|
||||
return $oProperty->getValue($oVar);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,9 @@
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use ModuleFileParser;
|
||||
use ModuleFileReaderException;
|
||||
use PhpParser\Node\Expr;
|
||||
|
||||
require_once __DIR__ . '/iExprEvaluator.php';
|
||||
class PhpExpressionEvaluator {
|
||||
private static PhpExpressionEvaluator $oInstance;
|
||||
|
||||
@@ -21,14 +21,23 @@ class PhpExpressionEvaluator {
|
||||
static::$aPhpParserEvaluators=[];
|
||||
|
||||
foreach (glob(__DIR__ . "/**Evaluator.php") as $sFile){
|
||||
require_once $sFile;
|
||||
require_once $sFile;
|
||||
$sNamespace = 'Combodo\\iTop\PhpParser\\Evaluation\\';
|
||||
$sClass = $sNamespace. str_replace(".php", "", basename($sFile));
|
||||
$oReflectionClass = new \ReflectionClass($sClass);
|
||||
if ($oReflectionClass->isInstantiable()
|
||||
&& $oReflectionClass->implementsInterface("{$sNamespace}iExprEvaluator")){
|
||||
&& $oReflectionClass->implementsInterface(iExprEvaluator::class)){
|
||||
$oClass = new $sClass;
|
||||
static::$aPhpParserEvaluators[$oClass->GetHandledExpressionType()] = $oClass;
|
||||
|
||||
if (! is_null($oClass->GetHandledExpressionType())){
|
||||
static::RegisterEvaluator($oClass, $oClass->GetHandledExpressionType());
|
||||
}
|
||||
if (! is_null($oClass->GetHandledExpressionTypes())) {
|
||||
foreach ($oClass->GetHandledExpressionTypes() as $sHandledExpressionType){
|
||||
static::RegisterEvaluator($oClass, $sHandledExpressionType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,6 +45,14 @@ class PhpExpressionEvaluator {
|
||||
return static::$oInstance;
|
||||
}
|
||||
|
||||
private static function RegisterEvaluator(iExprEvaluator $oClass, string $sHandledExpressionType)
|
||||
{
|
||||
if (array_key_exists($sHandledExpressionType, static::$aPhpParserEvaluators)){
|
||||
throw new \CoreException("Another Evaluator class already deals with $sHandledExpressionType");
|
||||
}
|
||||
static::$aPhpParserEvaluators[$sHandledExpressionType] = $oClass;
|
||||
}
|
||||
|
||||
final public static function SetInstance(?PhpExpressionEvaluator $oInstance): void {
|
||||
static::$oInstance = $oInstance;
|
||||
}
|
||||
@@ -72,9 +89,8 @@ PHP;
|
||||
$aNodes = ModuleFileParser::GetInstance()->ParsePhpCode($sPhpContent);
|
||||
$oExpr = $aNodes[0];
|
||||
return $this->EvaluateExpression($oExpr->expr);
|
||||
|
||||
} catch (\Throwable $t) {
|
||||
throw new \ModuleFileReaderException("Eval of '$sExpr' caused an error:".$t->getMessage());
|
||||
throw new ModuleFileReaderException("Eval of '$sExpr' caused an error:".$t->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
47
sources/PhpParser/Evaluation/PropertyFetchEvaluator.php
Normal file
47
sources/PhpParser/Evaluation/PropertyFetchEvaluator.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\PropertyFetch;
|
||||
use ReflectionClass;
|
||||
|
||||
class PropertyFetchEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return PropertyFetch::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var PropertyFetch $oExpr */
|
||||
|
||||
$oVar = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->var);
|
||||
if (is_null($oVar)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$sName = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->name);
|
||||
$oReflectionClass = new ReflectionClass(get_class($oVar));
|
||||
|
||||
$oProperties = $oReflectionClass->getProperties();
|
||||
if (array_key_exists($sName, $oProperties)){
|
||||
$oProperty = $oProperties[$sName];
|
||||
if ($oProperty->isPublic()){
|
||||
return $oProperty->getValue($oVar);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$aArgs=[];
|
||||
|
||||
$oMethods = $oReflectionClass->getMethods();
|
||||
if (array_key_exists($sName, $oMethods)){
|
||||
$oMethod = $oMethods[$sName];
|
||||
if ($oMethod->isPublic()){
|
||||
return $oMethod->invokeArgs(null, $aArgs);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\Smaller;
|
||||
|
||||
class SmallerEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Smaller::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr\BinaryOp\SmallerOrEqual;
|
||||
|
||||
class SmallerOrEqualEvaluator extends BinaryOpEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return SmallerOrEqual::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use ModuleFileReaderException;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\StaticCall;
|
||||
use ReflectionFunction;
|
||||
|
||||
class StaticCallEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class StaticCallEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return StaticCall::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\StaticPropertyFetch;
|
||||
|
||||
class StaticPropertyFetchEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class StaticPropertyFetchEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return StaticPropertyFetch::class;
|
||||
}
|
||||
|
||||
|
||||
24
sources/PhpParser/Evaluation/TernaryEvaluator.php
Normal file
24
sources/PhpParser/Evaluation/TernaryEvaluator.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\Ternary;
|
||||
|
||||
class TernaryEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Ternary::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var Ternary $oExpr */
|
||||
|
||||
$cond = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->cond);
|
||||
|
||||
if ($cond){
|
||||
return PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->if);
|
||||
}
|
||||
|
||||
return PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->else);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\BinaryOp;
|
||||
use PhpParser\Node\Expr\UnaryMinus;
|
||||
|
||||
class UnaryMinusEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class UnaryMinusEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return UnaryMinus::class;
|
||||
}
|
||||
|
||||
|
||||
18
sources/PhpParser/Evaluation/UnaryPlusEvaluator.php
Normal file
18
sources/PhpParser/Evaluation/UnaryPlusEvaluator.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\UnaryPlus;
|
||||
|
||||
class UnaryPlusEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return UnaryPlus::class;
|
||||
}
|
||||
|
||||
public function Evaluate(Expr $oExpr): mixed {
|
||||
/** @var UnaryPlus $oExpr */
|
||||
|
||||
return + PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->expr);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\ClassConstFetch;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
|
||||
class VariableEvaluator implements iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string {
|
||||
class VariableEvaluator extends AbstractExprEvaluator {
|
||||
public function GetHandledExpressionType(): ?string {
|
||||
return Variable::class;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;;
|
||||
namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use PhpParser\Node\Expr;
|
||||
|
||||
interface iExprEvaluator {
|
||||
public function GetHandledExpressionType(): string;
|
||||
|
||||
public function GetHandledExpressionType(): ?string;
|
||||
public function GetHandledExpressionTypes(): ?array ;
|
||||
public function Evaluate(Expr $oExpr) : mixed;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ namespace Combodo\iTop\Test\UnitTest\Setup\ModuleDiscovery;
|
||||
|
||||
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
||||
use ModuleFileReader;
|
||||
use PhpParser\ParserFactory;
|
||||
|
||||
class ModuleFileReaderTest extends ItopDataTestCase
|
||||
{
|
||||
@@ -35,7 +34,7 @@ class ModuleFileReaderTest extends ItopDataTestCase
|
||||
];
|
||||
|
||||
$aErrors=[];
|
||||
foreach (glob(__DIR__.'/resources/all_designer/**.php') as $sModuleFilePath){
|
||||
foreach (glob(__DIR__.'/resources/all_designer/*.php') as $sModuleFilePath){
|
||||
//var_dump($sModuleFilePath);
|
||||
try{
|
||||
$aRes = ModuleFileReader::GetInstance()->ReadModuleFileInformation($sModuleFilePath);
|
||||
@@ -54,7 +53,7 @@ class ModuleFileReaderTest extends ItopDataTestCase
|
||||
//$this->assertEquals($aExpected, $aRes, $sModuleFilePath);
|
||||
}
|
||||
|
||||
$this->assertEquals([], $aErrors);
|
||||
$this->assertEquals([], $aErrors, var_export($aErrors, true));
|
||||
}*/
|
||||
|
||||
public static function ReadModuleFileConfigurationFileNameProvider()
|
||||
|
||||
@@ -23,12 +23,12 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
|
||||
'ClassConstFetch: unknown class:class' => [ 'sExpression' => 'GabuZomeuUnknownClass::class'],
|
||||
'ClassConstFetch: private existing constant' => [
|
||||
'sExpression' => 'Combodo\iTop\Test\UnitTest\Setup\ModuleDiscovery\PhpExpressionEvaluatorTest::PRIVATE_CONSTANT',
|
||||
'forced_expected' => null
|
||||
'forced_expected' => null,
|
||||
],
|
||||
'StaticProperty: public existing constant' => [ 'sExpression' => 'Combodo\iTop\Test\UnitTest\Setup\ModuleDiscovery\PhpExpressionEvaluatorTest::$STATIC_PROPERTY'],
|
||||
'StaticProperty: private existing constant' => [
|
||||
'sExpression' => 'Combodo\iTop\Test\UnitTest\Setup\ModuleDiscovery\PhpExpressionEvaluatorTest::$PRIVATE_STATIC_PROPERTY',
|
||||
'forced_expected' => null
|
||||
'forced_expected' => null,
|
||||
],
|
||||
'BinaryOperator: false|true' => [ 'sExpression' => 'false|true'],
|
||||
'BinaryOperator: false||true' => [ 'sExpression' => 'false||true'],
|
||||
@@ -45,13 +45,40 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
|
||||
'FuncCall: function_exists(\'ldap_connect\')' => [ 'sExpression' => 'function_exists(\'ldap_connect\')'],
|
||||
'FuncCall: function_exists(\'gabuzomeushouldnotexist\')' => [ 'sExpression' => 'function_exists(\'gabuzomeushouldnotexist\')'],
|
||||
'UnaryMinus: -1' => ['sExpression' => '-1'],
|
||||
'UnaryPlus: +1' => ['sExpression' => '+1'],
|
||||
'Concat: "a"."b"' => ['sExpression' => '"a"."b"'],
|
||||
'ArrayDimFetch: $_SERVER[\'toto\']' => ['sExpression' => '$_SERVER[\'toto\']'],
|
||||
'Variable: $_SERVER' => ['sExpression' => '$_SERVER'],
|
||||
'Array: [1000 => "a"]' => ['sExpression' => '[1000 => "a"]'],
|
||||
'Array: ["a"]' => ['sExpression' => '["a"]'],
|
||||
'Array dict: ["a"=>"b"]' => ['sExpression' => '["a"=>"b"]'],
|
||||
'StaticCall utils::GetItopVersionWikiSyntax()' => ['sExpression' => 'utils::GetItopVersionWikiSyntax()']
|
||||
'StaticCall utils::GetItopVersionWikiSyntax()' => ['sExpression' => 'utils::GetItopVersionWikiSyntax()'],
|
||||
'NullsafePropertyFetch: $oNullVar?->b' => ['sExpression' => '$oNullVar?->b'],
|
||||
'NullsafePropertyFetch: $oEvaluationFakeClass?->bIsOk' => ['sExpression' => '$oEvaluationFakeClass?->bIsOk'],
|
||||
'PropertyFetch: $oEvaluationFakeClass->bIsOk' => ['sExpression' => '$oEvaluationFakeClass->bIsOk'],
|
||||
'NullsafeMethodCall: $oEvaluationFakeClass?->GetName()' => ['sExpression' => '$oEvaluationFakeClass?->GetName()'],
|
||||
'NullsafeMethodCall: $oEvaluationFakeClass?->GetLongName("aa")' => ['sExpression' => '$oEvaluationFakeClass?->GetLongName("aa")'],
|
||||
'MethodCall: $oEvaluationFakeClass->GetName()' => ['sExpression' => '$oEvaluationFakeClass->GetName()'],
|
||||
'MethodCall: $oEvaluationFakeClass->GetLongName("aa")' => ['sExpression' => '$oEvaluationFakeClass->GetLongName("aa")'],
|
||||
'Coalesce: $oNullVar ?? 1' => ['sExpression' => '$oNullVar ?? 1'],
|
||||
'Coalesce: $oNonNullVar ?? 1' => ['sExpression' => '$oNonNullVar ?? 1'],
|
||||
'Isset: isset($a)' => ['sExpression' => 'isset($a)'],
|
||||
'Isset: isset($a, $_SERVER)' => ['sExpression' => 'isset($a, $_SERVER)'],
|
||||
'Isset: isset($_SERVER)' => ['sExpression' => 'isset($_SERVER)'],
|
||||
'Isset: isset($_SERVER, $a)' => ['sExpression' => 'isset($_SERVER, $a)'],
|
||||
'BitwiseNot: ~3' => ['sExpression' => '~3'],
|
||||
'Mod: 3%2' => ['sExpression' => '3%2'],
|
||||
'BitwiseXor: 3^2' => ['sExpression' => '3^2'],
|
||||
'Ternary: (true) ? 1 : 2' => ['sExpression' => '(true) ? 1 : 2'],
|
||||
'Ternary: (false) ? 1 : 2' => ['sExpression' => '(false) ? 1 : 2'],
|
||||
'Cast: (array)3' => ['sExpression' => '(array)3'],
|
||||
'Cast: (bool)1' => ['sExpression' => '(bool)1'],
|
||||
'Cast: (bool)0' => ['sExpression' => '(bool)0'],
|
||||
'Cast: (double)3' => ['sExpression' => '(double)3'],
|
||||
'Cast: (float)3' => ['sExpression' => '(float)3'],
|
||||
'Cast: (int)3' => ['sExpression' => '(int)3'],
|
||||
'Cast: (object)3' => ['sExpression' => '(object)3'],
|
||||
'Cast: (string)3' => ['sExpression' => '(string)3'],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -60,10 +87,16 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
|
||||
*/
|
||||
public function testEvaluateExpression($sExpression, $forced_expected="NOTPROVIDED")
|
||||
{
|
||||
$oNullVar=null;
|
||||
$oNonNullVar="a";
|
||||
$_SERVER=[
|
||||
'toto' => 'titi'
|
||||
'toto' => 'titi',
|
||||
];
|
||||
|
||||
$oEvaluationFakeClass = new EvaluationFakeClass();
|
||||
$oEvaluationFakeClass->bIsOk;
|
||||
$oEvaluationFakeClass->GetName();
|
||||
|
||||
$res = PhpExpressionEvaluator::GetInstance()->ParseAndEvaluateExpression($sExpression);
|
||||
if ($forced_expected === "NOTPROVIDED"){
|
||||
$this->assertEquals($this->UnprotectedComputeExpression($sExpression), $res, $sExpression);
|
||||
@@ -90,12 +123,6 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public function testParseAndEvaluateBooleanExpression_BrokenBooleanExpression(){
|
||||
$this->expectException(\ModuleFileReaderException::class);
|
||||
$this->expectExceptionMessage('Eval of \'(a || true)\' caused an error');
|
||||
$this->assertTrue(PhpExpressionEvaluator::GetInstance()->ParseAndEvaluateBooleanExpression("(a || true)"));
|
||||
}
|
||||
|
||||
public static function ParseAndEvaluateBooleanExpression_AutoselectProvider()
|
||||
{
|
||||
$sSimpleCallToModuleIsSelected = "SetupInfo::ModuleIsSelected(\"itop-storage-mgmt\")";
|
||||
@@ -131,4 +158,18 @@ class PhpExpressionEvaluatorTest extends ItopDataTestCase {
|
||||
\SetupInfo::SetSelectedModules(["itop-storage-mgmt" => "123"]);
|
||||
$this->assertEquals($expected, PhpExpressionEvaluator::GetInstance()->ParseAndEvaluateBooleanExpression($sBooleanExpression), $sBooleanExpression);
|
||||
}
|
||||
}
|
||||
|
||||
class EvaluationFakeClass {
|
||||
public bool $bIsOk=true;
|
||||
|
||||
public function GetName()
|
||||
{
|
||||
return "gabuzomeu";
|
||||
}
|
||||
|
||||
public function GetLongName($suffix)
|
||||
{
|
||||
return "gabuzomeu_" . $suffix;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user