// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file

part of models;

abstract class FieldRef extends ObjectRef {
  /// The name of this field.
  String get name;

  /// The owner of this field, which can be either a Library or a
  /// Class.
  ObjectRef get dartOwner;

  /// The declared type of this field.
  ///
  /// The value will always be of one of the kinds:
  /// Type, TypeRef, TypeParameter, BoundedType.
  InstanceRef get declaredType;

  /// Is this field const?
  bool get isConst;

  /// Is this field final?
  bool get isFinal;

  /// Is this field static?
  bool get isStatic;
}

enum GuardClassKind { unknown, single, dynamic }

abstract class Field extends Object implements FieldRef {
  /// [optional] The value of this field, if the field is static.
  ObjectRef get staticValue;

  /// [optional] The location of this field in the source code.
  SourceLocation get location;

  GuardClassKind get guardClassKind;
  ClassRef get guardClass;
  bool get guardNullable;
}
