$methodsByBaseName = []; $notFounded = []; foreach ($seleniumCommands as $methodFullName => $returnType) { // Create model of available method $method = models\Method::createNew(); $method->name = $methodFullName; $method->type = models\Method::determineTypeByName($methodFullName); $method->subtype = models\Method::determineSubtypeByName($methodFullName); $method->returnValue = models\ReturnValue::createNew(); $method->returnValue->type = $returnType; // Search of description in manual/parsed docs $documentedMethod = null; if (array_key_exists($methodFullName, $manualMethodsDescription)) { $documentedMethod = $manualMethodsDescription[$methodFullName]; } elseif ($foundMethod = $parser->getMethodByBaseName($method->getBaseName(true))) { $documentedMethod = $generator->createNewMethodWithName($foundMethod, $method->name); // convert to target method $documentedMethod->returnValue->type = $returnType; // selenium documentation has no info about php variable type } if ($documentedMethod) { $methodsByBaseName[$method->getBaseName()][] = $documentedMethod; } else { $notFounded[$method->getBaseName()][] = $method->name; } } // Add "see also" cross links (between methods of same group) foreach ($methodsByBaseName as $methodBaseName => $methodsGroup) { $seeLinks = []; foreach ($methodsGroup as $method) { $linkDescription = '';