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

import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';

import '../dart/resolution/context_collection_resolution.dart';
import 'element_text.dart';

main() {
  defineReflectiveSuite(() {
    defineReflectiveTests(TopLevelInferenceTest);
    defineReflectiveTests(TopLevelInferenceErrorsTest);
    // defineReflectiveTests(ApplyCheckElementTextReplacements);
  });
}

@reflectiveTest
class ApplyCheckElementTextReplacements {
  test_applyReplacements() {
    applyCheckElementTextReplacements();
  }
}

@reflectiveTest
class TopLevelInferenceErrorsTest extends PubPackageResolutionTest {
  test_initializer_additive() async {
    await _assertErrorOnlyLeft(['+', '-']);
  }

  test_initializer_assign() async {
    await assertNoErrorsInCode('''
var a = 1;
var t1 = a += 1;
var t2 = a = 2;
''');
  }

  test_initializer_binary_onlyLeft() async {
    await assertNoErrorsInCode('''
var a = 1;
var t = (a = 1) + (a = 2);
''');
  }

  test_initializer_bitwise() async {
    await _assertErrorOnlyLeft(['&', '|', '^']);
  }

  test_initializer_boolean() async {
    await assertNoErrorsInCode('''
var a = 1;
var t1 = ((a = 1) == 0) || ((a = 2) == 0);
var t2 = ((a = 1) == 0) && ((a = 2) == 0);
var t3 = !((a = 1) == 0);
''');
  }

  test_initializer_cascade() async {
    await assertNoErrorsInCode('''
var a = 0;
var t = (a = 1)..isEven;
''');
  }

  test_initializer_classField_instance_instanceCreation() async {
    await assertNoErrorsInCode('''
class A<T> {}
class B {
  var t1 = new A<int>();
  var t2 = new A();
}
''');
  }

  test_initializer_classField_static_instanceCreation() async {
    await assertNoErrorsInCode('''
class A<T> {}
class B {
  static var t1 = 1;
  static var t2 = new A();
}
''');
  }

  test_initializer_conditional() async {
    await assertNoErrorsInCode('''
var a = 1;
var b = true;
var t = b
    ? (a = 1)
    : (a = 2);
''');
  }

  test_initializer_dependencyCycle() async {
    await assertErrorsInCode('''
var a = b;
var b = a;
''', [
      error(CompileTimeErrorCode.TOP_LEVEL_CYCLE, 4, 1),
      error(CompileTimeErrorCode.TOP_LEVEL_CYCLE, 15, 1),
    ]);
  }

  test_initializer_equality() async {
    await assertNoErrorsInCode('''
var a = 1;
var t1 = ((a = 1) == 0) == ((a = 2) == 0);
var t2 = ((a = 1) == 0) != ((a = 2) == 0);
''');
  }

  test_initializer_extractIndex() async {
    await assertNoErrorsInCode('''
var a = [0, 1.2];
var b0 = a[0];
var b1 = a[1];
''');
  }

  test_initializer_functionLiteral_blockBody() async {
    await assertNoErrorsInCode('''
var t = (int p) {};
''');
    assertType(
      findElement.topVar('t').type,
      'Null Function(int)',
    );
  }

  test_initializer_functionLiteral_expressionBody() async {
    await assertNoErrorsInCode('''
var a = 0;
var t = (int p) => (a = 1);
''');
    assertType(
      findElement.topVar('t').type,
      'int Function(int)',
    );
  }

  test_initializer_functionLiteral_parameters_withoutType() async {
    await assertNoErrorsInCode('''
var t = (int a, b,int c, d) => 0;
''');
    assertType(
      findElement.topVar('t').type,
      'int Function(int, dynamic, int, dynamic)',
    );
  }

  test_initializer_hasTypeAnnotation() async {
    await assertNoErrorsInCode('''
var a = 1;
int t = (a = 1);
''');
  }

  test_initializer_identifier() async {
    await assertNoErrorsInCode('''
int top_function() => 0;
var top_variable = 0;
int get top_getter => 0;
class A {
  static var static_field = 0;
  static int get static_getter => 0;
  static int static_method() => 0;
  int instance_method() => 0;
}
var t1 = top_function;
var t2 = top_variable;
var t3 = top_getter;
var t4 = A.static_field;
var t5 = A.static_getter;
var t6 = A.static_method;
var t7 = new A().instance_method;
''');
  }

  test_initializer_identifier_error() async {
    await assertNoErrorsInCode('''
var a = 0;
var b = (a = 1);
var c = b;
''');
  }

  test_initializer_ifNull() async {
    await assertNoErrorsInCode('''
int? a = 1;
var t = a ?? 2;
''');
  }

  test_initializer_instanceCreation_withoutTypeParameters() async {
    await assertNoErrorsInCode('''
class A {}
var t = new A();
''');
  }

  test_initializer_instanceCreation_withTypeParameters() async {
    await assertNoErrorsInCode('''
class A<T> {}
var t1 = new A<int>();
var t2 = new A();
''');
  }

  test_initializer_instanceGetter() async {
    await assertNoErrorsInCode('''
class A {
  int f = 1;
}
var a = new A().f;
''');
  }

  test_initializer_methodInvocation_function() async {
    await assertNoErrorsInCode('''
int f1() => 0;
T f2<T>() => throw 0;
var t1 = f1();
var t2 = f2();
var t3 = f2<int>();
''');
  }

  test_initializer_methodInvocation_method() async {
    await assertNoErrorsInCode('''
class A {
  int m1() => 0;
  T m2<T>() => throw 0;
}
var a = new A();
var t1 = a.m1();
var t2 = a.m2();
var t3 = a.m2<int>();
''');
  }

  test_initializer_multiplicative() async {
    await _assertErrorOnlyLeft(['*', '/', '%', '~/']);
  }

  test_initializer_postfixIncDec() async {
    await assertNoErrorsInCode('''
var a = 1;
var t1 = a++;
var t2 = a--;
''');
  }

  test_initializer_prefixIncDec() async {
    await assertNoErrorsInCode('''
var a = 1;
var t1 = ++a;
var t2 = --a;
''');
  }

  test_initializer_relational() async {
    await _assertErrorOnlyLeft(['>', '>=', '<', '<=']);
  }

  test_initializer_shift() async {
    await _assertErrorOnlyLeft(['<<', '>>']);
  }

  test_initializer_typedList() async {
    await assertNoErrorsInCode('''
var a = 1;
var t = <int>[a = 1];
''');
  }

  test_initializer_typedMap() async {
    await assertNoErrorsInCode('''
var a = 1;
var t = <int, int>{(a = 1) : (a = 2)};
''');
  }

  test_initializer_untypedList() async {
    await assertNoErrorsInCode('''
var a = 1;
var t = [
    a = 1,
    2,
    3,
];
''');
  }

  test_initializer_untypedMap() async {
    await assertNoErrorsInCode('''
var a = 1;
var t = {
    (a = 1) :
        (a = 2),
};
''');
  }

  test_override_conflictFieldType() async {
    await assertErrorsInCode('''
abstract class A {
  int aaa = 0;
}
abstract class B {
  String aaa = '0';
}
class C implements A, B {
  var aaa;
}
''', [
      error(CompileTimeErrorCode.INVALID_OVERRIDE, 109, 3),
      error(CompileTimeErrorCode.INVALID_OVERRIDE, 109, 3),
    ]);
  }

  test_override_conflictParameterType_method() async {
    await assertErrorsInCode('''
abstract class A {
  void mmm(int a);
}
abstract class B {
  void mmm(String a);
}
class C implements A, B {
  void mmm(a) {}
}
''', [
      error(CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE, 116, 3),
    ]);
  }

  Future<void> _assertErrorOnlyLeft(List<String> operators) async {
    String code = 'var a = 1;\n';
    for (var i = 0; i < operators.length; i++) {
      String operator = operators[i];
      code += 'var t$i = (a = 1) $operator (a = 2);\n';
    }
    await assertNoErrorsInCode(code);
  }
}

@reflectiveTest
class TopLevelInferenceTest extends PubPackageResolutionTest {
  test_initializer_additive() async {
    var library = await _encodeDecodeLibrary(r'''
var vPlusIntInt = 1 + 2;
var vPlusIntDouble = 1 + 2.0;
var vPlusDoubleInt = 1.0 + 2;
var vPlusDoubleDouble = 1.0 + 2.0;
var vMinusIntInt = 1 - 2;
var vMinusIntDouble = 1 - 2.0;
var vMinusDoubleInt = 1.0 - 2;
var vMinusDoubleDouble = 1.0 - 2.0;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vPlusIntInt @4
        type: int
      static vPlusIntDouble @29
        type: double
      static vPlusDoubleInt @59
        type: double
      static vPlusDoubleDouble @89
        type: double
      static vMinusIntInt @124
        type: int
      static vMinusIntDouble @150
        type: double
      static vMinusDoubleInt @181
        type: double
      static vMinusDoubleDouble @212
        type: double
    accessors
      synthetic static get vPlusIntInt @4
        returnType: int
      synthetic static set vPlusIntInt @4
        parameters
          requiredPositional _vPlusIntInt @4
            type: int
        returnType: void
      synthetic static get vPlusIntDouble @29
        returnType: double
      synthetic static set vPlusIntDouble @29
        parameters
          requiredPositional _vPlusIntDouble @29
            type: double
        returnType: void
      synthetic static get vPlusDoubleInt @59
        returnType: double
      synthetic static set vPlusDoubleInt @59
        parameters
          requiredPositional _vPlusDoubleInt @59
            type: double
        returnType: void
      synthetic static get vPlusDoubleDouble @89
        returnType: double
      synthetic static set vPlusDoubleDouble @89
        parameters
          requiredPositional _vPlusDoubleDouble @89
            type: double
        returnType: void
      synthetic static get vMinusIntInt @124
        returnType: int
      synthetic static set vMinusIntInt @124
        parameters
          requiredPositional _vMinusIntInt @124
            type: int
        returnType: void
      synthetic static get vMinusIntDouble @150
        returnType: double
      synthetic static set vMinusIntDouble @150
        parameters
          requiredPositional _vMinusIntDouble @150
            type: double
        returnType: void
      synthetic static get vMinusDoubleInt @181
        returnType: double
      synthetic static set vMinusDoubleInt @181
        parameters
          requiredPositional _vMinusDoubleInt @181
            type: double
        returnType: void
      synthetic static get vMinusDoubleDouble @212
        returnType: double
      synthetic static set vMinusDoubleDouble @212
        parameters
          requiredPositional _vMinusDoubleDouble @212
            type: double
        returnType: void
''');
  }

  test_initializer_as() async {
    var library = await _encodeDecodeLibrary(r'''
var V = 1 as num;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static V @4
        type: num
    accessors
      synthetic static get V @4
        returnType: num
      synthetic static set V @4
        parameters
          requiredPositional _V @4
            type: num
        returnType: void
''');
  }

  test_initializer_assign() async {
    var library = await _encodeDecodeLibrary(r'''
var a = 1;
var t1 = (a = 2);
var t2 = (a += 2);
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        type: int
      static t1 @15
        type: int
      static t2 @33
        type: int
    accessors
      synthetic static get a @4
        returnType: int
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: int
        returnType: void
      synthetic static get t1 @15
        returnType: int
      synthetic static set t1 @15
        parameters
          requiredPositional _t1 @15
            type: int
        returnType: void
      synthetic static get t2 @33
        returnType: int
      synthetic static set t2 @33
        parameters
          requiredPositional _t2 @33
            type: int
        returnType: void
''');
  }

  test_initializer_assign_indexed() async {
    var library = await _encodeDecodeLibrary(r'''
var a = [0];
var t1 = (a[0] = 2);
var t2 = (a[0] += 2);
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        type: List<int>
      static t1 @17
        type: int
      static t2 @38
        type: int
    accessors
      synthetic static get a @4
        returnType: List<int>
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: List<int>
        returnType: void
      synthetic static get t1 @17
        returnType: int
      synthetic static set t1 @17
        parameters
          requiredPositional _t1 @17
            type: int
        returnType: void
      synthetic static get t2 @38
        returnType: int
      synthetic static set t2 @38
        parameters
          requiredPositional _t2 @38
            type: int
        returnType: void
''');
  }

  test_initializer_assign_prefixed() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int f;
}
var a = new A();
var t1 = (a.f = 1);
var t2 = (a.f += 2);
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
    topLevelVariables
      static a @25
        type: A
      static t1 @42
        type: int
      static t2 @62
        type: int
    accessors
      synthetic static get a @25
        returnType: A
      synthetic static set a @25
        parameters
          requiredPositional _a @25
            type: A
        returnType: void
      synthetic static get t1 @42
        returnType: int
      synthetic static set t1 @42
        parameters
          requiredPositional _t1 @42
            type: int
        returnType: void
      synthetic static get t2 @62
        returnType: int
      synthetic static set t2 @62
        parameters
          requiredPositional _t2 @62
            type: int
        returnType: void
