1717use phpDocumentor \Guides \Compiler \CompilerPass ;
1818use phpDocumentor \Guides \Nodes \DocumentNode ;
1919use phpDocumentor \Guides \Nodes \DocumentTree \DocumentEntryNode ;
20+ use phpDocumentor \Guides \Nodes \DocumentTree \EntryNode ;
2021use phpDocumentor \Guides \Nodes \DocumentTree \ExternalEntryNode ;
2122use phpDocumentor \Guides \Nodes \Menu \ExternalMenuEntryNode ;
2223use phpDocumentor \Guides \Nodes \Menu \InternalMenuEntryNode ;
@@ -118,10 +119,11 @@ private function getMenuEntryWithChildren(CompilerContext $compilerContext, Menu
118119 return $ newMenuEntry ;
119120 }
120121
122+ /** @param EntryNode<DocumentEntryNode|ExternalEntryNode>|ExternalEntryNode $entryNode */
121123 private function addSubEntries (
122124 CompilerContext $ compilerContext ,
123125 MenuEntryNode $ sectionMenuEntry ,
124- DocumentEntryNode | ExternalEntryNode $ entryNode ,
126+ EntryNode $ entryNode ,
125127 int $ currentLevel ,
126128 int $ maxDepth ,
127129 ): void {
@@ -138,26 +140,40 @@ private function addSubEntries(
138140 }
139141
140142 foreach ($ entryNode ->getMenuEntries () as $ subEntryNode ) {
141- if ($ subEntryNode instanceof DocumentEntryNode) {
142- $ subMenuEntry = new InternalMenuEntryNode (
143- $ subEntryNode ->getFile (),
144- $ subEntryNode ->getTitle (),
145- [],
146- false ,
147- $ currentLevel ,
148- '' ,
149- );
150- $ sectionMenuEntry ->addMenuEntry ($ subMenuEntry );
151- $ this ->addSubEntries ($ compilerContext , $ subMenuEntry , $ subEntryNode , $ currentLevel + 1 , $ maxDepth );
152- } elseif ($ subEntryNode instanceof ExternalEntryNode) {
153- $ subMenuEntry = new ExternalMenuEntryNode (
154- $ subEntryNode ->getValue (),
155- TitleNode::fromString ($ subEntryNode ->getTitle ()),
156- $ currentLevel ,
157- );
158- $ sectionMenuEntry ->addMenuEntry ($ subMenuEntry );
159- $ this ->addSubEntries ($ compilerContext , $ subMenuEntry , $ subEntryNode , $ currentLevel + 1 , $ maxDepth );
160- }
143+ $ subMenuEntry = match ($ subEntryNode ::class) {
144+ DocumentEntryNode::class => $ this ->createInternalMenuEntry ($ subEntryNode , $ currentLevel ),
145+ ExternalEntryNode::class => $ this ->createExternalMenuEntry ($ subEntryNode , $ currentLevel ),
146+ };
147+
148+ $ sectionMenuEntry ->addMenuEntry ($ subMenuEntry );
149+ $ this ->addSubEntries (
150+ $ compilerContext ,
151+ $ subMenuEntry ,
152+ $ subEntryNode ,
153+ $ currentLevel + 1 ,
154+ $ maxDepth ,
155+ );
161156 }
162157 }
158+
159+ private function createInternalMenuEntry (DocumentEntryNode $ subEntryNode , int $ currentLevel ): InternalMenuEntryNode
160+ {
161+ return new InternalMenuEntryNode (
162+ $ subEntryNode ->getFile (),
163+ $ subEntryNode ->getTitle (),
164+ [],
165+ false ,
166+ $ currentLevel ,
167+ '' ,
168+ );
169+ }
170+
171+ private function createExternalMenuEntry (ExternalEntryNode $ subEntryNode , int $ currentLevel ): ExternalMenuEntryNode
172+ {
173+ return new ExternalMenuEntryNode (
174+ $ subEntryNode ->getValue (),
175+ TitleNode::fromString ($ subEntryNode ->getTitle ()),
176+ $ currentLevel ,
177+ );
178+ }
163179}
0 commit comments