diff --git a/.github/workflows/behat.yml b/.github/workflows/behat.yml
index 48f93643c01..2ac04b8757b 100644
--- a/.github/workflows/behat.yml
+++ b/.github/workflows/behat.yml
@@ -11,7 +11,7 @@ jobs:
fail-fast: false
matrix:
operating-system: [ ubuntu-latest ]
- php-versions: [ '8.2', '8.3' ]
+ php-versions: [ '8.3' ]
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/.github/workflows/format_code.yml b/.github/workflows/format_code.yml
index 6835b1f4f18..36d065b2024 100644
--- a/.github/workflows/format_code.yml
+++ b/.github/workflows/format_code.yml
@@ -14,7 +14,7 @@ jobs:
fail-fast: false
matrix:
operating-system: [ubuntu-latest]
- php-versions: ['8.2']
+ php-versions: ['8.3']
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/.github/workflows/php_analysis.yml b/.github/workflows/php_analysis.yml
index be577190fef..cd7f8e22217 100644
--- a/.github/workflows/php_analysis.yml
+++ b/.github/workflows/php_analysis.yml
@@ -11,7 +11,7 @@ jobs:
fail-fast: false
matrix:
operating-system: [ubuntu-latest]
- php-versions: ['8.2']
+ php-versions: ['8.3']
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml
index d4970b01b8e..7bc29fbabf1 100644
--- a/.github/workflows/phpunit.yml
+++ b/.github/workflows/phpunit.yml
@@ -14,7 +14,7 @@ jobs:
fail-fast: false
matrix:
operating-system: [ubuntu-latest]
- php-versions: ['8.2']
+ php-versions: ['8.3']
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
deleted file mode 100644
index 1fd4e841263..00000000000
--- a/psalm-baseline.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $title,
- 'nro_questions' => self::QUESTION_COUNT,
- 'aiken_format' => $aiken,
- 'ai_generated' => '1',
- 'ai_provider_used' => $providerName,
- 'ai_feature' => 'learning_path_quick_test',
- ])]]>
-
-
-
-
diff --git a/psalm.xml b/psalm.xml
index 2ea85c05887..62594eb8548 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -8,7 +8,6 @@
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
findUnusedBaselineEntry="false"
findUnusedCode="false"
- errorBaseline="psalm-baseline.xml"
>
diff --git a/src/CoreBundle/Controller/Admin/RoomAvailabilityController.php b/src/CoreBundle/Controller/Admin/RoomAvailabilityController.php
index c3ff19604fe..9d931ca017a 100644
--- a/src/CoreBundle/Controller/Admin/RoomAvailabilityController.php
+++ b/src/CoreBundle/Controller/Admin/RoomAvailabilityController.php
@@ -12,6 +12,7 @@
use Chamilo\CoreBundle\Helpers\AccessUrlHelper;
use Chamilo\CourseBundle\Entity\CAttendanceCalendar;
use DateTime;
+use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
@@ -71,7 +72,7 @@ public function availability(
.' OR (cal.room IS NULL AND a.room IS NULL AND src.room IS NULL AND IDENTITY(c.room) = :roomId)'
)
->setParameter('roomId', $room['id'])
- ->setParameter('end', $end)
+ ->setParameter('end', $end, Types::DATETIME_MUTABLE)
->getQuery()
->getArrayResult()
;
diff --git a/src/CoreBundle/Controller/Admin/RoomOccupationController.php b/src/CoreBundle/Controller/Admin/RoomOccupationController.php
index 92f8ffb0334..1c194455951 100644
--- a/src/CoreBundle/Controller/Admin/RoomOccupationController.php
+++ b/src/CoreBundle/Controller/Admin/RoomOccupationController.php
@@ -12,6 +12,7 @@
use Chamilo\CoreBundle\Helpers\RoomAccessUrlHelper;
use Chamilo\CourseBundle\Entity\CAttendanceCalendar;
use DateTime;
+use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
@@ -73,9 +74,9 @@ public function occupation(
.' OR (cal.room IS NULL AND a.room IS NULL AND src.room = :room)'
.' OR (cal.room IS NULL AND a.room IS NULL AND src.room IS NULL AND c.room = :room)'
)
- ->setParameter('room', $room)
- ->setParameter('start', $start)
- ->setParameter('end', $end)
+ ->setParameter('room', (int) $room->getId())
+ ->setParameter('start', $start, Types::DATETIME_MUTABLE)
+ ->setParameter('end', $end, Types::DATETIME_MUTABLE)
->orderBy('cal.dateTime', 'ASC')
->getQuery()
->getArrayResult()
diff --git a/src/CoreBundle/Migrations/Schema/V200/Version20210205082253.php b/src/CoreBundle/Migrations/Schema/V200/Version20210205082253.php
index 651a5041d25..293117173c8 100644
--- a/src/CoreBundle/Migrations/Schema/V200/Version20210205082253.php
+++ b/src/CoreBundle/Migrations/Schema/V200/Version20210205082253.php
@@ -41,7 +41,7 @@ public function up(Schema $schema): void
private function migrateUserImages(IllustrationRepository $illustrationRepo, bool $splitDirectories): void
{
$query = $this->entityManager->createQuery(
- 'SELECT u FROM Chamilo\\CoreBundle\\Entity\\User u
+ 'SELECT u FROM Chamilo\CoreBundle\Entity\User u
WHERE u.pictureUri IS NOT NULL AND u.pictureUri <> :empty'
)->setParameter('empty', '');
@@ -155,7 +155,7 @@ private function migrateUsergroupResources(): void
private function migrateUsergroupImages(IllustrationRepository $illustrationRepo, bool $splitDirectories): void
{
$query = $this->entityManager->createQuery(
- 'SELECT u FROM Chamilo\\CoreBundle\\Entity\\Usergroup u
+ 'SELECT u FROM Chamilo\CoreBundle\Entity\Usergroup u
WHERE u.picture IS NOT NULL AND u.picture <> :empty'
)->setParameter('empty', '');
diff --git a/src/CoreBundle/Serializer/Denormalizer/Scim/UserDenormalizer.php b/src/CoreBundle/Serializer/Denormalizer/Scim/UserDenormalizer.php
index 3b5a4f3ba8c..dc921bd0606 100644
--- a/src/CoreBundle/Serializer/Denormalizer/Scim/UserDenormalizer.php
+++ b/src/CoreBundle/Serializer/Denormalizer/Scim/UserDenormalizer.php
@@ -69,6 +69,9 @@ public function denormalize(mixed $data, string $type, ?string $format = null, a
return $user;
}
+ /**
+ * @psalm-suppress MethodSignatureMismatch
+ */
public function supportsDenormalization(mixed $data, string $type, ?string $format = null, array $context = []): bool
{
if (isset($context[self::ALREADY_CALLED])) {
diff --git a/src/CoreBundle/Serializer/DocumentAiAssistedNormalizer.php b/src/CoreBundle/Serializer/DocumentAiAssistedNormalizer.php
index a74a2725521..c9c1a6b80ea 100644
--- a/src/CoreBundle/Serializer/DocumentAiAssistedNormalizer.php
+++ b/src/CoreBundle/Serializer/DocumentAiAssistedNormalizer.php
@@ -32,29 +32,29 @@ public function supportsNormalization($data, ?string $format = null, array $cont
return $data instanceof CDocument;
}
- public function normalize($object, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
+ public function normalize($data, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
{
$context[self::ALREADY_CALLED] = true;
- $data = $this->normalizer->normalize($object, $format, $context);
+ $result = $this->normalizer->normalize($data, $format, $context);
- if (!\is_array($data) || !$object instanceof CDocument) {
- return $data;
+ if (!\is_array($result) || !$data instanceof CDocument) {
+ return $result;
}
- $docId = (int) ($object->getIid() ?? 0);
+ $docId = (int) ($data->getIid() ?? 0);
if ($docId <= 0) {
- $data['ai_assisted'] = false;
- $data['ai_assisted_raw'] = false;
+ $result['ai_assisted'] = false;
+ $result['ai_assisted_raw'] = false;
- return $data;
+ return $result;
}
$raw = $this->aiDisclosureHelper->isAiAssistedExtraField('document', $docId);
- $data['ai_assisted_raw'] = (bool) $raw;
- $data['ai_assisted'] = $this->aiDisclosureHelper->isDisclosureEnabled() && $raw;
+ $result['ai_assisted_raw'] = (bool) $raw;
+ $result['ai_assisted'] = $this->aiDisclosureHelper->isDisclosureEnabled() && $raw;
- return $data;
+ return $result;
}
public function getSupportedTypes(?string $format): array
diff --git a/src/CoreBundle/Serializer/GlossaryAiAssistedNormalizer.php b/src/CoreBundle/Serializer/GlossaryAiAssistedNormalizer.php
index 9a7b0fb4258..56fa9a74fad 100644
--- a/src/CoreBundle/Serializer/GlossaryAiAssistedNormalizer.php
+++ b/src/CoreBundle/Serializer/GlossaryAiAssistedNormalizer.php
@@ -32,29 +32,29 @@ public function supportsNormalization($data, ?string $format = null, array $cont
return $data instanceof CGlossary;
}
- public function normalize($object, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
+ public function normalize($data, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
{
$context[self::ALREADY_CALLED] = true;
- $data = $this->normalizer->normalize($object, $format, $context);
+ $result = $this->normalizer->normalize($data, $format, $context);
- if (!\is_array($data) || !$object instanceof CGlossary) {
- return $data;
+ if (!\is_array($result) || !$data instanceof CGlossary) {
+ return $result;
}
- $iid = (int) ($object->getIid() ?? 0);
+ $iid = (int) ($data->getIid() ?? 0);
if ($iid <= 0) {
- $data['ai_assisted_raw'] = false;
- $data['ai_assisted'] = false;
+ $result['ai_assisted_raw'] = false;
+ $result['ai_assisted'] = false;
- return $data;
+ return $result;
}
$raw = $this->aiDisclosureHelper->isAiAssistedExtraField('glossary', $iid);
- $data['ai_assisted_raw'] = (bool) $raw;
- $data['ai_assisted'] = $this->aiDisclosureHelper->isDisclosureEnabled() && (bool) $raw;
+ $result['ai_assisted_raw'] = (bool) $raw;
+ $result['ai_assisted'] = $this->aiDisclosureHelper->isDisclosureEnabled() && (bool) $raw;
- return $data;
+ return $result;
}
public function getSupportedTypes(?string $format): array
diff --git a/src/CoreBundle/Serializer/Normalizer/MessageNormalizer.php b/src/CoreBundle/Serializer/Normalizer/MessageNormalizer.php
index 4b39c0c4ca6..b7bef810b37 100644
--- a/src/CoreBundle/Serializer/Normalizer/MessageNormalizer.php
+++ b/src/CoreBundle/Serializer/Normalizer/MessageNormalizer.php
@@ -18,18 +18,18 @@ class MessageNormalizer implements NormalizerInterface, NormalizerAwareInterface
private const ALREADY_CALLED = 'MESSAGE_NORMALIZER_ALREADY_CALLED';
- public function normalize($object, ?string $format = null, array $context = []): array
+ public function normalize($data, ?string $format = null, array $context = []): array
{
$context[self::ALREADY_CALLED] = true;
- /** @var array $data */
- $data = $this->normalizer->normalize($object, $format, $context);
+ /** @var array $result */
+ $result = $this->normalizer->normalize($data, $format, $context);
- if (isset($data['content']) && \is_string($data['content'])) {
- $data['content'] = Security::remove_XSS($data['content'], STUDENT);
+ if (isset($result['content']) && \is_string($result['content'])) {
+ $result['content'] = Security::remove_XSS($result['content'], STUDENT);
}
- return $data;
+ return $result;
}
public function supportsNormalization($data, ?string $format = null, array $context = []): bool
diff --git a/src/CoreBundle/Serializer/Normalizer/Scim/UserNormalizer.php b/src/CoreBundle/Serializer/Normalizer/Scim/UserNormalizer.php
index ba93a03d3b7..98a822e233b 100644
--- a/src/CoreBundle/Serializer/Normalizer/Scim/UserNormalizer.php
+++ b/src/CoreBundle/Serializer/Normalizer/Scim/UserNormalizer.php
@@ -27,10 +27,10 @@ public function __construct(
private readonly ScimHelper $scimHelper,
) {}
- public function normalize(mixed $object, ?string $format = null, array $context = []): array
+ public function normalize(mixed $data, ?string $format = null, array $context = []): array
{
/** @var User $user */
- $user = $object;
+ $user = $data;
$uuid = $user->getUuid();
diff --git a/src/CoreBundle/Serializer/Normalizer/SessionNormalizer.php b/src/CoreBundle/Serializer/Normalizer/SessionNormalizer.php
index eddd6d9b4db..cdb41a1cfc8 100644
--- a/src/CoreBundle/Serializer/Normalizer/SessionNormalizer.php
+++ b/src/CoreBundle/Serializer/Normalizer/SessionNormalizer.php
@@ -23,21 +23,21 @@ public function __construct(
private const ALREADY_CALLED = 'SESSION_NORMALIZER_ALREADY_CALLED';
- public function normalize($object, ?string $format = null, array $context = []): array
+ public function normalize($data, ?string $format = null, array $context = []): array
{
$context[self::ALREADY_CALLED] = true;
- \assert($object instanceof Session);
+ \assert($data instanceof Session);
try {
- $object->getAccessVisibility();
+ $data->getAccessVisibility();
} catch (LogicException) {
- $object->setAccessVisibilityByUser(
+ $data->setAccessVisibilityByUser(
$this->userHelper->getCurrent()
);
}
- return $this->normalizer->normalize($object, $format, $context);
+ return $this->normalizer->normalize($data, $format, $context);
}
public function supportsNormalization($data, ?string $format = null, array $context = []): bool
diff --git a/src/CoreBundle/Serializer/Normalizer/SocialPostNormalizer.php b/src/CoreBundle/Serializer/Normalizer/SocialPostNormalizer.php
index dfb999f7f8c..0de25e68787 100644
--- a/src/CoreBundle/Serializer/Normalizer/SocialPostNormalizer.php
+++ b/src/CoreBundle/Serializer/Normalizer/SocialPostNormalizer.php
@@ -18,18 +18,18 @@ class SocialPostNormalizer implements NormalizerInterface, NormalizerAwareInterf
private const ALREADY_CALLED = 'SOCIAL_POST_NORMALIZER_ALREADY_CALLED';
- public function normalize($object, ?string $format = null, array $context = []): array
+ public function normalize($data, ?string $format = null, array $context = []): array
{
$context[self::ALREADY_CALLED] = true;
- /** @var array $data */
- $data = $this->normalizer->normalize($object, $format, $context);
+ /** @var array $result */
+ $result = $this->normalizer->normalize($data, $format, $context);
- if (isset($data['content']) && \is_string($data['content'])) {
- $data['content'] = Security::remove_XSS($data['content'], STUDENT);
+ if (isset($result['content']) && \is_string($result['content'])) {
+ $result['content'] = Security::remove_XSS($result['content'], STUDENT);
}
- return $data;
+ return $result;
}
public function supportsNormalization($data, ?string $format = null, array $context = []): bool
diff --git a/src/CoreBundle/Serializer/Normalizer/UserNormalizer.php b/src/CoreBundle/Serializer/Normalizer/UserNormalizer.php
index 411f8c071e9..ac40063efac 100644
--- a/src/CoreBundle/Serializer/Normalizer/UserNormalizer.php
+++ b/src/CoreBundle/Serializer/Normalizer/UserNormalizer.php
@@ -22,15 +22,15 @@ public function __construct(
private readonly NameConventionHelper $nameConventionHelper,
) {}
- public function normalize($object, ?string $format = null, array $context = []): array
+ public function normalize($data, ?string $format = null, array $context = []): array
{
$context[self::ALREADY_CALLED] = true;
- $data = $this->normalizer->normalize($object, $format, $context);
+ $result = $this->normalizer->normalize($data, $format, $context);
- $data['fullName'] = $this->nameConventionHelper->getPersonName($object);
+ $result['fullName'] = $this->nameConventionHelper->getPersonName($data);
- return $data;
+ return $result;
}
public function supportsNormalization($data, ?string $format = null, array $context = []): bool
diff --git a/src/CoreBundle/Serializer/ResourceNormalizer.php b/src/CoreBundle/Serializer/ResourceNormalizer.php
index 88e03c96eb2..93d53cd80b4 100644
--- a/src/CoreBundle/Serializer/ResourceNormalizer.php
+++ b/src/CoreBundle/Serializer/ResourceNormalizer.php
@@ -30,7 +30,7 @@ public function __construct(
) {}
public function normalize(
- $object,
+ $data,
?string $format = null,
array $context = []
): array|ArrayObject|bool|float|int|string|null {
@@ -61,8 +61,8 @@ public function normalize(
}
}
- if ($object->hasResourceNode()) {
- $resourceNode = $object->getResourceNode();
+ if ($data->hasResourceNode()) {
+ $resourceNode = $data->getResourceNode();
if ($resourceNode->hasResourceFile()) {
$params = [
@@ -83,16 +83,16 @@ public function normalize(
// if ($getFile) {
// Get all links from resource.
- if ($object instanceof AbstractResource) {
- $object->setResourceLinkListFromEntity();
- $object->contentUrl = $this->generator->generate('chamilo_core_resource_view', $params);
- $object->downloadUrl = $this->generator->generate('chamilo_core_resource_download', $params);
+ if ($data instanceof AbstractResource) {
+ $data->setResourceLinkListFromEntity();
+ $data->contentUrl = $this->generator->generate('chamilo_core_resource_view', $params);
+ $data->downloadUrl = $this->generator->generate('chamilo_core_resource_download', $params);
}
// }
// Get illustration of a resource, instead of looking for the node children to get the illustration.
- if ($object instanceof ResourceIllustrationInterface) {
- $object->illustrationUrl = $this->illustrationRepository->getIllustrationUrl($object);
+ if ($data instanceof ResourceIllustrationInterface) {
+ $data->illustrationUrl = $this->illustrationRepository->getIllustrationUrl($data);
}
// This gets the file contents, usually use to get HTML/Text data to be edited.
@@ -100,13 +100,13 @@ public function normalize(
&& $resourceNode->hasResourceFile()
&& $resourceNode->hasEditableTextContent()
) {
- $object->contentFile = $this->resourceNodeRepository->getResourceNodeFileContent(
+ $data->contentFile = $this->resourceNodeRepository->getResourceNodeFileContent(
$resourceNode
);
}
}
- return $this->normalizer->normalize($object, $format, $context);
+ return $this->normalizer->normalize($data, $format, $context);
}
public function supportsNormalization($data, ?string $format = null, array $context = []): bool
diff --git a/src/CoreBundle/Serializer/StudentPublicationCommentAiAssistedNormalizer.php b/src/CoreBundle/Serializer/StudentPublicationCommentAiAssistedNormalizer.php
index 24fbb65c2f0..ba9e5fa8f6d 100644
--- a/src/CoreBundle/Serializer/StudentPublicationCommentAiAssistedNormalizer.php
+++ b/src/CoreBundle/Serializer/StudentPublicationCommentAiAssistedNormalizer.php
@@ -33,30 +33,30 @@ public function supportsNormalization($data, ?string $format = null, array $cont
return $data instanceof CStudentPublicationComment;
}
- public function normalize($object, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
+ public function normalize($data, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
{
$context[self::ALREADY_CALLED] = true;
- $data = $this->normalizer->normalize($object, $format, $context);
+ $result = $this->normalizer->normalize($data, $format, $context);
- if (!\is_array($data) || !$object instanceof CStudentPublicationComment) {
- return $data;
+ if (!\is_array($result) || !$data instanceof CStudentPublicationComment) {
+ return $result;
}
- $iid = (int) ($object->getIid() ?? 0);
+ $iid = (int) ($data->getIid() ?? 0);
if ($iid <= 0) {
- $data['ai_assisted_raw'] = false;
- $data['ai_assisted'] = false;
+ $result['ai_assisted_raw'] = false;
+ $result['ai_assisted'] = false;
- return $data;
+ return $result;
}
$raw = $this->aiDisclosureHelper->isAiAssistedExtraField(self::HANDLER, $iid);
- $data['ai_assisted_raw'] = (bool) $raw;
- $data['ai_assisted'] = $this->aiDisclosureHelper->isDisclosureEnabled() && (bool) $raw;
+ $result['ai_assisted_raw'] = (bool) $raw;
+ $result['ai_assisted'] = $this->aiDisclosureHelper->isDisclosureEnabled() && (bool) $raw;
- return $data;
+ return $result;
}
public function getSupportedTypes(?string $format): array
diff --git a/src/CoreBundle/Serializer/UserWebserviceFieldNormalizer.php b/src/CoreBundle/Serializer/UserWebserviceFieldNormalizer.php
index e293503962a..1a4a020ef14 100644
--- a/src/CoreBundle/Serializer/UserWebserviceFieldNormalizer.php
+++ b/src/CoreBundle/Serializer/UserWebserviceFieldNormalizer.php
@@ -37,29 +37,29 @@ public function __construct(
private readonly Connection $connection
) {}
- public function normalize(mixed $object, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
+ public function normalize(mixed $data, ?string $format = null, array $context = []): array|ArrayObject|bool|float|int|string|null
{
$context[self::ALREADY_CALLED] = true;
- $data = $this->normalizer->normalize($object, $format, $context);
+ $result = $this->normalizer->normalize($data, $format, $context);
- if (!$object instanceof User || !\is_array($data)) {
- return $data;
+ if (!$data instanceof User || !\is_array($result)) {
+ return $result;
}
$fieldName = trim((string) $this->settingsManager->getSetting('webservice.webservice_return_user_field'));
if ('' === $fieldName || 'false' === strtolower($fieldName)) {
- return $data;
+ return $result;
}
- $value = $this->resolveUserWebserviceField($object, $fieldName);
+ $value = $this->resolveUserWebserviceField($data, $fieldName);
if (null !== $value && '' !== $value) {
- $data['webserviceUserId'] = $value;
+ $result['webserviceUserId'] = $value;
}
- return $data;
+ return $result;
}
public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
diff --git a/src/CoreBundle/Service/LearningPath/LearningPathQuickTestService.php b/src/CoreBundle/Service/LearningPath/LearningPathQuickTestService.php
index f8c0ec4317f..2c378f3f78f 100644
--- a/src/CoreBundle/Service/LearningPath/LearningPathQuickTestService.php
+++ b/src/CoreBundle/Service/LearningPath/LearningPathQuickTestService.php
@@ -324,6 +324,9 @@ private function normalizeDocumentText(string $html): string
return mb_substr($text, 0, self::MAX_CONTENT_LENGTH);
}
+ /**
+ * @psalm-suppress UndefinedFunction
+ */
private function tryNormalizeAiken(string $generated): ?string
{
$this->loadAikenImporter();
@@ -437,6 +440,9 @@ private function normalizeAikenSyntax(string $generated): string
return trim(implode("\n", $normalizedLines));
}
+ /**
+ * @psalm-suppress UndefinedFunction
+ */
private function importAiken(string $aiken, string $title, string $providerName): int
{
$this->loadAikenImporter();