library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/crashes/crash_05/main.dart:6:20: Error: Type 'PointerEvent' not found.
//   void handleEvent(PointerEvent event, SliverHitTestEntry entry) {}
//                    ^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/crashes/crash_05/main.dart:10:37: Error: Type 'RenderBox' not found.
//     with RenderObjectWithChildMixin<RenderBox>, RenderSliverHelpers {}
//                                     ^^^^^^^^^
//
// pkg/front_end/testcases/general/crashes/crash_05/main.dart:10:49: Error: Type 'RenderSliverHelpers' not found.
//     with RenderObjectWithChildMixin<RenderBox>, RenderSliverHelpers {}
//                                                 ^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/crashes/crash_05/main.dart:9:16: Error: The type 'RenderSliverHelpers' can't be mixed in.
// abstract class RenderSliverSingleBoxAdapter extends RenderSliver
//                ^
//
// pkg/front_end/testcases/general/crashes/crash_05/main.dart:9:16: Error: 'RenderSliver' doesn't implement 'RenderObject' so it can't be used with 'RenderObjectWithChildMixin<invalid-type>'.
//  - 'RenderSliver' is from 'pkg/front_end/testcases/general/crashes/crash_05/main.dart'.
//  - 'RenderObject' is from 'pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart'.
//  - 'RenderObjectWithChildMixin' is from 'pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart'.
// abstract class RenderSliverSingleBoxAdapter extends RenderSliver
//                ^
//
import self as self;
import "dart:core" as core;
import "main_lib.dart" as mai;

import "org-dartlang-testcase:///main_lib.dart";

class SliverHitTestEntry extends core::Object {
  synthetic constructor •() → self::SliverHitTestEntry
    ;
}
abstract class RenderSliver extends core::Object {
  synthetic constructor •() → self::RenderSliver
    ;
  method handleEvent(invalid-type event, self::SliverHitTestEntry entry) → void
    ;
}
abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin = self::RenderSliver with mai::RenderObjectWithChildMixin<invalid-type> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin
    : super self::RenderSliver::•()
    ;
  forwarding-stub method handleEvent(invalid-type event, covariant invalid-type entry) → void
    return super.{self::RenderSliver::handleEvent}(event, entry);
}
abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers
    : super self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin::•()
    ;
}
abstract class RenderSliverSingleBoxAdapter extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers {
  synthetic constructor •() → self::RenderSliverSingleBoxAdapter
    ;
}
static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart:2:20: Error: Type 'PointerEvent' not found.
//   void handleEvent(PointerEvent event, covariant HitTestEntry entry) {}
//                    ^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart:2:50: Error: Type 'HitTestEntry' not found.
//   void handleEvent(PointerEvent event, covariant HitTestEntry entry) {}
//                                                  ^^^^^^^^^^^^
//
import self as mai;
import "dart:core" as core;

abstract class RenderObject extends core::Object {
  synthetic constructor •() → mai::RenderObject
    ;
  method handleEvent(invalid-type event, covariant invalid-type entry) → void
    ;
}
abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
}
