| Index: pkg/analyzer/test/generated/compile_time_error_code_test.dart
|
| diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
|
| index e336325fa7c8582191a9040af0f3bd36a7f317d2..494145ae04929b256a3aa7e69cbad8b5b0f0ac5d 100644
|
| --- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
|
| +++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
|
| @@ -1399,7 +1399,8 @@ class C = a.A with M;'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUP
|
| class M {}
|
| class C = bool with M;''');
|
| resolve(source);
|
| - assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
|
| + assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
|
| + CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
|
| verify([source]);
|
| }
|
|
|
| @@ -1417,7 +1418,8 @@ class C = double with M;''');
|
| class M {}
|
| class C = int with M;''');
|
| resolve(source);
|
| - assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
|
| + assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
|
| + CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
|
| verify([source]);
|
| }
|
|
|
| @@ -1444,7 +1446,8 @@ class C = num with M;''');
|
| class M {}
|
| class C = String with M;''');
|
| resolve(source);
|
| - assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
|
| + assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
|
| + CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
|
| verify([source]);
|
| }
|
|
|
| @@ -2908,6 +2911,32 @@ class B {}
|
| class C = B with a.A;'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode> [CompileTimeErrorCode.MIXIN_DEFERRED_CLASS]);
|
| }
|
|
|
| + void test_mixinHasNoConstructors_mixinApp() {
|
| + Source source = addSource(r'''
|
| +class B {
|
| + B({x});
|
| +}
|
| +class M {}
|
| +class C = B with M;
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_mixinHasNoConstructors_mixinClass() {
|
| + Source source = addSource(r'''
|
| +class B {
|
| + B({x});
|
| +}
|
| +class M {}
|
| +class C extends B with M {}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| void test_mixinInheritsFromNotObject_classDeclaration_extends() {
|
| Source source = addSource(r'''
|
| class A {}
|
| @@ -3196,6 +3225,202 @@ class B extends A {
|
| verify([source]);
|
| }
|
|
|
| + void test_noDefaultSuperConstructorExplicit_MixinAppWithDirectSuperCall() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B({x});
|
| + B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
|
| +}
|
| +class Mixed = B with M;
|
| +class C extends Mixed {
|
| + C(x) : super();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_MixinAppWithNamedSuperCall() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B.named({x});
|
| + B.named2(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
|
| +}
|
| +class Mixed = B with M;
|
| +class C extends Mixed {
|
| + C(x) : super.named();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
|
| + // Don't verify since call to super.named() can't be resolved.
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_mixinAppWithNamedParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B({x});
|
| + B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
|
| +}
|
| +class Mixed = B with M;
|
| +class C extends Mixed {
|
| + C();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_mixinAppWithOptionalParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B([x]);
|
| + B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
|
| +}
|
| +class Mixed = B with M;
|
| +class C extends Mixed {
|
| + C();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_MixinWithDirectSuperCall() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B({x});
|
| +}
|
| +class C extends B with M {
|
| + C(x) : super();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_MixinWithNamedSuperCall() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B.named({x});
|
| +}
|
| +class C extends B with M {
|
| + C(x) : super.named();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
|
| + // Don't verify since call to super.named() can't be resolved.
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_mixinWithNamedParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B({x});
|
| +}
|
| +class C extends B with M {
|
| + C();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorExplicit_mixinWithOptionalParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B([x]);
|
| +}
|
| +class C extends B with M {
|
| + C();
|
| +}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorImplicit_mixinAppWithNamedParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B({x});
|
| + B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
|
| +}
|
| +class Mixed = B with M;
|
| +class C extends Mixed {}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorImplicit_mixinAppWithOptionalParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B([x]);
|
| + B.named(); // To avoid MIXIN_HAS_NO_CONSTRUCTORS
|
| +}
|
| +class Mixed = B with M;
|
| +class C extends Mixed {}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorImplicit_mixinWithNamedParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B({x});
|
| +}
|
| +class C extends B with M {}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| + void test_noDefaultSuperConstructorImplicit_mixinWithOptionalParam() {
|
| + Source source = addSource(r'''
|
| +class M {}
|
| +class B {
|
| + B([x]);
|
| +}
|
| +class C extends B with M {}
|
| +''');
|
| + resolve(source);
|
| + assertErrors(source, [
|
| + CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
|
| + verify([source]);
|
| + }
|
| +
|
| void test_noDefaultSuperConstructorImplicit_superHasParameters() {
|
| Source source = addSource(r'''
|
| class A {
|
|
|