Files
IMR6/libraries/windows/graalvm/lib/svm/schemas/reachability-metadata-schema.json
T

459 lines
16 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"$id": "https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/assets/reachability-metadata-schema-v1.2.0.json",
"title": "JSON schema for the reachability metadata used by GraalVM Native Image",
"version": "1.2.0",
"type": "object",
"default": {},
"properties": {
"comment": {
"title": "Comment(s) applying to the whole file (e.g., generation date, author, etc.)",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"default": ""
},
"reflection": {
"title": "Metadata to ensure elements are accessible via reflection",
"type": "array",
"default": [],
"items": {
"title": "Elements that should be registered for reflection for a specified type",
"type": "object",
"required": ["type"],
"properties": {
"reason": {
"$ref": "#/$defs/reason"
},
"condition": {
"$ref": "#/$defs/condition"
},
"type": {
"title": "Type descriptor of the class that should be registered for reflection",
"$ref": "#/$defs/type"
},
"methods": {
"title": "List of methods that should be registered for the type declared in <type>",
"type": "array",
"default": [],
"items": {
"title": "Method descriptor of the method that should be registered for reflection",
"$ref": "#/$defs/method"
}
},
"fields": {
"title": "List of class fields that can be read or written to for the type declared in <type>",
"type": "array",
"default": [],
"items": {
"title": "Field descriptor of the field that should be registered for reflection",
"type": "object",
"properties": {
"name": {
"title": "Name of the field that should be registered for reflection",
"type": "string",
"pattern": "^[^.;\\[/]+$"
}
},
"required": [
"name"
],
"additionalProperties": false
}
},
"allDeclaredMethods": {
"title": "Register all declared methods from the type for reflective invocation",
"type": "boolean",
"default": false
},
"allDeclaredFields": {
"title": "Register all declared fields from the type for reflective access",
"type": "boolean",
"default": false
},
"allDeclaredConstructors": {
"title": "Register all declared constructors from the type for reflective invocation",
"type": "boolean",
"default": false
},
"allPublicMethods": {
"title": "Register all public methods from the type for reflective invocation",
"type": "boolean",
"default": false
},
"allPublicFields": {
"title": "Register all public fields from the type for reflective access",
"type": "boolean",
"default": false
},
"allPublicConstructors": {
"title": "Register all public constructors from the type for reflective invocation",
"type": "boolean",
"default": false
},
"unsafeAllocated": {
"title": "Allow objects of this class to be instantiated with a call to jdk.internal.misc.Unsafe#allocateInstance or JNI's AllocObject",
"type": "boolean",
"default": false
},
"serializable": {
"title": "Allow objects of this class to be serialized and deserialized",
"type": "boolean",
"default": false
},
"jniAccessible": {
"title": "Register the type, including all registered fields and methods, for runtime JNI access",
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}
},
"resources": {
"title": "Metadata to ensure resources are accessible",
"type": "array",
"default": [],
"items": {
"oneOf": [
{
"title": "Resource that should be accessible",
"type": "object",
"properties": {
"reason": {
"$ref": "#/$defs/reason"
},
"condition": {
"$ref": "#/$defs/condition"
},
"module": {
"title": "Module containing the resource",
"type": "string",
"default": ""
},
"glob": {
"title": "Resource name or pattern matching multiple resources (accepts * and ** wildcards)",
"type": "string"
}
},
"required": [
"glob"
],
"additionalProperties": false
},
{
"title": "Resource bundle that should be available",
"type": "object",
"properties": {
"reason": {
"$ref": "#/$defs/reason"
},
"condition": {
"$ref": "#/$defs/condition"
},
"module": {
"title": "Module containing the resource bundle",
"type": "string",
"default": ""
},
"bundle": {
"title": "Resource bundle name",
"type": "string"
}
},
"required": [
"bundle"
],
"additionalProperties": false
}
]
}
},
"foreign": {
"properties": {
"downcalls": {
"default": [],
"items": {
"properties": {
"reason": {
"$ref": "#/$defs/reason"
},
"condition": {
"$ref": "#/$defs/condition"
},
"returnType": {
"type": "string",
"title": "Memory layout definition (allows canonical layouts; see `java.lang.foreign.Linker`)"
},
"parameterTypes": {
"default": [],
"items": {
"type": "string",
"title": "Memory layout definition (allows canonical layouts; see `java.lang.foreign.Linker`)"
},
"type": "array",
"title": "List of the function descriptor's parameter types"
},
"options": {
"type": "object",
"title": "Linker options (see `java.lang.foreign.Linker.Option`)",
"properties": {
"captureCallState": {
"type": "boolean",
"title": "Specifies whether a call state should be captured. The specific states to capture are determined at run time. See also: `java.lang.foreign.Linker.Option.captureCallState`"
},
"critical": {
"type": "object",
"title": "See `java.lang.foreign.Linker.Option.critical`",
"properties": {
"allowHeapAccess": {
"type": "boolean"
}
},
"additionalProperties": false
},
"firstVariadicArg": {
"type": "integer",
"title": "See `java.lang.foreign.Linker.Option.firstVariadicArg`"
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["returnType", "parameterTypes"],
"type": "object",
"title": "Function descriptor to be registered for a downcall"
},
"type": "array",
"title": "List of function descriptors that should be registered for downcalls"
},
"upcalls": {
"default": [],
"items": {
"properties": {
"reason": {
"$ref": "#/$defs/reason"
},
"condition": {
"$ref": "#/$defs/condition"
},
"returnType": {
"type": "string",
"title": "Memory layout definition (allows canonical layouts; see `java.lang.foreign.Linker`)"
},
"parameterTypes": {
"default": [],
"items": {
"type": "string",
"title": "Memory layout definition (allows canonical layouts; see `java.lang.foreign.Linker`)"
},
"type": "array",
"title": "List of the function descriptor's parameter types"
},
"options": {
"type": "object",
"title": "Linker options (see `java.lang.foreign.Linker.Option`)",
"description": "Currently, no linker options are allowed for upcalls. This may change in the future.",
"properties": { },
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["returnType", "parameterTypes"],
"type": "object",
"title": "Function descriptor to be registered for an upcall"
},
"type": "array",
"title": "List of function descriptors that should be registered for upcalls"
},
"directUpcalls": {
"default": [],
"items": {
"properties": {
"reason": {
"$ref": "#/$defs/reason"
},
"condition": {
"$ref": "#/$defs/condition"
},
"class": {
"$ref": "#/$defs/className",
"title": "Fully-qualified class name (e.g., `org.package.OuterClass$InnerClass`)"
},
"method": {
"type": "string",
"title": "Method name"
},
"returnType": {
"type": "string",
"title": "Memory layout definition (allows canonical layouts; see `java.lang.foreign.Linker`)"
},
"parameterTypes": {
"default": [],
"items": {
"type": "string",
"title": "Memory layout definition (allows canonical layouts; see `java.lang.foreign.Linker`)"
},
"type": "array",
"title": "List of the function descriptor's parameter types"
},
"options": {
"type": "object",
"title": "Linker options (see `java.lang.foreign.Linker.Option`)",
"description": "Currently, no linker options are allowed for direct upcalls. This may change in the future.",
"properties": { },
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["class", "method"],
"type": "object",
"title": "Java method and function descriptor to be registered for a direct upcall"
},
"type": "array",
"title": "List of Java methods and function descriptors that should be registered for direct upcalls"
}
},
"type": "object",
"additionalProperties": false,
"title": "JSON schema for the FFM API configuration used by GraalVM Native Image",
"description": "For a description and examples of writing an FFM API configuration, see: https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/FFM-API.md"
}
},
"required": [],
"additionalProperties": false,
"$defs": {
"className": {
"type": "string",
"pattern": "^[^.;\\[/]+(\\.[^.;\\[/]+)*$"
},
"typeName": {
"type": "string",
"pattern": "^[^.;\\[/]+(\\.[^.;\\[/]+)*(\\[])*$"
},
"reason": {
"title": "Reason(s) for including this element (e.g., needed for establishing connections, or needed by method X#Y for task Z)",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"default": ""
},
"condition": {
"title": "Condition used to determine if the element will be accessible at run time",
"type": "object",
"properties": {
"typeReached": {
"title": "Type descriptor of a class that must be reached in order to allow access to the element",
"$ref": "#/$defs/type"
}
},
"required": [
"typeReached"
],
"additionalProperties": false
},
"type": {
"title": "Type descriptors used by GraalVM Native Image metadata files",
"oneOf": [
{
"$ref": "#/$defs/typeName"
},
{
"type": "object",
"properties": {
"proxy": {
"title": "A list of interfaces defining the proxy class",
"type": "array",
"items": {
"title": "Fully-qualified name of the interface defining the proxy class",
"$ref": "#/$defs/className"
}
},
"lambda": {
"title": "Lambda class descriptor",
"type": "object",
"properties": {
"declaringClass": {
"title": "The class in which the lambda class is defined",
"$ref": "#/$defs/className"
},
"declaringMethod": {
"title": "The method in which the lambda class is defined",
"$ref": "#/$defs/method"
},
"interfaces": {
"title": "Non-empty list of interfaces implemented by the lambda class",
"type": "array",
"items": {
"title": "Fully-qualified name of the interface implemented by the lambda class",
"$ref": "#/$defs/className"
},
"minItems": 1
}
},
"required": [
"declaringClass",
"interfaces"
],
"additionalProperties": false
}
},
"oneOf": [
{
"required": [
"proxy"
]
},
{
"required": [
"lambda"
]
}
],
"additionalProperties": false
}
]
},
"method": {
"title": "Method descriptors used by GraalVM Native Image metadata files",
"type": "object",
"properties": {
"name": {
"title": "Method name that should be registered for this class",
"type": "string",
"pattern": "^[^.;\\[/]+$"
},
"parameterTypes": {
"items": {
"title": "List of the method's parameter types",
"$ref": "#/$defs/typeName"
},
"type": "array"
}
},
"required": [
"name", "parameterTypes"
],
"additionalProperties": false
}
}
}