| // 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, |
| contextMessages: [message('/home/test/lib/test.dart', 64, 3)]), |
| error(CompileTimeErrorCode.INVALID_OVERRIDE, 109, 3, |
| contextMessages: [message('/home/test/lib/test.dart', 25, 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 @-1 |
| returnType: int |
| synthetic static set vPlusIntInt @-1 |
| parameters |
| requiredPositional _vPlusIntInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vPlusIntDouble @-1 |
| returnType: double |
| synthetic static set vPlusIntDouble @-1 |
| parameters |
| requiredPositional _vPlusIntDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vPlusDoubleInt @-1 |
| returnType: double |
| synthetic static set vPlusDoubleInt @-1 |
| parameters |
| requiredPositional _vPlusDoubleInt @-1 |
| type: double |
| returnType: void |
| synthetic static get vPlusDoubleDouble @-1 |
| returnType: double |
| synthetic static set vPlusDoubleDouble @-1 |
| parameters |
| requiredPositional _vPlusDoubleDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vMinusIntInt @-1 |
| returnType: int |
| synthetic static set vMinusIntInt @-1 |
| parameters |
| requiredPositional _vMinusIntInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vMinusIntDouble @-1 |
| returnType: double |
| synthetic static set vMinusIntDouble @-1 |
| parameters |
| requiredPositional _vMinusIntDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vMinusDoubleInt @-1 |
| returnType: double |
| synthetic static set vMinusDoubleInt @-1 |
| parameters |
| requiredPositional _vMinusDoubleInt @-1 |
| type: double |
| returnType: void |
| synthetic static get vMinusDoubleDouble @-1 |
| returnType: double |
| synthetic static set vMinusDoubleDouble @-1 |
| parameters |
| requiredPositional _vMinusDoubleDouble @-1 |
| 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 @-1 |
| returnType: num |
| synthetic static set V @-1 |
| parameters |
| requiredPositional _V @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: int |
| returnType: void |
| synthetic static get t1 @-1 |
| returnType: int |
| synthetic static set t1 @-1 |
| parameters |
| requiredPositional _t1 @-1 |
| type: int |
| returnType: void |
| synthetic static get t2 @-1 |
| returnType: int |
| synthetic static set t2 @-1 |
| parameters |
| requiredPositional _t2 @-1 |
| 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 @-1 |
| returnType: List<int> |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: List<int> |
| returnType: void |
| synthetic static get t1 @-1 |
| returnType: int |
| synthetic static set t1 @-1 |
| parameters |
| requiredPositional _t1 @-1 |
| type: int |
| returnType: void |
| synthetic static get t2 @-1 |
| returnType: int |
| synthetic static set t2 @-1 |
| parameters |
| requiredPositional _t2 @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| 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 @-1 |
| returnType: A |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: A |
| returnType: void |
| synthetic static get t1 @-1 |
| returnType: int |
| synthetic static set t1 @-1 |
| parameters |
| requiredPositional _t1 @-1 |
| type: int |
| returnType: void |
| synthetic static get t2 @-1 |
| returnType: int |
| synthetic static set t2 @-1 |
| parameters |
| requiredPositional _t2 @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| 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 @-1 |
| returnType: C |
| synthetic static set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| type: C |
| returnType: void |
| synthetic static get t1 @-1 |
| returnType: int |
| synthetic static set t1 @-1 |
| parameters |
| requiredPositional _t1 @-1 |
| type: int |
| returnType: void |
| synthetic static get t2 @-1 |
| returnType: int |
| synthetic static set t2 @-1 |
| parameters |
| requiredPositional _t2 @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set t1 @-1 |
| parameters |
| requiredPositional _t1 @-1 |
| type: int |
| returnType: void |
| synthetic static get t2 @-1 |
| returnType: int |
| synthetic static set t2 @-1 |
| parameters |
| requiredPositional _t2 @-1 |
| 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 @-1 |
| returnType: Future<int> Function() |
| synthetic static set uValue @-1 |
| parameters |
| requiredPositional _uValue @-1 |
| type: Future<int> Function() |
| returnType: void |
| synthetic static get uFuture @-1 |
| returnType: Future<int> Function() |
| synthetic static set uFuture @-1 |
| parameters |
| requiredPositional _uFuture @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set vBitXor @-1 |
| parameters |
| requiredPositional _vBitXor @-1 |
| type: int |
| returnType: void |
| synthetic static get vBitAnd @-1 |
| returnType: int |
| synthetic static set vBitAnd @-1 |
| parameters |
| requiredPositional _vBitAnd @-1 |
| type: int |
| returnType: void |
| synthetic static get vBitOr @-1 |
| returnType: int |
| synthetic static set vBitOr @-1 |
| parameters |
| requiredPositional _vBitOr @-1 |
| type: int |
| returnType: void |
| synthetic static get vBitShiftLeft @-1 |
| returnType: int |
| synthetic static set vBitShiftLeft @-1 |
| parameters |
| requiredPositional _vBitShiftLeft @-1 |
| type: int |
| returnType: void |
| synthetic static get vBitShiftRight @-1 |
| returnType: int |
| synthetic static set vBitShiftRight @-1 |
| parameters |
| requiredPositional _vBitShiftRight @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| 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 @-1 |
| returnType: A |
| synthetic static set vSetField @-1 |
| parameters |
| requiredPositional _vSetField @-1 |
| type: A |
| returnType: void |
| synthetic static get vInvokeMethod @-1 |
| returnType: A |
| synthetic static set vInvokeMethod @-1 |
| parameters |
| requiredPositional _vInvokeMethod @-1 |
| type: A |
| returnType: void |
| synthetic static get vBoth @-1 |
| returnType: A |
| synthetic static set vBoth @-1 |
| parameters |
| requiredPositional _vBoth @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| type: int |
| returnType: void |
| class B @31 |
| fields |
| a @39 |
| type: A |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic get a @-1 |
| returnType: A |
| synthetic set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: A |
| returnType: void |
| class C @50 |
| fields |
| b @58 |
| type: B |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic get b @-1 |
| returnType: B |
| synthetic set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| 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 @-1 |
| returnType: A |
| synthetic set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: A |
| returnType: void |
| synthetic get b @-1 |
| returnType: B |
| synthetic set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: B |
| returnType: void |
| synthetic get c @-1 |
| returnType: C |
| synthetic set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| type: C |
| returnType: void |
| synthetic get t01 @-1 |
| returnType: int |
| synthetic set t01 @-1 |
| parameters |
| requiredPositional _t01 @-1 |
| type: int |
| returnType: void |
| synthetic get t02 @-1 |
| returnType: int |
| synthetic set t02 @-1 |
| parameters |
| requiredPositional _t02 @-1 |
| type: int |
| returnType: void |
| synthetic get t03 @-1 |
| returnType: int |
| synthetic set t03 @-1 |
| parameters |
| requiredPositional _t03 @-1 |
| type: int |
| returnType: void |
| synthetic get t11 @-1 |
| returnType: int |
| synthetic set t11 @-1 |
| parameters |
| requiredPositional _t11 @-1 |
| type: int |
| returnType: void |
| synthetic get t12 @-1 |
| returnType: int |
| synthetic set t12 @-1 |
| parameters |
| requiredPositional _t12 @-1 |
| type: int |
| returnType: void |
| synthetic get t13 @-1 |
| returnType: int |
| synthetic set t13 @-1 |
| parameters |
| requiredPositional _t13 @-1 |
| type: int |
| returnType: void |
| synthetic get t21 @-1 |
| returnType: int |
| synthetic set t21 @-1 |
| parameters |
| requiredPositional _t21 @-1 |
| type: int |
| returnType: void |
| synthetic get t22 @-1 |
| returnType: int |
| synthetic set t22 @-1 |
| parameters |
| requiredPositional _t22 @-1 |
| type: int |
| returnType: void |
| synthetic get t23 @-1 |
| returnType: int |
| synthetic set t23 @-1 |
| parameters |
| requiredPositional _t23 @-1 |
| 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 @-1 |
| returnType: num |
| synthetic static set V @-1 |
| parameters |
| requiredPositional _V @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic static set vEq @-1 |
| parameters |
| requiredPositional _vEq @-1 |
| type: bool |
| returnType: void |
| synthetic static get vNotEq @-1 |
| returnType: bool |
| synthetic static set vNotEq @-1 |
| parameters |
| requiredPositional _vNotEq @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: dynamic |
| returnType: void |
| synthetic static get b @-1 |
| returnType: dynamic |
| synthetic static set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| 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 @-1 |
| returnType: List<num> |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: List<num> |
| returnType: void |
| synthetic static get b0 @-1 |
| returnType: num |
| synthetic static set b0 @-1 |
| parameters |
| requiredPositional _b0 @-1 |
| type: num |
| returnType: void |
| synthetic static get b1 @-1 |
| returnType: num |
| synthetic static set b1 @-1 |
| parameters |
| requiredPositional _b1 @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| type: int |
| returnType: void |
| topLevelVariables |
| static x @29 |
| type: int |
| accessors |
| synthetic static get x @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| type: int |
| returnType: void |
| topLevelVariables |
| static x @29 |
| type: int |
| accessors |
| synthetic static get x @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| type: int |
| returnType: void |
| class B @27 |
| fields |
| static t @44 |
| type: int |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic static get t @-1 |
| returnType: int |
| synthetic static set t @-1 |
| parameters |
| requiredPositional _t @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: bool |
| returnType: void |
| topLevelVariables |
| static c @24 |
| type: C |
| static x @31 |
| type: bool |
| accessors |
| synthetic static get c @-1 |
| returnType: C |
| synthetic static set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| type: C |
| returnType: void |
| synthetic static get x @-1 |
| returnType: bool |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| 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 @-1 |
| returnType: C |
| synthetic static set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| type: C |
| returnType: void |
| synthetic static get x @-1 |
| returnType: bool |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: bool |
| returnType: void |
| abstract class C @37 |
| interfaces |
| I |
| constructors |
| synthetic @-1 |
| topLevelVariables |
| static x @74 |
| type: bool |
| accessors |
| synthetic static get x @-1 |
| returnType: bool |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| methods |
| foo @52 |
| returnType: int |
| topLevelVariables |
| static x @70 |
| type: int |
| static y @89 |
| type: int |
| accessors |
| synthetic static get x @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: int |
| returnType: void |
| synthetic static get y @-1 |
| returnType: int |
| synthetic static set y @-1 |
| parameters |
| requiredPositional _y @-1 |
| 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 @-1 |
| returnType: Future<int> |
| synthetic static set vFuture @-1 |
| parameters |
| requiredPositional _vFuture @-1 |
| type: Future<int> |
| returnType: void |
| synthetic static get v_noParameters_inferredReturnType @-1 |
| returnType: int Function() |
| synthetic static set v_noParameters_inferredReturnType @-1 |
| parameters |
| requiredPositional _v_noParameters_inferredReturnType @-1 |
| type: int Function() |
| returnType: void |
| synthetic static get v_hasParameter_withType_inferredReturnType @-1 |
| returnType: int Function(String) |
| synthetic static set v_hasParameter_withType_inferredReturnType @-1 |
| parameters |
| requiredPositional _v_hasParameter_withType_inferredReturnType @-1 |
| type: int Function(String) |
| returnType: void |
| synthetic static get v_hasParameter_withType_returnParameter @-1 |
| returnType: String Function(String) |
| synthetic static set v_hasParameter_withType_returnParameter @-1 |
| parameters |
| requiredPositional _v_hasParameter_withType_returnParameter @-1 |
| type: String Function(String) |
| returnType: void |
| synthetic static get v_async_returnValue @-1 |
| returnType: Future<int> Function() |
| synthetic static set v_async_returnValue @-1 |
| parameters |
| requiredPositional _v_async_returnValue @-1 |
| type: Future<int> Function() |
| returnType: void |
| synthetic static get v_async_returnFuture @-1 |
| returnType: Future<int> Function() |
| synthetic static set v_async_returnFuture @-1 |
| parameters |
| requiredPositional _v_async_returnFuture @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set v @-1 |
| parameters |
| requiredPositional _v @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set vHasTypeArgument @-1 |
| parameters |
| requiredPositional _vHasTypeArgument @-1 |
| type: int |
| returnType: void |
| synthetic static get vNoTypeArgument @-1 |
| returnType: dynamic |
| synthetic static set vNoTypeArgument @-1 |
| parameters |
| requiredPositional _vNoTypeArgument @-1 |
| 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 @-1 |
| returnType: String |
| synthetic static set vOkArgumentType @-1 |
| parameters |
| requiredPositional _vOkArgumentType @-1 |
| type: String |
| returnType: void |
| synthetic static get vWrongArgumentType @-1 |
| returnType: String |
| synthetic static set vWrongArgumentType @-1 |
| parameters |
| requiredPositional _vWrongArgumentType @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set staticClassVariable @-1 |
| parameters |
| requiredPositional _staticClassVariable @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set topLevelVariable @-1 |
| parameters |
| requiredPositional _topLevelVariable @-1 |
| type: int |
| returnType: void |
| synthetic static get r_topLevelFunction @-1 |
| returnType: String Function(int) |
| synthetic static set r_topLevelFunction @-1 |
| parameters |
| requiredPositional _r_topLevelFunction @-1 |
| type: String Function(int) |
| returnType: void |
| synthetic static get r_topLevelVariable @-1 |
| returnType: int |
| synthetic static set r_topLevelVariable @-1 |
| parameters |
| requiredPositional _r_topLevelVariable @-1 |
| type: int |
| returnType: void |
| synthetic static get r_topLevelGetter @-1 |
| returnType: int |
| synthetic static set r_topLevelGetter @-1 |
| parameters |
| requiredPositional _r_topLevelGetter @-1 |
| type: int |
| returnType: void |
| synthetic static get r_staticClassVariable @-1 |
| returnType: int |
| synthetic static set r_staticClassVariable @-1 |
| parameters |
| requiredPositional _r_staticClassVariable @-1 |
| type: int |
| returnType: void |
| synthetic static get r_staticGetter @-1 |
| returnType: int |
| synthetic static set r_staticGetter @-1 |
| parameters |
| requiredPositional _r_staticGetter @-1 |
| type: int |
| returnType: void |
| synthetic static get r_staticClassMethod @-1 |
| returnType: String Function(int) |
| synthetic static set r_staticClassMethod @-1 |
| parameters |
| requiredPositional _r_staticClassMethod @-1 |
| type: String Function(int) |
| returnType: void |
| synthetic static get instanceOfA @-1 |
| returnType: A |
| synthetic static set instanceOfA @-1 |
| parameters |
| requiredPositional _instanceOfA @-1 |
| type: A |
| returnType: void |
| synthetic static get r_instanceClassMethod @-1 |
| returnType: String Function(int) |
| synthetic static set r_instanceClassMethod @-1 |
| parameters |
| requiredPositional _r_instanceClassMethod @-1 |
| type: String Function(int) |
| returnType: void |
| static 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 @-1 |
| returnType: dynamic |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: dynamic |
| returnType: void |
| class B @40 |
| fields |
| static b @57 |
| typeInferenceError: dependencyCycle |
| type: dynamic |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic static get b @-1 |
| returnType: dynamic |
| synthetic static set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: dynamic |
| returnType: void |
| topLevelVariables |
| static c @72 |
| type: dynamic |
| accessors |
| synthetic static get c @-1 |
| returnType: dynamic |
| synthetic static set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: dynamic |
| returnType: void |
| topLevelVariables |
| static b @36 |
| typeInferenceError: dependencyCycle |
| type: dynamic |
| static c @49 |
| type: dynamic |
| accessors |
| synthetic static get b @-1 |
| returnType: dynamic |
| synthetic static set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: dynamic |
| returnType: void |
| synthetic static get c @-1 |
| returnType: dynamic |
| synthetic static set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: dynamic |
| returnType: void |
| synthetic static get b @-1 |
| returnType: dynamic |
| synthetic static set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: dynamic |
| returnType: void |
| synthetic static get c @-1 |
| returnType: dynamic |
| synthetic static set c @-1 |
| parameters |
| requiredPositional _c @-1 |
| type: dynamic |
| returnType: void |
| synthetic static get d @-1 |
| returnType: dynamic |
| synthetic static set d @-1 |
| parameters |
| requiredPositional _d @-1 |
| 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 @-1 |
| returnType: A |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| 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 @-1 |
| returnType: String |
| synthetic static set s @-1 |
| parameters |
| requiredPositional _s @-1 |
| type: String |
| returnType: void |
| synthetic static get h @-1 |
| returnType: int |
| synthetic static set h @-1 |
| parameters |
| requiredPositional _h @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic static set d @-1 |
| parameters |
| requiredPositional _d @-1 |
| type: dynamic |
| returnType: void |
| synthetic static get s @-1 |
| returnType: String |
| synthetic static set s @-1 |
| parameters |
| requiredPositional _s @-1 |
| type: String |
| returnType: void |
| synthetic static get h @-1 |
| returnType: int |
| synthetic static set h @-1 |
| parameters |
| requiredPositional _h @-1 |
| 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 @-1 |
| returnType: double |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: double |
| returnType: void |
| synthetic static get b @-1 |
| returnType: bool |
| synthetic static set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| 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 @-1 |
| returnType: List<Object> |
| synthetic static set vObject @-1 |
| parameters |
| requiredPositional _vObject @-1 |
| type: List<Object> |
| returnType: void |
| synthetic static get vNum @-1 |
| returnType: List<num> |
| synthetic static set vNum @-1 |
| parameters |
| requiredPositional _vNum @-1 |
| type: List<num> |
| returnType: void |
| synthetic static get vNumEmpty @-1 |
| returnType: List<num> |
| synthetic static set vNumEmpty @-1 |
| parameters |
| requiredPositional _vNumEmpty @-1 |
| type: List<num> |
| returnType: void |
| synthetic static get vInt @-1 |
| returnType: List<int> |
| synthetic static set vInt @-1 |
| parameters |
| requiredPositional _vInt @-1 |
| 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 @-1 |
| returnType: List<int> |
| synthetic static set vInt @-1 |
| parameters |
| requiredPositional _vInt @-1 |
| type: List<int> |
| returnType: void |
| synthetic static get vNum @-1 |
| returnType: List<num> |
| synthetic static set vNum @-1 |
| parameters |
| requiredPositional _vNum @-1 |
| type: List<num> |
| returnType: void |
| synthetic static get vObject @-1 |
| returnType: List<Object> |
| synthetic static set vObject @-1 |
| parameters |
| requiredPositional _vObject @-1 |
| 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 @-1 |
| returnType: Map<Object, Object> |
| synthetic static set vObjectObject @-1 |
| parameters |
| requiredPositional _vObjectObject @-1 |
| type: Map<Object, Object> |
| returnType: void |
| synthetic static get vComparableObject @-1 |
| returnType: Map<Comparable<int>, Object> |
| synthetic static set vComparableObject @-1 |
| parameters |
| requiredPositional _vComparableObject @-1 |
| type: Map<Comparable<int>, Object> |
| returnType: void |
| synthetic static get vNumString @-1 |
| returnType: Map<num, String> |
| synthetic static set vNumString @-1 |
| parameters |
| requiredPositional _vNumString @-1 |
| type: Map<num, String> |
| returnType: void |
| synthetic static get vNumStringEmpty @-1 |
| returnType: Map<num, String> |
| synthetic static set vNumStringEmpty @-1 |
| parameters |
| requiredPositional _vNumStringEmpty @-1 |
| type: Map<num, String> |
| returnType: void |
| synthetic static get vIntString @-1 |
| returnType: Map<int, String> |
| synthetic static set vIntString @-1 |
| parameters |
| requiredPositional _vIntString @-1 |
| 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 @-1 |
| returnType: Map<int, String> |
| synthetic static set vIntString @-1 |
| parameters |
| requiredPositional _vIntString @-1 |
| type: Map<int, String> |
| returnType: void |
| synthetic static get vNumString @-1 |
| returnType: Map<num, String> |
| synthetic static set vNumString @-1 |
| parameters |
| requiredPositional _vNumString @-1 |
| type: Map<num, String> |
| returnType: void |
| synthetic static get vIntObject @-1 |
| returnType: Map<int, Object> |
| synthetic static set vIntObject @-1 |
| parameters |
| requiredPositional _vIntObject @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: bool |
| returnType: void |
| synthetic static get b @-1 |
| returnType: bool |
| synthetic static set b @-1 |
| parameters |
| requiredPositional _b @-1 |
| type: bool |
| returnType: void |
| synthetic static get vEq @-1 |
| returnType: bool |
| synthetic static set vEq @-1 |
| parameters |
| requiredPositional _vEq @-1 |
| type: bool |
| returnType: void |
| synthetic static get vAnd @-1 |
| returnType: bool |
| synthetic static set vAnd @-1 |
| parameters |
| requiredPositional _vAnd @-1 |
| type: bool |
| returnType: void |
| synthetic static get vOr @-1 |
| returnType: bool |
| synthetic static set vOr @-1 |
| parameters |
| requiredPositional _vOr @-1 |
| 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 @-1 |
| returnType: A |
| synthetic static set instanceOfA @-1 |
| parameters |
| requiredPositional _instanceOfA @-1 |
| type: A |
| returnType: void |
| synthetic static get v1 @-1 |
| returnType: String |
| synthetic static set v1 @-1 |
| parameters |
| requiredPositional _v1 @-1 |
| type: String |
| returnType: void |
| synthetic static get v2 @-1 |
| returnType: String |
| synthetic static set v2 @-1 |
| parameters |
| requiredPositional _v2 @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set vModuloIntInt @-1 |
| parameters |
| requiredPositional _vModuloIntInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vModuloIntDouble @-1 |
| returnType: double |
| synthetic static set vModuloIntDouble @-1 |
| parameters |
| requiredPositional _vModuloIntDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vMultiplyIntInt @-1 |
| returnType: int |
| synthetic static set vMultiplyIntInt @-1 |
| parameters |
| requiredPositional _vMultiplyIntInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vMultiplyIntDouble @-1 |
| returnType: double |
| synthetic static set vMultiplyIntDouble @-1 |
| parameters |
| requiredPositional _vMultiplyIntDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vMultiplyDoubleInt @-1 |
| returnType: double |
| synthetic static set vMultiplyDoubleInt @-1 |
| parameters |
| requiredPositional _vMultiplyDoubleInt @-1 |
| type: double |
| returnType: void |
| synthetic static get vMultiplyDoubleDouble @-1 |
| returnType: double |
| synthetic static set vMultiplyDoubleDouble @-1 |
| parameters |
| requiredPositional _vMultiplyDoubleDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vDivideIntInt @-1 |
| returnType: double |
| synthetic static set vDivideIntInt @-1 |
| parameters |
| requiredPositional _vDivideIntInt @-1 |
| type: double |
| returnType: void |
| synthetic static get vDivideIntDouble @-1 |
| returnType: double |
| synthetic static set vDivideIntDouble @-1 |
| parameters |
| requiredPositional _vDivideIntDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vDivideDoubleInt @-1 |
| returnType: double |
| synthetic static set vDivideDoubleInt @-1 |
| parameters |
| requiredPositional _vDivideDoubleInt @-1 |
| type: double |
| returnType: void |
| synthetic static get vDivideDoubleDouble @-1 |
| returnType: double |
| synthetic static set vDivideDoubleDouble @-1 |
| parameters |
| requiredPositional _vDivideDoubleDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vFloorDivide @-1 |
| returnType: int |
| synthetic static set vFloorDivide @-1 |
| parameters |
| requiredPositional _vFloorDivide @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set a @-1 |
| parameters |
| requiredPositional _a @-1 |
| type: int |
| returnType: void |
| synthetic static get vEq @-1 |
| returnType: bool |
| synthetic static set vEq @-1 |
| parameters |
| requiredPositional _vEq @-1 |
| type: bool |
| returnType: void |
| synthetic static get vNotEq @-1 |
| returnType: bool |
| synthetic static set vNotEq @-1 |
| parameters |
| requiredPositional _vNotEq @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set V @-1 |
| parameters |
| requiredPositional _V @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set vInt @-1 |
| parameters |
| requiredPositional _vInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vDouble @-1 |
| returnType: double |
| synthetic static set vDouble @-1 |
| parameters |
| requiredPositional _vDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vIncInt @-1 |
| returnType: int |
| synthetic static set vIncInt @-1 |
| parameters |
| requiredPositional _vIncInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vDecInt @-1 |
| returnType: int |
| synthetic static set vDecInt @-1 |
| parameters |
| requiredPositional _vDecInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vIncDouble @-1 |
| returnType: double |
| synthetic static set vIncDouble @-1 |
| parameters |
| requiredPositional _vIncDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vDecDouble @-1 |
| returnType: double |
| synthetic static set vDecDouble @-1 |
| parameters |
| requiredPositional _vDecDouble @-1 |
| 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 @-1 |
| returnType: List<int> |
| synthetic static set vInt @-1 |
| parameters |
| requiredPositional _vInt @-1 |
| type: List<int> |
| returnType: void |
| synthetic static get vDouble @-1 |
| returnType: List<double> |
| synthetic static set vDouble @-1 |
| parameters |
| requiredPositional _vDouble @-1 |
| type: List<double> |
| returnType: void |
| synthetic static get vIncInt @-1 |
| returnType: int |
| synthetic static set vIncInt @-1 |
| parameters |
| requiredPositional _vIncInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vDecInt @-1 |
| returnType: int |
| synthetic static set vDecInt @-1 |
| parameters |
| requiredPositional _vDecInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vIncDouble @-1 |
| returnType: double |
| synthetic static set vIncDouble @-1 |
| parameters |
| requiredPositional _vIncDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vDecDouble @-1 |
| returnType: double |
| synthetic static set vDecDouble @-1 |
| parameters |
| requiredPositional _vDecDouble @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set vInt @-1 |
| parameters |
| requiredPositional _vInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vDouble @-1 |
| returnType: double |
| synthetic static set vDouble @-1 |
| parameters |
| requiredPositional _vDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vIncInt @-1 |
| returnType: int |
| synthetic static set vIncInt @-1 |
| parameters |
| requiredPositional _vIncInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vDecInt @-1 |
| returnType: int |
| synthetic static set vDecInt @-1 |
| parameters |
| requiredPositional _vDecInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vIncDouble @-1 |
| returnType: double |
| synthetic static set vIncDouble @-1 |
| parameters |
| requiredPositional _vIncDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vDecInt @-1 |
| returnType: double |
| synthetic static set vDecInt @-1 |
| parameters |
| requiredPositional _vDecInt @-1 |
| 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 @-1 |
| returnType: List<int> |
| synthetic static set vInt @-1 |
| parameters |
| requiredPositional _vInt @-1 |
| type: List<int> |
| returnType: void |
| synthetic static get vDouble @-1 |
| returnType: List<double> |
| synthetic static set vDouble @-1 |
| parameters |
| requiredPositional _vDouble @-1 |
| type: List<double> |
| returnType: void |
| synthetic static get vIncInt @-1 |
| returnType: int |
| synthetic static set vIncInt @-1 |
| parameters |
| requiredPositional _vIncInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vDecInt @-1 |
| returnType: int |
| synthetic static set vDecInt @-1 |
| parameters |
| requiredPositional _vDecInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vIncDouble @-1 |
| returnType: double |
| synthetic static set vIncDouble @-1 |
| parameters |
| requiredPositional _vIncDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vDecInt @-1 |
| returnType: double |
| synthetic static set vDecInt @-1 |
| parameters |
| requiredPositional _vDecInt @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic static set vNot @-1 |
| parameters |
| requiredPositional _vNot @-1 |
| 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 @-1 |
| returnType: int |
| synthetic static set vNegateInt @-1 |
| parameters |
| requiredPositional _vNegateInt @-1 |
| type: int |
| returnType: void |
| synthetic static get vNegateDouble @-1 |
| returnType: double |
| synthetic static set vNegateDouble @-1 |
| parameters |
| requiredPositional _vNegateDouble @-1 |
| type: double |
| returnType: void |
| synthetic static get vComplement @-1 |
| returnType: int |
| synthetic static set vComplement @-1 |
| parameters |
| requiredPositional _vComplement @-1 |
| 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 @-1 |
| returnType: D |
| synthetic static set d @-1 |
| parameters |
| requiredPositional _d @-1 |
| type: D |
| returnType: void |
| class D @32 |
| fields |
| i @42 |
| type: int |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic get i @-1 |
| returnType: int |
| synthetic set i @-1 |
| parameters |
| requiredPositional _i @-1 |
| type: int |
| returnType: void |
| topLevelVariables |
| static final x @53 |
| type: int |
| accessors |
| synthetic static get x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set i @-1 |
| parameters |
| requiredPositional _i @-1 |
| type: int |
| returnType: void |
| topLevelVariables |
| static x @63 |
| type: int |
| accessors |
| synthetic static get x @-1 |
| returnType: int |
| synthetic static set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: bool |
| synthetic static set vLess @-1 |
| parameters |
| requiredPositional _vLess @-1 |
| type: bool |
| returnType: void |
| synthetic static get vLessOrEqual @-1 |
| returnType: bool |
| synthetic static set vLessOrEqual @-1 |
| parameters |
| requiredPositional _vLessOrEqual @-1 |
| type: bool |
| returnType: void |
| synthetic static get vGreater @-1 |
| returnType: bool |
| synthetic static set vGreater @-1 |
| parameters |
| requiredPositional _vGreater @-1 |
| type: bool |
| returnType: void |
| synthetic static get vGreaterOrEqual @-1 |
| returnType: bool |
| synthetic static set vGreaterOrEqual @-1 |
| parameters |
| requiredPositional _vGreaterOrEqual @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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' @37 |
| field: self::@class::A::@field::f |
| accessors |
| synthetic get f @-1 |
| returnType: int |
| synthetic set f @-1 |
| parameters |
| requiredPositional _f @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: int |
| returnType: void |
| synthetic get y @-1 |
| returnType: int |
| synthetic set y @-1 |
| parameters |
| requiredPositional _y @-1 |
| type: int |
| returnType: void |
| synthetic get z @-1 |
| returnType: int |
| synthetic set z @-1 |
| parameters |
| requiredPositional _z @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: dynamic |
| returnType: void |
| class B @40 |
| interfaces |
| A |
| fields |
| x @63 |
| type: dynamic |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic get x @-1 |
| returnType: dynamic |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: E |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: E |
| returnType: void |
| synthetic get y @-1 |
| returnType: E |
| synthetic set y @-1 |
| parameters |
| requiredPositional _y @-1 |
| type: E |
| returnType: void |
| synthetic get z @-1 |
| returnType: E |
| synthetic set z @-1 |
| parameters |
| requiredPositional _z @-1 |
| 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 @-1 |
| returnType: T |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: dynamic |
| returnType: void |
| class B @36 |
| interfaces |
| A |
| fields |
| x @59 |
| type: dynamic |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic get x @-1 |
| returnType: dynamic |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: num |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: num |
| returnType: void |
| class B @36 |
| interfaces |
| A |
| fields |
| x @59 |
| type: num |
| constructors |
| synthetic @-1 |
| accessors |
| synthetic get x @-1 |
| returnType: num |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: T |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: dynamic |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| type: dynamic |
| returnType: void |
| synthetic get y @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional _x @-1 |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {T: int} |
| 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 @-1 |
| returnType: int |
| synthetic set x @-1 |
| parameters |
| requiredPositional covariant _x @-1 |
| 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 @-1 |
| returnType: int |
| synthetic set t1 @-1 |
| parameters |
| requiredPositional _t1 @-1 |
| type: int |
| returnType: void |
| synthetic get t2 @-1 |
| returnType: double |
| synthetic set t2 @-1 |
| parameters |
| requiredPositional _t2 @-1 |
| type: double |
| returnType: void |
| synthetic get t3 @-1 |
| returnType: dynamic |
| synthetic set t3 @-1 |
| parameters |
| requiredPositional _t3 @-1 |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {T: int} |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {K: int, V: String} |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 @-1 |
| returnType: int |
| synthetic set m @-1 |
| parameters |
| requiredPositional _m @-1 |
| type: int |
| returnType: void |
| class B @32 |
| supertype: A |
| constructors |
| synthetic @-1 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {K: int, V: T} |
| class C @70 |
| supertype: B<String> |
| constructors |
| synthetic @-1 |
| superConstructor: ConstructorMember |
| base: self::@class::B::@constructor::• |
| substitution: {T: String} |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| methods |
| m @55 |
| parameters |
| requiredPositional a @57 |
| type: int |
| returnType: String |
| class C @71 |
| supertype: B |
| constructors |
| synthetic @-1 |
| superConstructor: self::@class::B::@constructor::• |
| 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 |
| superConstructor: self::@class::B::@constructor::• |
| 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 |
| superConstructor: self::@class::B::@constructor::• |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {K: int, V: String} |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {K: int, V: T} |
| class C @70 |
| supertype: B<String> |
| constructors |
| synthetic @-1 |
| superConstructor: ConstructorMember |
| base: self::@class::B::@constructor::• |
| substitution: {T: String} |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {K: T2, V: T1} |
| 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 |
| superConstructor: self::@class::A1::@constructor::• |
| 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 |
| superConstructor: ConstructorMember |
| base: self::@class::A::@constructor::• |
| substitution: {K: int, V: String} |
| 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 |
| superConstructor: self::@class::A::@constructor::• |
| 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.getUnitElement(path); |
| result as UnitElementResult; |
| return result.element.library; |
| } |
| } |