From 3c45afd8485f212586ec26c81b50712ada4369fc Mon Sep 17 00:00:00 2001 From: Tyler Christensen Date: Mon, 24 Apr 2023 12:25:31 -0600 Subject: [PATCH] php8: resolve union types in NamespaceResolver --- pkg/visitor/nsresolver/namespace_resolver.go | 6 ++++++ pkg/visitor/nsresolver/namespace_resolver_test.go | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/pkg/visitor/nsresolver/namespace_resolver.go b/pkg/visitor/nsresolver/namespace_resolver.go index 6fd667c..865b2f4 100644 --- a/pkg/visitor/nsresolver/namespace_resolver.go +++ b/pkg/visitor/nsresolver/namespace_resolver.go @@ -278,6 +278,12 @@ func (nsr *NamespaceResolver) ResolveType(n ast.Vertex) { switch nn := n.(type) { case *ast.Nullable: nsr.ResolveType(nn.Expr) + + case *ast.Union: + for _, nnn := range nn.Types { + nsr.ResolveType(nnn) + } + case *ast.Name: nsr.ResolveName(n, "") case *ast.NameRelative: diff --git a/pkg/visitor/nsresolver/namespace_resolver_test.go b/pkg/visitor/nsresolver/namespace_resolver_test.go index da58a79..8220b56 100644 --- a/pkg/visitor/nsresolver/namespace_resolver_test.go +++ b/pkg/visitor/nsresolver/namespace_resolver_test.go @@ -540,6 +540,8 @@ func TestResolveFunctionName(t *testing.T) { func TestResolveMethodName(t *testing.T) { nameAB := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("A")}, &ast.NamePart{Value: []byte("B")}}} nameBC := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("B")}, &ast.NamePart{Value: []byte("C")}}} + nameCD := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("C")}, &ast.NamePart{Value: []byte("D")}}} + nameDE := &ast.Name{Parts: []ast.Vertex{&ast.NamePart{Value: []byte("D")}, &ast.NamePart{Value: []byte("E")}}} methodNode := &ast.StmtClassMethod{ Name: &ast.Identifier{Value: []byte("A")}, @@ -548,6 +550,10 @@ func TestResolveMethodName(t *testing.T) { Type: nameAB, Var: &ast.ExprVariable{Name: &ast.Identifier{Value: []byte("foo")}}, }, + &ast.Parameter{ + Type: &ast.Union{Types: []ast.Vertex{nameCD, nameDE}}, + Var: &ast.ExprVariable{Name: &ast.Identifier{Value: []byte("all")}}, + }, }, ReturnType: &ast.Nullable{Expr: nameBC}, Stmt: &ast.StmtStmtList{ @@ -558,6 +564,8 @@ func TestResolveMethodName(t *testing.T) { expected := map[ast.Vertex]string{ nameAB: "A\\B", nameBC: "B\\C", + nameCD: "C\\D", + nameDE: "D\\E", } nsResolver := nsresolver.NewNamespaceResolver()