// This code was auto-generated, is not intended to be edited, and is subject to
// significant change. Please see the README file for more information.
library engine.utilities.dart;
import 'java_core.dart';
/**
 * The enumeration `ParameterKind` defines the different kinds of parameters. There are two
 * basic kinds of parameters: required and optional. Optional parameters are further divided into
 * two kinds: positional optional and named optional.
 *
 * @coverage dart.engine.utilities
 */
class ParameterKind extends Enum<ParameterKind> {
  static final ParameterKind REQUIRED = new ParameterKind('REQUIRED', 0, false);
  static final ParameterKind POSITIONAL = new ParameterKind('POSITIONAL', 1, true);
  static final ParameterKind NAMED = new ParameterKind('NAMED', 2, true);
  static final List<ParameterKind> values = [REQUIRED, POSITIONAL, NAMED];

  /**
   * A flag indicating whether this is an optional parameter.
   */
  bool _isOptional2 = false;

  /**
   * Initialize a newly created kind with the given state.
   *
   * @param isOptional `true` if this is an optional parameter
   */
  ParameterKind(String name, int ordinal, bool isOptional) : super(name, ordinal) {
    this._isOptional2 = isOptional;
  }

  /**
   * Return `true` if this is an optional parameter.
   *
   * @return `true` if this is an optional parameter
   */
  bool get isOptional => _isOptional2;
}