// 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 file.

// @dart = 2.9

// This test verifies that AOT compiler is correctly handling method extractors
// when resolving targets of method invocations.

import "package:expect/expect.dart";

abstract class MyQueue<E> {}

class MyListQueue<E> implements MyQueue<E> {
  String toString() => 'good';
}

class NextRound {
  runNextRound() {
    // During the 2nd iteration of precompilation loop (Precompiler::Iterate)
    // we're going to discover a call to get:toString() which is only resolved
    // to Object.get:toString at this time, as MyListQueue.get:toString method
    // extractor is not created yet. Verify that compiler doesn't use that
    // target.
    MyQueue q = new MyListQueue();
    dynamic x = q.toString;
    Expect.equals("good", x.call());
  }
}

class NextRound2 {
  runNextRound() {}
}

getNextRound(i) => i > 5 ? new NextRound() : new NextRound2();

void main() {
  // During the 1st iteration of precompilation loop (Precompiler::Iterate)
  // we need to create method extractor for Object.toString.
  var x = new Object().toString;
  x.call();
  // Trigger the next round via new dynamic selector.
  dynamic y = getNextRound(17);
  y.runNextRound();
}
