Document Properties


Properties are additional objects attached to a document (Class, Field, Method, etc.). With properties, you can change the name/type of method/field, add comments, or assign new types for type conversion (like Special.Item to Internal.ItemStack_).
Recommended to read with /addons/third-party/probejs/dynamic-document-modification.

#Functional Properties

Functional properties are directly attached to the document and have a specific effect on the original document.

#property:modify

Modifies a param in the method, can only be attached to a method document.
{
    "type": "property:modify",
    // The index of param in the method starting from 0.
    "index": 0,
    // The new name of the param, unchanged if omitted.
    "name" : "ingredient"
    // The new type of the param, unchanged if omitted. See the Type Properties section below for type specifications.
    "newType": {
        "type": "type:class",
        "name": "net.minecraft.world.item.crafting.Ingredient"
    }
}

#property:assign

Assigns a new type for conversion to the class, It can only be attached to a class document.
Multiple properties at present will form a union type of all assigned types.
{
    "type": "property:assign",
    // If true, remove the original type in the type definition. Default to false.
    "shield": false,
    // The type assigned to this class. See the Type Properties section below for type specifications.
    "assign": {
        "type": "type:primitive",
        "name": "string"
    }
}

#property:comment

Attachs lines of comment to the object attached when formatted. It can be applied to all documents.
{
    "type": "property:comment",
    "lines": [
        // Multiple lines of comments will be joined with newlines when formatted.
        "Comment1",
        "Comment2",
    ]
}

#property:hide

Hides the attached object. It can be applied to all documents.
{
    "type": "property:hide"
}

#Type properties

Type properties describe a type for many usages in the document.

#type:primitive

Represents a plain string. Will be as-is when formatted.
{
    "type": "type:primitive",
    // Will be `number` when formatted.
    "name": "number"
}

#type:class

Represents a class type. Will be automatically resolved when formatted.
{
    "type": "type:class",
    // Will be resolved to `Internal.Biconsumer` when formatted.
    "name": "java.util.function.BiConsumer"
}

#type:array

Represents an array type. Will be InnerType[] when formatted.
{
    "type": "type:array",
    // The InnerType
    "component": {
        "type": "type:class",
        "name": "float"
    }
}

#type:parameterized

Represents a parameterized type. WIll be BaseType<ParamType1, ...> when formatted.
{
    // Will be `Internal.CompletionStage<T>` when formatted.
    "type": "type:parameterized",
    // Type parameters
    "params": [
        {
            "type": "type:variable",
            "name": "T"
        }
    ],
    // The base type
    "base": {
        "type": "type:class",
        "name": "java.util.concurrent.CompletionStage"
    }
}

#type:variable

Represents a variable type. Will be as-is when formatted.
{
    "type": "type:variable",
    // Will be `T` when formatted.
    "name": "T"
}

#type:union

Represents a union type. Will be Type1 | Type2 ... when formatted.
{
    "type": "type:union",
    // All types in the union, will be `Special.RecipeId | RegExp` when formatted.
    "types": [
        {
            "type": "type:primitive",
            "name": "Special.RecipeId"
        },
        {
            "type": "type:primitive",
            "name": "RegExp"
        }
    ]
}

#type:intersection

Represents an intersection type. Will be Type1 & Type2 ... when formatted.
{
    "type": "type:intersection",
    // All types in the intersection, will be `Special.Block & `$==={string}===:$==={string}===`` when formatted.
    "types": [
        {
            "type": "type:primitive",
            "name": "Special.Block"
        },
        {
            "type": "type:primitive",
            "name": "`$==={string}===:$==={string}===`"
        }
    ]
}

#type:jsArray

Reprensents a JSDoc array type. Will be when formatted.
{
    "type": "type:jsArray",
    // All types in the array, will be `[A, B]` when formatted.
    "types": [
        {
            "type": "type:variable",
            "name": "A"
        },
        {
            "type": "type:variable",
            "name": "B"
        }
    ]
}

#type:object

Represents an object type. Will be {key1: Type1, key2: Type2 ...} when formatted.
{
    "type": "type:object",
    // All items in the type, will be `{min: number, max: number}` when formatted.
    "members": [
        {
            "key": "min",
            "value": {
                "type": "type:primitive",
                "name": "number"
            }
        },
        {
            "key": "max",
            "value": {
                "type": "type:primitive",
                "name": "number"
            }
        }
    ]
}