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

// Regression test for dart2js: we incorrectly modeled `super.x = rhs` as a
// call and not an assignment, so the type of the expression was incorrectly
// assumed to be the return type of the setter rather than the type of the rhs.
import 'package:expect/expect.dart';

abstract class A {
  set x(v) {}
  set z(v) {}
  set y(v) => 'hi';
}

class S extends A {
  var _x; //      was bad: inferred as null, than [null | int]
  dynamic _y = ''; // was bad: inferred as String, rather than [String | int]
  var _z; //      was ok : inferred as [null | int]

  set x(v) {
    _x = super.x = v;
  }

  set z(v) {
    super.z = v;
    _z = v;
  }

  set y(v) {
    _y = super.y = v;
  }

  get isXNull => _x == null;
  get isZNull => _z == null;
}

main() {
  var s = new S()
    ..x = 2
    ..y = 2
    ..z = 2;
  Expect.equals(false, s.isXNull); //      was incorrectly optimized to 'true'
  Expect.equals(false, s._y is String); // was incorrectly optimized to 'true'
  Expect.equals(false, s.isZNull); //      prints false
}
