| Index: pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| index a4bc6b7a6edb0a56a50eb8084de9829cd19b5d69..a6867401c46e215cccf90efd503112723a0e5bcb 100644
|
| --- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
|
| @@ -2318,6 +2318,168 @@ var f = () {};
|
| expect(f.type.toString(), '() → dynamic');
|
| }
|
|
|
| + void test_inferredType_customBinaryOp() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool operator*(C other) => true;
|
| +}
|
| +C c;
|
| +var x = c*c;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_customBinaryOp_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool operator*(C other) => true;
|
| +}
|
| +abstract class C implements I {}
|
| +C c;
|
| +var x = c*c;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_customIndexOp() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool operator[](int index) => true;
|
| +}
|
| +C c;
|
| +var x = c[0];
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_customIndexOp_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool operator[](int index) => true;
|
| +}
|
| +abstract class C implements I {}
|
| +C c;
|
| +var x = c[0];
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_customUnaryOp() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool operator-() => true;
|
| +}
|
| +C c;
|
| +var x = -c;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_customUnaryOp_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool operator-() => true;
|
| +}
|
| +abstract class C implements I {}
|
| +C c;
|
| +var x = -c;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_extractMethodTearOff() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool g() => true;
|
| +}
|
| +C f() => null;
|
| +var x = f().g;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), '() → bool');
|
| + }
|
| +
|
| + void test_inferredType_extractMethodTearOff_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool g() => true;
|
| +}
|
| +abstract class C implements I {}
|
| +C f() => null;
|
| +var x = f().g;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), '() → bool');
|
| + }
|
| +
|
| + void test_inferredType_extractProperty() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool b;
|
| +}
|
| +C f() => null;
|
| +var x = f().b;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_extractProperty_prefixedIdentifier() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool b;
|
| +}
|
| +C c;
|
| +var x = c.b;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_extractProperty_prefixedIdentifier_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool b;
|
| +}
|
| +abstract class C implements I {}
|
| +C c;
|
| +var x = c.b;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_extractProperty_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool b;
|
| +}
|
| +abstract class C implements I {}
|
| +C f() => null;
|
| +var x = f().b;
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| void test_inferredType_fromTopLevelExecutableTearoff() {
|
| var mainUnit = checkFile('''
|
| var v = print;
|
| @@ -2326,6 +2488,33 @@ var v = print;
|
| expect(v.type.toString(), '(Object) → void');
|
| }
|
|
|
| + void test_inferredType_invokeMethod() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + bool g() => true;
|
| +}
|
| +C f() => null;
|
| +var x = f().g();
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| + void test_inferredType_invokeMethod_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + bool g() => true;
|
| +}
|
| +abstract class C implements I {}
|
| +C f() => null;
|
| +var x = f().g();
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'bool');
|
| + }
|
| +
|
| void test_inferredType_isEnum() {
|
| var mainUnit = checkFile('''
|
| enum E { v1 }
|
| @@ -2362,6 +2551,60 @@ final x = <String, F<int>>{};
|
| expect(x.type.toString(), 'Map<String, () → int>');
|
| }
|
|
|
| + void test_inferredType_opAssignToProperty_prefixedIdentifier() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + num n;
|
| +}
|
| +C c;
|
| +var x = (c.n *= null);
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'num');
|
| + }
|
| +
|
| + void test_inferredType_opAssignToProperty_prefixedIdentifier_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + num n;
|
| +}
|
| +abstract class C implements I {}
|
| +C c;
|
| +var x = (c.n *= null);
|
| +''');
|
| + var x = mainUnit.topLevelVariables[1];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'num');
|
| + }
|
| +
|
| + void test_inferredType_opAssignToProperty() {
|
| + var mainUnit = checkFile('''
|
| +class C {
|
| + num n;
|
| +}
|
| +C f() => null;
|
| +var x = (f().n *= null);
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'num');
|
| + }
|
| +
|
| + void test_inferredType_opAssignToProperty_viaInterface() {
|
| + var mainUnit = checkFile('''
|
| +class I {
|
| + num n;
|
| +}
|
| +abstract class C implements I {}
|
| +C f() => null;
|
| +var x = (f().n *= null);
|
| +''');
|
| + var x = mainUnit.topLevelVariables[0];
|
| + expect(x.name, 'x');
|
| + expect(x.type.toString(), 'num');
|
| + }
|
| +
|
| void test_inferStaticsTransitively() {
|
| addFile(
|
| '''
|
|
|