// Copyright (c) 2011, 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.

/**
 * @assertion If a name N is referenced by a library L and N is introduced into
 * the top level scope L by more than one import, and not all the imports denote
 * the same declaration, then:
 * • A static warning occurs.
 * • If N is referenced as a function, getter or setter, a NoSuchMethodError is
 *   raised.
 * • If N is referenced as a type, it is treated as a malformed type.
 * It is neither an error nor a warning if N is introduced by two or more
 * imports but never referred to.
 * @description Checks that it is neither error nor warning if a library
 * imports two other libraries exporting the same name (both via re-export of a
 * third library), references that name in an explicit type test and other
 * expressions, but it's hidden in one of the import declarations of L (so
 * there's actually no name clash).
 * @static-clean
 * @author rodionov
 */

import "same_name_t20_p1_lib.dart" hide foo, Bar, id;
import "same_name_t20_p2_lib.dart";

class Foo2 extends foo {}

class Foo3<T extends foo> {}

main() {
  1 is foo;
  null as foo?;
  new foo();
  new Foo2();
  new Foo3<Foo2>();
  Bar.BAR;
  Bar.BAR = 11;
  id is foo;
}