''');
  }

  test_initializer_assign_prefixed_viaInterface() async {
    var library = await _encodeDecodeLibrary(r'''
class I {
  int f;
}
abstract class C implements I {}
C c;
var t1 = (c.f = 1);
var t2 = (c.f += 2);
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class I @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
      abstract class C @36
        interfaces
          I
        constructors
          synthetic @-1
    topLevelVariables
      static c @56
        type: C
      static t1 @63
        type: int
      static t2 @83
        type: int
    accessors
      synthetic static get c @56
        returnType: C
      synthetic static set c @56
        parameters
          requiredPositional _c @56
            type: C
        returnType: void
      synthetic static get t1 @63
        returnType: int
      synthetic static set t1 @63
        parameters
          requiredPositional _t1 @63
            type: int
        returnType: void
      synthetic static get t2 @83
        returnType: int
      synthetic static set t2 @83
        parameters
          requiredPositional _t2 @83
            type: int
        returnType: void
''');
  }

  test_initializer_assign_viaInterface() async {
    var library = await _encodeDecodeLibrary(r'''
class I {
  int f;
}
abstract class C implements I {}
C getC() => null;
var t1 = (getC().f = 1);
var t2 = (getC().f += 2);
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class I @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
      abstract class C @36
        interfaces
          I
        constructors
          synthetic @-1
    topLevelVariables
      static t1 @76
        type: int
      static t2 @101
        type: int
    accessors
      synthetic static get t1 @76
        returnType: int
      synthetic static set t1 @76
        parameters
          requiredPositional _t1 @76
            type: int
        returnType: void
      synthetic static get t2 @101
        returnType: int
      synthetic static set t2 @101
        parameters
          requiredPositional _t2 @101
            type: int
        returnType: void
    functions
      getC @56
        returnType: C
''');
  }

  test_initializer_await() async {
    var library = await _encodeDecodeLibrary(r'''
import 'dart:async';
int fValue() => 42;
Future<int> fFuture() async => 42;
var uValue = () async => await fValue();
var uFuture = () async => await fFuture();
''');
    checkElementText(library, r'''
library
  imports
    dart:async
  definingUnit
    topLevelVariables
      static uValue @80
        type: Future<int> Function()
      static uFuture @121
        type: Future<int> Function()
    accessors
      synthetic static get uValue @80
        returnType: Future<int> Function()
      synthetic static set uValue @80
        parameters
          requiredPositional _uValue @80
            type: Future<int> Function()
        returnType: void
      synthetic static get uFuture @121
        returnType: Future<int> Function()
      synthetic static set uFuture @121
        parameters
          requiredPositional _uFuture @121
            type: Future<int> Function()
        returnType: void
    functions
      fValue @25
        returnType: int
      fFuture @53 async
        returnType: Future<int>
''');
  }

  test_initializer_bitwise() async {
    var library = await _encodeDecodeLibrary(r'''
var vBitXor = 1 ^ 2;
var vBitAnd = 1 & 2;
var vBitOr = 1 | 2;
var vBitShiftLeft = 1 << 2;
var vBitShiftRight = 1 >> 2;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vBitXor @4
        type: int
      static vBitAnd @25
        type: int
      static vBitOr @46
        type: int
      static vBitShiftLeft @66
        type: int
      static vBitShiftRight @94
        type: int
    accessors
      synthetic static get vBitXor @4
        returnType: int
      synthetic static set vBitXor @4
        parameters
          requiredPositional _vBitXor @4
            type: int
        returnType: void
      synthetic static get vBitAnd @25
        returnType: int
      synthetic static set vBitAnd @25
        parameters
          requiredPositional _vBitAnd @25
            type: int
        returnType: void
      synthetic static get vBitOr @46
        returnType: int
      synthetic static set vBitOr @46
        parameters
          requiredPositional _vBitOr @46
            type: int
        returnType: void
      synthetic static get vBitShiftLeft @66
        returnType: int
      synthetic static set vBitShiftLeft @66
        parameters
          requiredPositional _vBitShiftLeft @66
            type: int
        returnType: void
      synthetic static get vBitShiftRight @94
        returnType: int
      synthetic static set vBitShiftRight @94
        parameters
          requiredPositional _vBitShiftRight @94
            type: int
        returnType: void
''');
  }

  test_initializer_cascade() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int a;
  void m() {}
}
var vSetField = new A()..a = 1;
var vInvokeMethod = new A()..m();
var vBoth = new A()..a = 1..m();
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          a @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get a @16
            returnType: int
          synthetic set a @16
            parameters
              requiredPositional _a @16
                type: int
            returnType: void
        methods
          m @26
            returnType: void
    topLevelVariables
      static vSetField @39
        type: A
      static vInvokeMethod @71
        type: A
      static vBoth @105
        type: A
    accessors
      synthetic static get vSetField @39
        returnType: A
      synthetic static set vSetField @39
        parameters
          requiredPositional _vSetField @39
            type: A
        returnType: void
      synthetic static get vInvokeMethod @71
        returnType: A
      synthetic static set vInvokeMethod @71
        parameters
          requiredPositional _vInvokeMethod @71
            type: A
        returnType: void
      synthetic static get vBoth @105
        returnType: A
      synthetic static set vBoth @105
        parameters
          requiredPositional _vBoth @105
            type: A
        returnType: void
''');
  }

  /// A simple or qualified identifier referring to a top level function, static
  /// variable, field, getter; or a static class variable, static getter or
  /// method; or an instance method; has the inferred type of the identifier.
  ///
  test_initializer_classField_useInstanceGetter() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int f = 1;
}
class B {
  A a;
}
class C {
  B b;
}
class X {
  A a = new A();
  B b = new B();
  C c = new C();
  var t01 = a.f;
  var t02 = b.a.f;
  var t03 = c.b.a.f;
  var t11 = new A().f;
  var t12 = new B().a.f;
  var t13 = new C().b.a.f;
  var t21 = newA().f;
  var t22 = newB().a.f;
  var t23 = newC().b.a.f;
}
A newA() => new A();
B newB() => new B();
C newC() => new C();
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
      class B @31
        fields
          a @39
            type: A
        constructors
          synthetic @-1
        accessors
          synthetic get a @39
            returnType: A
          synthetic set a @39
            parameters
              requiredPositional _a @39
                type: A
            returnType: void
      class C @50
        fields
          b @58
            type: B
        constructors
          synthetic @-1
        accessors
          synthetic get b @58
            returnType: B
          synthetic set b @58
            parameters
              requiredPositional _b @58
                type: B
            returnType: void
      class X @69
        fields
          a @77
            type: A
          b @94
            type: B
          c @111
            type: C
          t01 @130
            type: int
          t02 @147
            type: int
          t03 @166
            type: int
          t11 @187
            type: int
          t12 @210
            type: int
          t13 @235
            type: int
          t21 @262
            type: int
          t22 @284
            type: int
          t23 @308
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get a @77
            returnType: A
          synthetic set a @77
            parameters
              requiredPositional _a @77
                type: A
            returnType: void
          synthetic get b @94
            returnType: B
          synthetic set b @94
            parameters
              requiredPositional _b @94
                type: B
            returnType: void
          synthetic get c @111
            returnType: C
          synthetic set c @111
            parameters
              requiredPositional _c @111
                type: C
            returnType: void
          synthetic get t01 @130
            returnType: int
          synthetic set t01 @130
            parameters
              requiredPositional _t01 @130
                type: int
            returnType: void
          synthetic get t02 @147
            returnType: int
          synthetic set t02 @147
            parameters
              requiredPositional _t02 @147
                type: int
            returnType: void
          synthetic get t03 @166
            returnType: int
          synthetic set t03 @166
            parameters
              requiredPositional _t03 @166
                type: int
            returnType: void
          synthetic get t11 @187
            returnType: int
          synthetic set t11 @187
            parameters
              requiredPositional _t11 @187
                type: int
            returnType: void
          synthetic get t12 @210
            returnType: int
          synthetic set t12 @210
            parameters
              requiredPositional _t12 @210
                type: int
            returnType: void
          synthetic get t13 @235
            returnType: int
          synthetic set t13 @235
            parameters
              requiredPositional _t13 @235
                type: int
            returnType: void
          synthetic get t21 @262
            returnType: int
          synthetic set t21 @262
            parameters
              requiredPositional _t21 @262
                type: int
            returnType: void
          synthetic get t22 @284
            returnType: int
          synthetic set t22 @284
            parameters
              requiredPositional _t22 @284
                type: int
            returnType: void
          synthetic get t23 @308
            returnType: int
          synthetic set t23 @308
            parameters
              requiredPositional _t23 @308
                type: int
            returnType: void
    functions
      newA @332
        returnType: A
      newB @353
        returnType: B
      newC @374
        returnType: C
''');
  }

  test_initializer_conditional() async {
    var library = await _encodeDecodeLibrary(r'''
var V = true ? 1 : 2.3;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static V @4
        type: num
    accessors
      synthetic static get V @4
        returnType: num
      synthetic static set V @4
        parameters
          requiredPositional _V @4
            type: num
        returnType: void
''');
  }

  test_initializer_equality() async {
    var library = await _encodeDecodeLibrary(r'''
var vEq = 1 == 2;
var vNotEq = 1 != 2;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vEq @4
        type: bool
      static vNotEq @22
        type: bool
    accessors
      synthetic static get vEq @4
        returnType: bool
      synthetic static set vEq @4
        parameters
          requiredPositional _vEq @4
            type: bool
        returnType: void
      synthetic static get vNotEq @22
        returnType: bool
      synthetic static set vNotEq @22
        parameters
          requiredPositional _vNotEq @22
            type: bool
        returnType: void
''');
  }

  test_initializer_error_methodInvocation_cycle_topLevel() async {
    var library = await _encodeDecodeLibrary(r'''
var a = b.foo();
var b = a.foo();
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        typeInferenceError: dependencyCycle
        type: dynamic
      static b @21
        typeInferenceError: dependencyCycle
        type: dynamic
    accessors
      synthetic static get a @4
        returnType: dynamic
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: dynamic
        returnType: void
      synthetic static get b @21
        returnType: dynamic
      synthetic static set b @21
        parameters
          requiredPositional _b @21
            type: dynamic
        returnType: void
''');
  }

  test_initializer_error_methodInvocation_cycle_topLevel_self() async {
    var library = await _encodeDecodeLibrary(r'''
var a = a.foo();
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        typeInferenceError: dependencyCycle
        type: dynamic
    accessors
      synthetic static get a @4
        returnType: dynamic
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: dynamic
        returnType: void
''');
  }

  test_initializer_extractIndex() async {
    var library = await _encodeDecodeLibrary(r'''
var a = [0, 1.2];
var b0 = a[0];
var b1 = a[1];
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        type: List<num>
      static b0 @22
        type: num
      static b1 @37
        type: num
    accessors
      synthetic static get a @4
        returnType: List<num>
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: List<num>
        returnType: void
      synthetic static get b0 @22
        returnType: num
      synthetic static set b0 @22
        parameters
          requiredPositional _b0 @22
            type: num
        returnType: void
      synthetic static get b1 @37
        returnType: num
      synthetic static set b1 @37
        parameters
          requiredPositional _b1 @37
            type: num
        returnType: void
''');
  }

  test_initializer_extractProperty_explicitlyTyped_differentLibraryCycle() async {
    newFile('$testPackageLibPath/a.dart', content: r'''
class C {
  int f = 0;
}
''');
    var library = await _encodeDecodeLibrary(r'''
import 'a.dart';
var x = new C().f;
''');
    checkElementText(library, r'''
library
  imports
    package:test/a.dart
  definingUnit
    topLevelVariables
      static x @21
        type: int
    accessors
      synthetic static get x @21
        returnType: int
      synthetic static set x @21
        parameters
          requiredPositional _x @21
            type: int
        returnType: void
''');
  }

  test_initializer_extractProperty_explicitlyTyped_sameLibrary() async {
    var library = await _encodeDecodeLibrary(r'''
class C {
  int f = 0;
}
var x = new C().f;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class C @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
    topLevelVariables
      static x @29
        type: int
    accessors
      synthetic static get x @29
        returnType: int
      synthetic static set x @29
        parameters
          requiredPositional _x @29
            type: int
        returnType: void
