library;
//
// Problems in library:
//
// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Warning: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
//   lib.MyClass get lib => null; // (1)
//   ^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Warning: 'foo' isn't a type.
//   foo foo() {}
//   ^^^
// pkg/front_end/testcases/regress/issue_34498.dart:10:7: Context: This isn't a type.
//   foo foo() {}
//       ^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Warning: Can't use type arguments with type variable 'T'.
// Try removing the type arguments.
//   T<String> foo() {}
//   ^
//
// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Warning: Type 'Missing' not found.
//   Missing bar() {}
//   ^^^^^^^
//
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///issue_34498_lib.dart" as lib;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  get lib() → invalid-type
    return null;
  method foo() → invalid-type {}
  method bar() → invalid-type {}
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method foo() → invalid-type {}
}
static final field self::A a = null;
static method main() → dynamic {}

library;
import self as self2;
import "dart:core" as core;

class MyClass extends core::Object {
  synthetic constructor •() → self2::MyClass
    : super core::Object::•()
    ;
}
