type fixes

This commit is contained in:
Yuri Kuznetsov
2022-03-18 19:39:58 +02:00
parent 31a84a6e53
commit 6beaa730ea
7 changed files with 43 additions and 17 deletions

View File

@@ -91,7 +91,10 @@ class Container implements ContainerInterface
$this->bindingContainer = $bindingContainer;
$this->injectableFactory = $this->get('injectableFactory');
/** @var InjectableFactory */
$injectableFactory = $this->get('injectableFactory');
$this->injectableFactory = $injectableFactory;
$this->configuration = $this->injectableFactory->create($configurationClassName);
}
@@ -208,6 +211,7 @@ class Container implements ContainerInterface
throw new RuntimeException("Loader method for service '{$name}' does not have a named return type.");
}
/** @var class-string */
$className = $returnType->getName();
$this->classCache[$name] = new ReflectionClass($className);

View File

@@ -32,12 +32,12 @@ namespace Espo\Core\Container;
interface Configuration
{
/**
* @return ?class-string
* @return ?class-string<Loader>
*/
public function getLoaderClassName(string $name): ?string;
/**
* @return ?class-string
* @return ?class-string<object>
*/
public function getServiceClassName(string $name): ?string;

View File

@@ -31,6 +31,7 @@ namespace Espo\Core\Container;
use Espo\Core\Container;
use Espo\Core\Container\ContainerConfiguration;
use Espo\Core\Container\Container as ContainerInterface;
use Espo\Core\Binding\BindingContainer;
use Espo\Core\Binding\BindingLoader;
@@ -52,12 +53,12 @@ use Espo\Core\Loaders\Metadata as MetadataLoader;
class ContainerBuilder
{
/**
* @var class-string
* @var class-string<\Espo\Core\Container\Container>
*/
private string $containerClassName = Container::class;
/**
* @var class-string
* @var class-string<\Espo\Core\Container\Configuration>
*/
private string $containerConfigurationClassName = ContainerConfiguration::class;
@@ -77,7 +78,7 @@ class ContainerBuilder
private string $dataCacheClassName = DataCache::class;
/**
* @var class-string
* @var class-string<Module>
*/
private string $moduleClassName = Module::class;
@@ -89,7 +90,7 @@ class ContainerBuilder
private $services = [];
/**
* @var array<string,class-string>
* @var array<string,class-string<\Espo\Core\Container\Loader>>
*/
protected $loaderClassNames = [
'log' => LogLoader::class,
@@ -117,7 +118,7 @@ class ContainerBuilder
}
/**
* @param array<string,class-string> $classNames
* @param array<string,class-string<\Espo\Core\Container\Loader>> $classNames
*/
public function withLoaderClassNames(array $classNames): self
{
@@ -129,7 +130,7 @@ class ContainerBuilder
}
/**
* @param class-string $containerClassName
* @param class-string<\Espo\Core\Container\Container> $containerClassName
*/
public function withContainerClassName(string $containerClassName): self
{
@@ -139,7 +140,7 @@ class ContainerBuilder
}
/**
* @param class-string $containerConfigurationClassName
* @param class-string<\Espo\Core\Container\Configuration> $containerConfigurationClassName
*/
public function withContainerConfigurationClassName(string $containerConfigurationClassName): self
{
@@ -178,8 +179,9 @@ class ContainerBuilder
return $this;
}
public function build(): Container
public function build(): ContainerInterface
{
/** @var Config */
$config = $this->services['config'] ?? (
new $this->configClassName(
new ConfigFileManager()
@@ -198,6 +200,7 @@ class ContainerBuilder
$useCache = $config->get('useCache') ?? false;
/** @var Module */
$module = $this->services['module'] ?? (
new $this->moduleClassName($fileManager, $dataCache, $useCache)
);

View File

@@ -150,6 +150,7 @@ abstract class Base
*/
protected function getName(): string
{
/** @var string */
return $this->name;
}
@@ -197,6 +198,7 @@ abstract class Base
*/
protected function getUser()
{
/** @var User */
return $this->container->get('user');
}
@@ -207,6 +209,7 @@ abstract class Base
*/
protected function getAcl()
{
/** @var Acl */
return $this->container->get('acl');
}
@@ -217,6 +220,7 @@ abstract class Base
*/
protected function getAclManager()
{
/** @var AclManager */
return $this->container->get('aclManager');
}
@@ -227,6 +231,7 @@ abstract class Base
*/
protected function getConfig()
{
/** @var Config */
return $this->container->get('config');
}
@@ -236,6 +241,7 @@ abstract class Base
*/
protected function getPreferences()
{
/** @var Preferences */
return $this->container->get('preferences');
}
@@ -246,6 +252,7 @@ abstract class Base
*/
protected function getMetadata()
{
/** @var Metadata */
return $this->container->get('metadata');
}
@@ -256,6 +263,7 @@ abstract class Base
*/
protected function getServiceFactory()
{
/** @var ServiceFactory */
return $this->container->get('serviceFactory');
}
}

View File

@@ -32,6 +32,7 @@ namespace Espo\Core\Controllers;
use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Api\Request;
use Espo\Core\Select\SearchParams;
use Espo\Core\Utils\Json;
use stdClass;
@@ -166,12 +167,15 @@ class Record extends RecordBase
$where = $data->where ?? null;
if ($where !== null) {
$where = json_decode(json_encode($where), true);
$where = json_decode(Json::encode($where), true);
}
$params = json_decode(json_encode(
$data->searchParams ?? $data->selectData ?? (object) []
), true);
$params = json_decode(
Json::encode(
$data->searchParams ?? $data->selectData ?? (object) []
),
true
);
if ($where !== null && !is_array($where)) {
throw new BadRequest("Bad 'where.");

View File

@@ -69,10 +69,11 @@ class WhereBuilderFactory
}
/**
* @return ?class-string
* @return ?class-string<WhereBuilder<\Espo\ORM\Entity>>
*/
private function getClassName(string $entityType): ?string
{
/** @var ?class-string<WhereBuilder<\Espo\ORM\Entity>> */
return $this->metadata
->get(['recordDefs', $entityType, 'duplicateWhereBuilderClassName']);
}

View File

@@ -61,11 +61,17 @@ class Application extends BaseApplication
protected function initContainer(): void
{
$this->container = (new ContainerBuilder())
$container = (new ContainerBuilder())
->withConfigClassName(Config::class)
->withContainerClassName(PortalContainer::class)
->withContainerConfigurationClassName(PortalContainerConfiguration::class)
->build();
if (!$container instanceof PortalContainer) {
throw new Error("Wrong container created.");
}
$this->container = $container;
}
protected function initPortal(?string $portalId): void