// Copyright (c) 2017, 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.

/*@testedFeatures=inference*/
library test;

class Index {}

class A {}

class B extends A {
  A operator +(C v) => null;
  B operator -(int i) => null;
  B operator *(B v) => null;
  C operator &(A v) => null;
}

class C extends B {}

T f<T>() => null;

class Base {
  B operator [](Index i) => null;
  void operator []=(Index i, B v) {}
}

class Test extends Base {
  void test() {
    super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] = /*@typeArgs=B*/ f();
    super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] ??= /*@typeArgs=B*/ f();
    super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] += /*@typeArgs=dynamic*/ f();
    super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] *= /*@typeArgs=dynamic*/ f();
    super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] &= /*@typeArgs=dynamic*/ f();
    --super /*@target=Base::[]=*/ [/*@typeArgs=dynamic*/ f()];
    super /*@target=Base::[]=*/ [/*@typeArgs=dynamic*/ f()]--;
    var /*@type=B*/ v1 = super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] = /*@typeArgs=B*/ f();
    var /*@type=B*/ v2 = super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] ??= /*@typeArgs=B*/ f();
    var /*@type=B*/ v4 = super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] *= /*@typeArgs=dynamic*/ f();
    var /*@type=C*/ v5 = super /*@target=Base::[]=*/ [
        /*@typeArgs=dynamic*/ f()] &= /*@typeArgs=dynamic*/ f();
    var /*@type=B*/ v6 =
        --super /*@target=Base::[]=*/ [/*@typeArgs=dynamic*/ f()];
    var /*@type=B*/ v7 =
        super /*@target=Base::[]=*/ [/*@typeArgs=dynamic*/ f()]--;
  }
}

main() {}
