// Unhandled errors:
//
// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
//   T.String method() => "Hello, World!";
//   ^^^^^^^^

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

class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method method() → invalid-type
    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'String' can't be assigned to a variable of type 'invalid-type'.
Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
  T.String method() => \"Hello, World!\";
                       ^" in "Hello, World!" as{TypeError} invalid-type;
}
static method main() → dynamic {
  core::String s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to 'String'.
  T.String s = new C().method();
                       ^" in new self::C::•<dynamic>().{self::C::method}() as{TypeError} core::String;
  core::print(s);
}