''');
  }

  test_initializer_extractProperty_explicitlyTyped_sameLibraryCycle() async {
    newFile('$testPackageLibPath/a.dart', content: r'''
import 'test.dart'; // just do make it part of the library cycle
class C {
  int f = 0;
}
''');
    var library = await _encodeDecodeLibrary(r'''
import 'a.dart';
var x = new C().f;
''');
    checkElementText(library, r'''
library
  imports
    package:test/a.dart
  definingUnit
    topLevelVariables
      static x @21
        type: int
    accessors
      synthetic static get x @21
        returnType: int
      synthetic static set x @21
        parameters
          requiredPositional _x @21
            type: int
        returnType: void
''');
  }

  test_initializer_extractProperty_implicitlyTyped_differentLibraryCycle() async {
    newFile('$testPackageLibPath/a.dart', content: r'''
class C {
  var f = 0;
}
''');
    var library = await _encodeDecodeLibrary(r'''
import 'a.dart';
var x = new C().f;
''');
    checkElementText(library, r'''
library
  imports
    package:test/a.dart
  definingUnit
    topLevelVariables
      static x @21
        type: int
    accessors
      synthetic static get x @21
        returnType: int
      synthetic static set x @21
        parameters
          requiredPositional _x @21
            type: int
        returnType: void
''');
  }

  test_initializer_extractProperty_implicitlyTyped_sameLibrary() async {
    var library = await _encodeDecodeLibrary(r'''
class C {
  var f = 0;
}
var x = new C().f;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class C @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
    topLevelVariables
      static x @29
        type: int
    accessors
      synthetic static get x @29
        returnType: int
      synthetic static set x @29
        parameters
          requiredPositional _x @29
            type: int
        returnType: void
''');
  }

  test_initializer_extractProperty_implicitlyTyped_sameLibraryCycle() async {
    newFile('$testPackageLibPath/a.dart', content: r'''
import 'test.dart'; // just do make it part of the library cycle
class C {
  var f = 0;
}
''');
    var library = await _encodeDecodeLibrary(r'''
import 'a.dart';
var x = new C().f;
''');
    checkElementText(library, r'''
library
  imports
    package:test/a.dart
  definingUnit
    topLevelVariables
      static x @21
        type: int
    accessors
      synthetic static get x @21
        returnType: int
      synthetic static set x @21
        parameters
          requiredPositional _x @21
            type: int
        returnType: void
''');
  }

  test_initializer_extractProperty_inStaticField() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int f;
}
class B {
  static var t = new A().f;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          f @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
      class B @27
        fields
          static t @44
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic static get t @44
            returnType: int
          synthetic static set t @44
            parameters
              requiredPositional _t @44
                type: int
            returnType: void
''');
  }

  test_initializer_extractProperty_prefixedIdentifier() async {
    var library = await _encodeDecodeLibrary(r'''
class C {
  bool b;
}
C c;
var x = c.b;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class C @6
        fields
          b @17
            type: bool
        constructors
          synthetic @-1
        accessors
          synthetic get b @17
            returnType: bool
          synthetic set b @17
            parameters
              requiredPositional _b @17
                type: bool
            returnType: void
    topLevelVariables
      static c @24
        type: C
      static x @31
        type: bool
    accessors
      synthetic static get c @24
        returnType: C
      synthetic static set c @24
        parameters
          requiredPositional _c @24
            type: C
        returnType: void
      synthetic static get x @31
        returnType: bool
      synthetic static set x @31
        parameters
          requiredPositional _x @31
            type: bool
        returnType: void
''');
  }

  test_initializer_extractProperty_prefixedIdentifier_viaInterface() async {
    var library = await _encodeDecodeLibrary(r'''
class I {
  bool b;
}
abstract class C implements I {}
C c;
var x = c.b;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class I @6
        fields
          b @17
            type: bool
        constructors
          synthetic @-1
        accessors
          synthetic get b @17
            returnType: bool
          synthetic set b @17
            parameters
              requiredPositional _b @17
                type: bool
            returnType: void
      abstract class C @37
        interfaces
          I
        constructors
          synthetic @-1
    topLevelVariables
      static c @57
        type: C
      static x @64
        type: bool
    accessors
      synthetic static get c @57
        returnType: C
      synthetic static set c @57
        parameters
          requiredPositional _c @57
            type: C
        returnType: void
      synthetic static get x @64
        returnType: bool
      synthetic static set x @64
        parameters
          requiredPositional _x @64
            type: bool
        returnType: void
''');
  }

  test_initializer_extractProperty_viaInterface() async {
    var library = await _encodeDecodeLibrary(r'''
class I {
  bool b;
}
abstract class C implements I {}
C f() => null;
var x = f().b;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class I @6
        fields
          b @17
            type: bool
        constructors
          synthetic @-1
        accessors
          synthetic get b @17
            returnType: bool
          synthetic set b @17
            parameters
              requiredPositional _b @17
                type: bool
            returnType: void
      abstract class C @37
        interfaces
          I
        constructors
          synthetic @-1
    topLevelVariables
      static x @74
        type: bool
    accessors
      synthetic static get x @74
        returnType: bool
      synthetic static set x @74
        parameters
          requiredPositional _x @74
            type: bool
        returnType: void
    functions
      f @57
        returnType: C
''');
  }

  test_initializer_fromInstanceMethod() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int foo() => 0;
}
class B extends A {
  foo() => 1;
}
var x = A().foo();
var y = B().foo();
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          foo @16
            returnType: int
      class B @36
        supertype: A
        constructors
          synthetic @-1
        methods
          foo @52
            returnType: int
    topLevelVariables
      static x @70
        type: int
      static y @89
        type: int
    accessors
      synthetic static get x @70
        returnType: int
      synthetic static set x @70
        parameters
          requiredPositional _x @70
            type: int
        returnType: void
      synthetic static get y @89
        returnType: int
      synthetic static set y @89
        parameters
          requiredPositional _y @89
            type: int
        returnType: void
''');
  }

  test_initializer_functionExpression() async {
    var library = await _encodeDecodeLibrary(r'''
import 'dart:async';
var vFuture = new Future<int>(42);
var v_noParameters_inferredReturnType = () => 42;
var v_hasParameter_withType_inferredReturnType = (String a) => 42;
var v_hasParameter_withType_returnParameter = (String a) => a;
var v_async_returnValue = () async => 42;
var v_async_returnFuture = () async => vFuture;
''');
    checkElementText(library, r'''
library
  imports
    dart:async
  definingUnit
    topLevelVariables
      static vFuture @25
        type: Future<int>
      static v_noParameters_inferredReturnType @60
        type: int Function()
      static v_hasParameter_withType_inferredReturnType @110
        type: int Function(String)
      static v_hasParameter_withType_returnParameter @177
        type: String Function(String)
      static v_async_returnValue @240
        type: Future<int> Function()
      static v_async_returnFuture @282
        type: Future<int> Function()
    accessors
      synthetic static get vFuture @25
        returnType: Future<int>
      synthetic static set vFuture @25
        parameters
          requiredPositional _vFuture @25
            type: Future<int>
        returnType: void
      synthetic static get v_noParameters_inferredReturnType @60
        returnType: int Function()
      synthetic static set v_noParameters_inferredReturnType @60
        parameters
          requiredPositional _v_noParameters_inferredReturnType @60
            type: int Function()
        returnType: void
      synthetic static get v_hasParameter_withType_inferredReturnType @110
        returnType: int Function(String)
      synthetic static set v_hasParameter_withType_inferredReturnType @110
        parameters
          requiredPositional _v_hasParameter_withType_inferredReturnType @110
            type: int Function(String)
        returnType: void
      synthetic static get v_hasParameter_withType_returnParameter @177
        returnType: String Function(String)
      synthetic static set v_hasParameter_withType_returnParameter @177
        parameters
          requiredPositional _v_hasParameter_withType_returnParameter @177
            type: String Function(String)
        returnType: void
      synthetic static get v_async_returnValue @240
        returnType: Future<int> Function()
      synthetic static set v_async_returnValue @240
        parameters
          requiredPositional _v_async_returnValue @240
            type: Future<int> Function()
        returnType: void
      synthetic static get v_async_returnFuture @282
        returnType: Future<int> Function()
      synthetic static set v_async_returnFuture @282
        parameters
          requiredPositional _v_async_returnFuture @282
            type: Future<int> Function()
        returnType: void
''');
  }

  test_initializer_functionExpressionInvocation_noTypeParameters() async {
    var library = await _encodeDecodeLibrary(r'''
var v = (() => 42)();
''');
    // TODO(scheglov) add more function expression tests
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static v @4
        type: int
    accessors
      synthetic static get v @4
        returnType: int
      synthetic static set v @4
        parameters
          requiredPositional _v @4
            type: int
        returnType: void
''');
  }

  test_initializer_functionInvocation_hasTypeParameters() async {
    var library = await _encodeDecodeLibrary(r'''
T f<T>() => null;
var vHasTypeArgument = f<int>();
var vNoTypeArgument = f();
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vHasTypeArgument @22
        type: int
      static vNoTypeArgument @55
        type: dynamic
    accessors
      synthetic static get vHasTypeArgument @22
        returnType: int
      synthetic static set vHasTypeArgument @22
        parameters
          requiredPositional _vHasTypeArgument @22
            type: int
        returnType: void
      synthetic static get vNoTypeArgument @55
        returnType: dynamic
      synthetic static set vNoTypeArgument @55
        parameters
          requiredPositional _vNoTypeArgument @55
            type: dynamic
        returnType: void
    functions
      f @2
        typeParameters
          covariant T @4
        returnType: T
''');
  }

  test_initializer_functionInvocation_noTypeParameters() async {
    var library = await _encodeDecodeLibrary(r'''
String f(int p) => null;
var vOkArgumentType = f(1);
var vWrongArgumentType = f(2.0);
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vOkArgumentType @29
        type: String
      static vWrongArgumentType @57
        type: String
    accessors
      synthetic static get vOkArgumentType @29
        returnType: String
      synthetic static set vOkArgumentType @29
        parameters
          requiredPositional _vOkArgumentType @29
            type: String
        returnType: void
      synthetic static get vWrongArgumentType @57
        returnType: String
      synthetic static set vWrongArgumentType @57
        parameters
          requiredPositional _vWrongArgumentType @57
            type: String
        returnType: void
    functions
      f @7
        parameters
          requiredPositional p @13
            type: int
        returnType: String
''');
  }

  test_initializer_identifier() async {
    var library = await _encodeDecodeLibrary(r'''
String topLevelFunction(int p) => null;
var topLevelVariable = 0;
int get topLevelGetter => 0;
class A {
  static var staticClassVariable = 0;
  static int get staticGetter => 0;
  static String staticClassMethod(int p) => null;
  String instanceClassMethod(int p) => null;
}
var r_topLevelFunction = topLevelFunction;
var r_topLevelVariable = topLevelVariable;
var r_topLevelGetter = topLevelGetter;
var r_staticClassVariable = A.staticClassVariable;
var r_staticGetter = A.staticGetter;
var r_staticClassMethod = A.staticClassMethod;
var instanceOfA = new A();
var r_instanceClassMethod = instanceOfA.instanceClassMethod;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @101
        fields
          static staticClassVariable @118
            type: int
          synthetic static staticGetter @-1
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic static get staticClassVariable @118
            returnType: int
          synthetic static set staticClassVariable @118
            parameters
              requiredPositional _staticClassVariable @118
                type: int
            returnType: void
          static get staticGetter @160
            returnType: int
        methods
          static staticClassMethod @195
            parameters
              requiredPositional p @217
                type: int
            returnType: String
          instanceClassMethod @238
            parameters
              requiredPositional p @262
                type: int
            returnType: String
    topLevelVariables
      static topLevelVariable @44
        type: int
      static r_topLevelFunction @280
        type: String Function(int)
      static r_topLevelVariable @323
        type: int
      static r_topLevelGetter @366
        type: int
      static r_staticClassVariable @405
        type: int
      static r_staticGetter @456
        type: int
      static r_staticClassMethod @493
        type: String Function(int)
      static instanceOfA @540
        type: A
      static r_instanceClassMethod @567
        type: String Function(int)
      synthetic static topLevelGetter @-1
        type: int
    accessors
      synthetic static get topLevelVariable @44
        returnType: int
      synthetic static set topLevelVariable @44
        parameters
          requiredPositional _topLevelVariable @44
            type: int
        returnType: void
      synthetic static get r_topLevelFunction @280
        returnType: String Function(int)
      synthetic static set r_topLevelFunction @280
        parameters
          requiredPositional _r_topLevelFunction @280
            type: String Function(int)
        returnType: void
      synthetic static get r_topLevelVariable @323
        returnType: int
      synthetic static set r_topLevelVariable @323
        parameters
          requiredPositional _r_topLevelVariable @323
            type: int
        returnType: void
      synthetic static get r_topLevelGetter @366
        returnType: int
      synthetic static set r_topLevelGetter @366
        parameters
          requiredPositional _r_topLevelGetter @366
            type: int
        returnType: void
      synthetic static get r_staticClassVariable @405
        returnType: int
      synthetic static set r_staticClassVariable @405
        parameters
          requiredPositional _r_staticClassVariable @405
            type: int
        returnType: void
      synthetic static get r_staticGetter @456
        returnType: int
      synthetic static set r_staticGetter @456
        parameters
          requiredPositional _r_staticGetter @456
            type: int
        returnType: void
      synthetic static get r_staticClassMethod @493
        returnType: String Function(int)
      synthetic static set r_staticClassMethod @493
        parameters
          requiredPositional _r_staticClassMethod @493
            type: String Function(int)
        returnType: void
      synthetic static get instanceOfA @540
        returnType: A
      synthetic static set instanceOfA @540
        parameters
          requiredPositional _instanceOfA @540
            type: A
        returnType: void
      synthetic static get r_instanceClassMethod @567
        returnType: String Function(int)
      synthetic static set r_instanceClassMethod @567
        parameters
          requiredPositional _r_instanceClassMethod @567
            type: String Function(int)
        returnType: void
      get topLevelGetter @74
        returnType: int
    functions
      topLevelFunction @7
        parameters
          requiredPositional p @28
            type: int
        returnType: String
''');
  }

  test_initializer_identifier_error_cycle_classField() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  static var a = B.b;
}
class B {
  static var b = A.a;
}
var c = A.a;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          static a @23
            typeInferenceError: dependencyCycle
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic static get a @23
            returnType: dynamic
          synthetic static set a @23
            parameters
              requiredPositional _a @23
                type: dynamic
            returnType: void
      class B @40
        fields
          static b @57
            typeInferenceError: dependencyCycle
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic static get b @57
            returnType: dynamic
          synthetic static set b @57
            parameters
              requiredPositional _b @57
                type: dynamic
            returnType: void
    topLevelVariables
      static c @72
        type: dynamic
    accessors
      synthetic static get c @72
        returnType: dynamic
      synthetic static set c @72
        parameters
          requiredPositional _c @72
            type: dynamic
        returnType: void
