Merge branch 'master' into return-self
						commit
						7060b5f7e4
					
				| 
						 | 
					@ -19,6 +19,12 @@ and an [event loop](http://sabre.io/event/loop/) for concurrency.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Features
 | 
					## Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### [Completion](https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textDocument_completion)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### [Signature Help](https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textDocument_signatureHelp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### [Go To Definition](https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#goto-definition-request)
 | 
					### [Go To Definition](https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#goto-definition-request)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,66 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Foo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Test
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor comment goes here
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string $first  First param
 | 
				
			||||||
 | 
					     * @param int    $second Second param
 | 
				
			||||||
 | 
					     * @param Test   $third  Third param with a longer description
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function __construct(string $first, int $second, Test $third)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Function doc
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param SomethingElse $a A param with a different doc type
 | 
				
			||||||
 | 
					     * @param int|null      $b Param with default value
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function foo(\DateTime $a, int $b = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static function bar($a)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method with no params
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function baz()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @param int  $i Global function param one
 | 
				
			||||||
 | 
					 * @param bool $b Default false param
 | 
				
			||||||
 | 
					 * @param Test|null ...$things Test things
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function foo(int $i, bool $b = false, Test ...$things = null)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$t = new Test();
 | 
				
			||||||
 | 
					$t = new Test(1, );
 | 
				
			||||||
 | 
					$t->foo();
 | 
				
			||||||
 | 
					$t->foo(1,  
 | 
				
			||||||
 | 
					$t->foo(1,);
 | 
				
			||||||
 | 
					$t->baz();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foo(
 | 
				
			||||||
 | 
					    1,
 | 
				
			||||||
 | 
					    foo(1, 2,  
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test::bar();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new $foo();
 | 
				
			||||||
 | 
					new $foo(1, );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new NotExist();
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 158 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 316 KiB  | 
| 
						 | 
					@ -99,6 +99,13 @@ class Definition
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public $documentation;
 | 
					    public $documentation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Signature information if this definition is for a FunctionLike, for use in textDocument/signatureHelp
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var SignatureInformation
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $signatureInformation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Yields the definitons of all ancestor classes (the Definition fqn is yielded as key)
 | 
					     * Yields the definitons of all ancestor classes (the Definition fqn is yielded as key)
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ use LanguageServer\Index\ReadableIndex;
 | 
				
			||||||
use LanguageServer\Protocol\SymbolInformation;
 | 
					use LanguageServer\Protocol\SymbolInformation;
 | 
				
			||||||
use Microsoft\PhpParser;
 | 
					use Microsoft\PhpParser;
 | 
				
			||||||
use Microsoft\PhpParser\Node;
 | 
					use Microsoft\PhpParser\Node;
 | 
				
			||||||
 | 
					use Microsoft\PhpParser\FunctionLike;
 | 
				
			||||||
use phpDocumentor\Reflection\{
 | 
					use phpDocumentor\Reflection\{
 | 
				
			||||||
    DocBlock, DocBlockFactory, Fqsen, Type, TypeResolver, Types
 | 
					    DocBlock, DocBlockFactory, Fqsen, Type, TypeResolver, Types
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -34,6 +35,13 @@ class DefinitionResolver
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private $docBlockFactory;
 | 
					    private $docBlockFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Creates SignatureInformation
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var SignatureInformationFactory
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private $signatureInformationFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @param ReadableIndex $index
 | 
					     * @param ReadableIndex $index
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -42,6 +50,7 @@ class DefinitionResolver
 | 
				
			||||||
        $this->index = $index;
 | 
					        $this->index = $index;
 | 
				
			||||||
        $this->typeResolver = new TypeResolver;
 | 
					        $this->typeResolver = new TypeResolver;
 | 
				
			||||||
        $this->docBlockFactory = DocBlockFactory::createInstance();
 | 
					        $this->docBlockFactory = DocBlockFactory::createInstance();
 | 
				
			||||||
 | 
					        $this->signatureInformationFactory = new SignatureInformationFactory($this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -232,6 +241,10 @@ class DefinitionResolver
 | 
				
			||||||
            $def->documentation = $this->getDocumentationFromNode($node);
 | 
					            $def->documentation = $this->getDocumentationFromNode($node);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($node instanceof FunctionLike) {
 | 
				
			||||||
 | 
					            $def->signatureInformation = $this->signatureInformationFactory->create($node);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $def;
 | 
					        return $def;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,8 @@ use LanguageServer\Protocol\{
 | 
				
			||||||
    TextDocumentSyncKind,
 | 
					    TextDocumentSyncKind,
 | 
				
			||||||
    Message,
 | 
					    Message,
 | 
				
			||||||
    InitializeResult,
 | 
					    InitializeResult,
 | 
				
			||||||
    CompletionOptions
 | 
					    CompletionOptions,
 | 
				
			||||||
 | 
					    SignatureHelpOptions
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use LanguageServer\FilesFinder\{FilesFinder, ClientFilesFinder, FileSystemFilesFinder};
 | 
					use LanguageServer\FilesFinder\{FilesFinder, ClientFilesFinder, FileSystemFilesFinder};
 | 
				
			||||||
use LanguageServer\ContentRetriever\{ContentRetriever, ClientContentRetriever, FileSystemContentRetriever};
 | 
					use LanguageServer\ContentRetriever\{ContentRetriever, ClientContentRetriever, FileSystemContentRetriever};
 | 
				
			||||||
| 
						 | 
					@ -275,6 +276,10 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
 | 
				
			||||||
            $serverCapabilities->completionProvider = new CompletionOptions;
 | 
					            $serverCapabilities->completionProvider = new CompletionOptions;
 | 
				
			||||||
            $serverCapabilities->completionProvider->resolveProvider = false;
 | 
					            $serverCapabilities->completionProvider->resolveProvider = false;
 | 
				
			||||||
            $serverCapabilities->completionProvider->triggerCharacters = ['$', '>'];
 | 
					            $serverCapabilities->completionProvider->triggerCharacters = ['$', '>'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $serverCapabilities->signatureHelpProvider = new SignatureHelpOptions();
 | 
				
			||||||
 | 
					            $serverCapabilities->signatureHelpProvider->triggerCharacters = ['(', ','];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Support global references
 | 
					            // Support global references
 | 
				
			||||||
            $serverCapabilities->xworkspaceReferencesProvider = true;
 | 
					            $serverCapabilities->xworkspaceReferencesProvider = true;
 | 
				
			||||||
            $serverCapabilities->xdefinitionProvider = true;
 | 
					            $serverCapabilities->xdefinitionProvider = true;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,4 +23,17 @@ class ParameterInformation
 | 
				
			||||||
     * @var string|null
 | 
					     * @var string|null
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public $documentation;
 | 
					    public $documentation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Create ParameterInformation
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string $label         The label of this signature. Will be shown in the UI.
 | 
				
			||||||
 | 
					     * @param string $documentation The human-readable doc-comment of this signature. Will be shown in the UI but can
 | 
				
			||||||
 | 
					     *                              be omitted.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function __construct(string $label, string $documentation = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->label = $label;
 | 
				
			||||||
 | 
					        $this->documentation = $documentation;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,4 +29,18 @@ class SignatureHelp
 | 
				
			||||||
     * @var int|null
 | 
					     * @var int|null
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public $activeParameter;
 | 
					    public $activeParameter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Create a SignatureHelp
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param SignatureInformation[] $signatures      List of signature information
 | 
				
			||||||
 | 
					     * @param int|null               $activeSignature The active signature, zero based
 | 
				
			||||||
 | 
					     * @param int|null               $activeParameter The active parameter, zero based
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function __construct(array $signatures = [], $activeSignature = null, int $activeParameter = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->signatures = $signatures;
 | 
				
			||||||
 | 
					        $this->activeSignature = $activeSignature;
 | 
				
			||||||
 | 
					        $this->activeParameter = $activeParameter;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,4 +31,19 @@ class SignatureInformation
 | 
				
			||||||
     * @var ParameterInformation[]|null
 | 
					     * @var ParameterInformation[]|null
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public $parameters;
 | 
					    public $parameters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Create a SignatureInformation
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string $label               The label of this signature. Will be shown in the UI.
 | 
				
			||||||
 | 
					     * @param ParameterInformation[]|null The parameters of this signature
 | 
				
			||||||
 | 
					     * @param string|null                 The human-readable doc-comment of this signature. Will be shown in the UI
 | 
				
			||||||
 | 
					     *                                    but can be omitted.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function __construct(string $label, array $parameters = null, string $documentation = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->label = $label;
 | 
				
			||||||
 | 
					        $this->parameters = $parameters;
 | 
				
			||||||
 | 
					        $this->documentation = $documentation;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ declare(strict_types = 1);
 | 
				
			||||||
namespace LanguageServer\Server;
 | 
					namespace LanguageServer\Server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use LanguageServer\{
 | 
					use LanguageServer\{
 | 
				
			||||||
    CompletionProvider, LanguageClient, PhpDocument, PhpDocumentLoader, DefinitionResolver
 | 
					    CompletionProvider, SignatureHelpProvider, LanguageClient, PhpDocument, PhpDocumentLoader, DefinitionResolver
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use LanguageServer\Index\ReadableIndex;
 | 
					use LanguageServer\Index\ReadableIndex;
 | 
				
			||||||
use LanguageServer\Protocol\{
 | 
					use LanguageServer\Protocol\{
 | 
				
			||||||
| 
						 | 
					@ -59,6 +59,11 @@ class TextDocument
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected $completionProvider;
 | 
					    protected $completionProvider;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var SignatureHelpProvider
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected $signatureHelpProvider;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @var ReadableIndex
 | 
					     * @var ReadableIndex
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -94,6 +99,7 @@ class TextDocument
 | 
				
			||||||
        $this->client = $client;
 | 
					        $this->client = $client;
 | 
				
			||||||
        $this->definitionResolver = $definitionResolver;
 | 
					        $this->definitionResolver = $definitionResolver;
 | 
				
			||||||
        $this->completionProvider = new CompletionProvider($this->definitionResolver, $index);
 | 
					        $this->completionProvider = new CompletionProvider($this->definitionResolver, $index);
 | 
				
			||||||
 | 
					        $this->signatureHelpProvider = new SignatureHelpProvider($this->definitionResolver, $index, $documentLoader);
 | 
				
			||||||
        $this->index = $index;
 | 
					        $this->index = $index;
 | 
				
			||||||
        $this->composerJson = $composerJson;
 | 
					        $this->composerJson = $composerJson;
 | 
				
			||||||
        $this->composerLock = $composerLock;
 | 
					        $this->composerLock = $composerLock;
 | 
				
			||||||
| 
						 | 
					@ -237,6 +243,23 @@ class TextDocument
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The signature help request is sent from the client to the server to request signature information at a given
 | 
				
			||||||
 | 
					     * cursor position.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param TextDocumentIdentifier $textDocument The text document
 | 
				
			||||||
 | 
					     * @param Position               $position     The position inside the text document
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Promise <SignatureHelp>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function signatureHelp(TextDocumentIdentifier $textDocument, Position $position): Promise
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return coroutine(function () use ($textDocument, $position) {
 | 
				
			||||||
 | 
					            $document = yield $this->documentLoader->getOrLoad($textDocument->uri);
 | 
				
			||||||
 | 
					            return $this->signatureHelpProvider->getSignatureHelp($document, $position);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The goto definition request is sent from the client to the server to resolve the definition location of a symbol
 | 
					     * The goto definition request is sent from the client to the server to resolve the definition location of a symbol
 | 
				
			||||||
     * at a given text document position.
 | 
					     * at a given text document position.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,189 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					declare(strict_types = 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LanguageServer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use LanguageServer\Index\ReadableIndex;
 | 
				
			||||||
 | 
					use LanguageServer\Protocol\{
 | 
				
			||||||
 | 
					    Position,
 | 
				
			||||||
 | 
					    SignatureHelp,
 | 
				
			||||||
 | 
					    SignatureInformation,
 | 
				
			||||||
 | 
					    ParameterInformation
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					use Microsoft\PhpParser;
 | 
				
			||||||
 | 
					use Microsoft\PhpParser\Node;
 | 
				
			||||||
 | 
					use Sabre\Event\Promise;
 | 
				
			||||||
 | 
					use function Sabre\Event\coroutine;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SignatureHelpProvider
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /** @var DefinitionResolver */
 | 
				
			||||||
 | 
					    private $definitionResolver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var ReadableIndex */
 | 
				
			||||||
 | 
					    private $index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PhpDocumentLoader */
 | 
				
			||||||
 | 
					    private $documentLoader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param DefinitionResolver $definitionResolver
 | 
				
			||||||
 | 
					     * @param ReadableIndex      $index
 | 
				
			||||||
 | 
					     * @param PhpDocumentLoader  $documentLoader
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function __construct(DefinitionResolver $definitionResolver, ReadableIndex $index, PhpDocumentLoader $documentLoader)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->definitionResolver = $definitionResolver;
 | 
				
			||||||
 | 
					        $this->index = $index;
 | 
				
			||||||
 | 
					        $this->documentLoader = $documentLoader;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Finds signature help for a callable position
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param PhpDocument $doc      The document the position belongs to
 | 
				
			||||||
 | 
					     * @param Position    $position The position to detect a call from
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Promise <SignatureHelp>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function getSignatureHelp(PhpDocument $doc, Position $position): Promise
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return coroutine(function () use ($doc, $position) {
 | 
				
			||||||
 | 
					            // Find the node under the cursor
 | 
				
			||||||
 | 
					            $node = $doc->getNodeAtPosition($position);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Find the definition of the item being called
 | 
				
			||||||
 | 
					            list($def, $argumentExpressionList) = yield $this->getCallingInfo($node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!$def || !$def->signatureInformation) {
 | 
				
			||||||
 | 
					                return new SignatureHelp();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Find the active parameter
 | 
				
			||||||
 | 
					            $activeParam = $argumentExpressionList
 | 
				
			||||||
 | 
					                ? $this->findActiveParameter($argumentExpressionList, $position, $doc)
 | 
				
			||||||
 | 
					                : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return new SignatureHelp([$def->signatureInformation], 0, $activeParam);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Given a node that could be a callable, finds the definition of the call and the argument expression list of
 | 
				
			||||||
 | 
					     * the node
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param Node $node The node to find calling information from
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Promise <array|null>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private function getCallingInfo(Node $node)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return coroutine(function () use ($node) {
 | 
				
			||||||
 | 
					            $fqn = null;
 | 
				
			||||||
 | 
					            $callingNode = null;
 | 
				
			||||||
 | 
					            if ($node instanceof Node\DelimitedList\ArgumentExpressionList) {
 | 
				
			||||||
 | 
					                // Cursor is already inside a (
 | 
				
			||||||
 | 
					                $argumentExpressionList = $node;
 | 
				
			||||||
 | 
					                if ($node->parent instanceof Node\Expression\ObjectCreationExpression) {
 | 
				
			||||||
 | 
					                    // Constructing something
 | 
				
			||||||
 | 
					                    $callingNode = $node->parent->classTypeDesignator;
 | 
				
			||||||
 | 
					                    if (!$callingNode instanceof Node\QualifiedName) {
 | 
				
			||||||
 | 
					                        // We only support constructing from a QualifiedName
 | 
				
			||||||
 | 
					                        return null;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    $fqn = $this->definitionResolver->resolveReferenceNodeToFqn($callingNode);
 | 
				
			||||||
 | 
					                    $fqn = "{$fqn}->__construct()";
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    $callingNode = $node->parent->getFirstChildNode(
 | 
				
			||||||
 | 
					                        Node\Expression\MemberAccessExpression::class,
 | 
				
			||||||
 | 
					                        Node\Expression\ScopedPropertyAccessExpression::class,
 | 
				
			||||||
 | 
					                        Node\QualifiedName::class
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } elseif ($node instanceof Node\Expression\CallExpression) {
 | 
				
			||||||
 | 
					                $argumentExpressionList = $node->getFirstChildNode(Node\DelimitedList\ArgumentExpressionList::class);
 | 
				
			||||||
 | 
					                $callingNode = $node->getFirstChildNode(
 | 
				
			||||||
 | 
					                    Node\Expression\MemberAccessExpression::class,
 | 
				
			||||||
 | 
					                    Node\Expression\ScopedPropertyAccessExpression::class,
 | 
				
			||||||
 | 
					                    Node\QualifiedName::class
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            } elseif ($node instanceof Node\Expression\ObjectCreationExpression) {
 | 
				
			||||||
 | 
					                $argumentExpressionList = $node->getFirstChildNode(Node\DelimitedList\ArgumentExpressionList::class);
 | 
				
			||||||
 | 
					                $callingNode = $node->classTypeDesignator;
 | 
				
			||||||
 | 
					                if (!$callingNode instanceof Node\QualifiedName) {
 | 
				
			||||||
 | 
					                    // We only support constructing from a QualifiedName
 | 
				
			||||||
 | 
					                    return null;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // Manually build the __construct fqn
 | 
				
			||||||
 | 
					                $fqn = $this->definitionResolver->resolveReferenceNodeToFqn($callingNode);
 | 
				
			||||||
 | 
					                $fqn = "{$fqn}->__construct()";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!$callingNode) {
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Now find the definition of the call
 | 
				
			||||||
 | 
					            $fqn = $fqn ?: DefinitionResolver::getDefinedFqn($callingNode);
 | 
				
			||||||
 | 
					            while (true) {
 | 
				
			||||||
 | 
					                if ($fqn) {
 | 
				
			||||||
 | 
					                    $def = $this->index->getDefinition($fqn);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    $def = $this->definitionResolver->resolveReferenceNodeToDefinition($callingNode);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if ($def !== null || $this->index->isComplete()) {
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                yield waitForEvent($this->index, 'definition-added');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!$def) {
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return [$def, $argumentExpressionList];
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Given a position and arguments, finds the "active" argument at the position
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param Node\DelimitedList\ArgumentExpressionList $argumentExpressionList The argument expression list
 | 
				
			||||||
 | 
					     * @param Position                                  $position               The position to detect the active argument from
 | 
				
			||||||
 | 
					     * @param PhpDocument                               $doc                    The document that contains the expression
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private function findActiveParameter(
 | 
				
			||||||
 | 
					        Node\DelimitedList\ArgumentExpressionList $argumentExpressionList,
 | 
				
			||||||
 | 
					        Position $position,
 | 
				
			||||||
 | 
					        PhpDocument $doc
 | 
				
			||||||
 | 
					    ): int {
 | 
				
			||||||
 | 
					        $args = $argumentExpressionList->children;
 | 
				
			||||||
 | 
					        $i = 0;
 | 
				
			||||||
 | 
					        $found = null;
 | 
				
			||||||
 | 
					        foreach ($args as $arg) {
 | 
				
			||||||
 | 
					            if ($arg instanceof Node) {
 | 
				
			||||||
 | 
					                $start = $arg->getFullStart();
 | 
				
			||||||
 | 
					                $end = $arg->getEndPosition();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $start = $arg->fullStart;
 | 
				
			||||||
 | 
					                $end = $start + $arg->length;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $offset = $position->toOffset($doc->getContent());
 | 
				
			||||||
 | 
					            if ($offset >= $start && $offset <= $end) {
 | 
				
			||||||
 | 
					                $found = $i;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if ($arg instanceof Node) {
 | 
				
			||||||
 | 
					                ++$i;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if ($found === null) {
 | 
				
			||||||
 | 
					            $found = $i;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return $found;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					declare(strict_types = 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LanguageServer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use LanguageServer\Protocol\{SignatureInformation, ParameterInformation};
 | 
				
			||||||
 | 
					use Microsoft\PhpParser\FunctionLike;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SignatureInformationFactory
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /** @var DefinitionResolver */
 | 
				
			||||||
 | 
					    private $definitionResolver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Create a SignatureInformationFactory
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param DefinitionResolver $definitionResolver
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function __construct(DefinitionResolver $definitionResolver)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->definitionResolver = $definitionResolver;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Create a SignatureInformation from a FunctionLike node
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param FunctionLike $node Node to create signature information from
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return SignatureInformation
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function create(FunctionLike $node): SignatureInformation
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $params = $this->createParameters($node);
 | 
				
			||||||
 | 
					        $label = $this->createLabel($params);
 | 
				
			||||||
 | 
					        return new SignatureInformation(
 | 
				
			||||||
 | 
					            $label,
 | 
				
			||||||
 | 
					            $params,
 | 
				
			||||||
 | 
					            $this->definitionResolver->getDocumentationFromNode($node)
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets parameters from a FunctionLike node
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param FunctionLike $node Node to get parameters from
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return ParameterInformation[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private function createParameters(FunctionLike $node): array
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $params = [];
 | 
				
			||||||
 | 
					        if ($node->parameters) {
 | 
				
			||||||
 | 
					            foreach ($node->parameters->getElements() as $element) {
 | 
				
			||||||
 | 
					                $param = (string) $this->definitionResolver->getTypeFromNode($element);
 | 
				
			||||||
 | 
					                $param .= ' ';
 | 
				
			||||||
 | 
					                if ($element->dotDotDotToken) {
 | 
				
			||||||
 | 
					                    $param .= '...';
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                $param .= '$' . $element->getName();
 | 
				
			||||||
 | 
					                if ($element->default) {
 | 
				
			||||||
 | 
					                    $param .= ' = ' . $element->default->getText();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                $params[] = new ParameterInformation(
 | 
				
			||||||
 | 
					                    $param,
 | 
				
			||||||
 | 
					                    $this->definitionResolver->getDocumentationFromNode($element)
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return $params;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Creates a signature information label from parameters
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param ParameterInformation[] $params Parameters to create the label from
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private function createLabel(array $params): string
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $label = '(';
 | 
				
			||||||
 | 
					        if ($params) {
 | 
				
			||||||
 | 
					            foreach ($params as $param) {
 | 
				
			||||||
 | 
					                $label .= $param->label . ', ';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $label = substr($label, 0, -2);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        $label .= ')';
 | 
				
			||||||
 | 
					        return $label;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,8 @@ use LanguageServer\Protocol\{
 | 
				
			||||||
    TextDocumentIdentifier,
 | 
					    TextDocumentIdentifier,
 | 
				
			||||||
    InitializeResult,
 | 
					    InitializeResult,
 | 
				
			||||||
    ServerCapabilities,
 | 
					    ServerCapabilities,
 | 
				
			||||||
    CompletionOptions
 | 
					    CompletionOptions,
 | 
				
			||||||
 | 
					    SignatureHelpOptions
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use AdvancedJsonRpc;
 | 
					use AdvancedJsonRpc;
 | 
				
			||||||
use Webmozart\Glob\Glob;
 | 
					use Webmozart\Glob\Glob;
 | 
				
			||||||
| 
						 | 
					@ -40,6 +41,8 @@ class LanguageServerTest extends TestCase
 | 
				
			||||||
        $serverCapabilities->completionProvider = new CompletionOptions;
 | 
					        $serverCapabilities->completionProvider = new CompletionOptions;
 | 
				
			||||||
        $serverCapabilities->completionProvider->resolveProvider = false;
 | 
					        $serverCapabilities->completionProvider->resolveProvider = false;
 | 
				
			||||||
        $serverCapabilities->completionProvider->triggerCharacters = ['$', '>'];
 | 
					        $serverCapabilities->completionProvider->triggerCharacters = ['$', '>'];
 | 
				
			||||||
 | 
					        $serverCapabilities->signatureHelpProvider = new SignatureHelpOptions;
 | 
				
			||||||
 | 
					        $serverCapabilities->signatureHelpProvider->triggerCharacters = ['(', ','];
 | 
				
			||||||
        $serverCapabilities->xworkspaceReferencesProvider = true;
 | 
					        $serverCapabilities->xworkspaceReferencesProvider = true;
 | 
				
			||||||
        $serverCapabilities->xdefinitionProvider = true;
 | 
					        $serverCapabilities->xdefinitionProvider = true;
 | 
				
			||||||
        $serverCapabilities->xdependenciesProvider = true;
 | 
					        $serverCapabilities->xdependenciesProvider = true;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,199 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					declare(strict_types = 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LanguageServer\Tests\Server\TextDocument;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use PHPUnit\Framework\TestCase;
 | 
				
			||||||
 | 
					use LanguageServer\Tests\MockProtocolStream;
 | 
				
			||||||
 | 
					use LanguageServer\{
 | 
				
			||||||
 | 
					    Server, LanguageClient, PhpDocumentLoader, DefinitionResolver
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					use LanguageServer\Index\{Index, ProjectIndex, DependenciesIndex};
 | 
				
			||||||
 | 
					use LanguageServer\ContentRetriever\FileSystemContentRetriever;
 | 
				
			||||||
 | 
					use LanguageServer\Protocol\{
 | 
				
			||||||
 | 
					    TextDocumentIdentifier,
 | 
				
			||||||
 | 
					    TextEdit,
 | 
				
			||||||
 | 
					    Range,
 | 
				
			||||||
 | 
					    Position,
 | 
				
			||||||
 | 
					    SignatureHelp,
 | 
				
			||||||
 | 
					    SignatureInformation,
 | 
				
			||||||
 | 
					    ParameterInformation
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					use function LanguageServer\pathToUri;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SignatureHelpTest extends TestCase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var Server\TextDocument
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private $textDocument;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var PhpDocumentLoader
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private $loader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function setUp()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
 | 
				
			||||||
 | 
					        $index = new Index();
 | 
				
			||||||
 | 
					        $projectIndex = new ProjectIndex($index, new DependenciesIndex);
 | 
				
			||||||
 | 
					        $definitionResolver = new DefinitionResolver($projectIndex);
 | 
				
			||||||
 | 
					        $contentRetriever = new FileSystemContentRetriever;
 | 
				
			||||||
 | 
					        $this->loader = new PhpDocumentLoader($contentRetriever, $projectIndex, $definitionResolver);
 | 
				
			||||||
 | 
					        $this->textDocument = new Server\TextDocument($this->loader, $definitionResolver, $client, $projectIndex);
 | 
				
			||||||
 | 
					        $index->setComplete();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dataProvider signatureHelpProvider
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function testSignatureHelp(Position $position, SignatureHelp $expectedSignature)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $callsUri = pathToUri(__DIR__ . '/../../../fixtures/signature_help/calls.php');
 | 
				
			||||||
 | 
					        $this->loader->open($callsUri, file_get_contents($callsUri));
 | 
				
			||||||
 | 
					        $signatureHelp = $this->textDocument->signatureHelp(
 | 
				
			||||||
 | 
					            new TextDocumentIdentifier($callsUri),
 | 
				
			||||||
 | 
					            $position
 | 
				
			||||||
 | 
					        )->wait();
 | 
				
			||||||
 | 
					        $this->assertEquals($expectedSignature, $signatureHelp);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function signatureHelpProvider(): array
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return [
 | 
				
			||||||
 | 
					            'member call' => [
 | 
				
			||||||
 | 
					                new Position(50, 9),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        new SignatureInformation(
 | 
				
			||||||
 | 
					                            '(\\Foo\\SomethingElse $a, int|null $b = null)',
 | 
				
			||||||
 | 
					                            [
 | 
				
			||||||
 | 
					                                new ParameterInformation('\\Foo\\SomethingElse $a', 'A param with a different doc type'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('int|null $b = null', 'Param with default value'),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                            'Function doc'
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    0
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'member call 2nd param active' => [
 | 
				
			||||||
 | 
					                new Position(51, 12),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        new SignatureInformation(
 | 
				
			||||||
 | 
					                            '(\\Foo\\SomethingElse $a, int|null $b = null)',
 | 
				
			||||||
 | 
					                            [
 | 
				
			||||||
 | 
					                                new ParameterInformation('\\Foo\\SomethingElse $a', 'A param with a different doc type'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('int|null $b = null', 'Param with default value'),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                            'Function doc'
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    1
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'member call 2nd param active and closing )' => [
 | 
				
			||||||
 | 
					                new Position(52, 11),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        new SignatureInformation(
 | 
				
			||||||
 | 
					                            '(\\Foo\\SomethingElse $a, int|null $b = null)',
 | 
				
			||||||
 | 
					                            [
 | 
				
			||||||
 | 
					                                new ParameterInformation('\\Foo\\SomethingElse $a', 'A param with a different doc type'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('int|null $b = null', 'Param with default value'),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                            'Function doc'
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    1
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'method with no params' => [
 | 
				
			||||||
 | 
					                new Position(53, 9),
 | 
				
			||||||
 | 
					                new SignatureHelp([new SignatureInformation('()', [], 'Method with no params', 0, 0)]),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'constructor' => [
 | 
				
			||||||
 | 
					                new Position(48, 14),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        new SignatureInformation(
 | 
				
			||||||
 | 
					                            '(string $first, int $second, \Foo\Test $third)',
 | 
				
			||||||
 | 
					                            [
 | 
				
			||||||
 | 
					                                new ParameterInformation('string $first', 'First param'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('int $second', 'Second param'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('\Foo\Test $third', 'Third param with a longer description'),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                            'Constructor comment goes here'
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    0
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'constructor argument expression list' => [
 | 
				
			||||||
 | 
					                new Position(49, 16),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        new SignatureInformation(
 | 
				
			||||||
 | 
					                            '(string $first, int $second, \Foo\Test $third)',
 | 
				
			||||||
 | 
					                            [
 | 
				
			||||||
 | 
					                                new ParameterInformation('string $first', 'First param'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('int $second', 'Second param'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('\Foo\Test $third', 'Third param with a longer description'),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                            'Constructor comment goes here'
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    1
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'global function' => [
 | 
				
			||||||
 | 
					                new Position(57, 15),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        new SignatureInformation(
 | 
				
			||||||
 | 
					                            '(int $i, bool $b = false, \Foo\Test|null ...$things = null)',
 | 
				
			||||||
 | 
					                            [
 | 
				
			||||||
 | 
					                                new ParameterInformation('int $i', 'Global function param one'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('bool $b = false', 'Default false param'),
 | 
				
			||||||
 | 
					                                new ParameterInformation('\Foo\Test|null ...$things = null', 'Test things'),
 | 
				
			||||||
 | 
					                            ]
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    2
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'static method' => [
 | 
				
			||||||
 | 
					                new Position(60, 10),
 | 
				
			||||||
 | 
					                new SignatureHelp(
 | 
				
			||||||
 | 
					                    [new SignatureInformation('(mixed $a)', [new ParameterInformation('mixed $a')])],
 | 
				
			||||||
 | 
					                    0,
 | 
				
			||||||
 | 
					                    0
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'no signature help' => [
 | 
				
			||||||
 | 
					                new Position(0, 0),
 | 
				
			||||||
 | 
					                new SignatureHelp([]),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'construct from non fqn (not supported)' => [
 | 
				
			||||||
 | 
					                new Position(62, 9),
 | 
				
			||||||
 | 
					                new SignatureHelp([]),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'construct from non fqn (not supported) argument expression' => [
 | 
				
			||||||
 | 
					                new Position(63, 11),
 | 
				
			||||||
 | 
					                new SignatureHelp([]),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'invalid var' => [
 | 
				
			||||||
 | 
					                new Position(65, 13),
 | 
				
			||||||
 | 
					                new SignatureHelp([]),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace Fixtures\\Prophecy;",
 | 
					            "declarationLine": "namespace Fixtures\\Prophecy;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Fixtures\\Prophecy\\WithReturnTypehints": {
 | 
					        "Fixtures\\Prophecy\\WithReturnTypehints": {
 | 
				
			||||||
            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints",
 | 
					            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints",
 | 
				
			||||||
| 
						 | 
					@ -52,7 +53,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class WithReturnTypehints extends EmptyClass",
 | 
					            "declarationLine": "class WithReturnTypehints extends EmptyClass",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Fixtures\\Prophecy\\WithReturnTypehints->getSelf()": {
 | 
					        "Fixtures\\Prophecy\\WithReturnTypehints->getSelf()": {
 | 
				
			||||||
            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints->getSelf()",
 | 
					            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints->getSelf()",
 | 
				
			||||||
| 
						 | 
					@ -72,7 +74,12 @@
 | 
				
			||||||
            "type__tostring": "\\Fixtures\\Prophecy\\WithReturnTypehints",
 | 
					            "type__tostring": "\\Fixtures\\Prophecy\\WithReturnTypehints",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function getSelf(): self {",
 | 
					            "declarationLine": "public function getSelf(): self {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Fixtures\\Prophecy\\WithReturnTypehints->getName()": {
 | 
					        "Fixtures\\Prophecy\\WithReturnTypehints->getName()": {
 | 
				
			||||||
            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints->getName()",
 | 
					            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints->getName()",
 | 
				
			||||||
| 
						 | 
					@ -92,7 +99,12 @@
 | 
				
			||||||
            "type__tostring": "string",
 | 
					            "type__tostring": "string",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function getName(): string {",
 | 
					            "declarationLine": "public function getName(): string {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Fixtures\\Prophecy\\WithReturnTypehints->getParent()": {
 | 
					        "Fixtures\\Prophecy\\WithReturnTypehints->getParent()": {
 | 
				
			||||||
            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints->getParent()",
 | 
					            "fqn": "Fixtures\\Prophecy\\WithReturnTypehints->getParent()",
 | 
				
			||||||
| 
						 | 
					@ -112,7 +124,12 @@
 | 
				
			||||||
            "type__tostring": "\\parent",
 | 
					            "type__tostring": "\\parent",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function getParent(): parent {",
 | 
					            "declarationLine": "public function getParent(): parent {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "A->foo": {
 | 
					        "A->foo": {
 | 
				
			||||||
            "fqn": "A->foo",
 | 
					            "fqn": "A->foo",
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,8 @@
 | 
				
			||||||
            "type__tostring": "string[]",
 | 
					            "type__tostring": "string[]",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "protected $foo;",
 | 
					            "declarationLine": "protected $foo;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace TestNamespace;",
 | 
					            "declarationLine": "namespace TestNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestNamespace\\A": {
 | 
					        "TestNamespace\\A": {
 | 
				
			||||||
            "fqn": "TestNamespace\\A",
 | 
					            "fqn": "TestNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestNamespace\\A->a": {
 | 
					        "TestNamespace\\A->a": {
 | 
				
			||||||
            "fqn": "TestNamespace\\A->a",
 | 
					            "fqn": "TestNamespace\\A->a",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,8 @@
 | 
				
			||||||
            "type__tostring": "int",
 | 
					            "type__tostring": "int",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public $a;",
 | 
					            "declarationLine": "public $a;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace TestNamespace;",
 | 
					            "declarationLine": "namespace TestNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestNamespace\\TestClass": {
 | 
					        "TestNamespace\\TestClass": {
 | 
				
			||||||
            "fqn": "TestNamespace\\TestClass",
 | 
					            "fqn": "TestNamespace\\TestClass",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class TestClass",
 | 
					            "declarationLine": "class TestClass",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestNamespace\\TestClass->testProperty": {
 | 
					        "TestNamespace\\TestClass->testProperty": {
 | 
				
			||||||
            "fqn": "TestNamespace\\TestClass->testProperty",
 | 
					            "fqn": "TestNamespace\\TestClass->testProperty",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,8 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public $testProperty;",
 | 
					            "declarationLine": "public $testProperty;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestNamespace\\TestClass->testMethod()": {
 | 
					        "TestNamespace\\TestClass->testMethod()": {
 | 
				
			||||||
            "fqn": "TestNamespace\\TestClass->testMethod()",
 | 
					            "fqn": "TestNamespace\\TestClass->testMethod()",
 | 
				
			||||||
| 
						 | 
					@ -84,7 +87,17 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function testMethod($testParameter)",
 | 
					            "declarationLine": "public function testMethod($testParameter)",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "(mixed $testParameter)",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "label": "mixed $testParameter",
 | 
				
			||||||
 | 
					                        "documentation": null
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A",
 | 
					            "declarationLine": "class A",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::suite()": {
 | 
					        "MyNamespace\\A::suite()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::suite()",
 | 
					            "fqn": "MyNamespace\\A::suite()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static function suite()",
 | 
					            "declarationLine": "public static function suite()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A",
 | 
					            "declarationLine": "class A",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::suite()": {
 | 
					        "MyNamespace\\A::suite()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::suite()",
 | 
					            "fqn": "MyNamespace\\A::suite()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static function suite()",
 | 
					            "declarationLine": "public static function suite()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A",
 | 
					            "declarationLine": "class A",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::suite()": {
 | 
					        "MyNamespace\\A::suite()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::suite()",
 | 
					            "fqn": "MyNamespace\\A::suite()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static function suite()",
 | 
					            "declarationLine": "public static function suite()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A",
 | 
					            "declarationLine": "class A",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->suite()": {
 | 
					        "MyNamespace\\A->suite()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->suite()",
 | 
					            "fqn": "MyNamespace\\A->suite()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function suite()",
 | 
					            "declarationLine": "public function suite()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\Mbstring": {
 | 
					        "MyNamespace\\Mbstring": {
 | 
				
			||||||
            "fqn": "MyNamespace\\Mbstring",
 | 
					            "fqn": "MyNamespace\\Mbstring",
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class Mbstring",
 | 
					            "declarationLine": "class Mbstring",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\Mbstring::MB_CASE_FOLD": {
 | 
					        "MyNamespace\\Mbstring::MB_CASE_FOLD": {
 | 
				
			||||||
            "fqn": "MyNamespace\\Mbstring::MB_CASE_FOLD",
 | 
					            "fqn": "MyNamespace\\Mbstring::MB_CASE_FOLD",
 | 
				
			||||||
| 
						 | 
					@ -61,7 +63,8 @@
 | 
				
			||||||
            "type__tostring": "\\MyNamespace\\PHP_INT_MAX",
 | 
					            "type__tostring": "\\MyNamespace\\PHP_INT_MAX",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "const MB_CASE_FOLD = PHP_INT_MAX;",
 | 
					            "declarationLine": "const MB_CASE_FOLD = PHP_INT_MAX;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "interface A {",
 | 
					            "declarationLine": "interface A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "A->b()": {
 | 
					        "A->b()": {
 | 
				
			||||||
            "fqn": "A->b()",
 | 
					            "fqn": "A->b()",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,17 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b ($a = MY_CONSTANT);",
 | 
					            "declarationLine": "function b ($a = MY_CONSTANT);",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "(\\MY_CONSTANT $a = MY_CONSTANT)",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "label": "\\MY_CONSTANT $a = MY_CONSTANT",
 | 
				
			||||||
 | 
					                        "documentation": null
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "interface A  {",
 | 
					            "declarationLine": "interface A  {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace B;",
 | 
					            "declarationLine": "namespace B;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "A::$deprecationsTriggered": {
 | 
					        "A::$deprecationsTriggered": {
 | 
				
			||||||
            "fqn": "A::$deprecationsTriggered",
 | 
					            "fqn": "A::$deprecationsTriggered",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,8 @@
 | 
				
			||||||
            "type__tostring": "\\__CLASS__[]",
 | 
					            "type__tostring": "\\__CLASS__[]",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "private static $deprecationsTriggered;",
 | 
					            "declarationLine": "private static $deprecationsTriggered;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::a()": {
 | 
					        "MyNamespace\\A::a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::a()",
 | 
					            "fqn": "MyNamespace\\A::a()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "static function a() {",
 | 
					            "declarationLine": "static function a() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::a()": {
 | 
					        "MyNamespace\\A::a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::a()",
 | 
					            "fqn": "MyNamespace\\A::a()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "static function a() {",
 | 
					            "declarationLine": "static function a() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -59,7 +60,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::getInitializer()": {
 | 
					        "MyNamespace\\A::getInitializer()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::getInitializer()",
 | 
					            "fqn": "MyNamespace\\A::getInitializer()",
 | 
				
			||||||
| 
						 | 
					@ -79,7 +81,17 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static function getInitializer(ClassLoader $loader)",
 | 
					            "declarationLine": "public static function getInitializer(ClassLoader $loader)",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "(\\MyNamespace\\ClassLoader $loader)",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "label": "\\MyNamespace\\ClassLoader $loader",
 | 
				
			||||||
 | 
					                        "documentation": null
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -50,7 +51,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->testRequest()": {
 | 
					        "MyNamespace\\A->testRequest()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->testRequest()",
 | 
					            "fqn": "MyNamespace\\A->testRequest()",
 | 
				
			||||||
| 
						 | 
					@ -70,7 +72,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function testRequest()",
 | 
					            "declarationLine": "public function testRequest()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\ParseErrorsTest": {
 | 
					        "MyNamespace\\ParseErrorsTest": {
 | 
				
			||||||
            "fqn": "MyNamespace\\ParseErrorsTest",
 | 
					            "fqn": "MyNamespace\\ParseErrorsTest",
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class ParseErrorsTest {",
 | 
					            "declarationLine": "class ParseErrorsTest {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\ParseErrorsTest->setUp()": {
 | 
					        "MyNamespace\\ParseErrorsTest->setUp()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\ParseErrorsTest->setUp()",
 | 
					            "fqn": "MyNamespace\\ParseErrorsTest->setUp()",
 | 
				
			||||||
| 
						 | 
					@ -61,7 +63,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function setUp()",
 | 
					            "declarationLine": "public function setUp()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\ParseErrorsTest": {
 | 
					        "MyNamespace\\ParseErrorsTest": {
 | 
				
			||||||
            "fqn": "MyNamespace\\ParseErrorsTest",
 | 
					            "fqn": "MyNamespace\\ParseErrorsTest",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class ParseErrorsTest",
 | 
					            "declarationLine": "class ParseErrorsTest",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\ParseErrorsTest->setAccount()": {
 | 
					        "MyNamespace\\ParseErrorsTest->setAccount()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\ParseErrorsTest->setAccount()",
 | 
					            "fqn": "MyNamespace\\ParseErrorsTest->setAccount()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,17 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function setAccount(AccountInterface $account)",
 | 
					            "declarationLine": "public function setAccount(AccountInterface $account)",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "(\\MyNamespace\\AccountInterface $account)",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "label": "\\MyNamespace\\AccountInterface $account",
 | 
				
			||||||
 | 
					                        "documentation": null
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class FooClass {",
 | 
					            "declarationLine": "class FooClass {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "FooClass->foo()": {
 | 
					        "FooClass->foo()": {
 | 
				
			||||||
            "fqn": "FooClass->foo()",
 | 
					            "fqn": "FooClass->foo()",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,12 @@
 | 
				
			||||||
            "type__tostring": "\\FooClass",
 | 
					            "type__tostring": "\\FooClass",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function foo(): FooClass {",
 | 
					            "declarationLine": "public function foo(): FooClass {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace1;",
 | 
					            "declarationLine": "namespace MyNamespace1;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace1\\B": {
 | 
					        "MyNamespace1\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace1\\B",
 | 
					            "fqn": "MyNamespace1\\B",
 | 
				
			||||||
| 
						 | 
					@ -50,7 +51,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace1\\B->b()": {
 | 
					        "MyNamespace1\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace1\\B->b()",
 | 
					            "fqn": "MyNamespace1\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -70,7 +72,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace2": {
 | 
					        "MyNamespace2": {
 | 
				
			||||||
            "fqn": "MyNamespace2",
 | 
					            "fqn": "MyNamespace2",
 | 
				
			||||||
| 
						 | 
					@ -89,7 +96,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace2;",
 | 
					            "declarationLine": "namespace MyNamespace2;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace2\\A": {
 | 
					        "MyNamespace2\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace2\\A",
 | 
					            "fqn": "MyNamespace2\\A",
 | 
				
			||||||
| 
						 | 
					@ -110,7 +118,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends MyNamespace1\\B {",
 | 
					            "declarationLine": "class A extends MyNamespace1\\B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace2\\A->a()": {
 | 
					        "MyNamespace2\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace2\\A->a()",
 | 
					            "fqn": "MyNamespace2\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -130,7 +139,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class Foo",
 | 
					            "declarationLine": "class Foo",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Foo->fn()": {
 | 
					        "Foo->fn()": {
 | 
				
			||||||
            "fqn": "Foo->fn()",
 | 
					            "fqn": "Foo->fn()",
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,12 @@
 | 
				
			||||||
            "type__tostring": "\\Iterator",
 | 
					            "type__tostring": "\\Iterator",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function fn()",
 | 
					            "declarationLine": "public function fn()",
 | 
				
			||||||
            "documentation": "Foo"
 | 
					            "documentation": "Foo",
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": "Foo",
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "A->b()": {
 | 
					        "A->b()": {
 | 
				
			||||||
            "fqn": "A->b()",
 | 
					            "fqn": "A->b()",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace1;",
 | 
					            "declarationLine": "namespace MyNamespace1;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace B;",
 | 
					            "declarationLine": "namespace B;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace A \\ B;",
 | 
					            "declarationLine": "namespace A \\ B;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace LanguageServer\\Tests\\Utils;",
 | 
					            "declarationLine": "namespace LanguageServer\\Tests\\Utils;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -61,7 +63,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -63,7 +65,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -83,7 +86,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "A->a()": {
 | 
					        "A->a()": {
 | 
				
			||||||
            "fqn": "A->a()",
 | 
					            "fqn": "A->a()",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\init()": {
 | 
					        "MyNamespace\\init()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\init()",
 | 
					            "fqn": "MyNamespace\\init()",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,17 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function init(Hi $view)",
 | 
					            "declarationLine": "function init(Hi $view)",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "(\\MyNamespace\\Hi $view)",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "label": "\\MyNamespace\\Hi $view",
 | 
				
			||||||
 | 
					                        "documentation": null
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -61,7 +63,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -82,7 +89,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -102,7 +110,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -85,7 +92,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -105,7 +113,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class MyClass",
 | 
					            "declarationLine": "class MyClass",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyClass->mainPropertyName": {
 | 
					        "MyClass->mainPropertyName": {
 | 
				
			||||||
            "fqn": "MyClass->mainPropertyName",
 | 
					            "fqn": "MyClass->mainPropertyName",
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,8 @@
 | 
				
			||||||
            "type__tostring": "string",
 | 
					            "type__tostring": "string",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "protected $mainPropertyName;",
 | 
					            "declarationLine": "protected $mainPropertyName;",
 | 
				
			||||||
            "documentation": "The name of the main property, or NULL if there is none."
 | 
					            "documentation": "The name of the main property, or NULL if there is none.",
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class MyClass",
 | 
					            "declarationLine": "class MyClass",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyClass->mainPropertyName": {
 | 
					        "MyClass->mainPropertyName": {
 | 
				
			||||||
            "fqn": "MyClass->mainPropertyName",
 | 
					            "fqn": "MyClass->mainPropertyName",
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,8 @@
 | 
				
			||||||
            "type__tostring": "string",
 | 
					            "type__tostring": "string",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "protected $mainPropertyName;",
 | 
					            "declarationLine": "protected $mainPropertyName;",
 | 
				
			||||||
            "documentation": "The name of the main property, or NULL if there is none."
 | 
					            "documentation": "The name of the main property, or NULL if there is none.",
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace TestNamespace;",
 | 
					            "declarationLine": "namespace TestNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestNamespace\\whatever()": {
 | 
					        "TestNamespace\\whatever()": {
 | 
				
			||||||
            "fqn": "TestNamespace\\whatever()",
 | 
					            "fqn": "TestNamespace\\whatever()",
 | 
				
			||||||
| 
						 | 
					@ -45,7 +46,17 @@
 | 
				
			||||||
            "type__tostring": "\\TestNamespace\\TestClass",
 | 
					            "type__tostring": "\\TestNamespace\\TestClass",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function whatever(TestClass $param): TestClass2 {",
 | 
					            "declarationLine": "function whatever(TestClass $param): TestClass2 {",
 | 
				
			||||||
            "documentation": "Aute duis elit reprehenderit tempor cillum proident anim laborum eu laboris reprehenderit ea incididunt."
 | 
					            "documentation": "Aute duis elit reprehenderit tempor cillum proident anim laborum eu laboris reprehenderit ea incididunt.",
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "(\\TestNamespace\\TestClass $param)",
 | 
				
			||||||
 | 
					                "documentation": "Aute duis elit reprehenderit tempor cillum proident anim laborum eu laboris reprehenderit ea incididunt.",
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "label": "\\TestNamespace\\TestClass $param",
 | 
				
			||||||
 | 
					                        "documentation": "Adipisicing non non cillum sint incididunt cillum enim mollit."
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::a()": {
 | 
					        "MyNamespace\\A::a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::a()",
 | 
					            "fqn": "MyNamespace\\A::a()",
 | 
				
			||||||
| 
						 | 
					@ -64,7 +66,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "static function a() {",
 | 
					            "declarationLine": "static function a() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A {",
 | 
					            "declarationLine": "class A {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "A::$a": {
 | 
					        "A::$a": {
 | 
				
			||||||
            "fqn": "A::$a",
 | 
					            "fqn": "A::$a",
 | 
				
			||||||
| 
						 | 
					@ -45,7 +46,8 @@
 | 
				
			||||||
            "type__tostring": "string",
 | 
					            "type__tostring": "string",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "static $a;",
 | 
					            "declarationLine": "static $a;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class TestClass implements TestInterface {",
 | 
					            "declarationLine": "class TestClass implements TestInterface {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "TestClass::$testProperty": {
 | 
					        "TestClass::$testProperty": {
 | 
				
			||||||
            "fqn": "TestClass::$testProperty",
 | 
					            "fqn": "TestClass::$testProperty",
 | 
				
			||||||
| 
						 | 
					@ -51,7 +52,8 @@
 | 
				
			||||||
            "type__tostring": "\\TestClass[]",
 | 
					            "type__tostring": "\\TestClass[]",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static $testProperty;",
 | 
					            "declarationLine": "public static $testProperty;",
 | 
				
			||||||
            "documentation": "Lorem excepteur officia sit anim velit veniam enim."
 | 
					            "documentation": "Lorem excepteur officia sit anim velit veniam enim.",
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -88,7 +95,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +116,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -88,7 +95,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +116,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -88,7 +95,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +116,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -56,7 +57,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A",
 | 
					            "declarationLine": "class A",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A::suite()": {
 | 
					        "MyNamespace\\A::suite()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A::suite()",
 | 
					            "fqn": "MyNamespace\\A::suite()",
 | 
				
			||||||
| 
						 | 
					@ -76,7 +78,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static function suite()",
 | 
					            "declarationLine": "public static function suite()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A",
 | 
					            "declarationLine": "class A",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->typesProvider()": {
 | 
					        "MyNamespace\\A->typesProvider()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->typesProvider()",
 | 
					            "fqn": "MyNamespace\\A->typesProvider()",
 | 
				
			||||||
| 
						 | 
					@ -61,7 +63,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function typesProvider()",
 | 
					            "declarationLine": "public function typesProvider()",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -88,7 +95,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +116,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -88,7 +95,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +116,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B": {
 | 
					        "MyNamespace\\B": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B",
 | 
					            "fqn": "MyNamespace\\B",
 | 
				
			||||||
| 
						 | 
					@ -47,7 +48,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B {",
 | 
					            "declarationLine": "class B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\B->b()": {
 | 
					        "MyNamespace\\B->b()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\B->b()",
 | 
					            "fqn": "MyNamespace\\B->b()",
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function b() {",
 | 
					            "declarationLine": "function b() {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -88,7 +95,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -108,7 +116,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace MyNamespace;",
 | 
					            "declarationLine": "namespace MyNamespace;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A": {
 | 
					        "MyNamespace\\A": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A",
 | 
					            "fqn": "MyNamespace\\A",
 | 
				
			||||||
| 
						 | 
					@ -46,7 +47,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class A extends B {",
 | 
					            "declarationLine": "class A extends B {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "MyNamespace\\A->a()": {
 | 
					        "MyNamespace\\A->a()": {
 | 
				
			||||||
            "fqn": "MyNamespace\\A->a()",
 | 
					            "fqn": "MyNamespace\\A->a()",
 | 
				
			||||||
| 
						 | 
					@ -66,7 +68,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class FooClass {",
 | 
					            "declarationLine": "class FooClass {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "FooClass::staticFoo()": {
 | 
					        "FooClass::staticFoo()": {
 | 
				
			||||||
            "fqn": "FooClass::staticFoo()",
 | 
					            "fqn": "FooClass::staticFoo()",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,12 @@
 | 
				
			||||||
            "type__tostring": "\\FooClass",
 | 
					            "type__tostring": "\\FooClass",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public static function staticFoo(): FooClass {",
 | 
					            "declarationLine": "public static function staticFoo(): FooClass {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "FooClass->bar()": {
 | 
					        "FooClass->bar()": {
 | 
				
			||||||
            "fqn": "FooClass->bar()",
 | 
					            "fqn": "FooClass->bar()",
 | 
				
			||||||
| 
						 | 
					@ -62,7 +68,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function bar() { }",
 | 
					            "declarationLine": "public function bar() { }",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class B",
 | 
					            "declarationLine": "class B",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "B->hi": {
 | 
					        "B->hi": {
 | 
				
			||||||
            "fqn": "B->hi",
 | 
					            "fqn": "B->hi",
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,8 @@
 | 
				
			||||||
            "type__tostring": "int",
 | 
					            "type__tostring": "int",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public $hi;",
 | 
					            "declarationLine": "public $hi;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "B->a()": {
 | 
					        "B->a()": {
 | 
				
			||||||
            "fqn": "B->a()",
 | 
					            "fqn": "B->a()",
 | 
				
			||||||
| 
						 | 
					@ -62,7 +64,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "function a () {",
 | 
					            "declarationLine": "function a () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "namespace SomeNamespace { }",
 | 
					            "declarationLine": "namespace SomeNamespace { }",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,8 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "type": null,
 | 
					            "type": null,
 | 
				
			||||||
            "declarationLine": "class Foo {",
 | 
					            "declarationLine": "class Foo {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Foo->bar": {
 | 
					        "Foo->bar": {
 | 
				
			||||||
            "fqn": "Foo->bar",
 | 
					            "fqn": "Foo->bar",
 | 
				
			||||||
| 
						 | 
					@ -45,7 +46,8 @@
 | 
				
			||||||
            "type__tostring": "\\",
 | 
					            "type__tostring": "\\",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "protected $bar;",
 | 
					            "declarationLine": "protected $bar;",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": null
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "Foo->foo()": {
 | 
					        "Foo->foo()": {
 | 
				
			||||||
            "fqn": "Foo->foo()",
 | 
					            "fqn": "Foo->foo()",
 | 
				
			||||||
| 
						 | 
					@ -65,7 +67,12 @@
 | 
				
			||||||
            "type__tostring": "mixed",
 | 
					            "type__tostring": "mixed",
 | 
				
			||||||
            "type": {},
 | 
					            "type": {},
 | 
				
			||||||
            "declarationLine": "public function foo () {",
 | 
					            "declarationLine": "public function foo () {",
 | 
				
			||||||
            "documentation": null
 | 
					            "documentation": null,
 | 
				
			||||||
 | 
					            "signatureInformation": {
 | 
				
			||||||
 | 
					                "label": "()",
 | 
				
			||||||
 | 
					                "documentation": null,
 | 
				
			||||||
 | 
					                "parameters": []
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue