Skip to content

Commit 1cf25c2

Browse files
Expose more internal type inference related APIs (#1006)
* expose more internals * Fix styling --------- Co-authored-by: romalytvynenko <[email protected]>
1 parent 0c4a172 commit 1cf25c2

File tree

5 files changed

+17
-8
lines changed

5 files changed

+17
-8
lines changed

src/Generator.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Dedoc\Scramble\Support\Generator\Reference;
1818
use Dedoc\Scramble\Support\Generator\Server;
1919
use Dedoc\Scramble\Support\Generator\TypeTransformer;
20+
use Dedoc\Scramble\Support\Generator\UniqueNameOptions;
2021
use Dedoc\Scramble\Support\Generator\UniqueNamesOptionsCollection;
2122
use Dedoc\Scramble\Support\OperationBuilder;
2223
use Dedoc\Scramble\Support\RouteInfo;
@@ -314,12 +315,15 @@ private function setUniqueOperationId(OpenApi $openApi)
314315
}
315316

316317
$name = $operation->getAttribute('operationId');
318+
if (! $name instanceof UniqueNameOptions) {
319+
return;
320+
}
317321

318322
if (! $name->eloquent && $operation->getAttribute('isClosure')) {
319323
return;
320324
}
321325

322-
$operation->setOperationId($names->getUniqueName($name, function (string $fallback) use ($index) { // @phpstan-ignore argument.type
326+
$operation->setOperationId($names->getUniqueName($name, function (string $fallback) use ($index) {
323327
return "{$fallback}_{$index}";
324328
}));
325329
});

src/Infer/Reflector/MethodReflector.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public static function make(string $className, string $name)
3434
);
3535
}
3636

37+
public function getNameContext(): NameContext
38+
{
39+
return $this->getClassReflector()->getNameContext();
40+
}
41+
3742
public function getMethodCode(): string
3843
{
3944
$reflection = $this->getReflection();

src/Support/Helpers/JsonResourceHelper.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Dedoc\Scramble\Support\Helpers;
44

55
use Dedoc\Scramble\Infer\Definition\ClassDefinition;
6-
use Dedoc\Scramble\Infer\Scope\Scope;
6+
use Dedoc\Scramble\Infer\Reflector\ClassReflector;
77
use Dedoc\Scramble\Infer\Services\FileNameResolver;
88
use Dedoc\Scramble\Support\Type\ObjectType;
99
use Dedoc\Scramble\Support\Type\Type;
@@ -18,7 +18,7 @@ class JsonResourceHelper
1818
/**
1919
* @internal
2020
*/
21-
public static function modelType(ClassDefinition $jsonClass, Scope $scope): ?Type
21+
public static function modelType(ClassDefinition $jsonClass): ?Type
2222
{
2323
if ($cachedModelType = static::$jsonResourcesModelTypesCache[$jsonClass->name] ?? null) {
2424
return $cachedModelType;
@@ -27,7 +27,7 @@ public static function modelType(ClassDefinition $jsonClass, Scope $scope): ?Typ
2727
$modelClass = static::getModelName(
2828
$jsonClass->name,
2929
new \ReflectionClass($jsonClass->name),
30-
$scope->nameResolver,
30+
new FileNameResolver(ClassReflector::make($jsonClass->name)->getNameContext()),
3131
);
3232

3333
$modelType = new UnknownType("Cannot resolve [$modelClass] model type.");

src/Support/InferExtensions/JsonResourceExtension.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public function getStaticMethodReturnType(StaticMethodCallEvent $event): ?Type
178178
public function getPropertyType(PropertyFetchEvent $event): ?Type
179179
{
180180
return match ($event->name) {
181-
'resource' => JsonResourceHelper::modelType($event->getDefinition(), $event->scope),
181+
'resource' => JsonResourceHelper::modelType($event->getDefinition()),
182182
default => ! $event->getDefinition() || $event->getDefinition()->hasPropertyDefinition($event->name)
183183
? null
184184
: $this->getModelPropertyType($event->getDefinition(), $event->name, $event->scope),
@@ -190,7 +190,7 @@ private function getModelPropertyType(ClassDefinition $jsonResourceDefinition, s
190190
return ReferenceTypeResolver::getInstance()->resolve(
191191
$scope,
192192
new PropertyFetchReferenceType(
193-
JsonResourceHelper::modelType($jsonResourceDefinition, $scope),
193+
JsonResourceHelper::modelType($jsonResourceDefinition),
194194
$name,
195195
),
196196
);
@@ -203,7 +203,7 @@ private function proxyMethodCallToModel(MethodCallEvent $event): Type
203203

204204
private function getModelMethodReturn(string $resourceClassName, string $methodName, ArgumentTypeBag $arguments, Scope $scope): Type
205205
{
206-
$modelType = JsonResourceHelper::modelType($scope->index->getClass($resourceClassName), $scope);
206+
$modelType = JsonResourceHelper::modelType($scope->index->getClass($resourceClassName));
207207

208208
$argumentsList = $arguments instanceof AutoResolvingArgumentTypeBag
209209
? $arguments->allUnresolved()

src/Support/RouteInfo.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public function getReturnType()
156156
return (new RouteResponseTypeRetriever($this))->getResponseType();
157157
}
158158

159-
protected function getActionReflector(): MethodReflector|ClosureReflector
159+
public function getActionReflector(): MethodReflector|ClosureReflector
160160
{
161161
if ($this->isClassBased()) {
162162
return MethodReflector::make(...explode('@', $this->route->getAction('uses')));

0 commit comments

Comments
 (0)