# Copyright (c) 2020, 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.md file.

# Reproduce weirdness with abstract member-signatures and forwarding stubs from
# https://github.com/flutter/flutter/issues/66122

type: newworld
target: DDC
trackWidgetCreation: true
worlds:
  - entry: main.dart
    skipClassHierarchyTest: true
    sources:
      main.dart: |
        // @dart=2.9
        import 'package:flutter/framework.dart';
        import 'after_layout.dart';
        class _HotReloadIssueState extends State<HotReloadIssue>
            with AfterLayoutMixin<HotReloadIssue> {
          Widget build(BuildContext context) {}
          void afterFirstLayout(BuildContext context) {}
        }
        class HotReloadIssue extends StatefulWidget {}

      after_layout.dart: |
        // @dart=2.9
        import 'package:flutter/framework.dart';
        mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {}

      flutter/lib/framework.dart: |
        mixin Diagnosticable {
          String toString() {
            return "foo";
          }
        }
        abstract class State<T extends StatefulWidget> with Diagnosticable {
          T? _widget;
        }
        class State2 extends State {}
        class StatefulWidget {}
        class Widget {}
        class BuildContext {}
        final State<StatefulWidget> state = new State2();
        void foo() {
          state._widget = null;
        }
      .dart_tool/package_config.json: |
        {
          "configVersion": 2,
          "packages": [
            {
              "name": "flutter",
              "rootUri": "../flutter",
              "packageUri": "lib/"
            }
          ]
        }
    expectedLibraryCount: 3
  - entry: main.dart
    skipClassHierarchyTest: true
    worldType: updated
    invalidate:
      - main.dart
    expectInitializeFromDill: false
    expectedLibraryCount: 3
