{ "name": "Schema", "comment": "Class for definining the columns in a Ghidra Database table.", "javadoc": "Class for definining the columns in a Ghidra Database table.", "static": false, "implements": [], "extends": "java.lang.Object", "fields": [ { "name": "NAME_SEPARATOR", "comment": "", "javadoc": "", "static": true, "type_long": "java.lang.String", "type_short": "String", "constant_value": "\";\"" }, { "name": "FIELD_EXTENSION_INDICATOR", "comment": "", "javadoc": "", "static": true, "type_long": "byte", "type_short": "byte", "constant_value": "-1" }, { "name": "SPARSE_FIELD_LIST_EXTENSION", "comment": "", "javadoc": "", "static": true, "type_long": "byte", "type_short": "byte", "constant_value": "1" }, { "name": "version", "comment": "", "javadoc": "", "static": false, "type_long": "int", "type_short": "int", "constant_value": null }, { "name": "keyType", "comment": "", "javadoc": "", "static": false, "type_long": "db.Field", "type_short": "Field", "constant_value": null }, { "name": "keyName", "comment": "", "javadoc": "", "static": false, "type_long": "java.lang.String", "type_short": "String", "constant_value": null }, { "name": "fields", "comment": "", "javadoc": "", "static": false, "type_long": "db.Field[]", "type_short": "db.Field[]", "constant_value": null }, { "name": "fieldNames", "comment": "", "javadoc": "", "static": false, "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "constant_value": null }, { "name": "sparseColumnSet", "comment": "", "javadoc": "", "static": false, "type_long": "java.util.Set\u003cjava.lang.Integer\u003e", "type_short": "Set", "constant_value": null }, { "name": "isVariableLength", "comment": "", "javadoc": "", "static": false, "type_long": "boolean", "type_short": "boolean", "constant_value": null }, { "name": "fixedLength", "comment": "", "javadoc": "", "static": false, "type_long": "int", "type_short": "int", "constant_value": null }, { "name": "forceUseVariableLengthKeyNodes", "comment": "", "javadoc": "", "static": false, "type_long": "boolean", "type_short": "boolean", "constant_value": null } ], "methods": [ { "name": "\u003cinit\u003e", "comment": "Construct a new Schema.", "javadoc": "Construct a new Schema.\n@param version schema version\n@param keyField field associated with primary key (representative instance)\n@param keyName primary key name\n@param fields array of column fields (representative instances)\n@param fieldNames array of column field names\n@param sparseColumns column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns). \n Valid sparse column indexes are in the range 0..127.\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyField", "type_long": "db.Field", "type_short": "Field", "comment": "field associated with primary key (representative instance)" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fields", "type_long": "db.Field[]", "type_short": "db.Field[]", "comment": "array of column fields (representative instances)" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" }, { "name": "sparseColumns", "type_long": "int[]", "type_short": "int[]", "comment": "column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns). \n Valid sparse column indexes are in the range 0..127." } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema.", "javadoc": "Construct a new Schema.\n@param version schema version\n@param keyField field associated with primary key (representative instance)\n@param keyName primary key name\n@param fields array of column fields (representative instances)\n@param fieldNames array of column field names\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyField", "type_long": "db.Field", "type_short": "Field", "comment": "field associated with primary key (representative instance)" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fields", "type_long": "db.Field[]", "type_short": "db.Field[]", "comment": "array of column fields (representative instances)" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema which uses a long key.", "javadoc": "Construct a new Schema which uses a long key.\n@param version schema version\n@param keyName primary key name\n@param fields array of column fields (representative instances)\n@param fieldNames array of column field names\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fields", "type_long": "db.Field[]", "type_short": "db.Field[]", "comment": "array of column fields (representative instances)" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema which uses a long key.", "javadoc": "Construct a new Schema which uses a long key.\n@param version schema version\n@param keyName primary key name\n@param fields array of column fields (representative instances)\n@param fieldNames array of column field names\n@param sparseColumns column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns).\n Valid sparse column indexes are in the range 0..127.\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fields", "type_long": "db.Field[]", "type_short": "db.Field[]", "comment": "array of column fields (representative instances)" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" }, { "name": "sparseColumns", "type_long": "int[]", "type_short": "int[]", "comment": "column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns).\n Valid sparse column indexes are in the range 0..127." } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema.", "javadoc": "Construct a new Schema.\n@param version schema version\n@param keyClass field class associated with primary key\n@param keyName primary key name\n@param fieldClasses array of column field classes\n@param fieldNames array of column field names\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyClass", "type_long": "java.lang.Class\u003c?\u003e", "type_short": "Class", "comment": "field class associated with primary key" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fieldClasses", "type_long": "java.lang.Class\u003c?\u003e[]", "type_short": "java.lang.Class\u003c?\u003e[]", "comment": "array of column field classes" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema.", "javadoc": "Construct a new Schema.\n@param version schema version\n@param keyClass field class associated with primary key\n@param keyName primary key name\n@param fieldClasses array of column field classes\n@param fieldNames array of column field names\n@param sparseColumns column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns).\n Valid sparse column indexes are in the range 0..127.\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyClass", "type_long": "java.lang.Class\u003c?\u003e", "type_short": "Class", "comment": "field class associated with primary key" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fieldClasses", "type_long": "java.lang.Class\u003c?\u003e[]", "type_short": "java.lang.Class\u003c?\u003e[]", "comment": "array of column field classes" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" }, { "name": "sparseColumns", "type_long": "int[]", "type_short": "int[]", "comment": "column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns).\n Valid sparse column indexes are in the range 0..127." } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema which uses a long key.", "javadoc": "Construct a new Schema which uses a long key.\n@param version schema version\n@param keyName primary key name\n@param fieldClasses array of column field classes\n@param fieldNames array of column field names\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fieldClasses", "type_long": "java.lang.Class\u003c?\u003e[]", "type_short": "java.lang.Class\u003c?\u003e[]", "comment": "array of column field classes" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a new Schema which uses a long key.", "javadoc": "Construct a new Schema which uses a long key.\n@param version schema version\n@param keyName primary key name\n@param fieldClasses array of column field classes\n@param fieldNames array of column field names\n@param sparseColumns column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns).\n Valid sparse column indexes are in the range 0..127.\n@throws IllegalArgumentException invalid parameters", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "keyName", "type_long": "java.lang.String", "type_short": "String", "comment": "primary key name" }, { "name": "fieldClasses", "type_long": "java.lang.Class\u003c?\u003e[]", "type_short": "java.lang.Class\u003c?\u003e[]", "comment": "array of column field classes" }, { "name": "fieldNames", "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "array of column field names" }, { "name": "sparseColumns", "type_long": "int[]", "type_short": "int[]", "comment": "column indexes corresponding to those\n columns which utilize sparse storage (null if no sparse columns).\n Valid sparse column indexes are in the range 0..127." } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "\u003cinit\u003e", "comment": "Construct a Schema based upon encoded", "javadoc": "Construct a Schema based upon encoded\n@param version schema version\n@param encodedKeyFieldType key field type\n@param encodedFieldTypes encoded field types array.\n@param packedFieldNames packed list of field names separated by \u0027;\u0027.\n The first field name corresponds to the key name.\n@throws UnsupportedFieldException if unsupported fieldType specified", "static": false, "params": [ { "name": "version", "type_long": "int", "type_short": "int", "comment": "schema version" }, { "name": "encodedKeyFieldType", "type_long": "byte", "type_short": "byte", "comment": "key field type" }, { "name": "encodedFieldTypes", "type_long": "byte[]", "type_short": "byte[]", "comment": "encoded field types array." }, { "name": "packedFieldNames", "type_long": "java.lang.String", "type_short": "String", "comment": "packed list of field names separated by \u0027;\u0027.\n The first field name corresponds to the key name." } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [ { "type_long": "db.Field.UnsupportedFieldException", "type_short": "UnsupportedFieldException", "comment": "if unsupported fieldType specified" } ] }, { "name": "hasSparseColumns", "comment": "Determine if schema employs sparse column storage", "javadoc": "Determine if schema employs sparse column storage\n@return true if schema employs sparse column storage", "static": false, "params": [], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "true if schema employs sparse column storage" }, "throws": [] }, { "name": "isSparseColumn", "comment": "Determine if the specified column index has been designated as a sparse\n column within the associated record storage", "javadoc": "Determine if the specified column index has been designated as a sparse\n column within the associated record storage\n@param columnIndex column index\n@return true if designated column uses sparse storage", "static": false, "params": [ { "name": "columnIndex", "type_long": "int", "type_short": "int", "comment": "column index" } ], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "true if designated column uses sparse storage" }, "throws": [] }, { "name": "initializeFields", "comment": "Initialize field types and related field extensions (e.g., sparse field list).\n The presence of field extensions within the encodedFieldTypes is indicated by a\n -1 (field extension indicator) following the encoded field types. \n The byte value following the field extension indicator\n is the extension type which is followed by the extension data if applicable.\n A -1 byte is used to separate each extension byte sequence.", "javadoc": "Initialize field types and related field extensions (e.g., sparse field list).\n The presence of field extensions within the encodedFieldTypes is indicated by a\n -1 (field extension indicator) following the encoded field types. \n The byte value following the field extension indicator\n is the extension type which is followed by the extension data if applicable.\n A -1 byte is used to separate each extension byte sequence.\n@param encodedFieldTypes encoded field type data\n@throws UnsupportedFieldException if decoding of the encodedFieldTypes fails", "static": false, "params": [ { "name": "encodedFieldTypes", "type_long": "byte[]", "type_short": "byte[]", "comment": "encoded field type data" } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [ { "type_long": "db.Field.UnsupportedFieldException", "type_short": "UnsupportedFieldException", "comment": "if decoding of the encodedFieldTypes fails" } ] }, { "name": "initializeSparseColumnSet", "comment": "", "javadoc": "", "static": false, "params": [ { "name": "sparseColumns", "type_long": "java.lang.Integer[]", "type_short": "java.lang.Integer[]", "comment": "" } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [ { "type_long": "db.Field.UnsupportedFieldException", "type_short": "UnsupportedFieldException", "comment": "" } ] }, { "name": "parseSparseColumnIndexes", "comment": "Parse the sparse column indexes contained within the encodedFieldTypes data", "javadoc": "Parse the sparse column indexes contained within the encodedFieldTypes data\n@param encodedFieldTypes encoded data bytes\n@param index of first extension data byte within encodedFieldTypes array\n@return number of encoded data bytes consumed", "static": false, "params": [ { "name": "encodedFieldTypes", "type_long": "byte[]", "type_short": "byte[]", "comment": "encoded data bytes" }, { "name": "index", "type_long": "int", "type_short": "int", "comment": "of first extension data byte within encodedFieldTypes array" } ], "return": { "type_long": "int", "type_short": "int", "comment": "number of encoded data bytes consumed" }, "throws": [ { "type_long": "db.Field.UnsupportedFieldException", "type_short": "UnsupportedFieldException", "comment": "" } ] }, { "name": "getField", "comment": "", "javadoc": "", "static": true, "params": [ { "name": "fieldClass", "type_long": "java.lang.Class\u003c?\u003e", "type_short": "Class", "comment": "" } ], "return": { "type_long": "db.Field", "type_short": "Field", "comment": "" }, "throws": [] }, { "name": "getFields", "comment": "", "javadoc": "", "static": true, "params": [ { "name": "fieldClasses", "type_long": "java.lang.Class\u003c?\u003e[]", "type_short": "java.lang.Class\u003c?\u003e[]", "comment": "" } ], "return": { "type_long": "db.Field[]", "type_short": "db.Field[]", "comment": "" }, "throws": [] }, { "name": "useLongKeyNodes", "comment": "Determine if this schema can use LongKeyNode\u0027s within a table.", "javadoc": "Determine if this schema can use LongKeyNode\u0027s within a table.\n@return true if LongKeyNode\u0027s can be used to store records produced with this schema.", "static": false, "params": [], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "true if LongKeyNode\u0027s can be used to store records produced with this schema." }, "throws": [] }, { "name": "useVariableKeyNodes", "comment": "Determine if this schema uses VarKeyNode\u0027s within a table.", "javadoc": "Determine if this schema uses VarKeyNode\u0027s within a table.\n@return true if VarKeyNode\u0027s are be used to store records produced with this schema.", "static": false, "params": [], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "true if VarKeyNode\u0027s are be used to store records produced with this schema." }, "throws": [] }, { "name": "useFixedKeyNodes", "comment": "Determine if this schema can use FixedKeyNode\u0027s within a table.", "javadoc": "Determine if this schema can use FixedKeyNode\u0027s within a table.\n@return true if FixedKeyNode\u0027s can be used to store records produced with this schema.", "static": false, "params": [], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "true if FixedKeyNode\u0027s can be used to store records produced with this schema." }, "throws": [] }, { "name": "forceUseOfVariableLengthKeyNodes", "comment": "Force use of variable-length key nodes.\n \n This method provides a work-around for legacy schemas which\n employ primitive fixed-length keys other than LongField\n and improperly employ a variable-length-key storage schema.\n Although rare, this may be neccessary to ensure backward compatibility \n with legacy DB storage (example ByteField key employed by old table).", "javadoc": "Force use of variable-length key nodes.\n \u003cbr\u003e\n This method provides a work-around for legacy schemas which\n employ primitive fixed-length keys other than LongField\n and improperly employ a variable-length-key storage schema.\n Although rare, this may be neccessary to ensure backward compatibility \n with legacy DB storage (example ByteField key employed by old table).", "static": false, "params": [], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "getKeyFieldType", "comment": "Get the Field type for the key.", "javadoc": "Get the Field type for the key.\n@return key Field type", "static": false, "params": [], "return": { "type_long": "db.Field", "type_short": "Field", "comment": "key Field type" }, "throws": [] }, { "name": "getKeyName", "comment": "Get the key name", "javadoc": "Get the key name\n@return key name", "static": false, "params": [], "return": { "type_long": "java.lang.String", "type_short": "String", "comment": "key name" }, "throws": [] }, { "name": "getFields", "comment": "Get the list of data Field classes for this schema.\n The returned list is ordered consistent with the schema definition.", "javadoc": "Get the list of data Field classes for this schema.\n The returned list is ordered consistent with the schema definition.\n@return data Field classes", "static": false, "params": [], "return": { "type_long": "db.Field[]", "type_short": "db.Field[]", "comment": "data Field classes" }, "throws": [] }, { "name": "getFieldNames", "comment": "Get the list of data Field names for this schema.\n The returned list is ordered consistent with the schema definition.", "javadoc": "Get the list of data Field names for this schema.\n The returned list is ordered consistent with the schema definition.\n@return data Field names", "static": false, "params": [], "return": { "type_long": "java.lang.String[]", "type_short": "java.lang.String[]", "comment": "data Field names" }, "throws": [] }, { "name": "getFieldCount", "comment": "Get the number of data Fields", "javadoc": "Get the number of data Fields\n@return data Field count", "static": false, "params": [], "return": { "type_long": "int", "type_short": "int", "comment": "data Field count" }, "throws": [] }, { "name": "parseNames", "comment": "Parse the packed list of data Field names.\n The fieldNames array is initialized with the individual Field names.", "javadoc": "Parse the packed list of data Field names.\n The fieldNames array is initialized with the individual Field names.\n@param packedNames packed name list produced by the getPackedFieldNames() method.", "static": false, "params": [ { "name": "packedNames", "type_long": "java.lang.String", "type_short": "String", "comment": "packed name list produced by the getPackedFieldNames() method." } ], "return": { "type_long": "void", "type_short": "void", "comment": "" }, "throws": [] }, { "name": "getPackedFieldNames", "comment": "Get the packed list of data Field names.", "javadoc": "Get the packed list of data Field names.\n@return packed name list.", "static": false, "params": [], "return": { "type_long": "java.lang.String", "type_short": "String", "comment": "packed name list." }, "throws": [] }, { "name": "getEncodedKeyFieldType", "comment": "", "javadoc": "", "static": false, "params": [], "return": { "type_long": "byte", "type_short": "byte", "comment": "" }, "throws": [] }, { "name": "getEncodedFieldTypes", "comment": "Get the schema field types as an encoded byte array.", "javadoc": "Get the schema field types as an encoded byte array.\n@return byte[] field type list as an encoded byte array.", "static": false, "params": [], "return": { "type_long": "byte[]", "type_short": "byte[]", "comment": "byte[] field type list as an encoded byte array." }, "throws": [] }, { "name": "getVersion", "comment": "Get the schema version.", "javadoc": "Get the schema version.\n@return schema version", "static": false, "params": [], "return": { "type_long": "int", "type_short": "int", "comment": "schema version" }, "throws": [] }, { "name": "isVariableLength", "comment": "Returns true if records for this Schema can be of variable lengths.", "javadoc": "Returns true if records for this Schema can be of variable lengths.\n@return true if records with this Schema are variable length.", "static": false, "params": [], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "true if records with this Schema are variable length." }, "throws": [] }, { "name": "getFixedLength", "comment": "Get length of fixed-length schema record.", "javadoc": "Get length of fixed-length schema record.\n@return record length or 0 for variable length.", "static": false, "params": [], "return": { "type_long": "int", "type_short": "int", "comment": "record length or 0 for variable length." }, "throws": [] }, { "name": "createRecord", "comment": "Create an empty record for the specified key.", "javadoc": "Create an empty record for the specified key.\n@param key long key\n@return new record", "static": false, "params": [ { "name": "key", "type_long": "long", "type_short": "long", "comment": "long key" } ], "return": { "type_long": "db.DBRecord", "type_short": "DBRecord", "comment": "new record" }, "throws": [] }, { "name": "createRecord", "comment": "Create an empty record for the specified key.", "javadoc": "Create an empty record for the specified key.\n@param key record key field\n@return new record", "static": false, "params": [ { "name": "key", "type_long": "db.Field", "type_short": "Field", "comment": "record key field" } ], "return": { "type_long": "db.DBRecord", "type_short": "DBRecord", "comment": "new record" }, "throws": [] }, { "name": "getField", "comment": "Get a new instance of a data Field object for the specified column.", "javadoc": "Get a new instance of a data Field object for the specified column.\n@param colIndex field index\n@return new Field object suitable for data reading/writing.", "static": false, "params": [ { "name": "colIndex", "type_long": "int", "type_short": "int", "comment": "field index" } ], "return": { "type_long": "db.Field", "type_short": "Field", "comment": "new Field object suitable for data reading/writing." }, "throws": [] }, { "name": "equals", "comment": "Compare two schemas for equality.\n Field names are ignored in this comparison. Instance variables such as #fixedLength,\n Schema#isVariableLength and #forceUseVariableLengthKeyNodes are also ignored.", "javadoc": "Compare two schemas for equality.\n Field names are ignored in this comparison. Instance variables such as {@link #fixedLength},\n {@link Schema#isVariableLength} and {@link #forceUseVariableLengthKeyNodes} are also ignored.\n@see java.lang.Object#equals(java.lang.Object)", "static": false, "params": [ { "name": "obj", "type_long": "java.lang.Object", "type_short": "Object", "comment": "" } ], "return": { "type_long": "boolean", "type_short": "boolean", "comment": "" }, "throws": [] }, { "name": "hashCode", "comment": "", "javadoc": "", "static": false, "params": [], "return": { "type_long": "int", "type_short": "int", "comment": "" }, "throws": [] }, { "name": "toString", "comment": "", "javadoc": "", "static": false, "params": [], "return": { "type_long": "java.lang.String", "type_short": "String", "comment": "" }, "throws": [] } ] }