/** * Add any functions from the FunctionSignatureMap that aren't * defined in this version of PHP to the code base * * @return void */ private function addUndefinedFunctionSignatures() { $function_signature_map = UnionType::internalFunctionSignatureMap(); foreach ($function_signature_map as $function_name => $signature) { $fqsen = FullyQualifiedFunctionName::make('\\', $function_name); // If we already loaded the function, skip it if ($this->hasMethod($fqsen)) { continue; } // Add each method returned for the signature foreach (Method::methodListFromSignature($this, $fqsen, $signature) as $method) { $this->addMethod($method); } } }
/** * @param string $scope * The scope of the method or function * * @param string $name * The name of the method (with an optional alternate id) * * @return bool */ private function hasMethodWithScopeAndName(string $scope, string $name) { if (!empty($this->method_map[$scope][$name])) { return true; } // For elements in the root namespace, check to see if // there's a static method signature for something that // hasn't been loaded into memory yet and create a // method out of it as its requested if ('\\' == $scope) { $function_signature_map = UnionType::internalFunctionSignatureMap(); $fqsen = FullyQualifiedFunctionName::make($scope, $name); if (!empty($function_signature_map[$name])) { $signature = $function_signature_map[$name]; // Add each method returned for the signature foreach (FunctionFactory::functionListFromSignature($this, $fqsen, $signature) as $method) { $this->addMethod($method); } return true; } } if (Database::isEnabled()) { // Otherwise, check the database try { MethodModel::read(Database::get(), $scope . '|' . $name); return true; } catch (NotFoundException $exception) { return false; } } else { return false; } }
/** * @param FullyQualifiedFunctionName * The FQSEN of a function we'd like to look up * * @return bool * If the FQSEN represents an internal function that * hasn't been loaded yet, true is returned. */ private function hasInternalFunctionWithFQSEN(FullyQualifiedFunctionName $fqsen) : bool { // Only root namespaced functions will be found in // the internal function map. if ($fqsen->getNamespace() != '\\') { return false; } // For elements in the root namespace, check to see if // there's a static method signature for something that // hasn't been loaded into memory yet and create a // method out of it as its requested $function_signature_map = UnionType::internalFunctionSignatureMap(); if (!empty($function_signature_map[$fqsen->getNameWithAlternateId()])) { $signature = $function_signature_map[$fqsen->getNameWithAlternateId()]; // Add each method returned for the signature foreach (FunctionFactory::functionListFromSignature($this, $fqsen, $signature) as $i => $function) { $this->addFunction($function); } return true; } return false; }