Index

A B C D E F G H I L M N O P R S T V W 
All Classes and Interfaces|All Packages|Serialized Form

A

add(ClassName, String) - Method in interface pl.com.labaj.autorecord.context.StaticImports
Adds static import statement
add(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
add(Class<?>, String) - Method in interface pl.com.labaj.autorecord.context.StaticImports
Adds static import statement
add(Enum<?>) - Method in interface pl.com.labaj.autorecord.context.StaticImports
Adds static import statement
addAll(Collection<? extends E>) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
addFirst(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
additionalMethodsToSupportCompactConstructor(Context, StaticImports) - Method in interface pl.com.labaj.autorecord.extension.CompactConstructorExtension
Provides list of additional methods that needs to be added to generated record.
addLast(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
annotations() - Method in interface pl.com.labaj.autorecord.context.RecordComponent
Gets the list of AnnotationMirror instances representing the annotations applied to the record component.
annotationsToSupportCompactConstructor(Context, StaticImports) - Method in class pl.com.labaj.autorecord.extension.arice.ImmutableCollectionsExtension
Returns, among others, ARICEUtilities annotation that specifies:
annotationsToSupportCompactConstructor(Context, StaticImports) - Method in interface pl.com.labaj.autorecord.extension.CompactConstructorExtension
Provides list of annotations that the generated record needs to be annotated with.
ARICEUtilities - Annotation Interface in pl.com.labaj.autorecord.extension.arice
This annotation is used to mark the generated record, so the ARICE (AutoRecord Immutable Collections Extension) knows what utility class it should generate.
ARICEUtilitiesProcessor - Class in pl.com.labaj.autorecord.extension.arice
ARICEUtilitiesProcessor() - Constructor for class pl.com.labaj.autorecord.extension.arice.ARICEUtilitiesProcessor
 
AutoRecord - Annotation Interface in pl.com.labaj.autorecord
AutoRecord is a code generator that helps you easily generate Java records.
AutoRecord.Extension - Annotation Interface in pl.com.labaj.autorecord
Used to specify an extension for the AutoRecord Processor used during a record generation.
AutoRecord.Options - Annotation Interface in pl.com.labaj.autorecord
Specifies options for the AutoRecord annotation.
AutoRecord.Template - Annotation Interface in pl.com.labaj.autorecord
Provides a base to create custom annotation that can be used to mark interfaces for record generation.
AutoRecordExtension - Interface in pl.com.labaj.autorecord.extension
Represents an extension for the AutoRecord Processor that can be used to customize the record generation process.
AutoRecordExtensions - Annotation Interface in pl.com.labaj.autorecord.extension
An annotation used to mark the AutoRecord.Extension annotation as repeatable.
AutoRecordProcessor - Class in pl.com.labaj.autorecord.processor
Annotation processor for generating record based on an interface.
AutoRecordProcessor() - Constructor for class pl.com.labaj.autorecord.processor.AutoRecordProcessor
 
AutoRecordProcessorException - Exception in pl.com.labaj.autorecord.processor
Thrown when an exceptional condition has occurred during AutoRecord processing.
AutoRecordProcessorException(String) - Constructor for exception pl.com.labaj.autorecord.processor.AutoRecordProcessorException
AutoRecordProcessorException(String, Throwable) - Constructor for exception pl.com.labaj.autorecord.processor.AutoRecordProcessorException
AutoRecordWithBuilder - Annotation Interface in pl.com.labaj.autorecord
Custom annotation used to mark interface for annotation processing.

B

BooleanMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
BooleanMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.BooleanMemoizer
 
builderOptions() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Template
Specifies options for the RecordBuilder used for builder generation if enabled by withBuilder().
builderOptions() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the builder options specified in the AutoRecord or AutoRecord.Template annotation for the annotated interface.
ByteMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
ByteMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.ByteMemoizer
 
ByteSupplier - Interface in pl.com.labaj.autorecord.memoizer
Represents a supplier of byte-valued results.

C

CharMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
CharMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.CharMemoizer
 
CharSupplier - Interface in pl.com.labaj.autorecord.memoizer
Represents a supplier of char-valued results.
className() - Element in annotation interface pl.com.labaj.autorecord.extension.arice.ARICEUtilities
Specifies the fully qualified name of the utility class that provides additional methods and functionality to support the ARICE extension.
clear() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
Collectors - Class in pl.com.labaj.autorecord.collections
Utility class that provides custom Collectors for creating immutable collections.
CompactConstructorExtension - Interface in pl.com.labaj.autorecord.extension
Represents an extension of the AutoRecord Processor for customizing the compact constructor generation process.
components() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the list of RecordComponent instances representing the components of the generated record.
computeAsBooleanIfAbsent(BooleanSupplier) - Method in class pl.com.labaj.autorecord.memoizer.BooleanMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsByteIfAbsent(ByteSupplier) - Method in class pl.com.labaj.autorecord.memoizer.ByteMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsCharIfAbsent(CharSupplier) - Method in class pl.com.labaj.autorecord.memoizer.CharMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsDoubleIfAbsent(DoubleSupplier) - Method in class pl.com.labaj.autorecord.memoizer.DoubleMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsFloatIfAbsent(FloatSupplier) - Method in class pl.com.labaj.autorecord.memoizer.FloatMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsIntIfAbsent(IntSupplier) - Method in class pl.com.labaj.autorecord.memoizer.IntMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsLongIfAbsent(LongSupplier) - Method in class pl.com.labaj.autorecord.memoizer.LongMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeAsShortIfAbsent(ShortSupplier) - Method in class pl.com.labaj.autorecord.memoizer.ShortMemoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
computeIfAbsent(Supplier<T>) - Method in class pl.com.labaj.autorecord.memoizer.Memoizer
Computes and memoizes the value of the function supplied if it has not already been computed.
contains(Object) - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
contains(Object) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
containsAll(Collection<?>) - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
containsAll(Collection<?>) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Context - Interface in pl.com.labaj.autorecord.context
Represents the context of the AutoRecord annotation processing.
copyOf(Collection<? extends E>) - Static method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Creates an immutable copy of the given collection.
copyOfCollection(Collection<? extends E>) - Static method in class pl.com.labaj.autorecord.collections.ImmutableCollection
Returns an immutable copy of the given collection.
copyOfQueue(Queue<? extends E>) - Static method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Creates an immutable copy of the given queue.

D

debug(String) - Method in interface pl.com.labaj.autorecord.context.Logger
Log a message at the Diagnostic.Kind.NOTE level with "[AR] " prefix when Logger.isDebugEnabled() returns true
descendingIterator() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
DoubleMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
DoubleMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.DoubleMemoizer
 

E

element() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
error(String) - Method in interface pl.com.labaj.autorecord.context.Logger
Log a message at the Diagnostic.Kind.ERROR level.
error(String, Throwable) - Method in interface pl.com.labaj.autorecord.context.Logger
Log an exception (throwable) at the Diagnostic.Kind.ERROR level with an accompanying message.
extensionClass() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Extension
The FQCN of the custom extension.
extensions() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Template
Specifies the custom extensions to be used during record generation.

F

FloatMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
FloatMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.FloatMemoizer
 
FloatSupplier - Interface in pl.com.labaj.autorecord.memoizer
Represents a supplier of float-valued results.

G

GeneratedWithAutoRecord - Annotation Interface in pl.com.labaj.autorecord
Starting from JaCoCo 0.8.2, classes and methods annotated with annotation following properties: the annotation name includes "Generated" the annotation retention policy is RUNTIME or CLASS are excluded from test coverage reports.
getAsByte() - Method in interface pl.com.labaj.autorecord.memoizer.ByteSupplier
Gets a byte-valued result.
getAsChar() - Method in interface pl.com.labaj.autorecord.memoizer.CharSupplier
Gets a char-valued result.
getAsFloat() - Method in interface pl.com.labaj.autorecord.memoizer.FloatSupplier
Gets a float-valued result.
getAsShort() - Method in interface pl.com.labaj.autorecord.memoizer.ShortSupplier
Gets a short-valued result.
getFirst() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
getLast() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
getSupportedSourceVersion() - Method in class pl.com.labaj.autorecord.extension.arice.ARICEUtilitiesProcessor
getSupportedSourceVersion() - Method in class pl.com.labaj.autorecord.processor.AutoRecordProcessor

H

hasNext() - Method in class pl.com.labaj.autorecord.collections.ImmutableIterator

I

Ignored - Annotation Interface in pl.com.labaj.autorecord
Annotates methods in @AutoRecord annotated interface for which the corresponding components in generated record are not relevant for equality checks - they are ignored in hashCode() and toString() methods.
ImmutableCollection<E> - Class in pl.com.labaj.autorecord.collections
An implementation of Collection that represents an immutable collection.
ImmutableCollectionsExtension - Class in pl.com.labaj.autorecord.extension.arice
An implementations of the AutoRecord CompactConstructorExtension for customizing a record generation process with support for immutable collections.
ImmutableCollectionsExtension() - Constructor for class pl.com.labaj.autorecord.extension.arice.ImmutableCollectionsExtension
 
ImmutableDeque<E> - Class in pl.com.labaj.autorecord.collections
An immutable implementation of the Deque interface that wraps a delegate deque.
ImmutableIterator<E> - Class in pl.com.labaj.autorecord.collections
An immutable wrapper around an Iterator that prevents modifications to the underlying collection.
ImmutableIterator(Iterator<E>) - Constructor for class pl.com.labaj.autorecord.collections.ImmutableIterator
Creates an immutable Iterator that wraps the provided delegate Iterator.
immutableTypes() - Element in annotation interface pl.com.labaj.autorecord.extension.arice.ARICEUtilities
Specifies an array of fully qualified names of immutable types.
init(ProcessingEnvironment) - Method in class pl.com.labaj.autorecord.extension.arice.ARICEUtilitiesProcessor
init(ProcessingEnvironment) - Method in class pl.com.labaj.autorecord.processor.AutoRecordProcessor
init(ProcessingEnvironment, String[]) - Method in class pl.com.labaj.autorecord.extension.arice.ImmutableCollectionsExtension
Initializes the extension with the given processing environment and parameters.
init(ProcessingEnvironment, String[]) - Method in interface pl.com.labaj.autorecord.extension.AutoRecordExtension
Sets the parameters for the extension.
interfaceName() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the simple name of the annotated interface.
interfaceType() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the type of the annotated interface.
IntMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
IntMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.IntMemoizer
 
isAnnotatedWith(Class<? extends Annotation>) - Method in interface pl.com.labaj.autorecord.context.RecordComponent
Checks if the component is annotated with a specific annotation class.
isArray() - Method in interface pl.com.labaj.autorecord.context.RecordComponent
Checks if the component's type is an array type.
isDebugEnabled() - Method in interface pl.com.labaj.autorecord.context.Logger
Check if the logger instance should log debug information.
isEmpty() - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
isEmpty() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
isPrimitive() - Method in interface pl.com.labaj.autorecord.context.RecordComponent
Checks if the component's type is a primitive type.
isRecordPublic() - Method in interface pl.com.labaj.autorecord.context.Context
Checks if the generated record class should have public visibility.
iterator() - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
iterator() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque

L

logger() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the Logger instance to log messages during the annotation processing.
Logger - Interface in pl.com.labaj.autorecord.context
A Logger object is used to log messages during annotation processing with specified levels.
LongMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
LongMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.LongMemoizer
 

M

mandatoryWarning(String) - Method in interface pl.com.labaj.autorecord.context.Logger
Log a message at the Diagnostic.Kind.MANDATORY_WARNING level.
Memoized - Annotation Interface in pl.com.labaj.autorecord
Annotates methods in @AutoRecord annotated interface for which the generated record will memoize the returned value.
memoizedHashCode() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Options
If true, hashCode() method is memoized.
memoizedToString() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Options
If true, toString() method is memoized.
Memoizer<T> - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
Memoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.Memoizer
 
Mutable - Annotation Interface in pl.com.labaj.autorecord.extension.arice
Annotates methods in @AutoRecord annotated interface for which the corresponding components in generated record are not relevant for copying to immutable collection.

N

name() - Method in interface pl.com.labaj.autorecord.context.RecordComponent
Gets the name of the record component.
next() - Method in class pl.com.labaj.autorecord.collections.ImmutableIterator
note(String) - Method in interface pl.com.labaj.autorecord.context.Logger
Log a message at the Diagnostic.Kind.NOTE level.

O

offer(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
offerFirst(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
offerLast(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
other(String) - Method in interface pl.com.labaj.autorecord.context.Logger
Log a message at the Diagnostic.Kind.OTHER level.

P

packageName() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the package name of the annotated interface.
parameters() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Extension
Additional parameters for the custom extension.
peek() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
peekFirst() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
peekLast() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
pl.com.labaj.autorecord - package pl.com.labaj.autorecord
Provides annotations used to annotate interfaces to generate a record for them.
pl.com.labaj.autorecord.collections - package pl.com.labaj.autorecord.collections
Provides classes used copy collections to their appropriate immutable versions during generating record.
pl.com.labaj.autorecord.context - package pl.com.labaj.autorecord.context
Provides classes representing annotation process context used by AutoRecordProcessor and AutoRecordExtension
pl.com.labaj.autorecord.extension - package pl.com.labaj.autorecord.extension
Provides annotations and interfaces needed to process extensions.
pl.com.labaj.autorecord.extension.arice - package pl.com.labaj.autorecord.extension.arice
Provides classes used by ARICE (Auto Record Immutable Collections Extension).
pl.com.labaj.autorecord.memoizer - package pl.com.labaj.autorecord.memoizer
Provides classes used for memoization of methods in generated record.
pl.com.labaj.autorecord.processor - package pl.com.labaj.autorecord.processor
Provides classes used in process of generating record.
poll() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
pollFirst() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
pollLast() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
pop() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
prefixCompactConstructorContent(Context, StaticImports) - Method in interface pl.com.labaj.autorecord.extension.CompactConstructorExtension
Provides a code to be inserted before the current content of the compact constructor.
process(Set<? extends TypeElement>, RoundEnvironment) - Method in class pl.com.labaj.autorecord.extension.arice.ARICEUtilitiesProcessor
process(Set<? extends TypeElement>, RoundEnvironment) - Method in class pl.com.labaj.autorecord.processor.AutoRecordProcessor
push(E) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.

R

RecordComponent - Interface in pl.com.labaj.autorecord.context
Represents a component of the generated record.
recordName() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the name of the generated record.
recordOptions() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Template
Specifies options for the AutoRecord annotation applied during record generation.
recordOptions() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the options specified in the AutoRecord or AutoRecord.Template annotation for the annotated interface.
remove() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
remove() - Method in class pl.com.labaj.autorecord.collections.ImmutableIterator
Deprecated.
Unsupported operation.
remove(Object) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
removeAll(Collection<?>) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
removeFirst() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
removeFirstOccurrence(Object) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
removeLast() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
removeLastOccurrence(Object) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.
retainAll(Collection<?>) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
Deprecated.
Unsupported operation.

S

ShortMemoizer - Class in pl.com.labaj.autorecord.memoizer
Memoizer is a thread-safe utility class that allows for the memoization of a single value using the double-check idiom.
ShortMemoizer() - Constructor for class pl.com.labaj.autorecord.memoizer.ShortMemoizer
 
ShortSupplier - Interface in pl.com.labaj.autorecord.memoizer
Represents a supplier of short-valued results.
shouldGenerateCompactConstructor(boolean, Context) - Method in class pl.com.labaj.autorecord.extension.arice.ImmutableCollectionsExtension
Determines whether the extension should generate the compact constructor content.
shouldGenerateCompactConstructor(boolean, Context) - Method in interface pl.com.labaj.autorecord.extension.CompactConstructorExtension
Determines whether the extension should generate the compact constructor content.
size() - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
size() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
StaticImports - Interface in pl.com.labaj.autorecord.context
Collects static import statements that will be added into generated record.
suffixCompactConstructorContent(Context, StaticImports) - Method in class pl.com.labaj.autorecord.extension.arice.ImmutableCollectionsExtension
Provides a code to be inserted after the current content of the compact constructor.
suffixCompactConstructorContent(Context, StaticImports) - Method in interface pl.com.labaj.autorecord.extension.CompactConstructorExtension
Provides a code to be inserted after the current content of the compact constructor.

T

toArray() - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
toArray() - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
toArray(T[]) - Method in class pl.com.labaj.autorecord.collections.ImmutableCollection
toArray(T[]) - Method in class pl.com.labaj.autorecord.collections.ImmutableDeque
toImmutableCollection() - Static method in class pl.com.labaj.autorecord.collections.Collectors
A collector that accumulates elements into an ImmutableCollection.
toImmutableCollection() - Static method in class pl.com.labaj.autorecord.collections.ImmutableCollection
A collector that accumulates elements into an ImmutableCollection.
toImmutableDeque() - Static method in class pl.com.labaj.autorecord.collections.Collectors
A collector that accumulates elements into an ImmutableDeque.
toImmutableDeque() - Static method in class pl.com.labaj.autorecord.collections.ImmutableDeque
A collector that accumulates elements into an ImmutableDeque.
type() - Method in interface pl.com.labaj.autorecord.context.RecordComponent
Gets the type of the record component.
typeParameters() - Method in interface pl.com.labaj.autorecord.context.Context
Gets the list of TypeParameterElement instances representing the type parameters of the annotated interface.

V

value() - Element in annotation interface pl.com.labaj.autorecord.extension.AutoRecordExtensions
An array of AutoRecord.Extension annotations representing the extensions to be used during record generation.

W

warning(String) - Method in interface pl.com.labaj.autorecord.context.Logger
Log a message at the Diagnostic.Kind.WARNING level.
withBuilder() - Element in annotation interface pl.com.labaj.autorecord.AutoRecord.Options
If true, RecordBuilder annotation is added to generated record.
A B C D E F G H I L M N O P R S T V W 
All Classes and Interfaces|All Packages|Serialized Form