''');
  }

  test_initializer_identifier_error_cycle_mix() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  static var a = b;
}
var b = A.a;
var c = b;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          static a @23
            typeInferenceError: dependencyCycle
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic static get a @23
            returnType: dynamic
          synthetic static set a @23
            parameters
              requiredPositional _a @23
                type: dynamic
            returnType: void
    topLevelVariables
      static b @36
        typeInferenceError: dependencyCycle
        type: dynamic
      static c @49
        type: dynamic
    accessors
      synthetic static get b @36
        returnType: dynamic
      synthetic static set b @36
        parameters
          requiredPositional _b @36
            type: dynamic
        returnType: void
      synthetic static get c @49
        returnType: dynamic
      synthetic static set c @49
        parameters
          requiredPositional _c @49
            type: dynamic
        returnType: void
''');
  }

  test_initializer_identifier_error_cycle_topLevel() async {
    var library = await _encodeDecodeLibrary(r'''
var a = b;
var b = c;
var c = a;
var d = a;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        typeInferenceError: dependencyCycle
        type: dynamic
      static b @15
        typeInferenceError: dependencyCycle
        type: dynamic
      static c @26
        typeInferenceError: dependencyCycle
        type: dynamic
      static d @37
        type: dynamic
    accessors
      synthetic static get a @4
        returnType: dynamic
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: dynamic
        returnType: void
      synthetic static get b @15
        returnType: dynamic
      synthetic static set b @15
        parameters
          requiredPositional _b @15
            type: dynamic
        returnType: void
      synthetic static get c @26
        returnType: dynamic
      synthetic static set c @26
        parameters
          requiredPositional _c @26
            type: dynamic
        returnType: void
      synthetic static get d @37
        returnType: dynamic
      synthetic static set d @37
        parameters
          requiredPositional _d @37
            type: dynamic
        returnType: void
''');
  }

  test_initializer_identifier_formalParameter() async {
    // TODO(scheglov) I don't understand this yet
  }

  @failingTest
  test_initializer_instanceCreation_hasTypeParameter() async {
    var library = await _encodeDecodeLibrary(r'''
class A<T> {}
var a = new A<int>();
var b = new A();
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
class A<T> {
}
A<int> a;
dynamic b;
''');
  }

  test_initializer_instanceCreation_noTypeParameters() async {
    var library = await _encodeDecodeLibrary(r'''
class A {}
var a = new A();
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
    topLevelVariables
      static a @15
        type: A
    accessors
      synthetic static get a @15
        returnType: A
      synthetic static set a @15
        parameters
          requiredPositional _a @15
            type: A
        returnType: void
''');
  }

  test_initializer_instanceGetterOfObject() async {
    var library = await _encodeDecodeLibrary(r'''
dynamic f() => null;
var s = f().toString();
var h = f().hashCode;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static s @25
        type: String
      static h @49
        type: int
    accessors
      synthetic static get s @25
        returnType: String
      synthetic static set s @25
        parameters
          requiredPositional _s @25
            type: String
        returnType: void
      synthetic static get h @49
        returnType: int
      synthetic static set h @49
        parameters
          requiredPositional _h @49
            type: int
        returnType: void
    functions
      f @8
        returnType: dynamic
''');
  }

  test_initializer_instanceGetterOfObject_prefixed() async {
    var library = await _encodeDecodeLibrary(r'''
dynamic d;
var s = d.toString();
var h = d.hashCode;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static d @8
        type: dynamic
      static s @15
        type: String
      static h @37
        type: int
    accessors
      synthetic static get d @8
        returnType: dynamic
      synthetic static set d @8
        parameters
          requiredPositional _d @8
            type: dynamic
        returnType: void
      synthetic static get s @15
        returnType: String
      synthetic static set s @15
        parameters
          requiredPositional _s @15
            type: String
        returnType: void
      synthetic static get h @37
        returnType: int
      synthetic static set h @37
        parameters
          requiredPositional _h @37
            type: int
        returnType: void
''');
  }

  test_initializer_is() async {
    var library = await _encodeDecodeLibrary(r'''
var a = 1.2;
var b = a is int;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        type: double
      static b @17
        type: bool
    accessors
      synthetic static get a @4
        returnType: double
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: double
        returnType: void
      synthetic static get b @17
        returnType: bool
      synthetic static set b @17
        parameters
          requiredPositional _b @17
            type: bool
        returnType: void
''');
  }

  @failingTest
  test_initializer_literal() async {
    var library = await _encodeDecodeLibrary(r'''
var vNull = null;
var vBoolFalse = false;
var vBoolTrue = true;
var vInt = 1;
var vIntLong = 0x9876543210987654321;
var vDouble = 2.3;
var vString = 'abc';
var vStringConcat = 'aaa' 'bbb';
var vStringInterpolation = 'aaa ${true} ${42} bbb';
var vSymbol = #aaa.bbb.ccc;
''');
    checkElementText(library, r'''
Null vNull;
bool vBoolFalse;
bool vBoolTrue;
int vInt;
int vIntLong;
double vDouble;
String vString;
String vStringConcat;
String vStringInterpolation;
Symbol vSymbol;
''');
  }

  test_initializer_literal_list_typed() async {
    var library = await _encodeDecodeLibrary(r'''
var vObject = <Object>[1, 2, 3];
var vNum = <num>[1, 2, 3];
var vNumEmpty = <num>[];
var vInt = <int>[1, 2, 3];
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vObject @4
        type: List<Object>
      static vNum @37
        type: List<num>
      static vNumEmpty @64
        type: List<num>
      static vInt @89
        type: List<int>
    accessors
      synthetic static get vObject @4
        returnType: List<Object>
      synthetic static set vObject @4
        parameters
          requiredPositional _vObject @4
            type: List<Object>
        returnType: void
      synthetic static get vNum @37
        returnType: List<num>
      synthetic static set vNum @37
        parameters
          requiredPositional _vNum @37
            type: List<num>
        returnType: void
      synthetic static get vNumEmpty @64
        returnType: List<num>
      synthetic static set vNumEmpty @64
        parameters
          requiredPositional _vNumEmpty @64
            type: List<num>
        returnType: void
      synthetic static get vInt @89
        returnType: List<int>
      synthetic static set vInt @89
        parameters
          requiredPositional _vInt @89
            type: List<int>
        returnType: void
''');
  }

  test_initializer_literal_list_untyped() async {
    var library = await _encodeDecodeLibrary(r'''
var vInt = [1, 2, 3];
var vNum = [1, 2.0];
var vObject = [1, 2.0, '333'];
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vInt @4
        type: List<int>
      static vNum @26
        type: List<num>
      static vObject @47
        type: List<Object>
    accessors
      synthetic static get vInt @4
        returnType: List<int>
      synthetic static set vInt @4
        parameters
          requiredPositional _vInt @4
            type: List<int>
        returnType: void
      synthetic static get vNum @26
        returnType: List<num>
      synthetic static set vNum @26
        parameters
          requiredPositional _vNum @26
            type: List<num>
        returnType: void
      synthetic static get vObject @47
        returnType: List<Object>
      synthetic static set vObject @47
        parameters
          requiredPositional _vObject @47
            type: List<Object>
        returnType: void
''');
  }

  @failingTest
  test_initializer_literal_list_untyped_empty() async {
    var library = await _encodeDecodeLibrary(r'''
var vNonConst = [];
var vConst = const [];
''');
    checkElementText(library, r'''
List<dynamic> vNonConst;
List<Null> vConst;
''');
  }

  test_initializer_literal_map_typed() async {
    var library = await _encodeDecodeLibrary(r'''
var vObjectObject = <Object, Object>{1: 'a'};
var vComparableObject = <Comparable<int>, Object>{1: 'a'};
var vNumString = <num, String>{1: 'a'};
var vNumStringEmpty = <num, String>{};
var vIntString = <int, String>{};
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vObjectObject @4
        type: Map<Object, Object>
      static vComparableObject @50
        type: Map<Comparable<int>, Object>
      static vNumString @109
        type: Map<num, String>
      static vNumStringEmpty @149
        type: Map<num, String>
      static vIntString @188
        type: Map<int, String>
    accessors
      synthetic static get vObjectObject @4
        returnType: Map<Object, Object>
      synthetic static set vObjectObject @4
        parameters
          requiredPositional _vObjectObject @4
            type: Map<Object, Object>
        returnType: void
      synthetic static get vComparableObject @50
        returnType: Map<Comparable<int>, Object>
      synthetic static set vComparableObject @50
        parameters
          requiredPositional _vComparableObject @50
            type: Map<Comparable<int>, Object>
        returnType: void
      synthetic static get vNumString @109
        returnType: Map<num, String>
      synthetic static set vNumString @109
        parameters
          requiredPositional _vNumString @109
            type: Map<num, String>
        returnType: void
      synthetic static get vNumStringEmpty @149
        returnType: Map<num, String>
      synthetic static set vNumStringEmpty @149
        parameters
          requiredPositional _vNumStringEmpty @149
            type: Map<num, String>
        returnType: void
      synthetic static get vIntString @188
        returnType: Map<int, String>
      synthetic static set vIntString @188
        parameters
          requiredPositional _vIntString @188
            type: Map<int, String>
        returnType: void
''');
  }

  test_initializer_literal_map_untyped() async {
    var library = await _encodeDecodeLibrary(r'''
var vIntString = {1: 'a', 2: 'b'};
var vNumString = {1: 'a', 2.0: 'b'};
var vIntObject = {1: 'a', 2: 3.0};
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vIntString @4
        type: Map<int, String>
      static vNumString @39
        type: Map<num, String>
      static vIntObject @76
        type: Map<int, Object>
    accessors
      synthetic static get vIntString @4
        returnType: Map<int, String>
      synthetic static set vIntString @4
        parameters
          requiredPositional _vIntString @4
            type: Map<int, String>
        returnType: void
      synthetic static get vNumString @39
        returnType: Map<num, String>
      synthetic static set vNumString @39
        parameters
          requiredPositional _vNumString @39
            type: Map<num, String>
        returnType: void
      synthetic static get vIntObject @76
        returnType: Map<int, Object>
      synthetic static set vIntObject @76
        parameters
          requiredPositional _vIntObject @76
            type: Map<int, Object>
        returnType: void
''');
  }

  @failingTest
  test_initializer_literal_map_untyped_empty() async {
    var library = await _encodeDecodeLibrary(r'''
var vNonConst = {};
var vConst = const {};
''');
    checkElementText(library, r'''
Map<dynamic, dynamic> vNonConst;
Map<Null, Null> vConst;
''');
  }

  test_initializer_logicalBool() async {
    var library = await _encodeDecodeLibrary(r'''
var a = true;
var b = true;
var vEq = 1 == 2;
var vAnd = a && b;
var vOr = a || b;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        type: bool
      static b @18
        type: bool
      static vEq @32
        type: bool
      static vAnd @50
        type: bool
      static vOr @69
        type: bool
    accessors
      synthetic static get a @4
        returnType: bool
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: bool
        returnType: void
      synthetic static get b @18
        returnType: bool
      synthetic static set b @18
        parameters
          requiredPositional _b @18
            type: bool
        returnType: void
      synthetic static get vEq @32
        returnType: bool
      synthetic static set vEq @32
        parameters
          requiredPositional _vEq @32
            type: bool
        returnType: void
      synthetic static get vAnd @50
        returnType: bool
      synthetic static set vAnd @50
        parameters
          requiredPositional _vAnd @50
            type: bool
        returnType: void
      synthetic static get vOr @69
        returnType: bool
      synthetic static set vOr @69
        parameters
          requiredPositional _vOr @69
            type: bool
        returnType: void
''');
  }

  @failingTest
  test_initializer_methodInvocation_hasTypeParameters() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  List<T> m<T>() => null;
}
var vWithTypeArgument = new A().m<int>();
var vWithoutTypeArgument = new A().m();
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
class A {
  List<T> m<T>(int p) {}
}
List<int> vWithTypeArgument;
dynamic vWithoutTypeArgument;
''');
  }

  test_initializer_methodInvocation_noTypeParameters() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int p) => null;
}
var instanceOfA = new A();
var v1 = instanceOfA.m();
var v2 = new A().m();
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional p @25
                type: int
            returnType: String
    topLevelVariables
      static instanceOfA @43
        type: A
      static v1 @70
        type: String
      static v2 @96
        type: String
    accessors
      synthetic static get instanceOfA @43
        returnType: A
      synthetic static set instanceOfA @43
        parameters
          requiredPositional _instanceOfA @43
            type: A
        returnType: void
      synthetic static get v1 @70
        returnType: String
      synthetic static set v1 @70
        parameters
          requiredPositional _v1 @70
            type: String
        returnType: void
      synthetic static get v2 @96
        returnType: String
      synthetic static set v2 @96
        parameters
          requiredPositional _v2 @96
            type: String
        returnType: void
''');
  }

  test_initializer_multiplicative() async {
    var library = await _encodeDecodeLibrary(r'''
var vModuloIntInt = 1 % 2;
var vModuloIntDouble = 1 % 2.0;
var vMultiplyIntInt = 1 * 2;
var vMultiplyIntDouble = 1 * 2.0;
var vMultiplyDoubleInt = 1.0 * 2;
var vMultiplyDoubleDouble = 1.0 * 2.0;
var vDivideIntInt = 1 / 2;
var vDivideIntDouble = 1 / 2.0;
var vDivideDoubleInt = 1.0 / 2;
var vDivideDoubleDouble = 1.0 / 2.0;
var vFloorDivide = 1 ~/ 2;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vModuloIntInt @4
        type: int
      static vModuloIntDouble @31
        type: double
      static vMultiplyIntInt @63
        type: int
      static vMultiplyIntDouble @92
        type: double
      static vMultiplyDoubleInt @126
        type: double
      static vMultiplyDoubleDouble @160
        type: double
      static vDivideIntInt @199
        type: double
      static vDivideIntDouble @226
        type: double
      static vDivideDoubleInt @258
        type: double
      static vDivideDoubleDouble @290
        type: double
      static vFloorDivide @327
        type: int
    accessors
      synthetic static get vModuloIntInt @4
        returnType: int
      synthetic static set vModuloIntInt @4
        parameters
          requiredPositional _vModuloIntInt @4
            type: int
        returnType: void
      synthetic static get vModuloIntDouble @31
        returnType: double
      synthetic static set vModuloIntDouble @31
        parameters
          requiredPositional _vModuloIntDouble @31
            type: double
        returnType: void
      synthetic static get vMultiplyIntInt @63
        returnType: int
      synthetic static set vMultiplyIntInt @63
        parameters
          requiredPositional _vMultiplyIntInt @63
            type: int
        returnType: void
      synthetic static get vMultiplyIntDouble @92
        returnType: double
      synthetic static set vMultiplyIntDouble @92
        parameters
          requiredPositional _vMultiplyIntDouble @92
            type: double
        returnType: void
      synthetic static get vMultiplyDoubleInt @126
        returnType: double
      synthetic static set vMultiplyDoubleInt @126
        parameters
          requiredPositional _vMultiplyDoubleInt @126
            type: double
        returnType: void
      synthetic static get vMultiplyDoubleDouble @160
        returnType: double
      synthetic static set vMultiplyDoubleDouble @160
        parameters
          requiredPositional _vMultiplyDoubleDouble @160
            type: double
        returnType: void
      synthetic static get vDivideIntInt @199
        returnType: double
      synthetic static set vDivideIntInt @199
        parameters
          requiredPositional _vDivideIntInt @199
            type: double
        returnType: void
      synthetic static get vDivideIntDouble @226
        returnType: double
      synthetic static set vDivideIntDouble @226
        parameters
          requiredPositional _vDivideIntDouble @226
            type: double
        returnType: void
      synthetic static get vDivideDoubleInt @258
        returnType: double
      synthetic static set vDivideDoubleInt @258
        parameters
          requiredPositional _vDivideDoubleInt @258
            type: double
        returnType: void
      synthetic static get vDivideDoubleDouble @290
        returnType: double
      synthetic static set vDivideDoubleDouble @290
        parameters
          requiredPositional _vDivideDoubleDouble @290
            type: double
        returnType: void
      synthetic static get vFloorDivide @327
        returnType: int
      synthetic static set vFloorDivide @327
        parameters
          requiredPositional _vFloorDivide @327
            type: int
        returnType: void
''');
  }

  test_initializer_onlyLeft() async {
    var library = await _encodeDecodeLibrary(r'''
var a = 1;
var vEq = a == ((a = 2) == 0);
var vNotEq = a != ((a = 2) == 0);
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static a @4
        type: int
      static vEq @15
        type: bool
      static vNotEq @46
        type: bool
    accessors
      synthetic static get a @4
        returnType: int
      synthetic static set a @4
        parameters
          requiredPositional _a @4
            type: int
        returnType: void
      synthetic static get vEq @15
        returnType: bool
      synthetic static set vEq @15
        parameters
          requiredPositional _vEq @15
            type: bool
        returnType: void
      synthetic static get vNotEq @46
        returnType: bool
      synthetic static set vNotEq @46
        parameters
          requiredPositional _vNotEq @46
            type: bool
        returnType: void
''');
  }

  test_initializer_parenthesized() async {
    var library = await _encodeDecodeLibrary(r'''
var V = (42);
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static V @4
        type: int
    accessors
      synthetic static get V @4
        returnType: int
      synthetic static set V @4
        parameters
          requiredPositional _V @4
            type: int
        returnType: void
''');
  }

  test_initializer_postfix() async {
    var library = await _encodeDecodeLibrary(r'''
var vInt = 1;
var vDouble = 2.0;
var vIncInt = vInt++;
var vDecInt = vInt--;
var vIncDouble = vDouble++;
var vDecDouble = vDouble--;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vInt @4
        type: int
      static vDouble @18
        type: double
      static vIncInt @37
        type: int
      static vDecInt @59
        type: int
      static vIncDouble @81
        type: double
      static vDecDouble @109
        type: double
    accessors
      synthetic static get vInt @4
        returnType: int
      synthetic static set vInt @4
        parameters
          requiredPositional _vInt @4
            type: int
        returnType: void
      synthetic static get vDouble @18
        returnType: double
      synthetic static set vDouble @18
        parameters
          requiredPositional _vDouble @18
            type: double
        returnType: void
      synthetic static get vIncInt @37
        returnType: int
      synthetic static set vIncInt @37
        parameters
          requiredPositional _vIncInt @37
            type: int
        returnType: void
      synthetic static get vDecInt @59
        returnType: int
      synthetic static set vDecInt @59
        parameters
          requiredPositional _vDecInt @59
            type: int
        returnType: void
      synthetic static get vIncDouble @81
        returnType: double
      synthetic static set vIncDouble @81
        parameters
          requiredPositional _vIncDouble @81
            type: double
        returnType: void
      synthetic static get vDecDouble @109
        returnType: double
      synthetic static set vDecDouble @109
        parameters
          requiredPositional _vDecDouble @109
            type: double
        returnType: void
''');
  }

  test_initializer_postfix_indexed() async {
    var library = await _encodeDecodeLibrary(r'''
var vInt = [1];
var vDouble = [2.0];
var vIncInt = vInt[0]++;
var vDecInt = vInt[0]--;
var vIncDouble = vDouble[0]++;
var vDecDouble = vDouble[0]--;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vInt @4
        type: List<int>
      static vDouble @20
        type: List<double>
      static vIncInt @41
        type: int
      static vDecInt @66
        type: int
      static vIncDouble @91
        type: double
      static vDecDouble @122
        type: double
    accessors
      synthetic static get vInt @4
        returnType: List<int>
      synthetic static set vInt @4
        parameters
          requiredPositional _vInt @4
            type: List<int>
        returnType: void
      synthetic static get vDouble @20
        returnType: List<double>
      synthetic static set vDouble @20
        parameters
          requiredPositional _vDouble @20
            type: List<double>
        returnType: void
      synthetic static get vIncInt @41
        returnType: int
      synthetic static set vIncInt @41
        parameters
          requiredPositional _vIncInt @41
            type: int
        returnType: void
      synthetic static get vDecInt @66
        returnType: int
      synthetic static set vDecInt @66
        parameters
          requiredPositional _vDecInt @66
            type: int
        returnType: void
      synthetic static get vIncDouble @91
        returnType: double
      synthetic static set vIncDouble @91
        parameters
          requiredPositional _vIncDouble @91
            type: double
        returnType: void
      synthetic static get vDecDouble @122
        returnType: double
      synthetic static set vDecDouble @122
        parameters
          requiredPositional _vDecDouble @122
            type: double
        returnType: void
''');
  }

  test_initializer_prefix_incDec() async {
    var library = await _encodeDecodeLibrary(r'''
var vInt = 1;
var vDouble = 2.0;
var vIncInt = ++vInt;
var vDecInt = --vInt;
var vIncDouble = ++vDouble;
var vDecInt = --vDouble;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vInt @4
        type: int
      static vDouble @18
        type: double
      static vIncInt @37
        type: int
      static vDecInt @59
        type: int
      static vIncDouble @81
        type: double
      static vDecInt @109
        type: double
    accessors
      synthetic static get vInt @4
        returnType: int
      synthetic static set vInt @4
        parameters
          requiredPositional _vInt @4
            type: int
        returnType: void
      synthetic static get vDouble @18
        returnType: double
      synthetic static set vDouble @18
        parameters
          requiredPositional _vDouble @18
            type: double
        returnType: void
      synthetic static get vIncInt @37
        returnType: int
      synthetic static set vIncInt @37
        parameters
          requiredPositional _vIncInt @37
            type: int
        returnType: void
      synthetic static get vDecInt @59
        returnType: int
      synthetic static set vDecInt @59
        parameters
          requiredPositional _vDecInt @59
            type: int
        returnType: void
      synthetic static get vIncDouble @81
        returnType: double
      synthetic static set vIncDouble @81
        parameters
          requiredPositional _vIncDouble @81
            type: double
        returnType: void
      synthetic static get vDecInt @109
        returnType: double
      synthetic static set vDecInt @109
        parameters
          requiredPositional _vDecInt @109
            type: double
        returnType: void
''');
  }

  @failingTest
  test_initializer_prefix_incDec_custom() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  B operator+(int v) => null;
}
class B {}
var a = new A();
var vInc = ++a;
var vDec = --a;
''');
    checkElementText(library, r'''
