| Index: pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| diff --git a/pkg/analyzer_experimental/test/generated/resolver_test.dart b/pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| index 9620ea8870338bc103a1f5d62e43f393f45cfc96..ed8d7bd07ce53609dbc629f81b5f6a8943c62018 100644
|
| --- a/pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| +++ b/pkg/analyzer_experimental/test/generated/resolver_test.dart
|
| @@ -424,7 +424,7 @@ class TypePropagationTest extends ResolverTestCase {
|
| " }",
|
| "}"]));
|
| LibraryElement library = resolve(source);
|
| - assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
|
| + assertNoErrors(source);
|
| CompilationUnit unit = resolveCompilationUnit(source, library);
|
| FunctionDeclaration function = unit.declarations[2] as FunctionDeclaration;
|
| BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
|
| @@ -2373,6 +2373,35 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| + void test_mixedReturnTypes_differentScopes() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class C {",
|
| + " m(int x) {",
|
| + " f(int y) {",
|
| + " return;",
|
| + " }",
|
| + " f(x);",
|
| + " return 0;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_mixedReturnTypes_sameKind() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class C {",
|
| + " m(int x) {",
|
| + " if (x < 0) {",
|
| + " return 1;",
|
| + " }",
|
| + " return 0;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| void test_mixinDeclaresConstructor() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "class A {",
|
| @@ -2488,6 +2517,30 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| + void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "abstract class A {",
|
| + " int get g;",
|
| + "}",
|
| + "class B extends A {",
|
| + " noSuchMethod(v) => '';",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "abstract class A {",
|
| + " m(p);",
|
| + "}",
|
| + "class B extends A {",
|
| + " noSuchMethod(v) => '';",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| void test_nonBoolExpression_functionType() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "bool makeAssertion() => true;",
|
| @@ -2844,7 +2897,7 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| - void test_propagateTypeArgsIntoBounds() {
|
| + void test_propagateTypeArgs_intoBounds() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "abstract class A<E> {}",
|
| "abstract class B<F> implements A<F>{}",
|
| @@ -2854,6 +2907,20 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| + void test_propagateTypeArgs_intoSupertype() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class A<T> {",
|
| + " A(T p);",
|
| + " A.named(T p);",
|
| + "}",
|
| + "class B<S> extends A<S> {",
|
| + " B(S p) : super(p);",
|
| + " B.named(S p) : super.named(p);",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| void test_proxy_annotation_prefixed() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "library L;",
|
| @@ -3202,12 +3269,6 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| - void test_typeAliasCannotReferenceItself_typeParameterBounds() {
|
| - Source source = addSource(EngineTestCase.createSource(["typedef A<T extends A>();"]));
|
| - resolve(source);
|
| - assertNoErrors(source);
|
| - verify([source]);
|
| - }
|
| void test_typeArgumentNotMatchingBounds_const() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "class A {}",
|
| @@ -3248,6 +3309,186 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| + void test_typePromotion_booleanAnd_useInRight() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " p is String && p.length != 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " (p is String) && callMe(() { p.length; });",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_conditional_useInThen() {
|
| + Source source = addSource(EngineTestCase.createSource(["main(Object p) {", " p is String ? p.length : 0;", "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " p is String ? callMe(() { p.length; }) : 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "typedef FuncB(B b);",
|
| + "typedef FuncA(A a);",
|
| + "class A {}",
|
| + "class B {}",
|
| + "main(FuncA f) {",
|
| + " if (f is FuncB) {",
|
| + " f(new A());",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "typedef FuncDynToDyn(x);",
|
| + "typedef void FuncDynToVoid(x);",
|
| + "class A {}",
|
| + "main(FuncDynToDyn f) {",
|
| + " if (f is FuncDynToVoid) {",
|
| + " A a = f(null);",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_functionType_return_voidToDynamic() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "typedef FuncDynToDyn(x);",
|
| + "typedef void FuncDynToVoid(x);",
|
| + "class A {}",
|
| + "main(FuncDynToVoid f) {",
|
| + " if (f is FuncDynToDyn) {",
|
| + " A a = f(null);",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_accessedInClosure_noAssignment() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " if (p is String) {",
|
| + " callMe(() {",
|
| + " p.length;",
|
| + " });",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_hasAssignment_outsideAfter() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " if (p is String) {",
|
| + " p.length;",
|
| + " }",
|
| + " p = 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_hasAssignment_outsideBefore() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p, Object p2) {",
|
| + " p = p2;",
|
| + " if (p is String) {",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_is_and_left() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "bool tt() => true;",
|
| + "main(Object p) {",
|
| + " if (p is String && tt()) {",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_is_and_right() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "bool tt() => true;",
|
| + "main(Object p) {",
|
| + " if (tt() && p is String) {",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_is_and_subThenSuper() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class A {",
|
| + " var a;",
|
| + "}",
|
| + "class B extends A {",
|
| + " var b;",
|
| + "}",
|
| + "main(Object p) {",
|
| + " if (p is B && p is A) {",
|
| + " p.a;",
|
| + " p.b;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_is_parenthesized() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " if ((p is String)) {",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| + void test_typePromotion_if_is_single() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " if (p is String) {",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| void test_undefinedConstructorInInitializer_explicit_named() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "class A {",
|
| @@ -4058,6 +4299,14 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedSetter);
|
| });
|
| + _ut.test('test_mixedReturnTypes_differentScopes', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_mixedReturnTypes_differentScopes);
|
| + });
|
| + _ut.test('test_mixedReturnTypes_sameKind', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_mixedReturnTypes_sameKind);
|
| + });
|
| _ut.test('test_mixinDeclaresConstructor', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_mixinDeclaresConstructor);
|
| @@ -4102,6 +4351,14 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_abstractOverridesConcrete_method);
|
| });
|
| + _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor);
|
| + });
|
| + _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method);
|
| + });
|
| _ut.test('test_nonBoolExpression_functionType', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_nonBoolExpression_functionType);
|
| @@ -4246,9 +4503,13 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_prefixCollidesWithTopLevelMembers);
|
| });
|
| - _ut.test('test_propagateTypeArgsIntoBounds', () {
|
| + _ut.test('test_propagateTypeArgs_intoBounds', () {
|
| final __test = new NonErrorResolverTest();
|
| - runJUnitTest(__test, __test.test_propagateTypeArgsIntoBounds);
|
| + runJUnitTest(__test, __test.test_propagateTypeArgs_intoBounds);
|
| + });
|
| + _ut.test('test_propagateTypeArgs_intoSupertype', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_propagateTypeArgs_intoSupertype);
|
| });
|
| _ut.test('test_proxy_annotation_prefixed', () {
|
| final __test = new NonErrorResolverTest();
|
| @@ -4358,10 +4619,6 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_typeAliasCannotReferenceItself_returnClass_withTypeAlias);
|
| });
|
| - _ut.test('test_typeAliasCannotReferenceItself_typeParameterBounds', () {
|
| - final __test = new NonErrorResolverTest();
|
| - runJUnitTest(__test, __test.test_typeAliasCannotReferenceItself_typeParameterBounds);
|
| - });
|
| _ut.test('test_typeArgumentNotMatchingBounds_const', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_const);
|
| @@ -4382,6 +4639,66 @@ class NonErrorResolverTest extends ResolverTestCase {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_typeArgumentNotMatchingBounds_typeArgumentList_20);
|
| });
|
| + _ut.test('test_typePromotion_booleanAnd_useInRight', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_booleanAnd_useInRight);
|
| + });
|
| + _ut.test('test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignment);
|
| + });
|
| + _ut.test('test_typePromotion_conditional_useInThen', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_conditional_useInThen);
|
| + });
|
| + _ut.test('test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment);
|
| + });
|
| + _ut.test('test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific);
|
| + });
|
| + _ut.test('test_typePromotion_functionType_return_ignoreIfNotMoreSpecific', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_functionType_return_ignoreIfNotMoreSpecific);
|
| + });
|
| + _ut.test('test_typePromotion_functionType_return_voidToDynamic', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_functionType_return_voidToDynamic);
|
| + });
|
| + _ut.test('test_typePromotion_if_accessedInClosure_noAssignment', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_accessedInClosure_noAssignment);
|
| + });
|
| + _ut.test('test_typePromotion_if_hasAssignment_outsideAfter', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_hasAssignment_outsideAfter);
|
| + });
|
| + _ut.test('test_typePromotion_if_hasAssignment_outsideBefore', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_hasAssignment_outsideBefore);
|
| + });
|
| + _ut.test('test_typePromotion_if_is_and_left', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_is_and_left);
|
| + });
|
| + _ut.test('test_typePromotion_if_is_and_right', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_is_and_right);
|
| + });
|
| + _ut.test('test_typePromotion_if_is_and_subThenSuper', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_is_and_subThenSuper);
|
| + });
|
| + _ut.test('test_typePromotion_if_is_parenthesized', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_is_parenthesized);
|
| + });
|
| + _ut.test('test_typePromotion_if_is_single', () {
|
| + final __test = new NonErrorResolverTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_is_single);
|
| + });
|
| _ut.test('test_undefinedConstructorInInitializer_explicit_named', () {
|
| final __test = new NonErrorResolverTest();
|
| runJUnitTest(__test, __test.test_undefinedConstructorInInitializer_explicit_named);
|
| @@ -5153,6 +5470,106 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| assertErrors(source, [StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND]);
|
| verify([source]);
|
| }
|
| + void test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " (p is String) && callMe(() { p.length; });",
|
| + " p = 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_booleanAnd_useInRight_mutatedInLeft() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " ((p is String) && ((p = 42) == 42)) && p.length != 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_booleanAnd_useInRight_mutatedInRight() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " (p is String) && (((p = 42) == 42) && p.length != 0);",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " p is String ? callMe(() { p.length; }) : 0;",
|
| + " p = 42;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " p = 42;",
|
| + " p is String ? callMe(() { p.length; }) : 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_conditional_useInThen_hasAssignment() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " p is String ? (p.length + (p = 42)) : 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_if_accessedInClosure_hasAssignment() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "callMe(f()) { f(); }",
|
| + "main(Object p) {",
|
| + " if (p is String) {",
|
| + " callMe(() {",
|
| + " p.length;",
|
| + " });",
|
| + " }",
|
| + " p = 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_if_and_right_hasAssignment() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " if (p is String && (p = null) == null) {",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_if_hasAssignment_after() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " if (p is String) {",
|
| + " p.length;",
|
| + " p = 0;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| + void test_typePromotion_if_hasAssignment_before() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "main(Object p) {",
|
| + " if (p is String) {",
|
| + " p = 0;",
|
| + " p.length;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
|
| + }
|
| void test_undefinedGetter() {
|
| Source source = addSource(EngineTestCase.createSource(["class T {}", "f(T e) { return e.m; }"]));
|
| resolve(source);
|
| @@ -5210,9 +5627,7 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| void test_undefinedOperator_indexBoth() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {}", "f(A a) {", " a[0]++;", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - StaticTypeWarningCode.UNDEFINED_OPERATOR,
|
| - StaticTypeWarningCode.UNDEFINED_OPERATOR]);
|
| + assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
|
| }
|
| void test_undefinedOperator_indexGetter() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {}", "f(A a) {", " a[0];", "}"]));
|
| @@ -5580,6 +5995,46 @@ class StaticTypeWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_typeParameterSupertypeOfItsBound);
|
| });
|
| + _ut.test('test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated);
|
| + });
|
| + _ut.test('test_typePromotion_booleanAnd_useInRight_mutatedInLeft', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_booleanAnd_useInRight_mutatedInLeft);
|
| + });
|
| + _ut.test('test_typePromotion_booleanAnd_useInRight_mutatedInRight', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_booleanAnd_useInRight_mutatedInRight);
|
| + });
|
| + _ut.test('test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after);
|
| + });
|
| + _ut.test('test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before);
|
| + });
|
| + _ut.test('test_typePromotion_conditional_useInThen_hasAssignment', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_conditional_useInThen_hasAssignment);
|
| + });
|
| + _ut.test('test_typePromotion_if_accessedInClosure_hasAssignment', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_accessedInClosure_hasAssignment);
|
| + });
|
| + _ut.test('test_typePromotion_if_and_right_hasAssignment', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_and_right_hasAssignment);
|
| + });
|
| + _ut.test('test_typePromotion_if_hasAssignment_after', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_hasAssignment_after);
|
| + });
|
| + _ut.test('test_typePromotion_if_hasAssignment_before', () {
|
| + final __test = new StaticTypeWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_if_hasAssignment_before);
|
| + });
|
| _ut.test('test_undefinedGetter', () {
|
| final __test = new StaticTypeWarningCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedGetter);
|
| @@ -6089,7 +6544,7 @@ class HintCodeTest extends ResolverTestCase {
|
| " }",
|
| "}"]));
|
| resolve(source);
|
| - assertErrors(source, [HintCode.UNDEFINED_OPERATOR, HintCode.UNDEFINED_OPERATOR]);
|
| + assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
|
| }
|
| void test_undefinedOperator_indexGetter() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| @@ -6569,7 +7024,7 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| CatchClause clause = ASTFactory.catchClause("e", []);
|
| SimpleIdentifier exceptionParameter = clause.exceptionParameter;
|
| exceptionParameter.staticElement = new LocalVariableElementImpl(exceptionParameter);
|
| - resolve(clause, _typeProvider.objectType, null, []);
|
| + resolve(clause, _typeProvider.dynamicType, null, []);
|
| _listener.assertNoErrors();
|
| }
|
| void test_visitCatchClause_exception_stackTrace() {
|
| @@ -6578,7 +7033,7 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| exceptionParameter.staticElement = new LocalVariableElementImpl(exceptionParameter);
|
| SimpleIdentifier stackTraceParameter = clause.stackTraceParameter;
|
| stackTraceParameter.staticElement = new LocalVariableElementImpl(stackTraceParameter);
|
| - resolve(clause, _typeProvider.objectType, _typeProvider.stackTraceType, []);
|
| + resolve(clause, _typeProvider.dynamicType, _typeProvider.stackTraceType, []);
|
| _listener.assertNoErrors();
|
| }
|
| void test_visitCatchClause_on_exception() {
|
| @@ -6741,7 +7196,7 @@ class TypeResolverVisitorTest extends EngineTestCase {
|
| * @param definedElements the elements that are to be defined in the scope in which the element is
|
| * being resolved
|
| */
|
| - void resolve(CatchClause node, InterfaceType exceptionType, InterfaceType stackTraceType, List<Element> definedElements) {
|
| + void resolve(CatchClause node, Type2 exceptionType, InterfaceType stackTraceType, List<Element> definedElements) {
|
| resolveNode(node, definedElements);
|
| SimpleIdentifier exceptionParameter = node.exceptionParameter;
|
| if (exceptionParameter != null) {
|
| @@ -8429,6 +8884,19 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors(source, [CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER]);
|
| verify([source]);
|
| }
|
| + void test_defaultValueInRedirectingFactoryConstructor() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class A {",
|
| + " factory A([int x = 0]) = B;",
|
| + "}",
|
| + "",
|
| + "class B implements A {",
|
| + " B([int x = 1]) {}",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR]);
|
| + verify([source]);
|
| + }
|
| void test_duplicateConstructorName_named() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " A.a() {}", " A.a() {}", "}"]));
|
| resolve(source);
|
| @@ -8448,9 +8916,7 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| void test_duplicateDefinition() {
|
| Source source = addSource(EngineTestCase.createSource(["f() {", " int m = 0;", " m(a) {}", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinition_acrossLibraries() {
|
| @@ -8464,29 +8930,19 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| void test_duplicateDefinition_classMembers_fields() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " int a;", " int a;", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinition_classMembers_fields_oneStatic() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " int x;", " static int x;", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinition_classMembers_methods() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " m() {}", " m() {}", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinition_localFields() {
|
| @@ -8498,25 +8954,19 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| " }",
|
| "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinition_parameterWithFunctionName_local() {
|
| Source source = addSource(EngineTestCase.createSource(["main() {", " f(f) {}", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinition_parameterWithFunctionName_topLevel() {
|
| Source source = addSource(EngineTestCase.createSource(["main() {", " f(f) {}", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION,
|
| - CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| + assertErrors(source, [CompileTimeErrorCode.DUPLICATE_DEFINITION]);
|
| verify([source]);
|
| }
|
| void test_duplicateDefinitionInheritance_instanceGetter_staticGetter() {
|
| @@ -8842,9 +9292,7 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| void test_getterAndMethodWithSameName() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " x(y) {}", " get x => 0;", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME,
|
| - CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME]);
|
| + assertErrors(source, [CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME]);
|
| verify([source]);
|
| }
|
| void test_implementsDisallowedClass_bool() {
|
| @@ -9364,9 +9812,7 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| void test_methodAndGetterWithSameName() {
|
| Source source = addSource(EngineTestCase.createSource(["class A {", " get x => 0;", " x(y) {}", "}"]));
|
| resolve(source);
|
| - assertErrors(source, [
|
| - CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME,
|
| - CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME]);
|
| + assertErrors(source, [CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME]);
|
| verify([source]);
|
| }
|
| void test_mixinDeclaresConstructor_classDeclaration() {
|
| @@ -10057,6 +10503,41 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| assertErrors(source, [CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR]);
|
| verify([source]);
|
| }
|
| + void test_referencedBeforeDeclaration_hideInBlock_function() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "var v = 1;",
|
| + "main() {",
|
| + " print(v);",
|
| + " v() {}",
|
| + "}",
|
| + "print(x) {}"]));
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
|
| + }
|
| + void test_referencedBeforeDeclaration_hideInBlock_local() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "var v = 1;",
|
| + "main() {",
|
| + " print(v);",
|
| + " var v = 2;",
|
| + "}",
|
| + "print(x) {}"]));
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
|
| + }
|
| + void test_referencedBeforeDeclaration_hideInBlock_subBlock() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "var v = 1;",
|
| + "main() {",
|
| + " {",
|
| + " print(v);",
|
| + " }",
|
| + " var v = 2;",
|
| + "}",
|
| + "print(x) {}"]));
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION]);
|
| + }
|
| void test_referenceToDeclaredVariableInInitializer_closure() {
|
| Source source = addSource(EngineTestCase.createSource(["f() {", " var x = (x) {};", "}"]));
|
| resolve(source);
|
| @@ -10243,6 +10724,12 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
|
| verify([source]);
|
| }
|
| + void test_typeAliasCannotReferenceItself_typeVariableBounds() {
|
| + Source source = addSource(EngineTestCase.createSource(["typedef A<T extends A>();"]));
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
|
| + verify([source]);
|
| + }
|
| void test_typeAliasCannotRereferenceItself_mixin_direct() {
|
| Source source = addSource(EngineTestCase.createSource(["class M = Object with M;"]));
|
| resolve(source);
|
| @@ -10771,6 +11258,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_defaultValueInFunctionTypedParameter_optional);
|
| });
|
| + _ut.test('test_defaultValueInRedirectingFactoryConstructor', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_defaultValueInRedirectingFactoryConstructor);
|
| + });
|
| _ut.test('test_duplicateConstructorName_named', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_duplicateConstructorName_named);
|
| @@ -11567,6 +12058,18 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_referenceToDeclaredVariableInInitializer_unqualifiedInvocation);
|
| });
|
| + _ut.test('test_referencedBeforeDeclaration_hideInBlock_function', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_referencedBeforeDeclaration_hideInBlock_function);
|
| + });
|
| + _ut.test('test_referencedBeforeDeclaration_hideInBlock_local', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_referencedBeforeDeclaration_hideInBlock_local);
|
| + });
|
| + _ut.test('test_referencedBeforeDeclaration_hideInBlock_subBlock', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_referencedBeforeDeclaration_hideInBlock_subBlock);
|
| + });
|
| _ut.test('test_rethrowOutsideCatch', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_rethrowOutsideCatch);
|
| @@ -11647,6 +12150,10 @@ class CompileTimeErrorCodeTest extends ResolverTestCase {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_typeAliasCannotReferenceItself_returnType_indirect);
|
| });
|
| + _ut.test('test_typeAliasCannotReferenceItself_typeVariableBounds', () {
|
| + final __test = new CompileTimeErrorCodeTest();
|
| + runJUnitTest(__test, __test.test_typeAliasCannotReferenceItself_typeVariableBounds);
|
| + });
|
| _ut.test('test_typeAliasCannotRereferenceItself_mixin_direct', () {
|
| final __test = new CompileTimeErrorCodeTest();
|
| runJUnitTest(__test, __test.test_typeAliasCannotRereferenceItself_mixin_direct);
|
| @@ -11970,7 +12477,7 @@ class StrictModeTest extends ResolverTestCase {
|
| " return (n is int && n > 0) ? n & 0x0F : 0;",
|
| "}"]));
|
| resolve(source);
|
| - assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
|
| + assertNoErrors(source);
|
| }
|
| void test_conditional_is() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| @@ -11978,7 +12485,7 @@ class StrictModeTest extends ResolverTestCase {
|
| " return (n is int) ? n & 0x0F : 0;",
|
| "}"]));
|
| resolve(source);
|
| - assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
|
| + assertNoErrors(source);
|
| }
|
| void test_conditional_isNot() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| @@ -12016,7 +12523,7 @@ class StrictModeTest extends ResolverTestCase {
|
| " return 0;",
|
| "}"]));
|
| resolve(source);
|
| - assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
|
| + assertNoErrors(source);
|
| }
|
| void test_if_is() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| @@ -12027,7 +12534,7 @@ class StrictModeTest extends ResolverTestCase {
|
| " return 0;",
|
| "}"]));
|
| resolve(source);
|
| - assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
|
| + assertNoErrors(source);
|
| }
|
| void test_if_isNot() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| @@ -13011,90 +13518,34 @@ class PubSuggestionCodeTest extends ResolverTestCase {
|
| final __test = new PubSuggestionCodeTest();
|
| runJUnitTest(__test, __test.test_import_referenceIntoLibDirectory);
|
| });
|
| - _ut.test('test_import_referenceIntoLibDirectory_no_pubspec', () {
|
| - final __test = new PubSuggestionCodeTest();
|
| - runJUnitTest(__test, __test.test_import_referenceIntoLibDirectory_no_pubspec);
|
| - });
|
| - _ut.test('test_import_referenceOutOfLibDirectory', () {
|
| - final __test = new PubSuggestionCodeTest();
|
| - runJUnitTest(__test, __test.test_import_referenceOutOfLibDirectory);
|
| - });
|
| - _ut.test('test_import_referenceOutOfLibDirectory_no_pubspec', () {
|
| - final __test = new PubSuggestionCodeTest();
|
| - runJUnitTest(__test, __test.test_import_referenceOutOfLibDirectory_no_pubspec);
|
| - });
|
| - _ut.test('test_import_valid_inside_lib1', () {
|
| - final __test = new PubSuggestionCodeTest();
|
| - runJUnitTest(__test, __test.test_import_valid_inside_lib1);
|
| - });
|
| - _ut.test('test_import_valid_inside_lib2', () {
|
| - final __test = new PubSuggestionCodeTest();
|
| - runJUnitTest(__test, __test.test_import_valid_inside_lib2);
|
| - });
|
| - _ut.test('test_import_valid_outside_lib', () {
|
| - final __test = new PubSuggestionCodeTest();
|
| - runJUnitTest(__test, __test.test_import_valid_outside_lib);
|
| - });
|
| - });
|
| - }
|
| -}
|
| -class StaticWarningCodeTest extends ResolverTestCase {
|
| - void fail_commentReferenceConstructorNotVisible() {
|
| - Source source = addSource(EngineTestCase.createSource([]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.COMMENT_REFERENCE_CONSTRUCTOR_NOT_VISIBLE]);
|
| - verify([source]);
|
| - }
|
| - void fail_commentReferenceIdentifierNotVisible() {
|
| - Source source = addSource(EngineTestCase.createSource([]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.COMMENT_REFERENCE_IDENTIFIER_NOT_VISIBLE]);
|
| - verify([source]);
|
| - }
|
| - void fail_commentReferenceUndeclaredConstructor() {
|
| - Source source = addSource(EngineTestCase.createSource([]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.COMMENT_REFERENCE_UNDECLARED_CONSTRUCTOR]);
|
| - verify([source]);
|
| - }
|
| - void fail_commentReferenceUndeclaredIdentifier() {
|
| - Source source = addSource(EngineTestCase.createSource([]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.COMMENT_REFERENCE_UNDECLARED_IDENTIFIER]);
|
| - verify([source]);
|
| - }
|
| - void fail_commentReferenceUriNotLibrary() {
|
| - Source source = addSource(EngineTestCase.createSource([]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.COMMENT_REFERENCE_URI_NOT_LIBRARY]);
|
| - verify([source]);
|
| - }
|
| - void fail_mismatchedAccessorTypes_getterAndSuperSetter() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "class A {",
|
| - " int get g { return 0; }",
|
| - " set g(int v) {}",
|
| - "}",
|
| - "class B extends A {",
|
| - " set g(String v) {}",
|
| - "}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
|
| - verify([source]);
|
| - }
|
| - void fail_mismatchedAccessorTypes_superGetterAndSetter() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "class A {",
|
| - " int get g { return 0; }",
|
| - " set g(int v) {}",
|
| - "}",
|
| - "class B extends A {",
|
| - " String get g { return ''; }",
|
| - "}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
|
| - verify([source]);
|
| + _ut.test('test_import_referenceIntoLibDirectory_no_pubspec', () {
|
| + final __test = new PubSuggestionCodeTest();
|
| + runJUnitTest(__test, __test.test_import_referenceIntoLibDirectory_no_pubspec);
|
| + });
|
| + _ut.test('test_import_referenceOutOfLibDirectory', () {
|
| + final __test = new PubSuggestionCodeTest();
|
| + runJUnitTest(__test, __test.test_import_referenceOutOfLibDirectory);
|
| + });
|
| + _ut.test('test_import_referenceOutOfLibDirectory_no_pubspec', () {
|
| + final __test = new PubSuggestionCodeTest();
|
| + runJUnitTest(__test, __test.test_import_referenceOutOfLibDirectory_no_pubspec);
|
| + });
|
| + _ut.test('test_import_valid_inside_lib1', () {
|
| + final __test = new PubSuggestionCodeTest();
|
| + runJUnitTest(__test, __test.test_import_valid_inside_lib1);
|
| + });
|
| + _ut.test('test_import_valid_inside_lib2', () {
|
| + final __test = new PubSuggestionCodeTest();
|
| + runJUnitTest(__test, __test.test_import_valid_inside_lib2);
|
| + });
|
| + _ut.test('test_import_valid_outside_lib', () {
|
| + final __test = new PubSuggestionCodeTest();
|
| + runJUnitTest(__test, __test.test_import_valid_outside_lib);
|
| + });
|
| + });
|
| }
|
| +}
|
| +class StaticWarningCodeTest extends ResolverTestCase {
|
| void fail_undefinedGetter() {
|
| Source source = addSource(EngineTestCase.createSource([]));
|
| resolve(source);
|
| @@ -13505,21 +13956,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
|
| verify([source]);
|
| }
|
| - void test_assignmentToFinal_excludedSetter() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "class A {",
|
| - " var v;",
|
| - "}",
|
| - "class B extends A {",
|
| - " final v = 0;",
|
| - "}",
|
| - "main() {",
|
| - " new B().v = 1;",
|
| - "}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
|
| - verify([source]);
|
| - }
|
| void test_assignmentToFinal_instanceVariable() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "class A {",
|
| @@ -14308,12 +14744,78 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
|
| verify([source]);
|
| }
|
| + void test_mismatchedAccessorTypes_getterAndSuperSetter() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class A {",
|
| + " int get g { return 0; }",
|
| + "}",
|
| + "class B extends A {",
|
| + " set g(String v) {}",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE]);
|
| + verify([source]);
|
| + }
|
| + void test_mismatchedAccessorTypes_setterAndSuperGetter() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class A {",
|
| + " set g(int v) {}",
|
| + "}",
|
| + "class B extends A {",
|
| + " String get g { return ''; }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE]);
|
| + verify([source]);
|
| + }
|
| void test_mismatchedAccessorTypes_topLevel() {
|
| Source source = addSource(EngineTestCase.createSource(["int get g { return 0; }", "set g(String v) {}"]));
|
| resolve(source);
|
| assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES]);
|
| verify([source]);
|
| }
|
| + void test_mixedReturnTypes_localFunction() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class C {",
|
| + " m(int x) {",
|
| + " return (int y) {",
|
| + " if (y < 0) {",
|
| + " return;",
|
| + " }",
|
| + " return 0;",
|
| + " };",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticWarningCode.MIXED_RETURN_TYPES]);
|
| + verify([source]);
|
| + }
|
| + void test_mixedReturnTypes_method() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class C {",
|
| + " m(int x) {",
|
| + " if (x < 0) {",
|
| + " return;",
|
| + " }",
|
| + " return 0;",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticWarningCode.MIXED_RETURN_TYPES]);
|
| + verify([source]);
|
| + }
|
| + void test_mixedReturnTypes_topLevelFunction() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "f(int x) {",
|
| + " if (x < 0) {",
|
| + " return;",
|
| + " }",
|
| + " return 0;",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticWarningCode.MIXED_RETURN_TYPES]);
|
| + verify([source]);
|
| + }
|
| void test_newWithAbstractClass() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "abstract class A {}",
|
| @@ -14481,18 +14983,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
|
| verify([source]);
|
| }
|
| - void test_nonAbstractClassInheritsAbstractMemberOne_setter_excluded() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "class A {",
|
| - " final int x = 0;",
|
| - "}",
|
| - "class B implements A {",
|
| - " int get x => 42;",
|
| - "}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
|
| - verify([source]);
|
| - }
|
| void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| "class I {",
|
| @@ -14767,6 +15257,20 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
|
| verify([source]);
|
| }
|
| + void test_typePromotion_functionType_arg_InterToDyn() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "typedef FuncDyn(x);",
|
| + "typedef FuncA(A a);",
|
| + "class A {}",
|
| + "class B {}",
|
| + "main(FuncA f) {",
|
| + " if (f is FuncDyn) {",
|
| + " f(new B());",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]);
|
| + }
|
| void test_typeTestNonType() {
|
| Source source = addSource(EngineTestCase.createSource(["var A = 0;", "f(var p) {", " if (p is A) {", " }", "}"]));
|
| resolve(source);
|
| @@ -14817,41 +15321,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
|
| verify([source]);
|
| }
|
| - void test_undefinedIdentifier_hideInBlock_function() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "var v = 1;",
|
| - "main() {",
|
| - " print(v);",
|
| - " v() {}",
|
| - "}",
|
| - "print(x) {}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
|
| - }
|
| - void test_undefinedIdentifier_hideInBlock_local() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "var v = 1;",
|
| - "main() {",
|
| - " print(v);",
|
| - " var v = 2;",
|
| - "}",
|
| - "print(x) {}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
|
| - }
|
| - void test_undefinedIdentifier_hideInBlock_subBlock() {
|
| - Source source = addSource(EngineTestCase.createSource([
|
| - "var v = 1;",
|
| - "main() {",
|
| - " {",
|
| - " print(v);",
|
| - " }",
|
| - " var v = 2;",
|
| - "}",
|
| - "print(x) {}"]));
|
| - resolve(source);
|
| - assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
|
| - }
|
| void test_undefinedIdentifier_initializer() {
|
| Source source = addSource(EngineTestCase.createSource(["var a = b;"]));
|
| resolve(source);
|
| @@ -15055,10 +15524,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_assignmentToConst_localVariable);
|
| });
|
| - _ut.test('test_assignmentToFinal_excludedSetter', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_assignmentToFinal_excludedSetter);
|
| - });
|
| _ut.test('test_assignmentToFinal_instanceVariable', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_assignmentToFinal_instanceVariable);
|
| @@ -15363,10 +15828,30 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_mismatchedAccessorTypes_class);
|
| });
|
| + _ut.test('test_mismatchedAccessorTypes_getterAndSuperSetter', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_mismatchedAccessorTypes_getterAndSuperSetter);
|
| + });
|
| + _ut.test('test_mismatchedAccessorTypes_setterAndSuperGetter', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_mismatchedAccessorTypes_setterAndSuperGetter);
|
| + });
|
| _ut.test('test_mismatchedAccessorTypes_topLevel', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_mismatchedAccessorTypes_topLevel);
|
| });
|
| + _ut.test('test_mixedReturnTypes_localFunction', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_mixedReturnTypes_localFunction);
|
| + });
|
| + _ut.test('test_mixedReturnTypes_method', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_mixedReturnTypes_method);
|
| + });
|
| + _ut.test('test_mixedReturnTypes_topLevelFunction', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_mixedReturnTypes_topLevelFunction);
|
| + });
|
| _ut.test('test_newWithAbstractClass', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_newWithAbstractClass);
|
| @@ -15427,10 +15912,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount);
|
| });
|
| - _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_setter_excluded', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_setter_excluded);
|
| - });
|
| _ut.test('test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface);
|
| @@ -15559,6 +16040,10 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_typeParameterReferencedByStatic_setter);
|
| });
|
| + _ut.test('test_typePromotion_functionType_arg_InterToDyn', () {
|
| + final __test = new StaticWarningCodeTest();
|
| + runJUnitTest(__test, __test.test_typePromotion_functionType_arg_InterToDyn);
|
| + });
|
| _ut.test('test_typeTestNonType', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_typeTestNonType);
|
| @@ -15591,18 +16076,6 @@ class StaticWarningCodeTest extends ResolverTestCase {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedIdentifier_function_prefix);
|
| });
|
| - _ut.test('test_undefinedIdentifier_hideInBlock_function', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_undefinedIdentifier_hideInBlock_function);
|
| - });
|
| - _ut.test('test_undefinedIdentifier_hideInBlock_local', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_undefinedIdentifier_hideInBlock_local);
|
| - });
|
| - _ut.test('test_undefinedIdentifier_hideInBlock_subBlock', () {
|
| - final __test = new StaticWarningCodeTest();
|
| - runJUnitTest(__test, __test.test_undefinedIdentifier_hideInBlock_subBlock);
|
| - });
|
| _ut.test('test_undefinedIdentifier_initializer', () {
|
| final __test = new StaticWarningCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedIdentifier_initializer);
|
| @@ -17852,20 +18325,75 @@ class NonHintCodeTest extends ResolverTestCase {
|
| assertNoErrors(source);
|
| verify([source]);
|
| }
|
| - void test_unnecessaryCast_13855_parameter_A() {
|
| + void test_proxy_annotation_prefixed() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| - "class A{",
|
| - " a() {}",
|
| - "}",
|
| - "class B<E> {",
|
| - " E e;",
|
| - " m() {",
|
| - " (e as A).a();",
|
| + "library L;",
|
| + "import 'meta.dart';",
|
| + "@proxy",
|
| + "class A {}",
|
| + "f(var a) {",
|
| + " a = new A();",
|
| + " a.m();",
|
| + " var x = a.g;",
|
| + " a.s = 1;",
|
| + " var y = a + a;",
|
| + " a++;",
|
| + " ++a;",
|
| + "}"]));
|
| + addSource2("/meta.dart", EngineTestCase.createSource([
|
| + "library meta;",
|
| + "const proxy = const _Proxy();",
|
| + "class _Proxy { const _Proxy(); }"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + }
|
| + void test_proxy_annotation_prefixed2() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "library L;",
|
| + "import 'meta.dart';",
|
| + "@proxy",
|
| + "class A {}",
|
| + "class B {",
|
| + " f(var a) {",
|
| + " a = new A();",
|
| + " a.m();",
|
| + " var x = a.g;",
|
| + " a.s = 1;",
|
| + " var y = a + a;",
|
| + " a++;",
|
| + " ++a;",
|
| " }",
|
| "}"]));
|
| + addSource2("/meta.dart", EngineTestCase.createSource([
|
| + "library meta;",
|
| + "const proxy = const _Proxy();",
|
| + "class _Proxy { const _Proxy(); }"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + }
|
| + void test_proxy_annotation_prefixed3() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "library L;",
|
| + "import 'meta.dart';",
|
| + "class B {",
|
| + " f(var a) {",
|
| + " a = new A();",
|
| + " a.m();",
|
| + " var x = a.g;",
|
| + " a.s = 1;",
|
| + " var y = a + a;",
|
| + " a++;",
|
| + " ++a;",
|
| + " }",
|
| + "}",
|
| + "@proxy",
|
| + "class A {}"]));
|
| + addSource2("/meta.dart", EngineTestCase.createSource([
|
| + "library meta;",
|
| + "const proxy = const _Proxy();",
|
| + "class _Proxy { const _Proxy(); }"]));
|
| resolve(source);
|
| assertNoErrors(source);
|
| - verify([source]);
|
| }
|
| void test_undefinedGetter_inSubtype() {
|
| Source source = addSource(EngineTestCase.createSource([
|
| @@ -18006,6 +18534,21 @@ class NonHintCodeTest extends ResolverTestCase {
|
| resolve(source);
|
| assertNoErrors(source);
|
| }
|
| + void test_unnecessaryCast_13855_parameter_A() {
|
| + Source source = addSource(EngineTestCase.createSource([
|
| + "class A{",
|
| + " a() {}",
|
| + "}",
|
| + "class B<E> {",
|
| + " E e;",
|
| + " m() {",
|
| + " (e as A).a();",
|
| + " }",
|
| + "}"]));
|
| + resolve(source);
|
| + assertNoErrors(source);
|
| + verify([source]);
|
| + }
|
| void test_unnecessaryCast_dynamic_type() {
|
| Source source = addSource(EngineTestCase.createSource(["m(v) {", " var b = v as Object;", "}"]));
|
| resolve(source);
|
| @@ -18151,6 +18694,18 @@ class NonHintCodeTest extends ResolverTestCase {
|
| final __test = new NonHintCodeTest();
|
| runJUnitTest(__test, __test.test_overrideEqualsButNotHashCode);
|
| });
|
| + _ut.test('test_proxy_annotation_prefixed', () {
|
| + final __test = new NonHintCodeTest();
|
| + runJUnitTest(__test, __test.test_proxy_annotation_prefixed);
|
| + });
|
| + _ut.test('test_proxy_annotation_prefixed2', () {
|
| + final __test = new NonHintCodeTest();
|
| + runJUnitTest(__test, __test.test_proxy_annotation_prefixed2);
|
| + });
|
| + _ut.test('test_proxy_annotation_prefixed3', () {
|
| + final __test = new NonHintCodeTest();
|
| + runJUnitTest(__test, __test.test_proxy_annotation_prefixed3);
|
| + });
|
| _ut.test('test_undefinedGetter_inSubtype', () {
|
| final __test = new NonHintCodeTest();
|
| runJUnitTest(__test, __test.test_undefinedGetter_inSubtype);
|
| @@ -18234,7 +18789,7 @@ class EnclosedScopeTest extends ResolverTestCase {
|
| void test_define_duplicate() {
|
| LibraryElement definingLibrary2 = createTestLibrary();
|
| GatheringErrorListener errorListener2 = new GatheringErrorListener();
|
| - Scope rootScope = new Scope_20(definingLibrary2, errorListener2);
|
| + Scope rootScope = new Scope_22(definingLibrary2, errorListener2);
|
| EnclosedScope scope = new EnclosedScope(rootScope);
|
| VariableElement element1 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
|
| VariableElement element2 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
|
| @@ -18245,7 +18800,7 @@ class EnclosedScopeTest extends ResolverTestCase {
|
| void test_define_normal() {
|
| LibraryElement definingLibrary3 = createTestLibrary();
|
| GatheringErrorListener errorListener3 = new GatheringErrorListener();
|
| - Scope rootScope = new Scope_21(definingLibrary3, errorListener3);
|
| + Scope rootScope = new Scope_23(definingLibrary3, errorListener3);
|
| EnclosedScope outerScope = new EnclosedScope(rootScope);
|
| EnclosedScope innerScope = new EnclosedScope(outerScope);
|
| VariableElement element1 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
|
| @@ -18267,18 +18822,18 @@ class EnclosedScopeTest extends ResolverTestCase {
|
| });
|
| }
|
| }
|
| -class Scope_20 extends Scope {
|
| +class Scope_22 extends Scope {
|
| LibraryElement definingLibrary2;
|
| GatheringErrorListener errorListener2;
|
| - Scope_20(this.definingLibrary2, this.errorListener2) : super();
|
| + Scope_22(this.definingLibrary2, this.errorListener2) : super();
|
| LibraryElement get definingLibrary => definingLibrary2;
|
| AnalysisErrorListener get errorListener => errorListener2;
|
| Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
|
| }
|
| -class Scope_21 extends Scope {
|
| +class Scope_23 extends Scope {
|
| LibraryElement definingLibrary3;
|
| GatheringErrorListener errorListener3;
|
| - Scope_21(this.definingLibrary3, this.errorListener3) : super();
|
| + Scope_23(this.definingLibrary3, this.errorListener3) : super();
|
| LibraryElement get definingLibrary => definingLibrary3;
|
| AnalysisErrorListener get errorListener => errorListener3;
|
| Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
|
|
|