# Parameter class abstract interface

Provides reflective access to method/constructor parameter metadata.

This interface enables inspection of:

- Parameter types and positions
- Optional/required status
- Named vs positional parameters
- Default values
- Annotations

{@template parameter_interface_features}

## Key Features

- Type-safe parameter type access
- Default value inspection
- Parameter kind detection (named/positional)
- Signature generation
- Annotation support

## Implementation Notes

Concrete implementations typically wrap platform-specific reflection objects while providing this uniform interface.

## Example Usage

    // Get parameter metadata
    final params = method.getParameters();
    final firstParam = params[0];

    // Inspect parameter properties
    print('Name: ${firstParam.getName()}');
    print('Type: ${firstParam.getType<dynamic>().getName()}');
    print('Optional: ${firstParam.isOptional()}');

    // Check for default value
    if (firstParam.hasDefaultValue()) {
      print('Default: ${firstParam.getDefaultValue()}');
    }

{@endtemplate}

Inheritance
  - Object
  - PermissionManager
  - Source
  - Parameter

## Properties

hashCode → int
  The hash code for this object.
  no setter inherited
runtimeType → Type
  A representation of the runtime type of the object.
  no setter inherited

## Methods

annotationMatches<A>(Annotation annotation) → bool
  inherited
checkAccess(String operation, DomainPermission permission) → void
  Verifies access permissions before performing sensitive operations.
  inherited
getAllDirectAnnotations() → List<Annotation>
  Gets all annotations applied to this element.
  inherited
getClass() → Class<Object>
  Gets the type of the parameter with proper generics.
getDeclaration() → Declaration
  Gets the type declaration metadata for this class.
  inherited
getDefaultValue() → dynamic
  Gets the default value of the parameter.
getDirectAnnotation<A>() → A?
  Gets a single annotation by type, if present.
  inherited
getDirectAnnotations<A>() → List<A>
  Gets all annotations of a specific type.
  inherited
getIndex() → int
  Gets the parameter's position in the parameter list.
getMember() → Member
  Gets the member that this parameter belongs to.
getName() → String
  Gets the declared name of the source.
  inherited
getProtectionDomain() → ProtectionDomain
  Gets the protection domain governing access to this element.
  inherited
getSignature() → String
  Gets the executable signature as a string.
  inherited
getType() → Type
  Gets the type of the parameter.
hasDefaultValue() → bool
  Checks if this parameter has a default value.
hasDirectAnnotation<A>() → bool
  Checks if this element has a specific annotation.
  inherited
isNamed() → bool
  Checks if this is a named parameter.
isOptional() → bool
  Checks if this parameter is optional.
isPositional() → bool
  Checks if this is a positional parameter.
isPublic() → bool
  Checks if this element is public.
  inherited
isRequired() → bool
  Checks if this parameter is required.
noSuchMethod(Invocation invocation) → dynamic
  Invoked when a nonexistent method or property is accessed.
  inherited
toString() → String
  A string representation of this object.
  inherited

## Operators

operator ==(Object other) → bool
  The equality operator.
  inherited

## Static Methods

declared(ParameterDeclaration declaration, ProtectionDomain domain) → Parameter
  Creates a Parameter instance from reflection metadata.