A a;
B vInc;
B vDec;
''');
  }

  test_initializer_prefix_incDec_indexed() async {
    var library = await _encodeDecodeLibrary(r'''
var vInt = [1];
var vDouble = [2.0];
var vIncInt = ++vInt[0];
var vDecInt = --vInt[0];
var vIncDouble = ++vDouble[0];
var vDecInt = --vDouble[0];
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vInt @4
        type: List<int>
      static vDouble @20
        type: List<double>
      static vIncInt @41
        type: int
      static vDecInt @66
        type: int
      static vIncDouble @91
        type: double
      static vDecInt @122
        type: double
    accessors
      synthetic static get vInt @4
        returnType: List<int>
      synthetic static set vInt @4
        parameters
          requiredPositional _vInt @4
            type: List<int>
        returnType: void
      synthetic static get vDouble @20
        returnType: List<double>
      synthetic static set vDouble @20
        parameters
          requiredPositional _vDouble @20
            type: List<double>
        returnType: void
      synthetic static get vIncInt @41
        returnType: int
      synthetic static set vIncInt @41
        parameters
          requiredPositional _vIncInt @41
            type: int
        returnType: void
      synthetic static get vDecInt @66
        returnType: int
      synthetic static set vDecInt @66
        parameters
          requiredPositional _vDecInt @66
            type: int
        returnType: void
      synthetic static get vIncDouble @91
        returnType: double
      synthetic static set vIncDouble @91
        parameters
          requiredPositional _vIncDouble @91
            type: double
        returnType: void
      synthetic static get vDecInt @122
        returnType: double
      synthetic static set vDecInt @122
        parameters
          requiredPositional _vDecInt @122
            type: double
        returnType: void
