// Copyright (c) 2014, 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.

/**
 * This library is deprecated. Please convert all references to this library to
 * reference one of the following public libraries:
 * * package:analyzer/dart/element/element.dart
 * * package:analyzer/dart/element/type.dart
 * * package:analyzer/dart/element/visitor.dart
 *
 * If your code is using APIs not available in these public libraries, please
 * contact the analyzer team to either find an alternate API or have the API you
 * depend on added to the public API.
 */
@deprecated
library analyzer.src.generated.element;

export 'package:analyzer/dart/element/element.dart';
export 'package:analyzer/dart/element/type.dart';
export 'package:analyzer/dart/element/visitor.dart';
export 'package:analyzer/src/dart/element/element.dart';
export 'package:analyzer/src/dart/element/member.dart';
export 'package:analyzer/src/dart/element/type.dart';
