# Copyright (c) 2019, 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.

# Compile an application, change a file, but don't change the outline.
# Mixin something from the same file.

type: newworld
forceLateLoweringForTesting: true
worlds:
  - entry: main.dart
    sources:
      lib1.dart: |
        void set property(int value) {}
      lib2.dart: |
        int get property => 87;
      lib3.dart: |
        export 'lib1.dart';
        export 'lib2.dart';
      main.dart: |
        import 'lib3.dart';
        main() {
          property = 42;
        }
    expectedLibraryCount: 4
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'lib3.dart';
        main() {
          property = 87;
        }
    expectedLibraryCount: 4
    advancedInvalidation: bodiesOnly
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - lib1.dart
    sources:
      lib1.dart: |
        void set property(int value) {
          print(123);
        }
    expectedLibraryCount: 4
    advancedInvalidation: bodiesOnly
  - entry: main.dart
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        import 'lib3.dart';
        main() {
          property = property;
        }
    expectedLibraryCount: 4
    advancedInvalidation: bodiesOnly