''');
  }

  test_initializer_prefix_not() async {
    var library = await _encodeDecodeLibrary(r'''
var vNot = !true;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vNot @4
        type: bool
    accessors
      synthetic static get vNot @4
        returnType: bool
      synthetic static set vNot @4
        parameters
          requiredPositional _vNot @4
            type: bool
        returnType: void
''');
  }

  test_initializer_prefix_other() async {
    var library = await _encodeDecodeLibrary(r'''
var vNegateInt = -1;
var vNegateDouble = -1.0;
var vComplement = ~1;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vNegateInt @4
        type: int
      static vNegateDouble @25
        type: double
      static vComplement @51
        type: int
    accessors
      synthetic static get vNegateInt @4
        returnType: int
      synthetic static set vNegateInt @4
        parameters
          requiredPositional _vNegateInt @4
            type: int
        returnType: void
      synthetic static get vNegateDouble @25
        returnType: double
      synthetic static set vNegateDouble @25
        parameters
          requiredPositional _vNegateDouble @25
            type: double
        returnType: void
      synthetic static get vComplement @51
        returnType: int
      synthetic static set vComplement @51
        parameters
          requiredPositional _vComplement @51
            type: int
        returnType: void
''');
  }

  test_initializer_referenceToFieldOfStaticField() async {
    var library = await _encodeDecodeLibrary(r'''
class C {
  static D d;
}
class D {
  int i;
}
final x = C.d.i;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class C @6
        fields
          static d @21
            type: D
        constructors
          synthetic @-1
        accessors
          synthetic static get d @21
            returnType: D
          synthetic static set d @21
            parameters
              requiredPositional _d @21
                type: D
            returnType: void
      class D @32
        fields
          i @42
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get i @42
            returnType: int
          synthetic set i @42
            parameters
              requiredPositional _i @42
                type: int
            returnType: void
    topLevelVariables
      static final x @53
        type: int
    accessors
      synthetic static get x @53
        returnType: int
''');
  }

  test_initializer_referenceToFieldOfStaticGetter() async {
    var library = await _encodeDecodeLibrary(r'''
class C {
  static D get d => null;
}
class D {
  int i;
}
var x = C.d.i;
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class C @6
        fields
          synthetic static d @-1
            type: D
        constructors
          synthetic @-1
        accessors
          static get d @25
            returnType: D
      class D @44
        fields
          i @54
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get i @54
            returnType: int
          synthetic set i @54
            parameters
              requiredPositional _i @54
                type: int
            returnType: void
    topLevelVariables
      static x @63
        type: int
    accessors
      synthetic static get x @63
        returnType: int
      synthetic static set x @63
        parameters
          requiredPositional _x @63
            type: int
        returnType: void
''');
  }

  test_initializer_relational() async {
    var library = await _encodeDecodeLibrary(r'''
var vLess = 1 < 2;
var vLessOrEqual = 1 <= 2;
var vGreater = 1 > 2;
var vGreaterOrEqual = 1 >= 2;
''');
    checkElementText(library, r'''
library
  definingUnit
    topLevelVariables
      static vLess @4
        type: bool
      static vLessOrEqual @23
        type: bool
      static vGreater @50
        type: bool
      static vGreaterOrEqual @72
        type: bool
    accessors
      synthetic static get vLess @4
        returnType: bool
      synthetic static set vLess @4
        parameters
          requiredPositional _vLess @4
            type: bool
        returnType: void
      synthetic static get vLessOrEqual @23
        returnType: bool
      synthetic static set vLessOrEqual @23
        parameters
          requiredPositional _vLessOrEqual @23
            type: bool
        returnType: void
      synthetic static get vGreater @50
        returnType: bool
      synthetic static set vGreater @50
        parameters
          requiredPositional _vGreater @50
            type: bool
        returnType: void
      synthetic static get vGreaterOrEqual @72
        returnType: bool
      synthetic static set vGreaterOrEqual @72
        parameters
          requiredPositional _vGreaterOrEqual @72
            type: bool
        returnType: void
''');
  }

  @failingTest
  test_initializer_throw() async {
    var library = await _encodeDecodeLibrary(r'''
var V = throw 42;
''');
    checkElementText(library, r'''
Null V;
''');
  }

  test_instanceField_error_noSetterParameter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int x;
}
class B implements A {
  set x() {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          x @25
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @25
            returnType: int
          synthetic set x @25
            parameters
              requiredPositional _x @25
                type: int
            returnType: void
      class B @36
        interfaces
          A
        fields
          synthetic x @-1
            type: dynamic
        constructors
          synthetic @-1
        accessors
          set x @59
            returnType: void
''');
  }

  test_instanceField_fieldFormal() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  var f = 0;
  A([this.f = 'hello']);
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          f @16
            type: int
        constructors
          @25
            parameters
              optionalPositional final this.f @33
                type: int
                constantInitializer
                  SimpleStringLiteral
                    literal: 'hello' @0
        accessors
          synthetic get f @16
            returnType: int
          synthetic set f @16
            parameters
              requiredPositional _f @16
                type: int
            returnType: void
''');
  }

  test_instanceField_fromField() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int x;
  int y;
  int z;
}
class B implements A {
  var x;
  get y => null;
  set z(_) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          x @25
            type: int
          y @34
            type: int
          z @43
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @25
            returnType: int
          synthetic set x @25
            parameters
              requiredPositional _x @25
                type: int
            returnType: void
          synthetic get y @34
            returnType: int
          synthetic set y @34
            parameters
              requiredPositional _y @34
                type: int
            returnType: void
          synthetic get z @43
            returnType: int
          synthetic set z @43
            parameters
              requiredPositional _z @43
                type: int
            returnType: void
      class B @54
        interfaces
          A
        fields
          x @77
            type: int
          synthetic y @-1
            type: int
          synthetic z @-1
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @77
            returnType: int
          synthetic set x @77
            parameters
              requiredPositional _x @77
                type: int
            returnType: void
          get y @86
            returnType: int
          set z @103
            parameters
              requiredPositional _ @105
                type: int
            returnType: void
''');
  }

  test_instanceField_fromField_explicitDynamic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  dynamic x;
}
class B implements A {
  var x = 1;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          x @29
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic get x @29
            returnType: dynamic
          synthetic set x @29
            parameters
              requiredPositional _x @29
                type: dynamic
            returnType: void
      class B @40
        interfaces
          A
        fields
          x @63
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic get x @63
            returnType: dynamic
          synthetic set x @63
            parameters
              requiredPositional _x @63
                type: dynamic
            returnType: void
''');
  }

  test_instanceField_fromField_generic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A<E> {
  E x;
  E y;
  E z;
}
class B<T> implements A<T> {
  var x;
  get y => null;
  set z(_) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        typeParameters
          covariant E @17
            defaultType: dynamic
        fields
          x @26
            type: E
          y @33
            type: E
          z @40
            type: E
        constructors
          synthetic @-1
        accessors
          synthetic get x @26
            returnType: E
          synthetic set x @26
            parameters
              requiredPositional _x @26
                type: E
            returnType: void
          synthetic get y @33
            returnType: E
          synthetic set y @33
            parameters
              requiredPositional _y @33
                type: E
            returnType: void
          synthetic get z @40
            returnType: E
          synthetic set z @40
            parameters
              requiredPositional _z @40
                type: E
            returnType: void
      class B @51
        typeParameters
          covariant T @53
            defaultType: dynamic
        interfaces
          A<T>
        fields
          x @80
            type: T
          synthetic y @-1
            type: T
          synthetic z @-1
            type: T
        constructors
          synthetic @-1
        accessors
          synthetic get x @80
            returnType: T
          synthetic set x @80
            parameters
              requiredPositional _x @80
                type: T
            returnType: void
          get y @89
            returnType: T
          set z @106
            parameters
              requiredPositional _ @108
                type: T
            returnType: void
''');
  }

  test_instanceField_fromField_implicitDynamic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  var x;
}
class B implements A {
  var x = 1;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          x @25
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic get x @25
            returnType: dynamic
          synthetic set x @25
            parameters
              requiredPositional _x @25
                type: dynamic
            returnType: void
      class B @36
        interfaces
          A
        fields
          x @59
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic get x @59
            returnType: dynamic
          synthetic set x @59
            parameters
              requiredPositional _x @59
                type: dynamic
            returnType: void
''');
  }

  test_instanceField_fromField_narrowType() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  num x;
}
class B implements A {
  var x = 1;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          x @25
            type: num
        constructors
          synthetic @-1
        accessors
          synthetic get x @25
            returnType: num
          synthetic set x @25
            parameters
              requiredPositional _x @25
                type: num
            returnType: void
      class B @36
        interfaces
          A
        fields
          x @59
            type: num
        constructors
          synthetic @-1
        accessors
          synthetic get x @59
            returnType: num
          synthetic set x @59
            parameters
              requiredPositional _x @59
                type: num
            returnType: void
''');
  }

  test_instanceField_fromGetter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
  int get y;
  int get z;
}
class B implements A {
  var x;
  get y => null;
  set z(_) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
          synthetic y @-1
            type: int
          synthetic z @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
          abstract get y @42
            returnType: int
          abstract get z @55
            returnType: int
      class B @66
        interfaces
          A
        fields
          x @89
            type: int
          synthetic y @-1
            type: int
          synthetic z @-1
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @89
            returnType: int
          synthetic set x @89
            parameters
              requiredPositional _x @89
                type: int
            returnType: void
          get y @98
            returnType: int
          set z @115
            parameters
              requiredPositional _ @117
                type: int
            returnType: void
''');
  }

  test_instanceField_fromGetter_generic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A<E> {
  E get x;
  E get y;
  E get z;
}
class B<T> implements A<T> {
  var x;
  get y => null;
  set z(_) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        typeParameters
          covariant E @17
            defaultType: dynamic
        fields
          synthetic x @-1
            type: E
          synthetic y @-1
            type: E
          synthetic z @-1
            type: E
        constructors
          synthetic @-1
        accessors
          abstract get x @30
            returnType: E
          abstract get y @41
            returnType: E
          abstract get z @52
            returnType: E
      class B @63
        typeParameters
          covariant T @65
            defaultType: dynamic
        interfaces
          A<T>
        fields
          x @92
            type: T
          synthetic y @-1
            type: T
          synthetic z @-1
            type: T
        constructors
          synthetic @-1
        accessors
          synthetic get x @92
            returnType: T
          synthetic set x @92
            parameters
              requiredPositional _x @92
                type: T
            returnType: void
          get y @101
            returnType: T
          set z @118
            parameters
              requiredPositional _ @120
                type: T
            returnType: void
''');
  }

  test_instanceField_fromGetter_multiple_different() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  String get x;
}
class C implements A, B {
  get x => null;
}
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: String
        constructors
          synthetic @-1
        accessors
          abstract get x @66
            returnType: String
      class C @77
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: dynamic
        constructors
          synthetic @-1
        accessors
          get x @103
            returnType: dynamic
