Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: pkg/analyzer/test/src/summary/top_level_inference_test.dart

Issue 2983293002: Remove toplevel inference restriction hints, and restore as much (Closed)
Patch Set: Keep error filter Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/test/src/summary/resynthesize_common.dart ('k') | pkg/analyzer/test/src/task/dart_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/summary/top_level_inference_test.dart
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index a9d11d9fdc121a4f13271eb2297591aebb32d2a4..ee3038ec2b5821b1d175e5ea570a577a4444be62 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -39,8 +39,8 @@ class TopLevelInferenceErrorsTest extends AbstractStrongTest {
test_initializer_assign() async {
var content = r'''
var a = 1;
-var t1 = /*error:TOP_LEVEL_UNSUPPORTED*/a += 1;
-var t2 = (/*error:TOP_LEVEL_UNSUPPORTED*/a = 2);
+var t1 = a += 1;
+var t2 = a = 2;
''';
await checkFile(content);
}
@@ -48,7 +48,7 @@ var t2 = (/*error:TOP_LEVEL_UNSUPPORTED*/a = 2);
test_initializer_binary_onlyLeft() async {
var content = r'''
var a = 1;
-var t = (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1) + (a = 2);
+var t = (a = 1) + (a = 2);
''';
await checkFile(content);
}
@@ -70,7 +70,7 @@ var t3 = !((a = 1) == 0);
test_initializer_cascade() async {
var content = r'''
var a = 0;
-var t = (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1)..isEven;
+var t = (a = 1)..isEven;
''';
await checkFile(content);
}
@@ -80,8 +80,7 @@ var t = (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1)..isEven;
class A<T> {}
class B {
var t1 = new A<int>();
- var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new
- /*error:TOP_LEVEL_TYPE_ARGUMENTS*/A();
+ var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new A();
}
''';
await checkFile(content);
@@ -92,8 +91,7 @@ class B {
class A<T> {}
class B {
static var t1 = 1;
- static var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new
- /*error:TOP_LEVEL_TYPE_ARGUMENTS*/A();
+ static var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new A();
}
''';
await checkFile(content);
@@ -104,8 +102,8 @@ class B {
var a = 1;
var b = true;
var t = b ?
- (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1) :
- (/*error:TOP_LEVEL_UNSUPPORTED*/a = 2);
+ (a = 1) :
+ (a = 2);
''';
await checkFile(content);
}
@@ -148,17 +146,14 @@ var t = /*error:TOP_LEVEL_FUNCTION_LITERAL_BLOCK*/
test_initializer_functionLiteral_expressionBody() async {
var content = r'''
var a = 0;
-var t = (int p) => (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1);
+var t = (int p) => (a = 1);
''';
await checkFile(content);
}
test_initializer_functionLiteral_parameters_withoutType() async {
var content = r'''
-var t = (int a,
- /*error:TOP_LEVEL_FUNCTION_LITERAL_PARAMETER*/b,
- int c,
- /*error:TOP_LEVEL_FUNCTION_LITERAL_PARAMETER*/d) => 0;
+var t = (int a, b,int c, d) => 0;
''';
await checkFile(content);
}
@@ -196,8 +191,8 @@ var t7 = new A().instance_method;
test_initializer_identifier_error() async {
var content = r'''
var a = 0;
-var b = (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1);
-var c = /*error:TOP_LEVEL_IDENTIFIER_NO_TYPE*/b;
+var b = (a = 1);
+var c = b;
''';
await checkFile(content);
}
@@ -205,7 +200,7 @@ var c = /*error:TOP_LEVEL_IDENTIFIER_NO_TYPE*/b;
test_initializer_ifNull() async {
var content = r'''
var a = 1;
-var t = /*error:TOP_LEVEL_UNSUPPORTED*/a ?? 2;
+var t = a ?? 2;
''';
await checkFile(content);
}
@@ -222,8 +217,7 @@ var t = new A();
var content = r'''
class A<T> {}
var t1 = new A<int>();
-var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new
- /*error:TOP_LEVEL_TYPE_ARGUMENTS*/A();
+var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new A();
''';
await checkFile(content);
}
@@ -233,7 +227,7 @@ var t2 = /*info:INFERRED_TYPE_ALLOCATION*/new
class A {
int f = 1;
}
-var a = new A()./*error:TOP_LEVEL_INSTANCE_GETTER*/f;
+var a = new A().f;
''';
await checkFile(content);
}
@@ -243,7 +237,7 @@ var a = new A()./*error:TOP_LEVEL_INSTANCE_GETTER*/f;
int f1() => null;
T f2<T>() => null;
var t1 = f1();
-var t2 = /*error:TOP_LEVEL_TYPE_ARGUMENTS*/f2();
+var t2 = f2();
var t3 = f2<int>();
''';
await checkFile(content);
@@ -257,7 +251,7 @@ class A {
}
var a = new A();
var t1 = a.m1();
-var t2 = a./*error:TOP_LEVEL_TYPE_ARGUMENTS*/m2();
+var t2 = a.m2();
var t3 = a.m2<int>();
''';
await checkFile(content);
@@ -313,7 +307,7 @@ var t = <int, int>{(a = 1) : (a = 2)};
var content = r'''
var a = 1;
var t = /*info:INFERRED_TYPE_LITERAL*/[
- /*error:TOP_LEVEL_UNSUPPORTED*/a = 1,
+ a = 1,
2, 3];
''';
await checkFile(content);
@@ -323,8 +317,8 @@ var t = /*info:INFERRED_TYPE_LITERAL*/[
var content = r'''
var a = 1;
var t = /*info:INFERRED_TYPE_LITERAL*/{
- (/*error:TOP_LEVEL_UNSUPPORTED*/a = 1) :
- (/*error:TOP_LEVEL_UNSUPPORTED*/a = 2)};
+ (a = 1) :
+ (a = 2)};
''';
await checkFile(content);
}
@@ -361,11 +355,10 @@ class C implements A, B {
}
Future<Null> _assertErrorOnlyLeft(List<String> operators) async {
- var err = '/*error:TOP_LEVEL_UNSUPPORTED*/';
String code = 'var a = 1;\n';
for (var i = 0; i < operators.length; i++) {
String operator = operators[i];
- code += 'var t$i = (${err}a = 1) $operator (a = 2);\n';
+ code += 'var t$i = (a = 1) $operator (a = 2);\n';
}
await checkFile(code);
}
@@ -409,95 +402,33 @@ num V;
''');
}
- 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'''
-import 'dart:async';
-() → Future<int> uValue;
-() → Future<int> uFuture;
-int fValue() {}
-Future<int> fFuture() async {}
-''');
- }
-
- 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'''
-int vBitXor;
-int vBitAnd;
-int vBitOr;
-int vBitShiftLeft;
-int vBitShiftRight;
-''');
- }
-
- 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'''
-class A {
- int a;
- void m() {}
-}
-A vSetField;
-A vInvokeMethod;
-A vBoth;
-''');
- }
-
- test_initializer_conditional() async {
- var library = await _encodeDecodeLibrary(r'''
-var V = true ? 1 : 2.3;
-''');
- checkElementText(library, r'''
-num V;
-''');
- }
-
- test_initializer_equality() async {
+ test_initializer_assign() async {
var library = await _encodeDecodeLibrary(r'''
-var vEq = 1 == 2;
-var vNotEq = 1 != 2;
+var a = 1;
+var t1 = (a = 2);
+var t2 = (a += 2);
''');
checkElementText(library, r'''
-bool vEq;
-bool vNotEq;
+int a;
+int t1;
+int t2;
''');
}
- test_initializer_error_assign() async {
+ test_initializer_assign_indexed() async {
var library = await _encodeDecodeLibrary(r'''
-var a = 1;
-var t1 = (a = 2);
-var t2 = (a += 2);
+var a = [0];
+var t1 = (a[0] = 2);
+var t2 = (a[0] += 2);
''');
checkElementText(library, r'''
-int a;
-dynamic t1/*error: assignment*/;
-dynamic t2/*error: assignment*/;
+List<int> a;
+int t1;
+int t2;
''');
}
- test_initializer_error_assign_prefixed() async {
+ test_initializer_assign_prefixed() async {
var library = await _encodeDecodeLibrary(r'''
class A {
int f;
@@ -511,12 +442,12 @@ class A {
int f;
}
A a;
-dynamic t1/*error: assignment*/;
-dynamic t2/*error: assignment*/;
+int t1;
+int t2;
''');
}
- test_initializer_error_assign_prefixed_viaInterface() async {
+ test_initializer_assign_prefixed_viaInterface() async {
var library = await _encodeDecodeLibrary(r'''
class I {
int f;
@@ -533,12 +464,12 @@ class I {
abstract class C implements I {
}
C c;
-dynamic t1/*error: assignment*/;
-dynamic t2/*error: assignment*/;
+int t1;
+int t2;
''');
}
- test_initializer_error_assign_viaInterface() async {
+ test_initializer_assign_viaInterface() async {
var library = await _encodeDecodeLibrary(r'''
class I {
int f;
@@ -554,21 +485,74 @@ class I {
}
abstract class C implements I {
}
-dynamic t1/*error: assignment*/;
-dynamic t2/*error: assignment*/;
+int t1;
+int t2;
C getC() {}
''');
}
+ 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'''
+import 'dart:async';
+() → Future<int> uValue;
+() → Future<int> uFuture;
+int fValue() {}
+Future<int> fFuture() async {}
+''');
+ }
+
+ 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'''
+int vBitXor;
+int vBitAnd;
+int vBitOr;
+int vBitShiftLeft;
+int vBitShiftRight;
+''');
+ }
+
+ 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'''
+class A {
+ int a;
+ void m() {}
+}
+A vSetField;
+A vInvokeMethod;
+A vBoth;
+''');
+ }
+
/**
* 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.
*
- * Note: specifically, references to instance fields and instance getters are
- * disallowed here.
*/
- test_initializer_error_classField_useInstanceGetter() async {
+ test_initializer_classField_useInstanceGetter() async {
var library = await _encodeDecodeLibrary(r'''
class A {
int f = 1;
@@ -611,15 +595,15 @@ class X {
A a;
B b;
C c;
- dynamic t01/*error: instanceGetter*/;
- dynamic t02/*error: instanceGetter*/;
- dynamic t03/*error: instanceGetter*/;
- dynamic t11/*error: instanceGetter*/;
- dynamic t12/*error: instanceGetter*/;
- dynamic t13/*error: instanceGetter*/;
- dynamic t21/*error: instanceGetter*/;
- dynamic t22/*error: instanceGetter*/;
- dynamic t23/*error: instanceGetter*/;
+ int t01;
+ int t02;
+ int t03;
+ int t11;
+ int t12;
+ int t13;
+ int t21;
+ int t22;
+ int t23;
}
A newA() {}
B newB() {}
@@ -627,7 +611,60 @@ C newC() {}
''');
}
- test_initializer_error_extractProperty() async {
+ test_initializer_conditional() async {
+ var library = await _encodeDecodeLibrary(r'''
+var V = true ? 1 : 2.3;
+''');
+ checkElementText(library, r'''
+num V;
+''');
+ }
+
+ test_initializer_equality() async {
+ var library = await _encodeDecodeLibrary(r'''
+var vEq = 1 == 2;
+var vNotEq = 1 != 2;
+''');
+ checkElementText(library, r'''
+bool vEq;
+bool vNotEq;
+''');
+ }
+
+ test_initializer_error_methodInvocation_cycle_topLevel() async {
+ var library = await _encodeDecodeLibrary(r'''
+var a = b.foo();
+var b = a.foo();
+''');
+ checkElementText(library, r'''
+dynamic a/*error: dependencyCycle*/;
+dynamic b/*error: dependencyCycle*/;
+''');
+ }
+
+ test_initializer_error_methodInvocation_cycle_topLevel_self() async {
+ var library = await _encodeDecodeLibrary(r'''
+var a = a.foo();
+''');
+ checkElementText(library, r'''
+dynamic a/*error: dependencyCycle*/;
+''');
+ }
+
+ 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'''
+List<num> a;
+num b0;
+num b1;
+''');
+ }
+
+ test_initializer_extractProperty() async {
var library = await _encodeDecodeLibrary(r'''
class C {
bool b;
@@ -639,12 +676,12 @@ var x = f().b;
class C {
bool b;
}
-dynamic x/*error: instanceGetter*/;
+bool x;
C f() {}
''');
}
- test_initializer_error_extractProperty_inOtherLibraryCycle() async {
+ test_initializer_extractProperty_inOtherLibraryCycle() async {
addFile('/a.dart', r'''
import 'b.dart';
var x = new C().f;
@@ -660,11 +697,11 @@ var t1 = x;
''');
checkElementText(library, r'''
import 'a.dart';
-dynamic t1;
+int t1;
''');
}
- test_initializer_error_extractProperty_inStaticField() async {
+ test_initializer_extractProperty_inStaticField() async {
var library = await _encodeDecodeLibrary(r'''
class A {
int f;
@@ -678,12 +715,12 @@ class A {
int f;
}
class B {
- static dynamic t/*error: instanceGetter*/;
+ static int t;
}
''');
}
- test_initializer_error_extractProperty_prefixedIdentifier() async {
+ test_initializer_extractProperty_prefixedIdentifier() async {
var library = await _encodeDecodeLibrary(r'''
class C {
bool b;
@@ -696,11 +733,11 @@ class C {
bool b;
}
C c;
-dynamic x/*error: instanceGetter*/;
+bool x;
''');
}
- test_initializer_error_extractProperty_prefixedIdentifier_viaInterface() async {
+ test_initializer_extractProperty_prefixedIdentifier_viaInterface() async {
var library = await _encodeDecodeLibrary(r'''
class I {
bool b;
@@ -716,11 +753,11 @@ class I {
abstract class C implements I {
}
C c;
-dynamic x/*error: instanceGetter*/;
+bool x;
''');
}
- test_initializer_error_extractProperty_viaInterface() async {
+ test_initializer_extractProperty_viaInterface() async {
var library = await _encodeDecodeLibrary(r'''
class I {
bool b;
@@ -735,112 +772,11 @@ class I {
}
abstract class C implements I {
}
-dynamic x/*error: instanceGetter*/;
+bool x;
C f() {}
''');
}
- test_initializer_error_instanceGetterOfObject() async {
- var library = await _encodeDecodeLibrary(r'''
-dynamic f() => null;
-var s = f().toString();
-var h = f().hashCode;
-''');
- checkElementText(library, r'''
-String s;
-dynamic h/*error: instanceGetter*/;
-dynamic f() {}
-''');
- }
-
- test_initializer_error_instanceGetterOfObject_prefixed() async {
- var library = await _encodeDecodeLibrary(r'''
-dynamic d;
-var s = d.toString();
-var h = d.hashCode;
-''');
- checkElementText(library, r'''
-dynamic d;
-String s;
-dynamic h/*error: instanceGetter*/;
-''');
- }
-
- test_initializer_error_methodInvocation_cycle_topLevel() async {
- var library = await _encodeDecodeLibrary(r'''
-var a = b.foo();
-var b = a.foo();
-''');
- checkElementText(library, r'''
-dynamic a/*error: dependencyCycle*/;
-dynamic b/*error: dependencyCycle*/;
-''');
- }
-
- test_initializer_error_methodInvocation_cycle_topLevel_self() async {
- var library = await _encodeDecodeLibrary(r'''
-var a = a.foo();
-''');
- checkElementText(library, r'''
-dynamic a/*error: dependencyCycle*/;
-''');
- }
-
- test_initializer_error_referenceToFieldOfStaticField() async {
- var library = await _encodeDecodeLibrary(r'''
-class C {
- static D d;
-}
-class D {
- int i;
-}
-final x = C.d.i;
-''');
- checkElementText(library, r'''
-class C {
- static D d;
-}
-class D {
- int i;
-}
-final dynamic x/*error: instanceGetter*/;
-''');
- }
-
- test_initializer_error_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'''
-class C {
- static D get d {}
-}
-class D {
- int i;
-}
-dynamic x/*error: instanceGetter*/;
-''');
- }
-
- 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'''
-List<num> a;
-num b0;
-num b1;
-''');
- }
-
test_initializer_functionExpression() async {
var library = await _encodeDecodeLibrary(r'''
import 'dart:async';
@@ -1025,6 +961,32 @@ A a;
''');
}
+ test_initializer_instanceGetterOfObject() async {
+ var library = await _encodeDecodeLibrary(r'''
+dynamic f() => null;
+var s = f().toString();
+var h = f().hashCode;
+''');
+ checkElementText(library, r'''
+String s;
+int h;
+dynamic f() {}
+''');
+ }
+
+ test_initializer_instanceGetterOfObject_prefixed() async {
+ var library = await _encodeDecodeLibrary(r'''
+dynamic d;
+var s = d.toString();
+var h = d.hashCode;
+''');
+ checkElementText(library, r'''
+dynamic d;
+String s;
+int h;
+''');
+ }
+
test_initializer_is() async {
var library = await _encodeDecodeLibrary(r'''
var a = 1.2;
@@ -1230,7 +1192,6 @@ int vFloorDivide;
''');
}
- @failingTest
test_initializer_onlyLeft() async {
var library = await _encodeDecodeLibrary(r'''
var a = 1;
@@ -1253,11 +1214,10 @@ int V;
''');
}
- @failingTest
test_initializer_postfix() async {
var library = await _encodeDecodeLibrary(r'''
var vInt = 1;
-var vDouble = 2;
+var vDouble = 2.0;
var vIncInt = vInt++;
var vDecInt = vInt--;
var vIncDouble = vDouble++;
@@ -1265,7 +1225,26 @@ var vDecDouble = vDouble--;
''');
checkElementText(library, r'''
int vInt;
-int vDouble;
+double vDouble;
+int vIncInt;
+int vDecInt;
+double vIncDouble;
+double vDecDouble;
+''');
+ }
+
+ 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'''
+List<int> vInt;
+List<double> vDouble;
int vIncInt;
int vDecInt;
double vIncDouble;
@@ -1273,7 +1252,6 @@ double vDecDouble;
''');
}
- @failingTest
test_initializer_prefix_incDec() async {
var library = await _encodeDecodeLibrary(r'''
var vInt = 1;
@@ -1311,6 +1289,25 @@ 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'''
+List<int> vInt;
+List<double> vDouble;
+int vIncInt;
+int vDecInt;
+double vIncDouble;
+double vDecInt;
+''');
+ }
+
test_initializer_prefix_not() async {
var library = await _encodeDecodeLibrary(r'''
var vNot = !true;
@@ -1333,6 +1330,48 @@ int vComplement;
''');
}
+ 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'''
+class C {
+ static D d;
+}
+class D {
+ int i;
+}
+final int x;
+''');
+ }
+
+ 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'''
+class C {
+ static D get d {}
+}
+class D {
+ int i;
+}
+int x;
+''');
+ }
+
test_initializer_relational() async {
var library = await _encodeDecodeLibrary(r'''
var vLess = 1 < 2;
« no previous file with comments | « pkg/analyzer/test/src/summary/resynthesize_common.dart ('k') | pkg/analyzer/test/src/task/dart_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698