@@ -352,11 +352,21 @@ private static function bindSingleTemplateArgument(
352352 return null ;
353353 }
354354
355+ $ expectedTypeNode = $ typeNode ->genericTypes [$ index ];
356+
357+ if ($ expectedTypeNode instanceof IdentifierTypeNode) {
358+ $ isBuiltIn = SpecialTypeResolver::isBuiltInTypeKeyword ($ expectedTypeNode ->name );
359+ $ isRealType = class_exists ($ expectedTypeNode ->name ) || interface_exists ($ expectedTypeNode ->name ) || enum_exists ($ expectedTypeNode ->name ) || trait_exists ($ expectedTypeNode ->name );
360+
361+ if (! $ isBuiltIn && ! $ isRealType ) {
362+ return null ;
363+ }
364+ }
365+
355366 if (self ::$ instanceTemplateBindings === null ) {
356367 self ::$ instanceTemplateBindings = new WeakMap ();
357368 }
358369
359- $ expectedTypeNode = $ typeNode ->genericTypes [$ index ];
360370 $ usageVariance = $ typeNode ->variances [$ index ] ?? GenericTypeNode::VARIANCE_INVARIANT ;
361371 $ declaredVariance = $ classVariances [$ templateTag ->name ] ?? GenericTypeNode::VARIANCE_INVARIANT ;
362372
@@ -505,8 +515,17 @@ private static function bindInheritedGenericTag(
505515 if (isset ($ genericTypeNode ->genericTypes [$ idx ])) {
506516 $ resolved = self ::resolveTypeNodeAst ($ genericTypeNode ->genericTypes [$ idx ], $ hierClass );
507517
508- if ($ resolved instanceof IdentifierTypeNode && isset ($ declaredTemplateNames [$ resolved ->name ])) {
509- continue ;
518+ if ($ resolved instanceof IdentifierTypeNode) {
519+ $ isBuiltIn = SpecialTypeResolver::isBuiltInTypeKeyword ($ resolved ->name );
520+ $ isRealType = class_exists ($ resolved ->name ) || interface_exists ($ resolved ->name ) || enum_exists ($ resolved ->name ) || trait_exists ($ resolved ->name );
521+
522+ if (! $ isBuiltIn && ! $ isRealType ) {
523+ continue ;
524+ }
525+
526+ if (isset ($ declaredTemplateNames [$ resolved ->name ])) {
527+ continue ;
528+ }
510529 }
511530
512531 $ bindings [$ templateName ] = $ resolved ;
@@ -837,4 +856,4 @@ private static function getTypeParserComponents(): array
837856
838857 return [$ typeParser , $ lexer ];
839858 }
840- }
859+ }
0 commit comments