''');
  }

  test_instanceField_fromGetter_multiple_different_dynamic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  dynamic get x;
}
class C implements A, B {
  get x => null;
}
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: dynamic
        constructors
          synthetic @-1
        accessors
          abstract get x @67
            returnType: dynamic
      class C @78
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          get x @104
            returnType: int
''');
  }

  test_instanceField_fromGetter_multiple_different_generic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A<T> {
  T get x;
}
abstract class B<T> {
  T get x;
}
class C implements A<int>, B<String> {
  get x => null;
}
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        typeParameters
          covariant T @17
            defaultType: dynamic
        fields
          synthetic x @-1
            type: T
        constructors
          synthetic @-1
        accessors
          abstract get x @30
            returnType: T
      abstract class B @50
        typeParameters
          covariant T @52
            defaultType: dynamic
        fields
          synthetic x @-1
            type: T
        constructors
          synthetic @-1
        accessors
          abstract get x @65
            returnType: T
      class C @76
        interfaces
          A<int>
          B<String>
        fields
          synthetic x @-1
            type: dynamic
        constructors
          synthetic @-1
        accessors
          get x @115
            returnType: dynamic
''');
  }

  test_instanceField_fromGetter_multiple_same() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  int get x;
}
class C implements A, B {
  get x => null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @63
            returnType: int
      class C @74
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          get x @100
            returnType: int
''');
  }

  test_instanceField_fromGetterSetter_different_field() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
  int get y;
}
abstract class B {
  void set x(String _);
  void set y(String _);
}
class C implements A, B {
  var x;
  final y;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
          synthetic y @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
          abstract get y @42
            returnType: int
      abstract class B @62
        fields
          synthetic x @-1
            type: String
          synthetic y @-1
            type: String
        constructors
          synthetic @-1
        accessors
          abstract set x @77
            parameters
              requiredPositional _ @86
                type: String
            returnType: void
          abstract set y @101
            parameters
              requiredPositional _ @110
                type: String
            returnType: void
      class C @122
        interfaces
          A
          B
        fields
          x @148
            typeInferenceError: overrideConflictFieldType
            type: dynamic
          final y @159
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @148
            returnType: dynamic
          synthetic set x @148
            parameters
              requiredPositional _x @148
                type: dynamic
            returnType: void
          synthetic get y @159
            returnType: int
''');
  }

  test_instanceField_fromGetterSetter_different_getter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  void set x(String _);
}
class C implements A, B {
  get x => null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: String
        constructors
          synthetic @-1
        accessors
          abstract set x @64
            parameters
              requiredPositional _ @73
                type: String
            returnType: void
      class C @85
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          get x @111
            returnType: int
''');
  }

  test_instanceField_fromGetterSetter_different_setter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  void set x(String _);
}
class C implements A, B {
  set x(_);
}
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: String
        constructors
          synthetic @-1
        accessors
          abstract set x @64
            parameters
              requiredPositional _ @73
                type: String
            returnType: void
      class C @85
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: String
        constructors
          synthetic @-1
        accessors
          abstract set x @111
            parameters
              requiredPositional _ @113
                type: String
            returnType: void
