Add hhi defs for readonly reflection
[hiphop-php.git] / hphp / hack / hhi / reflection.hhi
blob76b97885b1daf22601456e3330ff922eed3efa8e
1 <?hh /* -*- mode: php -*- */
2 /**
3  * Copyright (c) 2014, Facebook, Inc.
4  * All rights reserved.
5  *
6  * This source code is licensed under the MIT license found in the
7  * LICENSE file in the "hack" directory of this source tree.
8  *
9  */
11 interface Reflector {
12   public function __toString()[];
15 class Reflection  {
16   public static function getModifierNames($modifiers)[];
17   public static function export(Reflector $reflector, $return = false);
20 class ReflectionClass implements Reflector {
22   const int IS_IMPLICIT_ABSTRACT = 16;
23   const int IS_EXPLICIT_ABSTRACT = 32;
24   const int IS_FINAL = 64;
26   /**
27    * This field is read-only
28    */
29   public string $name;
31   public function __construct(mixed $argument)[];
32   public static function export(mixed $argument, bool $return = false): ?string;
33   public function getConstant(string $name)[]: mixed;
34   public function getConstants()[]: darray<string, mixed>;
35   public function getAbstractConstantNames()[]: darray<string, string>;
36   public function getTypeConstant(string $name)[]: ReflectionTypeConstant;
37   public function getTypeConstants()[]: varray<ReflectionTypeConstant>;
38   public function getConstructor()[]: ?ReflectionMethod;
39   public function getDefaultProperties()[]: darray<string, mixed>;
40   /**
41    * Returns string or false
42    */
43   public function getDocComment()[]: mixed;
44   public function getEndLine()[]: int;
45   public function getExtension()[]: ?ReflectionExtension;
46   public function getExtensionName()[]: string;
47   /**
48    * Returns string or false
49    */
50   public function getFileName()[]: mixed;
51   public function getFile()[]: ReflectionFile;
52   public function getInterfaceNames()[]: varray<string>;
53   public function getInterfaces()[]: darray<string, ReflectionClass>;
54   final public function getAttributes()[]: darray<string, varray<mixed>>;
55   final public function hasAttribute(string $name)[]: bool;
56   final public function getAttribute(string $name)[]: ?varray<mixed>;
57   final public function getAttributeClass<T as HH\ClassLikeAttribute>(classname<T> $c)[]: ?T;
58   public function getMethod(string $name)[]: ReflectionMethod;
59   public function getMethods(?int $filter = null)[]: varray<ReflectionMethod>;
60   public function getModifiers()[]: int;
61   public function getName()[]: string;
62   public function getNamespaceName()[]: string;
63   /**
64    * Returns ReflectionClass or false
65    */
66   public function getParentClass()[]: mixed;
67   public function getProperties(int $filter = 0xFFFF)[]: varray<ReflectionProperty>;
68   public function getProperty(string $name)[]: ReflectionProperty;
69   public function getRequirementNames()[]: varray<string>;
70   public function getRequirements()[]: darray<string, ReflectionClass>;
71   public function getShortName()[]: string;
72   public function getStartLine()[]: int;
73   public function getStaticProperties(): darray<string, mixed>;
74   public function getStaticPropertyValue(string $name, mixed $def_value = null): mixed;
75   public function getTraitAliases()[]: darray<string, string>;
76   public function getTraitNames()[]: varray<string>;
77   public function getTraits()[]: darray<string, ReflectionClass>;
78   public function hasConstant(string $name)[]: bool;
79   public function hasMethod(string $name)[]: bool;
80   public function hasProperty(string $name)[]: bool;
81   public function hasTypeConstant(string $name)[]: bool;
82   public function implementsInterface(string $interface)[]: bool;
83   public function inNamespace()[]: bool;
84   public function isAbstract()[]: bool;
85   public function isCloneable()[]: bool;
86   public function isFinal()[]: bool;
87   public function isInstance(mixed $object)[]: bool;
88   public function isInstantiable()[]: bool;
89   public function isInterface()[]: bool;
90   public function isEnum()[]: bool;
91   public function getEnumUnderlyingType()[]: string;
92   public function isInternal()[]: bool;
93   public function isIterateable()[]: bool;
94   /**
95    * $class is string or ReflectionClass
96    */
97   public function isSubclassOf(mixed $class)[]: bool;
98   public function isTrait()[]: bool;
99   public function isUserDefined()[]: bool;
100   public function newInstance(...$args);
101   public function newInstanceArgs(Traversable<mixed> $args = varray[])[defaults];
102   public function newInstanceWithoutConstructor()[];
103   public function setStaticPropertyValue(string $name, mixed $value): void;
104   public function __toString()[]: string;
105   public function getReifiedTypeParamInfo()[]: varray<shape(
106     'is_reified' => bool,
107     'is_soft' => bool,
108     'is_warn' => bool,
109   )>;
112 class ReflectionObject extends ReflectionClass {}
114 class ReflectionException extends Exception {
115   use ExceptionWithPureGetMessageTrait;
118 abstract class ReflectionFunctionAbstract implements Reflector {
120   public $name = '';
122   // Methods
123   public function getName()[]: string;
124   public function inNamespace()[]: bool;
125   public function getNamespaceName()[]: string;
126   public function getShortName()[]: string;
127   public function isHack()[]: bool;
128   public function isInternal()[]: bool;
129   public function isClosure()[]: bool;
130   public function isGenerator()[]: bool;
131   public function returnsReadonly()[]: bool;
132   public function isAsync()[]: bool;
133   public function isVariadic()[]: bool;
134   public function isUserDefined()[]: bool;
135   public function getFileName()[]: mixed; // string | false
136   public function getFile()[]: ReflectionFile;
137   public function getStartLine()[]: mixed; // int | false
138   public function getEndLine()[]: mixed; // int | false
139   public function getDocComment()[]: mixed; // string | false
140   public function getStaticVariables(): darray<string, mixed>;
141   public function getReturnTypeText()[];
142   final public function getAttributes()[]: darray<string, varray<mixed>>;
143   final public function hasAttribute(string $name)[]: bool;
144   final public function getAttribute(string $name)[]: ?varray<mixed>;
145   public function getNumberOfParameters()[]: int;
146   public function getParameters()[]: varray<ReflectionParameter>;
147   public function getNumberOfRequiredParameters()[];
148   public function isDeprecated()[]: bool;
149   public function getExtension()[];
150   public function getExtensionName()[];
151   final private function __clone();
152   public function hasReturnType()[]: bool;
153   public function getReturnType()[]: ?ReflectionType;
154   public function getReifiedTypeParamInfo()[]: varray<darray<string, bool>>;
155   public function getCoeffects()[]: vec<string>;
158 class ReflectionFunction extends ReflectionFunctionAbstract implements Reflector {
159   const IS_DEPRECATED = 262144;
161   public $name = '';
163   public function __construct($name)[];
164   public function __toString()[];
165   public static function export($name, $return = null);
166   public function isDisabled()[];
167   public function invoke(...$args);
168   public function invokeArgs(varray $args);
169   public function getClosure();
170   final public function getAttributeClass<T as HH\FunctionAttribute>(classname<T> $c)[]: ?T;
173 class ReflectionMethod extends ReflectionFunctionAbstract implements Reflector {
174   // Constants
175   const IS_STATIC    = 1;
176   const IS_PUBLIC    = 256;
177   const IS_PROTECTED = 512;
178   const IS_PRIVATE   = 1024;
179   const IS_ABSTRACT  = 2;
180   const IS_FINAL     = 4;
182   public $name = '';
183   public $class = '';
185   public static function export(string $class, string $name, bool $return = false);
186   public function __construct($class, $name = null)[];
187   public function __toString()[];
188   public function isPublic()[];
189   public function isPrivate()[];
190   public function isProtected()[];
191   public function isAbstract()[];
192   public function isFinal()[];
193   public function isStatic()[];
194   public function isReadonly()[];
195   public function isConstructor()[];
196   public function getClosure($object);
197   public function getModifiers()[];
198   public function invoke($object, ...$args);
199   public function invokeArgs($object, varray $args);
200   public function getDeclaringClass()[];
201   public function getPrototype()[];
202   public function setAccessible(bool $accessible);
203   final public function getAttributeClass<T as HH\MethodAttribute>(classname<T> $c)[]: ?T;
206 class ReflectionParameter implements Reflector {
207   public $name = '';
209   final private function __clone();
210   public static function export($function, $parameter, $return = null);
211   public function __construct($function, $parameter, $info = null)[];
212   public function __toString()[];
213   public function getName()[];
214   public function isPassedByReference()[];
215   public function isInOut()[]: bool;
216   public function isReadonly()[]: bool;
217   public function canBePassedByValue()[];
218   public function getDeclaringFunction()[];
219   public function getDeclaringClass()[];
220   public function getClass()[];
221   public function isArray()[];
222   public function isCallable()[];
223   public function allowsNull()[];
224   public function getPosition()[];
225   public function isOptional()[];
226   public function isDefaultValueAvailable()[];
227   public function getDefaultValue()[];
228   public function isDefaultValueConstant()[];
229   public function getDefaultValueConstantName()[];
230   public function getTypehintText()[];
231   public function getTypeText()[]: string;
232   public function getDefaultValueText()[];
233   public function isVariadic()[];
234   public function hasType()[]: bool;
235   public function getType()[]: ?ReflectionType;
236   final public function hasAttribute(string $name)[]: bool;
237   final public function getAttribute(string $name)[]: ?varray<mixed>;
238   final public function getAttributeClass<T as HH\ParameterAttribute>(classname<T> $c)[]: ?T;
239   final public function getAttributes()[]: darray<string, varray<mixed>>;
242 class ReflectionProperty implements Reflector {
243   const IS_STATIC = 1;
244   const IS_PUBLIC = 256;
245   const IS_PROTECTED = 512;
246   const IS_PRIVATE = 1024;
248   public $name = '';
249   public $class = '';
251   final private function __clone();
252   public static function export($class, $name, $return = null);
253   public function __construct($class, string $name)[];
254   public function __toString()[];
255   public function getName()[];
256   public function getValue($object = null);
257   public function setValue($object, $value = null);
258   public function isPublic()[];
259   public function isPrivate()[];
260   public function isProtected()[];
261   public function isStatic()[];
262   public function isReadonly()[];
263   public function isDefault()[];
264   public function getModifiers()[];
265   public function getDeclaringClass()[];
266   public function getDocComment()[];
267   public function setAccessible($accessible);
268   public function getTypeText()[];
269   final public function getAttributes()[]: darray<string, varray<mixed>>;
270   final public function hasAttribute(string $name)[]: bool;
271   final public function getAttribute(string $name)[]: ?varray<mixed>;
274 class ReflectionExtension implements Reflector {
276   public $name = '';
278   final private function __clone();
279   public static function export($name, $return = false);
280   public function __construct($name)[];
281   public function __toString()[];
282   public function getName()[];
283   public function getVersion()[];
284   public function getFunctions()[];
285   public function getConstants()[];
286   public function getINIEntries()[];
287   public function getClasses()[];
288   public function getClassNames()[];
289   public function info()[];
292 class ReflectionTypeConstant implements Reflector {
294   final private function __clone();
295   public static function export($class, string $name, $return = null);
296   public function __construct($class, string $name)[];
297   public function __toString()[]: string;
298   public function getName()[]: string;
299   public function isAbstract()[]: bool;
300   public function getDeclaringClass()[]: ReflectionClass;
301   public function getClass()[]: ReflectionClass;
302   public function getAssignedTypeText()[]: ?string;
303   public function getTypeStructure()[]: darray;
306 class ReflectionTypeAlias implements Reflector {
307   final private function __clone();
308   final public function __construct(string $name)[];
309   public function __toString()[]: string;
310   public function getTypeStructure()[]: darray;
311   public function getResolvedTypeStructure()[]: darray;
312   public function getAssignedTypeText()[]: string;
313   public function getName()[]: string;
314   public function getFileName()[]: string;
315   public function getFile()[]: ReflectionFile;
316   final public function getAttributes()[]: darray<string, varray<mixed>>;
317   final public function hasAttribute(string $name)[]: bool;
318   final public function getAttribute(string $name)[]: ?varray<mixed>;
319   final public function getAttributeClass<T as HH\TypeAliasAttribute>(classname<T> $c)[]: ?T;
322 class ReflectionType {
323   final private function __clone();
324   public function __construct(?Reflector $param_or_ret = null,
325                               darray $type_hint_info = darray[]);
326   public function allowsNull()[]: bool;
327   public function isBuiltin()[]: bool;
328   public function __toString()[]: string;
331 class ReflectionFile implements Reflector {
332   final private function __clone();
333   final public function __construct(string $name)[];
334   public function __toString()[]: string;
335   public function getName()[]: string;
336   final public function getAttributes()[]: darray<string, varray<mixed>>;
337   final public function hasAttribute(string $name)[]: bool;
338   final public function getAttribute(string $name)[]: ?varray<mixed>;
339   final public function getAttributeClass<T as HH\FileAttribute>(classname<T> $c)[]: ?T;