library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: '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: Error: '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: Error: 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: Error: 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 /*isNonNullableByDefault*/;
import self as self2;
import "dart:core" as core;

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