''');
  }

  test_instanceField_fromGetterSetter_same_field() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  void set x(int _);
}
class C implements A, B {
  var x;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @64
            parameters
              requiredPositional _ @70
                type: int
            returnType: void
      class C @82
        interfaces
          A
          B
        fields
          x @108
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @108
            returnType: int
          synthetic set x @108
            parameters
              requiredPositional _x @108
                type: int
            returnType: void
''');
  }

  test_instanceField_fromGetterSetter_same_getter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  void set x(int _);
}
class C implements A, B {
  get x => null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @64
            parameters
              requiredPositional _ @70
                type: int
            returnType: void
      class C @82
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          get x @108
            returnType: int
''');
  }

  test_instanceField_fromGetterSetter_same_setter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int get x;
}
abstract class B {
  void set x(int _);
}
class C implements A, B {
  set x(_);
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: int
      abstract class B @49
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @64
            parameters
              requiredPositional _ @70
                type: int
            returnType: void
      class C @82
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @108
            parameters
              requiredPositional _ @110
                type: int
            returnType: void
''');
  }

  test_instanceField_fromSetter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  void set x(int _);
  void set y(int _);
  void set z(int _);
}
class B implements A {
  var x;
  get y => null;
  set z(_) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
          synthetic y @-1
            type: int
          synthetic z @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @30
            parameters
              requiredPositional _ @36
                type: int
            returnType: void
          abstract set y @51
            parameters
              requiredPositional _ @57
                type: int
            returnType: void
          abstract set z @72
            parameters
              requiredPositional _ @78
                type: int
            returnType: void
      class B @90
        interfaces
          A
        fields
          x @113
            type: int
          synthetic y @-1
            type: int
          synthetic z @-1
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @113
            returnType: int
          synthetic set x @113
            parameters
              requiredPositional _x @113
                type: int
            returnType: void
          get y @122
            returnType: int
          set z @139
            parameters
              requiredPositional _ @141
                type: int
            returnType: void
''');
  }

  test_instanceField_fromSetter_multiple_different() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  void set x(int _);
}
abstract class B {
  void set x(String _);
}
class C implements A, B {
  get x => null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @30
            parameters
              requiredPositional _ @36
                type: int
            returnType: void
      abstract class B @57
        fields
          synthetic x @-1
            type: String
        constructors
          synthetic @-1
        accessors
          abstract set x @72
            parameters
              requiredPositional _ @81
                type: String
            returnType: void
      class C @93
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: dynamic
        constructors
          synthetic @-1
        accessors
          get x @119
            returnType: dynamic
''');
  }

  test_instanceField_fromSetter_multiple_same() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  void set x(int _);
}
abstract class B {
  void set x(int _);
}
class C implements A, B {
  get x => null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @30
            parameters
              requiredPositional _ @36
                type: int
            returnType: void
      abstract class B @57
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          abstract set x @72
            parameters
              requiredPositional _ @78
                type: int
            returnType: void
      class C @90
        interfaces
          A
          B
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          get x @116
            returnType: int
''');
  }

  test_instanceField_functionTypeAlias_doesNotUseItsTypeParameter() async {
    var library = await _encodeDecodeLibrary(r'''
typedef F<T>();

class A<T> {
  F<T> get x => null;
  List<F<T>> get y => null;
}

class B extends A<int> {
  get x => null;
  get y => null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @23
        typeParameters
          covariant T @25
            defaultType: dynamic
        fields
          synthetic x @-1
            type: dynamic Function()
              aliasElement: self::@typeAlias::F
              aliasArguments
                T
          synthetic y @-1
            type: List<dynamic Function()>
        constructors
          synthetic @-1
        accessors
          get x @41
            returnType: dynamic Function()
              aliasElement: self::@typeAlias::F
              aliasArguments
                T
          get y @69
            returnType: List<dynamic Function()>
      class B @89
        supertype: A<int>
        fields
          synthetic x @-1
            type: dynamic Function()
              aliasElement: self::@typeAlias::F
              aliasArguments
                int
          synthetic y @-1
            type: List<dynamic Function()>
        constructors
          synthetic @-1
        accessors
          get x @114
            returnType: dynamic Function()
              aliasElement: self::@typeAlias::F
              aliasArguments
                int
          get y @131
            returnType: List<dynamic Function()>
    typeAliases
      functionTypeAliasBased F @8
        typeParameters
          unrelated T @10
            defaultType: dynamic
        aliasedType: dynamic Function()
        aliasedElement: GenericFunctionTypeElement
          returnType: dynamic
''');
  }

  test_instanceField_inheritsCovariant_fromSetter_field() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  num get x;
  void set x(covariant num _);
}
class B implements A {
  int x;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: num
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: num
          abstract set x @43
            parameters
              requiredPositional covariant _ @59
                type: num
            returnType: void
      class B @71
        interfaces
          A
        fields
          x @94
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get x @94
            returnType: int
          synthetic set x @94
            parameters
              requiredPositional covariant _x @94
                type: int
            returnType: void
''');
  }

  test_instanceField_inheritsCovariant_fromSetter_setter() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  num get x;
  void set x(covariant num _);
}
class B implements A {
  set x(int _) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        fields
          synthetic x @-1
            type: num
        constructors
          synthetic @-1
        accessors
          abstract get x @29
            returnType: num
          abstract set x @43
            parameters
              requiredPositional covariant _ @59
                type: num
            returnType: void
      class B @71
        interfaces
          A
        fields
          synthetic x @-1
            type: int
        constructors
          synthetic @-1
        accessors
          set x @94
            parameters
              requiredPositional covariant _ @100
                type: int
            returnType: void
''');
  }

  test_instanceField_initializer() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  var t1 = 1;
  var t2 = 2.0;
  var t3 = null;
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          t1 @16
            type: int
          t2 @30
            type: double
          t3 @46
            type: dynamic
        constructors
          synthetic @-1
        accessors
          synthetic get t1 @16
            returnType: int
          synthetic set t1 @16
            parameters
              requiredPositional _t1 @16
                type: int
            returnType: void
          synthetic get t2 @30
            returnType: double
          synthetic set t2 @30
            parameters
              requiredPositional _t2 @30
                type: double
            returnType: void
          synthetic get t3 @46
            returnType: dynamic
          synthetic set t3 @46
            parameters
              requiredPositional _t3 @46
                type: dynamic
            returnType: void
''');
  }

  test_method_error_hasMethod_noParameter_required() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  void m(int a) {}
}
class B extends A {
  void m(a, b) {}
}
''');
    // It's an error to add a new required parameter, but it is not a
    // top-level type inference error.
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @17
            parameters
              requiredPositional a @23
                type: int
            returnType: void
      class B @37
        supertype: A
        constructors
          synthetic @-1
        methods
          m @58
            parameters
              requiredPositional a @60
                type: int
              requiredPositional b @63
                type: dynamic
            returnType: void
''');
  }

  test_method_error_noCombinedSuperSignature1() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  void m(int a) {}
}
class B {
  void m(String a) {}
}
class C extends A implements B {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @17
            parameters
              requiredPositional a @23
                type: int
            returnType: void
      class B @37
        constructors
          synthetic @-1
        methods
          m @48
            parameters
              requiredPositional a @57
                type: String
            returnType: void
      class C @71
        supertype: A
        interfaces
          B
        constructors
          synthetic @-1
        methods
          m @100
            typeInferenceError: overrideNoCombinedSuperSignature
            parameters
              requiredPositional a @102
                type: dynamic
            returnType: dynamic
''');
  }

  test_method_error_noCombinedSuperSignature2() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  int foo(int x);
}

abstract class B {
  double foo(int x);
}

abstract class C implements A, B {
  Never foo(x);
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        constructors
          synthetic @-1
        methods
          abstract foo @25
            parameters
              requiredPositional x @33
                type: int
            returnType: int
      abstract class B @55
        constructors
          synthetic @-1
        methods
          abstract foo @68
            parameters
              requiredPositional x @76
                type: int
            returnType: double
      abstract class C @98
        interfaces
          A
          B
        constructors
          synthetic @-1
        methods
          abstract foo @126
            typeInferenceError: overrideNoCombinedSuperSignature
            parameters
              requiredPositional x @130
                type: dynamic
            returnType: Never
''');
  }

  test_method_error_noCombinedSuperSignature2_legacy() async {
    var library = await _encodeDecodeLibrary(r'''
// @dart = 2.9
abstract class A {
  int foo(int x);
}

abstract class B {
  double foo(int x);
}

abstract class C implements A, B {
  Never foo(x);
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @30
        constructors
          synthetic @-1
        methods
          abstract foo @40
            parameters
              requiredPositional x @48
                type: int*
            returnType: int*
      abstract class B @70
        constructors
          synthetic @-1
        methods
          abstract foo @83
            parameters
              requiredPositional x @91
                type: int*
            returnType: double*
      abstract class C @113
        interfaces
          A*
          B*
        constructors
          synthetic @-1
        methods
          abstract foo @141
            typeInferenceError: overrideNoCombinedSuperSignature
            parameters
              requiredPositional x @145
                type: dynamic
            returnType: Null*
''');
  }

  test_method_error_noCombinedSuperSignature3() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int m() {}
}
class B {
  String m() {}
}
class C extends A implements B {
  m() {}
}
''');
    // TODO(scheglov) test for inference failure error
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @16
            returnType: int
      class B @31
        constructors
          synthetic @-1
        methods
          m @44
            returnType: String
      class C @59
        supertype: A
        interfaces
          B
        constructors
          synthetic @-1
        methods
          m @88
            typeInferenceError: overrideNoCombinedSuperSignature
            returnType: dynamic
''');
  }

  test_method_error_noCombinedSuperSignature_generic1() async {
    var library = await _encodeDecodeLibrary(r'''
class A<T> {
  void m(T a) {}
}
class B<E> {
  void m(E a) {}
}
class C extends A<int> implements B<double> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        typeParameters
          covariant T @8
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @20
            parameters
              requiredPositional a @24
                type: T
            returnType: void
      class B @38
        typeParameters
          covariant E @40
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @52
            parameters
              requiredPositional a @56
                type: E
            returnType: void
      class C @70
        supertype: A<int>
        interfaces
          B<double>
        constructors
          synthetic @-1
        methods
          m @112
            typeInferenceError: overrideNoCombinedSuperSignature
            parameters
              requiredPositional a @114
                type: dynamic
            returnType: dynamic
''');
  }

  test_method_error_noCombinedSuperSignature_generic2() async {
    var library = await _encodeDecodeLibrary(r'''
class A<K, V> {
  V m(K a) {}
}
class B<T> {
  T m(int a) {}
}
class C extends A<int, String> implements B<double> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        typeParameters
          covariant K @8
            defaultType: dynamic
          covariant V @11
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @20
            parameters
              requiredPositional a @24
                type: K
            returnType: V
      class B @38
        typeParameters
          covariant T @40
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @49
            parameters
              requiredPositional a @55
                type: int
            returnType: T
      class C @69
        supertype: A<int, String>
        interfaces
          B<double>
        constructors
          synthetic @-1
        methods
          m @119
            typeInferenceError: overrideNoCombinedSuperSignature
            parameters
              requiredPositional a @121
                type: dynamic
            returnType: dynamic
''');
  }

  test_method_missing_hasMethod_noParameter_named() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  void m(int a) {}
}
class B extends A {
  m(a, {b}) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @17
            parameters
              requiredPositional a @23
                type: int
            returnType: void
      class B @37
        supertype: A
        constructors
          synthetic @-1
        methods
          m @53
            parameters
              requiredPositional a @55
                type: int
              optionalNamed b @59
                type: dynamic
            returnType: void
''');
  }

  test_method_missing_hasMethod_noParameter_optional() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  void m(int a) {}
}
class B extends A {
  m(a, [b]) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @17
            parameters
              requiredPositional a @23
                type: int
            returnType: void
      class B @37
        supertype: A
        constructors
          synthetic @-1
        methods
          m @53
            parameters
              requiredPositional a @55
                type: int
              optionalPositional b @59
                type: dynamic
            returnType: void
''');
  }

  test_method_missing_hasMethod_withoutTypes() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  m(a) {}
}
class B extends A {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @12
            parameters
              requiredPositional a @14
                type: dynamic
            returnType: dynamic
      class B @28
        supertype: A
        constructors
          synthetic @-1
        methods
          m @44
            parameters
              requiredPositional a @46
                type: dynamic
            returnType: dynamic
''');
  }

  test_method_missing_noMember() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int foo(String a) => null;
}
class B extends A {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          foo @16
            parameters
              requiredPositional a @27
                type: String
            returnType: int
      class B @47
        supertype: A
        constructors
          synthetic @-1
        methods
          m @63
            parameters
              requiredPositional a @65
                type: dynamic
            returnType: dynamic
''');
  }

  test_method_missing_notMethod() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  int m = 42;
}
class B extends A {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        fields
          m @16
            type: int
        constructors
          synthetic @-1
        accessors
          synthetic get m @16
            returnType: int
          synthetic set m @16
            parameters
              requiredPositional _m @16
                type: int
            returnType: void
      class B @32
        supertype: A
        constructors
          synthetic @-1
        methods
          m @48
            parameters
              requiredPositional a @50
                type: dynamic
            returnType: dynamic
''');
  }

  test_method_OK_sequence_extendsExtends_generic() async {
    var library = await _encodeDecodeLibrary(r'''
class A<K, V> {
  V m(K a) {}
}
class B<T> extends A<int, T> {}
class C extends B<String> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        typeParameters
          covariant K @8
            defaultType: dynamic
          covariant V @11
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @20
            parameters
              requiredPositional a @24
                type: K
            returnType: V
      class B @38
        typeParameters
          covariant T @40
            defaultType: dynamic
        supertype: A<int, T>
        constructors
          synthetic @-1
      class C @70
        supertype: B<String>
        constructors
          synthetic @-1
        methods
          m @94
            parameters
              requiredPositional a @96
                type: int
            returnType: String
''');
  }

  test_method_OK_sequence_inferMiddle_extendsExtends() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a) {}
}
class B extends A {
  m(a) {}
}
class C extends B {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
            returnType: String
      class B @39
        supertype: A
        constructors
          synthetic @-1
        methods
          m @55
            parameters
              requiredPositional a @57
                type: int
            returnType: String
      class C @71
        supertype: B
        constructors
          synthetic @-1
        methods
          m @87
            parameters
              requiredPositional a @89
                type: int
            returnType: String
''');
  }

  test_method_OK_sequence_inferMiddle_extendsImplements() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a) {}
}
class B implements A {
  m(a) {}
}
class C extends B {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
            returnType: String
      class B @39
        interfaces
          A
        constructors
          synthetic @-1
        methods
          m @58
            parameters
              requiredPositional a @60
                type: int
            returnType: String
      class C @74
        supertype: B
        constructors
          synthetic @-1
        methods
          m @90
            parameters
              requiredPositional a @92
                type: int
            returnType: String
''');
  }

  test_method_OK_sequence_inferMiddle_extendsWith() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a) {}
}
class B extends Object with A {
  m(a) {}
}
class C extends B {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
            returnType: String
      class B @39
        supertype: Object
        mixins
          A
        constructors
          synthetic @-1
        methods
          m @67
            parameters
              requiredPositional a @69
                type: int
            returnType: String
      class C @83
        supertype: B
        constructors
          synthetic @-1
        methods
          m @99
            parameters
              requiredPositional a @101
                type: int
            returnType: String
''');
  }

  test_method_OK_single_extends_direct_generic() async {
    var library = await _encodeDecodeLibrary(r'''
class A<K, V> {
  V m(K a, double b) {}
}
class B extends A<int, String> {
  m(a, b) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        typeParameters
          covariant K @8
            defaultType: dynamic
          covariant V @11
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @20
            parameters
              requiredPositional a @24
                type: K
              requiredPositional b @34
                type: double
            returnType: V
      class B @48
        supertype: A<int, String>
        constructors
          synthetic @-1
        methods
          m @77
            parameters
              requiredPositional a @79
                type: int
              requiredPositional b @82
                type: double
            returnType: String
''');
  }

  test_method_OK_single_extends_direct_notGeneric() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a) {}
}
class B extends A {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
            returnType: String
      class B @39
        supertype: A
        constructors
          synthetic @-1
        methods
          m @55
            parameters
              requiredPositional a @57
                type: int
            returnType: String
''');
  }

  test_method_OK_single_extends_direct_notGeneric_named() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a, {double b}) {}
}
class B extends A {
  m(a, {b}) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
              optionalNamed b @36
                type: double
            returnType: String
      class B @51
        supertype: A
        constructors
          synthetic @-1
        methods
          m @67
            parameters
              requiredPositional a @69
                type: int
              optionalNamed b @73
                type: double
            returnType: String
''');
  }

  test_method_OK_single_extends_direct_notGeneric_positional() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a, [double b]) {}
}
class B extends A {
  m(a, [b]) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
              optionalPositional b @36
                type: double
            returnType: String
      class B @51
        supertype: A
        constructors
          synthetic @-1
        methods
          m @67
            parameters
              requiredPositional a @69
                type: int
              optionalPositional b @73
                type: double
            returnType: String
''');
  }

  test_method_OK_single_extends_indirect_generic() async {
    var library = await _encodeDecodeLibrary(r'''
class A<K, V> {
  V m(K a) {}
}
class B<T> extends A<int, T> {}
class C extends B<String> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        typeParameters
          covariant K @8
            defaultType: dynamic
          covariant V @11
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @20
            parameters
              requiredPositional a @24
                type: K
            returnType: V
      class B @38
        typeParameters
          covariant T @40
            defaultType: dynamic
        supertype: A<int, T>
        constructors
          synthetic @-1
      class C @70
        supertype: B<String>
        constructors
          synthetic @-1
        methods
          m @94
            parameters
              requiredPositional a @96
                type: int
            returnType: String
''');
  }

  test_method_OK_single_implements_direct_generic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A<K, V> {
  V m(K a);
}
class B implements A<int, String> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        typeParameters
          covariant K @17
            defaultType: dynamic
          covariant V @20
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          abstract m @29
            parameters
              requiredPositional a @33
                type: K
            returnType: V
      class B @45
        interfaces
          A<int, String>
        constructors
          synthetic @-1
        methods
          m @77
            parameters
              requiredPositional a @79
                type: int
            returnType: String
''');
  }

  test_method_OK_single_implements_direct_notGeneric() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A {
  String m(int a);
}
class B implements A {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        constructors
          synthetic @-1
        methods
          abstract m @28
            parameters
              requiredPositional a @34
                type: int
            returnType: String
      class B @46
        interfaces
          A
        constructors
          synthetic @-1
        methods
          m @65
            parameters
              requiredPositional a @67
                type: int
            returnType: String
''');
  }

  test_method_OK_single_implements_indirect_generic() async {
    var library = await _encodeDecodeLibrary(r'''
abstract class A<K, V> {
  V m(K a);
}
abstract class B<T1, T2> extends A<T2, T1> {}
class C implements B<int, String> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      abstract class A @15
        typeParameters
          covariant K @17
            defaultType: dynamic
          covariant V @20
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          abstract m @29
            parameters
              requiredPositional a @33
                type: K
            returnType: V
      abstract class B @54
        typeParameters
          covariant T1 @56
            defaultType: dynamic
          covariant T2 @60
            defaultType: dynamic
        supertype: A<T2, T1>
        constructors
          synthetic @-1
      class C @91
        interfaces
          B<int, String>
        constructors
          synthetic @-1
        methods
          m @123
            parameters
              requiredPositional a @125
                type: String
            returnType: int
''');
  }

  test_method_OK_single_private_linkThroughOtherLibraryOfCycle() async {
    newFile('$testPackageLibPath/other.dart', content: r'''
import 'test.dart';
class B extends A2 {}
''');
    var library = await _encodeDecodeLibrary(r'''
import 'other.dart';
class A1 {
  int _foo() => 1;
}
class A2 extends A1 {
  _foo() => 2;
}
''');
    checkElementText(library, r'''
library
  imports
    package:test/other.dart
  definingUnit
    classes
      class A1 @27
        constructors
          synthetic @-1
        methods
          _foo @38
            returnType: int
      class A2 @59
        supertype: A1
        constructors
          synthetic @-1
        methods
          _foo @77
            returnType: int
''');
  }

  test_method_OK_single_withExtends_notGeneric() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a) {}
}
class B extends Object with A {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
            returnType: String
      class B @39
        supertype: Object
        mixins
          A
        constructors
          synthetic @-1
        methods
          m @67
            parameters
              requiredPositional a @69
                type: int
            returnType: String
''');
  }

  test_method_OK_two_extendsImplements_generic() async {
    var library = await _encodeDecodeLibrary(r'''
class A<K, V> {
  V m(K a) {}
}
class B<T> {
  T m(int a) {}
}
class C extends A<int, String> implements B<String> {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        typeParameters
          covariant K @8
            defaultType: dynamic
          covariant V @11
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @20
            parameters
              requiredPositional a @24
                type: K
            returnType: V
      class B @38
        typeParameters
          covariant T @40
            defaultType: dynamic
        constructors
          synthetic @-1
        methods
          m @49
            parameters
              requiredPositional a @55
                type: int
            returnType: T
      class C @69
        supertype: A<int, String>
        interfaces
          B<String>
        constructors
          synthetic @-1
        methods
          m @119
            parameters
              requiredPositional a @121
                type: int
            returnType: String
''');
  }

  test_method_OK_two_extendsImplements_notGeneric() async {
    var library = await _encodeDecodeLibrary(r'''
class A {
  String m(int a) {}
}
class B {
  String m(int a) {}
}
class C extends A implements B {
  m(a) {}
}
''');
    checkElementText(library, r'''
library
  definingUnit
    classes
      class A @6
        constructors
          synthetic @-1
        methods
          m @19
            parameters
              requiredPositional a @25
                type: int
            returnType: String
      class B @39
        constructors
          synthetic @-1
        methods
          m @52
            parameters
              requiredPositional a @58
                type: int
            returnType: String
      class C @72
        supertype: A
        interfaces
          B
        constructors
          synthetic @-1
        methods
          m @101
            parameters
              requiredPositional a @103
                type: int
            returnType: String
''');
  }

  Future<LibraryElement> _encodeDecodeLibrary(String text) async {
    newFile(testFilePath, content: text);

    var path = convertPath(testFilePath);
    var analysisSession = contextFor(path).currentSession;
    var result = await analysisSession.getUnitElement2(path);
    result as UnitElementResult;
    return result.element.library;
  }
}
