# 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.
# Unnamed extension.

type: newworld
worlds:
  - entry: main.dart
    useExperimentalInvalidation: true
    sources:
      main.dart: |
        class A1 {}

        extension on A1 {
          A1 method1() {
            return this;
          }
          String get getter1 => "42!";
          void set setter1(String s) {}
          static A1 method2() {
            return null;
          }
          static String get getter2 => "42!";
          static void set setter2(String s) {}
        }
    expectedLibraryCount: 1
  - entry: main.dart
    useExperimentalInvalidation: true
    worldType: updated
    expectInitializeFromDill: false
    invalidate:
      - main.dart
    sources:
      main.dart: |
        class A1 {}

        extension on A1 {
          A1 method1() {
            return this;
          }
          String get getter1 => "42!";
          void set setter1(String s) {}
          static A1 method2() {
            return null;
          }
          static String get getter2 => "42!";
          static void set setter2(String s) {}
        }
    expectedLibraryCount: 1
    expectsRebuildBodiesOnly: true
