From 426a31594d6d36f4df37d65f3149720dcc923e26 Mon Sep 17 00:00:00 2001 From: Jan Vernieuwe Date: Fri, 17 Dec 2021 14:17:39 +0100 Subject: [PATCH] Don't import known types Fixes #337 --- .../Assembler/ClientMethodAssembler.php | 4 ++ .../Assembler/ClientMethodAssemblerTest.php | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/Phpro/SoapClient/CodeGenerator/Assembler/ClientMethodAssembler.php b/src/Phpro/SoapClient/CodeGenerator/Assembler/ClientMethodAssembler.php index 63712689..525c946c 100644 --- a/src/Phpro/SoapClient/CodeGenerator/Assembler/ClientMethodAssembler.php +++ b/src/Phpro/SoapClient/CodeGenerator/Assembler/ClientMethodAssembler.php @@ -12,6 +12,7 @@ use Phpro\SoapClient\CodeGenerator\LaminasCodeFactory\DocBlockGeneratorFactory; use Phpro\SoapClient\CodeGenerator\Model\ClientMethod; use Phpro\SoapClient\CodeGenerator\Util\Normalizer; +use Phpro\SoapClient\CodeGenerator\Util\TypeChecker; use Phpro\SoapClient\Exception\AssemblerException; use Phpro\SoapClient\Exception\SoapException; use Phpro\SoapClient\Type\MultiArgumentRequest; @@ -213,6 +214,9 @@ private function generateSingleArgumentDocblock(ClientMethodContext $context): D */ protected function generateClassNameAndAddImport(string $fqcn, ClassGenerator $class, $prefixed = false): string { + if (TypeChecker::isKnownType($fqcn)) { + return $fqcn; + } $prefix = ''; $fqcn = ltrim($fqcn, '\\'); $parts = explode('\\', $fqcn); diff --git a/test/PhproTest/SoapClient/Unit/CodeGenerator/Assembler/ClientMethodAssemblerTest.php b/test/PhproTest/SoapClient/Unit/CodeGenerator/Assembler/ClientMethodAssemblerTest.php index 693edf71..3c3b008e 100644 --- a/test/PhproTest/SoapClient/Unit/CodeGenerator/Assembler/ClientMethodAssemblerTest.php +++ b/test/PhproTest/SoapClient/Unit/CodeGenerator/Assembler/ClientMethodAssemblerTest.php @@ -269,4 +269,51 @@ function it_throws_an_exception_when_wrong_context_is_passed() { ); $clientMethodAssembler->assemble($context); } + + /** + * @test + */ + function it_does_not_import_known_types() { + $assembler = new ClientMethodAssembler(); + $class = new ClassGenerator(); + $class->setName('Vendor\\MyNamespace\\MyClient'); + $typeNamespace = 'Vendor\\MyTypeNamespace'; + $method = new ClientMethod( + 'Function_name', + [ + new Parameter('param', 'string'), + ], + 'return_type', + $typeNamespace + ); + + $context = new ClientMethodContext($class, $method); + $assembler->assemble($context); + + $code = $context->getClass()->generate(); + $expected = <<caller)('Function_name', \$param); + } +} + +CODE; + + $this->assertEquals($expected, $code); + } }