[
	{
		"name": "Abi",
		"metadata": ":abi",
		"doc": "Function ABI/calling convention",
		"platforms": ["cpp"]
	},
	{
		"name": "Abstract",
		"metadata": ":abstract",
		"doc": "Sets the underlying class implementation as 'abstract'",
		"platforms": ["java", "cs"]
	},
	{
		"name": "Access",
		"metadata": ":access",
		"doc": "Forces private access to package, type or field",
		"params": ["Target path"],
		"targets": ["TClass", "TClassField"]
	},
	{
		"name": "Accessor",
		"metadata": ":accessor",
		"doc": "Used internally by DCE to mark property accessors",
		"targets": ["TClassField"],
		"internal": true
	},
	{
		"name": "Allow",
		"metadata": ":allow",
		"doc": "Allows private access from package, type or field",
		"params": ["Target path"]
	},
	{
		"name": "Analyzer",
		"metadata": ":analyzer",
		"doc": "Used to configure the static analyzer"
	},
	{
		"name": "Annotation",
		"metadata": ":annotation",
		"doc": "Annotation (@interface) definitions on --java-lib imports will be annotated with this metadata. Has no effect on types compiled by Haxe",
		"platforms": ["java"],
		"targets": ["TClass"]
	},
	{
		"name": "ArrayAccess",
		"metadata": ":arrayAccess",
		"doc": "Allows [] access on an abstract",
		"targets": ["TAbstract", "TAbstractField"]
	},
	{
		"name": "Ast",
		"metadata": ":ast",
		"doc": "Internally used to pass the AST source into the typed AST",
		"internal": true
	},
	{
		"name": "AstSource",
		"metadata": ":astSource",
		"doc": "Filled by the compiler with the parsed expression of the field",
		"targets": ["TClassField"]
	},
	{
		"name": "AutoBuild",
		"metadata": ":autoBuild",
		"doc": "Extends @:build metadata to all extending and implementing classes",
		"params": ["Build macro call"],
		"targets": ["TClass"]
	},
	{
		"name": "Bind",
		"metadata": ":bind",
		"doc": "Override SWF class declaration",
		"platforms": ["flash"],
		"targets": ["TClass"]
	},
	{
		"name": "Bitmap",
		"metadata": ":bitmap",
		"doc": "Embeds given bitmap data into the class (must extend flash.display.BitmapData)",
		"platforms": ["flash"],
		"params": ["Bitmap file path"],
		"targets": ["TClass"]
	},
	{
		"name": "BridgeProperties",
		"metadata": ":bridgeProperties",
		"doc": "Creates native property bridges for all Haxe properties in this class",
		"platforms": ["cs"],
		"targets": ["TClass"]
	},
	{
		"name": "Build",
		"metadata": ":build",
		"doc": "Builds a class or enum from a macro",
		"params": ["Build macro call"],
		"targets": ["TClass", "TEnum"]
	},
	{
		"name": "BuildXml",
		"metadata": ":buildXml",
		"doc": "Specify xml data to be injected into Build.xml",
		"platforms": ["cpp"]
	},
	{
		"name": "BypassAccessor",
		"metadata": ":bypassAccessor",
		"doc": "Do not call property accessor method and access the field directly",
		"targets": ["TExpr"]
	},
	{
		"name": "Callable",
		"metadata": ":callable",
		"doc": "Abstract forwards call to its underlying type",
		"targets": ["TAbstract"]
	},
	{
		"name": "Class",
		"metadata": ":class",
		"doc": "Used internally to annotate an enum that will be generated as a class",
		"platforms": ["java", "cs"],
		"targets": ["TEnum"],
		"internal": true
	},
	{
		"name": "ClassCode",
		"metadata": ":classCode",
		"doc": "Used to inject platform-native code into a class",
		"platforms": ["java", "cs"],
		"targets": ["TClass"]
	},
	{
		"name": "Commutative",
		"metadata": ":commutative",
		"doc": "Declares an abstract operator as commutative",
		"targets": ["TAbstractField"]
	},
	{
		"name": "CompilerGenerated",
		"metadata": ":compilerGenerated",
		"doc": "Marks a field as generated by the compiler. Shouldn't be used by the end user",
		"platforms": ["java", "cs"]
	},
	{
		"name": "Const",
		"metadata": ":const",
		"doc": "Allows a type parameter to accept expression values",
		"targets": ["TTypeParameter"]
	},
	{
		"name": "CoreApi",
		"metadata": ":coreApi",
		"doc": "Identifies this class as a core api class (forces API check)",
		"targets": ["TClass", "TEnum", "TTypedef", "TAbstract"]
	},
	{
		"name": "CoreType",
		"metadata": ":coreType",
		"doc": "Identifies an abstract as core type so that it requires no implementation",
		"targets": ["TAbstract"]
	},
	{
		"name": "CppFileCode",
		"metadata": ":cppFileCode",
		"doc": "Code to be injected into generated cpp file",
		"platforms": ["cpp"]
	},
	{
		"name": "CppInclude",
		"metadata": ":cppInclude",
		"doc": "File to be included in generated cpp file",
		"platforms": ["cpp"]
	},
	{
		"name": "CppNamespaceCode",
		"metadata": ":cppNamespaceCode",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "CsNative",
		"metadata": ":csNative",
		"doc": "Automatically added by --net-lib on classes generated from .NET DLL files",
		"platforms": ["cs"],
		"targets": ["TClass", "TEnum"],
		"internal": true
	},
	{
		"name": "Dce",
		"metadata": ":dce",
		"doc": "Forces dead code elimination even when --dce full is not specified",
		"targets": ["TClass", "TEnum"]
	},
	{
		"name": "Debug",
		"metadata": ":debug",
		"doc": "Forces debug information to be generated into the SWF even without --debug",
		"platforms": ["flash"],
		"targets": ["TClass", "TClassField"]
	},
	{
		"name": "Decl",
		"metadata": ":decl",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "DefParam",
		"metadata": ":defParam",
		"doc": "Default function argument value loaded from the SWF and used for documentation in Genxml",
		"platforms": ["flash"],
		"internal": true
	},
	{
		"name": "Delegate",
		"metadata": ":delegate",
		"doc": "Automatically added by --net-lib on delegates",
		"platforms": ["cs"],
		"targets": ["TAbstract"]
	},
	{
		"name": "Depend",
		"metadata": ":depend",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "Deprecated",
		"metadata": ":deprecated",
		"doc": "Mark a type or field as deprecated"
	},
	{
		"name": "DirectlyUsed",
		"metadata": ":directlyUsed",
		"doc": "Marks types that are directly referenced by non-extern code",
		"internal": true
	},
	{
		"name": "DynamicObject",
		"metadata": ":dynamicObject",
		"doc": "Used internally to identify the Dynamic Object implementation",
		"platforms": ["java", "cs"],
		"targets": ["TClass"],
		"internal": true
	},
	{
		"name": "Eager",
		"metadata": ":eager",
		"doc": "Forces typedefs to be followed early",
		"targets": ["TTypedef"]
	},
	{
		"name": "Enum",
		"metadata": ":enum",
		"doc": "Defines finite value sets to abstract definitions",
		"targets": ["TAbstract"]
	},
	{
		"name": "EnumConstructorParam",
		"metadata": ":enumConstructorParam",
		"doc": "Used internally to annotate GADT type parameters",
		"targets": ["TClass"],
		"internal": true
	},
	{
		"name": "Event",
		"metadata": ":event",
		"doc": "Automatically added by --net-lib on events. Has no effect on types compiled by Haxe",
		"platforms": ["cs"],
		"targets": ["TClassField"]
	},
	{
		"name": "Exhaustive",
		"metadata": ":exhaustive",
		"doc": "",
		"internal": true
	},
	{
		"name": "Expose",
		"metadata": ":expose",
		"doc": "Includes the class or field in Haxe exports",
		"platforms": ["js", "lua"],
		"params": ["?Name=Class path"]
	},
	{
		"name": "Extern",
		"metadata": ":extern",
		"doc": "Marks the field as extern so it is not generated",
		"targets": ["TClassField"]
	},
	{
		"name": "File",
		"metadata": ":file",
		"doc": "Includes a given binary file into the target SWF and associates it with the class (must extend flash.utils.ByteArray)",
		"platforms": ["flash"],
		"params": ["File path"],
		"targets": ["TClass"]
	},
	{
		"name": "FileXml",
		"metadata": ":fileXml",
		"doc": "Include xml attribute snippet in Build.xml entry for file",
		"platforms": ["cpp"],
		"targets": ["TClass"]
	},
	{
		"name": "Final",
		"metadata": ":final",
		"doc": "Prevents a class or interface from being extended or a method from being overridden",
		"targets": ["TClass", "TClassField"]
	},
	{
		"devcomment": "this used to have UsedOn TObjectDecl(_)",
		"name": "Fixed",
		"metadata": ":fixed",
		"doc": "Declares an anonymous object to have fixed fields"
	},
	{
		"name": "FlashProperty",
		"metadata": ":flash.property",
		"doc": "",
		"platforms": ["flash"],
		"targets": ["TClassField"]
	},
	{
		"name": "FlatEnum",
		"metadata": ":flatEnum",
		"doc": "Internally used to mark an enum as being flat, i.e. having no function constructors",
		"targets": ["TEnum"],
		"internal": true
	},
	{
		"name": "Font",
		"metadata": ":font",
		"doc": "Embeds the given TrueType font into the class (must extend flash.text.Font)",
		"params": ["TTF path", "Range String"],
		"targets": ["TClass"]
	},
	{
		"name": "ForLoopVariable",
		"metadata": ":forLoopVariable",
		"doc": "Internally used to mark for-loop variables",
		"internal": true
	},
	{
		"name": "Forward",
		"metadata": ":forward",
		"doc": "Forwards field access to underlying type",
		"params": ["List of field names"],
		"targets": ["TAbstract"]
	},
	{
		"name": "ForwardStatics",
		"metadata": ":forwardStatics",
		"doc": "Forwards static field access to underlying type",
		"params": ["List of field names"],
		"targets": ["TAbstract"]
	},
	{
		"name": "From",
		"metadata": ":from",
		"doc": "Specifies that the field of the abstract is a cast operation from the type identified in the function",
		"targets": ["TAbstractField"]
	},
	{
		"name": "FunctionCode",
		"metadata": ":functionCode",
		"doc": "Used to inject platform-native code into a function",
		"platforms": ["cpp", "java", "cs"]
	},
	{
		"name": "FunctionTailCode",
		"metadata": ":functionTailCode",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "Generic",
		"metadata": ":generic",
		"doc": "Marks a class or class field as generic so each type parameter combination generates its own type/field"
	},
	{
		"name": "GenericBuild",
		"metadata": ":genericBuild",
		"doc": "Builds instances of a type using the specified macro",
		"targets": ["TClass"]
	},
	{
		"name": "GenericInstance",
		"metadata": ":genericInstance",
		"doc": "Internally used to mark instances of @:generic methods",
		"targets": ["TClassField"],
		"internal": true
	},
	{
		"name": "Getter",
		"metadata": ":getter",
		"doc": "Generates a native getter function on the given field",
		"platforms": ["flash"],
		"params": ["Class field name"],
		"targets": ["TClassField"]
	},
	{
		"name": "Hack",
		"metadata": ":hack",
		"doc": "Allows extending classes marked as @:final",
		"targets": ["TClass"]
	},
	{
		"name": "HasUntyped",
		"metadata": ":has_untyped",
		"doc": "Used by the typer to mark fields that have untyped expressions",
		"internal": true
	},
	{
		"name": "HaxeGeneric",
		"metadata": ":haxeGeneric",
		"doc": "Used internally to annotate non-native generic classes",
		"platforms": ["cs"],
		"targets": ["TClass", "TEnum"],
		"internal": true
	},
	{
		"name": "HeaderClassCode",
		"metadata": ":headerClassCode",
		"doc": "Code to be injected into the generated class, in the header",
		"platforms": ["cpp"]
	},
	{
		"name": "HeaderCode",
		"metadata": ":headerCode",
		"doc": "Code to be injected into the generated header file",
		"platforms": ["cpp"]
	},
	{
		"name": "HeaderInclude",
		"metadata": ":headerInclude",
		"doc": "File to be included in generated header file",
		"platforms": ["cpp"]
	},
	{
		"name": "HeaderNamespaceCode",
		"metadata": ":headerNamespaceCode",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "HlNative",
		"metadata": ":hlNative",
		"doc": "Specifies hdll name and function prefix for native functions",
		"platforms": ["hl"],
		"targets": ["TClass", "TClassField"]
	},
	{
		"name": "HxGen",
		"metadata": ":hxGen",
		"doc": "Annotates that an extern class was generated by Haxe",
		"platforms": ["java", "cs"],
		"targets": ["TClass", "TEnum"]
	},
	{
		"name": "IfFeature",
		"metadata": ":ifFeature",
		"doc": "Causes a field to be kept by DCE if the given feature is part of the compilation",
		"params": ["Feature name"],
		"targets": ["TClassField"]
	},
	{
		"name": "Impl",
		"metadata": ":impl",
		"doc": "Used internally to mark abstract implementation fields",
		"targets": ["TAbstractField"],
		"internal": true
	},
	{
		"name": "PythonImport",
		"metadata": ":pythonImport",
		"doc": "Generates python import statement for extern classes",
		"platforms": ["python"],
		"targets": ["TClass"]
	},
	{
		"name": "ImplicitCast",
		"metadata": ":implicitCast",
		"doc": "Generated automatically on the AST when an implicit abstract cast happens",
		"targets": ["TExpr"],
		"internal": true
	},
	{
		"name": "Include",
		"metadata": ":include",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "InitPackage",
		"metadata": ":initPackage",
		"doc": "Some weird thing for Genjs we want to remove someday",
		"platforms": ["js"],
		"internal": true
	},
	{
		"name": "Inline",
		"metadata": ":inline",
		"doc": "Inserted by the parser in case of `inline expr` and `inline function`",
		"targets": ["TExpr"]
	},
	{
		"name": "InlineConstructorArgument",
		"metadata": ":inlineConstructorArgument",
		"doc": "Internally used to mark expressions that were passed as arguments of an inlined constructor",
		"internal": true
	},
	{
		"name": "Internal",
		"metadata": ":internal",
		"doc": "Generates the annotated field/class with 'internal' access",
		"platforms": ["java", "cs"],
		"targets": ["TClass", "TEnum", "TClassField"]
	},
	{
		"name": "IsVar",
		"metadata": ":isVar",
		"doc": "Forces a physical field to be generated for properties that otherwise would not require one",
		"targets": ["TClassField"]
	},
	{
		"name": "JavaCanonical",
		"metadata": ":javaCanonical",
		"doc": "Used by the Java target to annotate the canonical path of the type",
		"platforms": ["java"],
		"params": ["Output type package", "Output type name"],
		"targets": ["TClass", "TEnum"]
	},
	{
		"name": "JavaNative",
		"metadata": ":javaNative",
		"doc": "Automatically added by --java-lib on classes generated from JAR/class files",
		"platforms": ["java"],
		"targets": ["TClass", "TEnum"],
		"internal": true
	},
	{
		"name": "JsRequire",
		"metadata": ":jsRequire",
		"doc": "Generate JavaScript module require expression for given extern",
		"platforms": ["js"],
		"targets": ["TClass"]
	},
	{
		"name": "LuaRequire",
		"metadata": ":luaRequire",
		"doc": "Generate Lua module require expression for given extern",
		"platforms": ["lua"],
		"targets": ["TClass"]
	},
	{
		"name": "LuaDotMethod",
		"metadata": ":luaDotMethod",
		"doc": "Indicates that the given extern type instance should have dot-style invocation for methods instead of colon",
		"platforms": ["lua"]
	},
	{
		"name": "Keep",
		"metadata": ":keep",
		"doc": "Causes a field or type to be kept by DCE"
	},
	{
		"name": "KeepInit",
		"metadata": ":keepInit",
		"doc": "Causes a class to be kept by DCE even if all its field are removed",
		"targets": ["TClass"]
	},
	{
		"name": "KeepSub",
		"metadata": ":keepSub",
		"doc": "Extends @:keep metadata to all implementing and extending classes",
		"targets": ["TClass"]
	},
	{
		"name": "LibType",
		"metadata": ":libType",
		"doc": "Used by --net-lib and --java-lib to mark a class that shouldn't be checked (overrides, interfaces, etc) by the type loader",
		"platforms": ["java", "cs"],
		"targets": ["TClass"],
		"internal": true
	},
	{
		"name": "LoopLabel",
		"metadata": ":loopLabel",
		"doc": "Mark loop and break expressions with a label to support breaking from within switch",
		"internal": true
	},
	{
		"name": "Markup",
		"metadata": ":markup",
		"doc": "Used as a result of inline XML parsing"
	},
	{
		"name": "Meta",
		"metadata": ":meta",
		"doc": "Internally used to mark a class field as being the metadata field"
	},
	{
		"name": "Macro",
		"metadata": ":macro",
		"doc": "(deprecated)"
	},
	{
		"name": "MaybeUsed",
		"metadata": ":maybeUsed",
		"doc": "Internally used by DCE to mark fields that might be kept",
		"internal": true
	},
	{
		"name": "MergeBlock",
		"metadata": ":mergeBlock",
		"doc": "Merge the annotated block into the current scope",
		"targets": ["TExpr"]
	},
	{
		"name": "MultiReturn",
		"metadata": ":multiReturn",
		"doc": "Annotates an extern class as the result of multi-return function",
		"platforms": ["lua"],
		"targets": ["TClass"]
	},
	{
		"name": "MultiType",
		"metadata": ":multiType",
		"doc": "Specifies that an abstract chooses its this-type from its @:to functions",
		"params": ["Relevant type parameters"],
		"targets": ["TAbstract"]
	},
	{
		"name": "Native",
		"metadata": ":native",
		"doc": "Rewrites the path of a class or enum during generation",
		"params": ["Output type path"],
		"targets": ["TClass", "TEnum"]
	},
	{
		"name": "NativeChildren",
		"metadata": ":nativeChildren",
		"doc": "Annotates that all children from a type should be treated as if it were an extern definition - platform native",
		"platforms": ["java", "cs"],
		"targets": ["TClass"]
	},
	{
		"name": "NativeGen",
		"metadata": ":nativeGen",
		"doc": "Annotates that a type should be treated as if it were an extern definition - platform native",
		"platforms": ["java", "cs", "python"],
		"targets": ["TClass", "TEnum"]
	},
	{
		"name": "NativeGeneric",
		"metadata": ":nativeGeneric",
		"doc": "Used internally to annotate native generic classes",
		"platforms": ["cs"],
		"targets": ["TClass", "TEnum"],
		"internal": true
	},
	{
		"name": "NativeProperty",
		"metadata": ":nativeProperty",
		"doc": "Use native properties which will execute even with dynamic usage",
		"platforms": ["cpp"]
	},
	{
		"name": "NativeStaticExtension",
		"metadata": ":nativeStaticExtension",
		"doc": "Converts static function syntax into member call",
		"platforms": ["cpp"]
	},
	{
		"name": "NoCompletion",
		"metadata": ":noCompletion",
		"doc": "Prevents the compiler from suggesting completion on this field or type",
		"targets": ["TClassField"]
	},
	{
		"name": "NoDebug",
		"metadata": ":noDebug",
		"doc": "Does not generate debug information even if --debug is set",
		"platforms": ["flash", "cpp"],
		"targets": ["TClass", "TClassField"]
	},
	{
		"name": "NoDoc",
		"metadata": ":noDoc",
		"doc": "Prevents a type from being included in documentation generation"
	},
	{
		"name": "NoExpr",
		"metadata": ":noExpr",
		"doc": "Internally used to mark abstract fields which have no expression by design",
		"internal": true
	},
	{
		"name": "NoImportGlobal",
		"metadata": ":noImportGlobal",
		"doc": "Prevents a static field from being imported with import Class.*",
		"targets": ["TAnyField"]
	},
	{
		"name": "NonVirtual",
		"metadata": ":nonVirtual",
		"doc": "Declares function to be non-virtual in cpp",
		"platforms": ["cpp"]
	},
	{
		"name": "NoPackageRestrict",
		"metadata": ":noPackageRestrict",
		"doc": "Allows a module to be accessed across all targets if found on its first type",
		"internal": true
	},
	{
		"name": "NoPrivateAccess",
		"metadata": ":noPrivateAccess",
		"doc": "Disallow private access to anything for the annotated expression",
		"targets": ["TExpr"]
	},
	{
		"name": "NoStack",
		"metadata": ":noStack",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "NotNull",
		"metadata": ":notNull",
		"doc": "Declares an abstract type as not accepting null values",
		"targets": ["TAbstract"]
	},
	{
		"name": "NoUsing",
		"metadata": ":noUsing",
		"doc": "Prevents a field from being used with 'using'",
		"targets": ["TClassField"]
	},
	{
		"name": "Ns",
		"metadata": ":ns",
		"doc": "Internally used by the SWF generator to handle namespaces",
		"platforms": ["flash"]
	},
	{
		"name": "NullSafety",
		"metadata": ":nullSafety",
		"doc": "Enables null safety for classes or fields. Disables null safety for classes, fields or expressions if provided with `Off` as an argument (e.g. `@:nullSafety(Off)`)",
		"targets": ["TClass", "TClassField", "TExpr"]
	},
	{
		"name": "Objc",
		"metadata": ":objc",
		"doc": "Declares a class or interface that is used to interoperate with Objective-C code",
		"platforms": ["cpp"],
		"targets": ["TClass"]
	},
	{
		"name": "ObjcProtocol",
		"metadata": ":objcProtocol",
		"doc": "Associates an interface with, or describes a function in, a native Objective-C protocol",
		"platforms": ["cpp"]
	},
	{
		"name": "Op",
		"metadata": ":op",
		"doc": "Declares an abstract field as being an operator overload",
		"params": ["The operation"],
		"targets": ["TAbstractField"]
	},
	{
		"name": "Optional",
		"metadata": ":optional",
		"doc": "Marks the field of a structure as optional",
		"targets": ["TClassField"]
	},
	{
		"name": "Overload",
		"metadata": ":overload",
		"doc": "Allows the field to be called with different argument types",
		"params": ["Function specification (no expression)"],
		"targets": ["TClassField"]
	},
	{
		"name": "Persistent",
		"metadata": ":persistent",
		"doc": "Keeps the value of static variables in macro context across compilations",
		"targets": ["TAnyField"],
		"platforms": ["eval"]
	},
	{
		"name": "PhpGlobal",
		"metadata": ":phpGlobal",
		"doc": "Indicates that static fields of an extern class actually are located in the global PHP namespace",
		"platforms": ["php"],
		"targets": ["TClass"]
	},
	{
		"name": "PhpClassConst",
		"metadata": ":phpClassConst",
		"doc": "Indicates that a static var of an extern class is a PHP class constant",
		"platforms": ["php"],
		"targets": ["TClassField"]
	},
	{
		"name": "PhpMagic",
		"metadata": ":phpMagic",
		"doc": "Treat annotated field as special PHP magic field - this meta makes compiler avoid renaming such fields on generating PHP code",
		"platforms": ["php"],
		"targets": ["TClassField"]
	},
	{
		"name": "PhpNoConstructor",
		"metadata": ":phpNoConstructor",
		"doc": "Special meta for extern classes which do not have native constructor in PHP, but need a constructor in Haxe extern",
		"platforms": ["php"],
		"targets": ["TClass"]
	},
	{
		"name": "Pos",
		"metadata": ":pos",
		"doc": "Sets the position of a reified expression",
		"params": ["Position"],
		"targets": ["TExpr"]
	},
	{
		"name": "Public",
		"metadata": ":public",
		"doc": "Marks a class field as being public",
		"targets": ["TClassField"],
		"internal": true
	},
	{
		"name": "PublicFields",
		"metadata": ":publicFields",
		"doc": "Forces all class fields of inheriting classes to be public",
		"targets": ["TClass"]
	},
	{
		"name": "Private",
		"metadata": ":private",
		"doc": "Marks a class field as being private",
		"platforms": ["cs"],
		"targets": ["TClassField"]
	},
	{
		"name": "PrivateAccess",
		"metadata": ":privateAccess",
		"doc": "Allow private access to anything for the annotated expression",
		"targets": ["TExpr"]
	},
	{
		"name": "Protected",
		"metadata": ":protected",
		"doc": "Marks a class field as being protected",
		"platforms": ["cs", "java", "flash"],
		"targets": ["TClassField"]
	},
	{
		"name": "Property",
		"metadata": ":property",
		"doc": "Marks a property field to be compiled as a native C# property",
		"platforms": ["cs"],
		"targets": ["TClassField"]
	},
	{
		"name": "Pure",
		"metadata": ":pure",
		"doc": "Marks a class field, class or expression as pure (side-effect free)",
		"targets": ["TClass", "TClassField", "TExpr"]
	},
	{
		"name": "ReadOnly",
		"metadata": ":readOnly",
		"doc": "Generates a field with the 'readonly' native keyword",
		"platforms": ["cs"],
		"targets": ["TClassField"]
	},
	{
		"name": "RealPath",
		"metadata": ":realPath",
		"doc": "Internally used on @:native types to retain original path information",
		"internal": true
	},
	{
		"name": "Remove",
		"metadata": ":remove",
		"doc": "Causes an interface to be removed from all implementing classes before generation",
		"targets": ["TClass"]
	},
	{
		"name": "Require",
		"metadata": ":require",
		"doc": "Allows access to a field only if the specified compiler flag is set",
		"params": ["Compiler flag to check"],
		"targets": ["TClassField"]
	},
	{
		"name": "RequiresAssign",
		"metadata": ":requiresAssign",
		"doc": "Used internally to mark certain abstract operator overloads",
		"internal": true
	},
	{
		"name": "Resolve",
		"metadata": ":resolve",
		"doc": "Abstract fields marked with this metadata can be used to resolve unknown fields",
		"targets": ["TClassField"]
	},
	{
		"name": "Rtti",
		"metadata": ":rtti",
		"doc": "Adds runtime type information",
		"targets": ["TClass"]
	},
	{
		"name": "Runtime",
		"metadata": ":runtime",
		"doc": "?"
	},
	{
		"name": "RuntimeValue",
		"metadata": ":runtimeValue",
		"doc": "Marks an abstract as being a runtime value",
		"targets": ["TAbstract"]
	},
	{
		"name": "Scalar",
		"metadata": ":scalar",
		"doc": "Used by hxcpp to mark a custom coreType abstract",
		"platforms": ["cpp"],
		"targets": ["TAbstract"]
	},
	{
		"name": "SelfCall",
		"metadata": ":selfCall",
		"doc": "Translates method calls into calling object directly",
		"platforms": ["js", "lua"],
		"targets": ["TClassField"]
	},
	{
		"name": "Semantics",
		"metadata": ":semantics",
		"doc": "The native semantics of the type",
		"params": ["value | reference | variable"],
		"targets": ["TClass", "TTypedef", "TAbstract"]
	},
	{
		"name": "Setter",
		"metadata": ":setter",
		"doc": "Generates a native setter function on the given field",
		"platforms": ["flash"],
		"params": ["Class field name"],
		"targets": ["TClassField"]
	},
	{
		"name": "SkipCtor",
		"metadata": ":skipCtor",
		"doc": "Used internally to generate a constructor as if it were a native type (no __hx_ctor)",
		"platforms": ["java", "cs"],
		"internal": true
	},
	{
		"name": "SkipReflection",
		"metadata": ":skipReflection",
		"doc": "Used internally to annotate a field that shouldn't have its reflection data generated",
		"platforms": ["java", "cs"],
		"targets": ["TClassField"],
		"internal": true
	},
	{
		"name": "Sound",
		"metadata": ":sound",
		"doc": "Includes a given .wav or .mp3 file into the target SWF and associates it with the class (must extend flash.media.Sound)",
		"platforms": ["flash"],
		"params": ["File path"],
		"targets": ["TClass"]
	},
	{
		"name": "SourceFile",
		"metadata": ":sourceFile",
		"doc": "Source code filename for external class",
		"platforms": ["cpp"]
	},
	{
		"name": "StackOnly",
		"metadata": ":stackOnly",
		"doc": "Instances of this type can only appear on the stack",
		"platforms": ["cpp"]
	},
	{
		"name": "StaticExtension",
		"metadata": "haxe.internal.static_extension",
		"doc": "Used internally to mark static extension fields",
		"internal": true
	},
	{
		"name": "StoredTypedExpr",
		"metadata": ":storedTypedExpr",
		"doc": "Used internally to reference a typed expression returned from a macro",
		"internal": true
	},
	{
		"name": "Strict",
		"metadata": ":strict",
		"doc": "Used to declare a native C# attribute or a native Java metadata; is type checked",
		"platforms": ["java", "cs"]
	},
	{
		"name": "Struct",
		"metadata": ":struct",
		"doc": "Marks a class definition as a struct",
		"platforms": ["cs", "hl"],
		"targets": ["TClass"]
	},
	{
		"name": "StructAccess",
		"metadata": ":structAccess",
		"doc": "Marks an extern class as using struct access('.') not pointer('->')",
		"platforms": ["cpp"],
		"targets": ["TClass"]
	},
	{
		"name": "StructInit",
		"metadata": ":structInit",
		"doc": "Allows one to initialize the class with a structure that matches constructor parameters",
		"targets": ["TClass"]
	},
	{
		"name": "SuppressWarnings",
		"metadata": ":suppressWarnings",
		"doc": "Adds a SuppressWarnings annotation for the generated Java class",
		"platforms": ["java"],
		"targets": ["TClass"]
	},
	{
		"name": "TemplatedCall",
		"metadata": ":templatedCall",
		"doc": "Indicates that the first parameter of static call should be treated as a template argument",
		"platforms": ["cpp"],
		"targets": ["TClassField"]
	},
	{
		"name": "Throws",
		"metadata": ":throws",
		"doc": "Adds a 'throws' declaration to the generated function",
		"platforms": ["java"],
		"params": ["Type as String"],
		"targets": ["TClassField"]
	},
	{
		"name": "This",
		"metadata": ":this",
		"doc": "Internally used to pass a 'this' expression to macros",
		"targets": ["TExpr"],
		"internal": true
	},
	{
		"name": "To",
		"metadata": ":to",
		"doc": "Specifies that the field of the abstract is a cast operation to the type identified in the function",
		"targets": ["TAbstractField"]
	},
	{
		"name": "ToString",
		"metadata": ":toString",
		"doc": "Internally used",
		"internal": true
	},
	{
		"name": "Transient",
		"metadata": ":transient",
		"doc": "Adds the 'transient' flag to the class field",
		"platforms": ["java"],
		"targets": ["TClassField"]
	},
	{
		"name": "ValueUsed",
		"metadata": ":valueUsed",
		"doc": "Internally used by DCE to mark an abstract value as used",
		"internal": true
	},
	{
		"name": "Volatile",
		"metadata": ":volatile",
		"doc": "",
		"platforms": ["java", "cs"]
	},
	{
		"name": "UnifyMinDynamic",
		"metadata": ":unifyMinDynamic",
		"doc": "Allows a collection of types to unify to Dynamic",
		"targets": ["TClassField"]
	},
	{
		"name": "Unreflective",
		"metadata": ":unreflective",
		"doc": "",
		"platforms": ["cpp"]
	},
	{
		"name": "Unsafe",
		"metadata": ":unsafe",
		"doc": "Declares a class, or a method with the C#'s 'unsafe' flag",
		"platforms": ["cs"],
		"targets": ["TClass", "TClassField"]
	},
	{
		"name": "Used",
		"metadata": ":used",
		"doc": "Internally used by DCE to mark a class or field as used",
		"internal": true
	},
	{
		"name": "Using",
		"metadata": ":using",
		"doc": "Automatically uses the argument types as static extensions for the annotated type",
		"targets": ["TClass", "TEnum", "TAbstract"]
	},
	{
		"name": "Value",
		"metadata": ":value",
		"doc": "Used to store default values for fields and function arguments",
		"targets": ["TClassField"]
	},
	{
		"name": "Void",
		"metadata": ":void",
		"doc": "Use Cpp native 'void' return type",
		"platforms": ["cpp"]
	}
]