From c9923e293afa6674dedaf4f41cf38bf34a687bf4 Mon Sep 17 00:00:00 2001 From: sgrekhov Date: Thu, 13 Apr 2023 13:19:44 +0300 Subject: [PATCH 1/3] #1959. More basic and mixin restrictions tests --- .../basic_restrictions_A05_t01.dart | 84 ++++++++++++++ .../basic_restrictions_A05_t02.dart | 108 ++++++++++++++++++ .../basic_restrictions_A05_t03.dart | 96 ++++++++++++++++ .../Class-modifiers/class_modifiers_lib.dart | 44 +++++++ .../mixin_restrictions_A01_t01.dart | 66 +++++++++++ .../mixin_restrictions_A02_t01.dart | 66 +++++++++++ 6 files changed, 464 insertions(+) create mode 100644 LanguageFeatures/Class-modifiers/basic_restrictions_A05_t01.dart create mode 100644 LanguageFeatures/Class-modifiers/basic_restrictions_A05_t02.dart create mode 100644 LanguageFeatures/Class-modifiers/basic_restrictions_A05_t03.dart create mode 100644 LanguageFeatures/Class-modifiers/class_modifiers_lib.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A01_t01.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart diff --git a/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t01.dart b/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t01.dart new file mode 100644 index 0000000000..eeeb1c5c42 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t01.dart @@ -0,0 +1,84 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion An enum declaration still cannot be implemented, extended or +/// mixed in anywhere, independently of modifiers. +/// +/// @description Check that it is a compile-time error if an enum declaration is +/// extended or used in mixin's `on` part +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +enum E {e1, e2} + +class ExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BaseExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class InterfaceExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FinalExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SealedExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AbstractExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class AbstractBaseExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + + +abstract interface class AbstractInterfaceExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AbstractFinalExtendsEnum extends E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +mixin MixinOnEnum on E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin BaseMixinOnEnum on E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(ExtendsEnum); + print(BaseExtendsEnum); + print(InterfaceExtendsEnum); + print(FinalExtendsEnum); + print(SealedExtendsEnum); + print(AbstractExtendsEnum); + print(AbstractBaseExtendsEnum); + print(AbstractInterfaceExtendsEnum); + print(AbstractFinalExtendsEnum); + print(MixinOnEnum); + print(BaseMixinOnEnum); +} diff --git a/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t02.dart b/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t02.dart new file mode 100644 index 0000000000..e9a8f9c317 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t02.dart @@ -0,0 +1,108 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion An enum declaration still cannot be implemented, extended or +/// mixed in anywhere, independently of modifiers. +/// +/// @description Check that it is a compile-time error if an enum declaration is +/// implemented +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +enum E {e1, e2} + +class ImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BaseImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class InterfaceImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FinalImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SealedImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AbstractImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class AbstractBaseImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + + +abstract interface class AbstractInterfaceImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AbstractFinalImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +mixin class MixinClassImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin class BaseMixinClassImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract mixin class AbstractMixinClassImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base mixin class AbstractBaseMixinClassImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +mixin MixinImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin BaseMixinImplementsEnum implements E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(ImplementsEnum); + print(BaseImplementsEnum); + print(InterfaceImplementsEnum); + print(FinalImplementsEnum); + print(SealedImplementsEnum); + print(AbstractImplementsEnum); + print(AbstractBaseImplementsEnum); + print(AbstractInterfaceImplementsEnum); + print(AbstractFinalImplementsEnum); + print(MixinClassImplementsEnum); + print(BaseMixinClassImplementsEnum); + print(AbstractMixinClassImplementsEnum); + print(AbstractBaseMixinClassImplementsEnum); + print(MixinImplementsEnum); + print(BaseMixinImplementsEnum); +} diff --git a/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t03.dart b/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t03.dart new file mode 100644 index 0000000000..adf32b7956 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/basic_restrictions_A05_t03.dart @@ -0,0 +1,96 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion An enum declaration still cannot be implemented, extended or +/// mixed in anywhere, independently of modifiers. +/// +/// @description Check that it is a compile-time error if an enum declaration is +/// mixed in +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +enum E {e1, e2} + +class WithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BaseWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class InterfaceWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FinalWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SealedWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AbstractWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class AbstractBaseWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + + +abstract interface class AbstractInterfaceWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AbstractFinalWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +mixin class MixinClassWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin class BaseMixinClassWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract mixin class AbstractMixinClassWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base mixin class AbstractBaseMixinClassWithEnum with E {} +// ^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(WithEnum); + print(BaseWithEnum); + print(InterfaceWithEnum); + print(FinalWithEnum); + print(SealedWithEnum); + print(AbstractWithEnum); + print(AbstractBaseWithEnum); + print(AbstractInterfaceWithEnum); + print(AbstractFinalWithEnum); + print(MixinClassWithEnum); + print(BaseMixinClassWithEnum); + print(AbstractMixinClassWithEnum); + print(AbstractBaseMixinClassWithEnum); +} diff --git a/LanguageFeatures/Class-modifiers/class_modifiers_lib.dart b/LanguageFeatures/Class-modifiers/class_modifiers_lib.dart new file mode 100644 index 0000000000..d4e250046a --- /dev/null +++ b/LanguageFeatures/Class-modifiers/class_modifiers_lib.dart @@ -0,0 +1,44 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @description Library defining some base classes for testing class modifiers +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +library class_modifiers_lib; + +class Class {} +base class BaseClass {} +interface class InterfaceClass {} +final class FinalClass {} +abstract class AbstractClass {} +sealed class SealedClass {} +abstract base class AbstractBaseClass {} +abstract interface class AbstractInterfaceClass {} +abstract final class AbstractFinalClass {} +mixin class MixinClass {} +base mixin class BaseMixinClass {} +abstract mixin class AbstractMixinClass {} +abstract base mixin class AbstractBaseMixinClass {} +mixin Mixin {} +base mixin BaseMixin {} + +typedef TypedefBaseClass = BaseClass; +typedef TypedefInterfaceClass = InterfaceClass; +typedef TypedefFinalClass = FinalClass; +typedef TypedefSealedClass = SealedClass; +typedef TypedefAbstractClass = AbstractClass; +typedef TypedefAbstractBaseClass = AbstractBaseClass; +typedef TypedefAbstractInterfaceClass = AbstractInterfaceClass; +typedef TypedefAbstractFinalClass = AbstractFinalClass; +typedef TypedefMixinClass = MixinClass; +typedef TypedefBaseMixinClass = BaseMixinClass; +typedef TypedefAbstractBaseMixinClass = AbstractBaseMixinClass; +typedef TypedefMixin = Mixin; +typedef TypedefBaseMixin = BaseMixin; + +class ExtendsSealedClass extends SealedClass {} +class ImplementsSealedClass implements SealedClass {} +mixin MixinOnSealed on SealedClass {} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A01_t01.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A01_t01.dart new file mode 100644 index 0000000000..36c04cc3d4 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A01_t01.dart @@ -0,0 +1,66 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - has an extends clause +/// +/// @description Check that it is a compile-time error if a `mixin class` +/// declaration has an `extends` clause +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +class C {} + +mixin class MixinClassExtendsObject extends Object {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin class BaseMixinClassExtendsObject extends Object {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract mixin class AbstractMixinClassExtendsObject extends Object {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base mixin class AbstractBaseMixinClassExtendsObject extends Object {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +mixin class MixinClassExtendsC extends C {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin class BaseMixinClassExtendsC extends C {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract mixin class AbstractMixinClassExtendsC extends C {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base mixin class AbstractBaseMixinClassExtendsC extends C {} +// ^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(MixinClassExtendsObject); + print(BaseMixinClassExtendsObject); + print(AbstractMixinClassExtendsObject); + print(AbstractBaseMixinClassExtendsObject); + print(MixinClassExtendsC); + print(BaseMixinClassExtendsC); + print(AbstractMixinClassExtendsC); + print(AbstractBaseMixinClassExtendsC); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart new file mode 100644 index 0000000000..24f7b93658 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart @@ -0,0 +1,66 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - has a with clause, or +/// +/// @description Check that it is a compile-time error if a `mixin class` +/// declaration has a `with` clause +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +mixin M {} + +mixin class MixinClassWithObject with Object {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin class BaseMixinClassWithObject with Object {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract mixin class AbstractMixinClassWithObject with Object {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base mixin class AbstractBaseMixinClassWithObject with Object {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +mixin class MixinClassWithM with M {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base mixin class BaseMixinClassWithM with M {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract mixin class AbstractMixinClassWithM with M {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base mixin class AbstractBaseMixinClassWithM with M {} +// ^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(MixinClassWithObject); + print(BaseMixinClassWithObject); + print(AbstractMixinClassWithObject); + print(AbstractBaseMixinClassWithObject); + print(MixinClassWithM); + print(BaseMixinClassWithM); + print(AbstractMixinClassWithM); + print(AbstractBaseMixinClassWithM); +} From 73d550010a8c0a34b5651378cd5fed8b11236bfb Mon Sep 17 00:00:00 2001 From: sgrekhov Date: Fri, 14 Apr 2023 15:31:13 +0300 Subject: [PATCH 2/3] Mixin restrictions tests added --- .../class_modifiers_pre_feature_lib.dart | 19 + .../mixin_restrictions_A02_t01.dart | 2 +- .../mixin_restrictions_A03_t01.dart | 90 +++ .../mixin_restrictions_A03_t02.dart | 90 +++ .../mixin_restrictions_A03_t03.dart | 90 +++ .../mixin_restrictions_A03_t04.dart | 90 +++ .../mixin_restrictions_A03_t05.dart | 71 +++ .../mixin_restrictions_A03_t06.dart | 37 ++ .../mixin_restrictions_A04_t01.dart | 591 +++++++++++++++++ .../mixin_restrictions_A04_t02.dart | 599 ++++++++++++++++++ .../mixin_restrictions_A04_t03.dart | 511 +++++++++++++++ .../mixin_restrictions_A04_t04.dart | 511 +++++++++++++++ .../mixin_restrictions_A04_t05.dart | 96 +++ .../mixin_restrictions_A04_t06.dart | 104 +++ .../mixin_restrictions_A04_t07.dart | 77 +++ .../mixin_restrictions_A04_t08.dart | 36 ++ 16 files changed, 3013 insertions(+), 1 deletion(-) create mode 100644 LanguageFeatures/Class-modifiers/class_modifiers_pre_feature_lib.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t01.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t02.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t03.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t04.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t05.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t06.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t01.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t02.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t03.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t05.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t06.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart create mode 100644 LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart diff --git a/LanguageFeatures/Class-modifiers/class_modifiers_pre_feature_lib.dart b/LanguageFeatures/Class-modifiers/class_modifiers_pre_feature_lib.dart new file mode 100644 index 0000000000..80cbd473d9 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/class_modifiers_pre_feature_lib.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @description Library containing pre-feature classes for testing class +/// modifiers +/// @author sgrekhov22@gmail.com + +// @dart=2.19 + +library class_modifiers_pre_feature_lib; + +class Class {} +abstract class AbstractClass {} +mixin Mixin {} + +typedef TypedefClass = Class; +typedef TypedefAbstractClass = AbstractClass; +typedef TypedefMixin = Mixin; diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart index 24f7b93658..3daa0cda89 100644 --- a/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A02_t01.dart @@ -4,7 +4,7 @@ /// @assertion It's a compile-time error if a mixin class declaration: /// ... -/// - has a with clause, or +/// - has a with clause /// /// @description Check that it is a compile-time error if a `mixin class` /// declaration has a `with` clause diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t01.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t01.dart new file mode 100644 index 0000000000..635081e3c4 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t01.dart @@ -0,0 +1,90 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - declares any non-trivial generative constructor +/// A trivial generative constructor is a generative constructor that: +/// - Is not a redirecting constructor _(Foo(...) : this.other(...);), +/// - declares no parameters (parameter list is precisely ()), +/// - has no initializer list (no : ... part, so no asserts or initializers, and +/// no explicit super constructor invocation), +/// - has no body (only ;), and +/// - is not external. +/// +/// @description Check that it is a compile-time error if a `mixin class` +/// declares a non-trivial generative constructor +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +mixin class M1 { + M1(int x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M2 { + int x; + M2(this.x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M3 { + M3() {} +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M4 { + int x; + M4() : x = 0; +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M5 { + M5() : assert(true); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M6 { + M6() : super(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M7 { + M7.named(); + M7() : this.named(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +mixin class M8 { + external M8(); +// ^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(M1); + print(M2); + print(M3); + print(M4); + print(M5); + print(M6); + print(M7); + print(M8); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t02.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t02.dart new file mode 100644 index 0000000000..9fae80ffbf --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t02.dart @@ -0,0 +1,90 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - declares any non-trivial generative constructor +/// A trivial generative constructor is a generative constructor that: +/// - Is not a redirecting constructor _(Foo(...) : this.other(...);), +/// - declares no parameters (parameter list is precisely ()), +/// - has no initializer list (no : ... part, so no asserts or initializers, and +/// no explicit super constructor invocation), +/// - has no body (only ;), and +/// - is not external. +/// +/// @description Check that it is a compile-time error if a `base mixin class` +/// declares a non-trivial generative constructor +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +base mixin class M1 { + M1(int x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M2 { + int x; + M2(this.x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M3 { + M3() {} +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M4 { + int x; + M4() : x = 0; +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M5 { + M5() : assert(true); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M6 { + M6() : super(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M7 { + M7.named(); + M7() : this.named(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base mixin class M8 { + external M8(); +// ^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(M1); + print(M2); + print(M3); + print(M4); + print(M5); + print(M6); + print(M7); + print(M8); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t03.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t03.dart new file mode 100644 index 0000000000..a86fba0aca --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t03.dart @@ -0,0 +1,90 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - declares any non-trivial generative constructor +/// A trivial generative constructor is a generative constructor that: +/// - Is not a redirecting constructor _(Foo(...) : this.other(...);), +/// - declares no parameters (parameter list is precisely ()), +/// - has no initializer list (no : ... part, so no asserts or initializers, and +/// no explicit super constructor invocation), +/// - has no body (only ;), and +/// - is not external. +/// +/// @description Check that it is a compile-time error if an +/// `abstract mixin class` declares a non-trivial generative constructor +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +abstract mixin class M1 { + M1(int x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M2 { + int x; + M2(this.x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M3 { + M3() {} +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M4 { + int x; + M4() : x = 0; +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M5 { + M5() : assert(true); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M6 { + M6() : super(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M7 { + M7.named(); + M7() : this.named(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract mixin class M8 { + external M8(); +// ^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(M1); + print(M2); + print(M3); + print(M4); + print(M5); + print(M6); + print(M7); + print(M8); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t04.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t04.dart new file mode 100644 index 0000000000..1c24fe0f11 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t04.dart @@ -0,0 +1,90 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - declares any non-trivial generative constructor +/// A trivial generative constructor is a generative constructor that: +/// - Is not a redirecting constructor _(Foo(...) : this.other(...);), +/// - declares no parameters (parameter list is precisely ()), +/// - has no initializer list (no : ... part, so no asserts or initializers, and +/// no explicit super constructor invocation), +/// - has no body (only ;), and +/// - is not external. +/// +/// @description Check that it is a compile-time error if an +/// `abstract base mixin class` declares a non-trivial generative constructor +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +abstract base mixin class M1 { + M1(int x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M2 { + int x; + M2(this.x); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M3 { + M3() {} +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M4 { + int x; + M4() : x = 0; +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M5 { + M5() : assert(true); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M6 { + M6() : super(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M7 { + M7.named(); + M7() : this.named(); +//^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base mixin class M8 { + external M8(); +// ^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(M1); + print(M2); + print(M3); + print(M4); + print(M5); + print(M6); + print(M7); + print(M8); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t05.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t05.dart new file mode 100644 index 0000000000..131979c746 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t05.dart @@ -0,0 +1,71 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - declares any non-trivial generative constructor +/// A trivial generative constructor is a generative constructor that: +/// - Is not a redirecting constructor _(Foo(...) : this.other(...);), +/// - declares no parameters (parameter list is precisely ()), +/// - has no initializer list (no : ... part, so no asserts or initializers, and +/// no explicit super constructor invocation), +/// - has no body (only ;), and +/// - is not external. +/// +/// @description Check that it is not an error if a `mixin class` declares a +/// trivial generative constructor +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +mixin class M1 { + M1(); + M1.named(); +} + +mixin class M2 { + const M2(); + const M2.named(); +} + +base mixin class M3 { + M3(); + M3.named(); +} + +base mixin class M4 { + const M4(); + const M4.named(); +} + +abstract mixin class M5 { + M5(); + M5.named(); +} + +abstract mixin class M6 { + const M6(); + const M6.named(); +} + +abstract base mixin class M7 { + M7(); + M7.named(); +} + +abstract base mixin class M8 { + const M8(); + const M8.named(); +} + +main() { + print(M1); + print(M2); + print(M3); + print(M4); + print(M5); + print(M6); + print(M7); + print(M8); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t06.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t06.dart new file mode 100644 index 0000000000..b603ef8c3b --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A03_t06.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a mixin class declaration: +/// ... +/// - declares any non-trivial generative constructor +/// A trivial generative constructor is a generative constructor that: +/// - Is not a redirecting constructor _(Foo(...) : this.other(...);), +/// - declares no parameters (parameter list is precisely ()), +/// - has no initializer list (no : ... part, so no asserts or initializers, and +/// no explicit super constructor invocation), +/// - has no body (only ;), and +/// - is not external. +/// +/// @description Check that it is not an error if a `mixin class` declares a +/// factory constructor +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +class M1 { + M1(); + factory M1.f1() = M1; + factory M1.f2() => M1(); +} + +base mixin class M2 { + M2(); + factory M2.f1() = M2; + factory M2.f2() => M2(); +} + +main() { + print(M1); + print(M2); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t01.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t01.dart new file mode 100644 index 0000000000..03af39a3fe --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t01.dart @@ -0,0 +1,591 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is a compile-time error if a class declaration +/// mixes in class not declared as `mixin`. Test the case when mixed in classes +/// defined in another library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +import "class_modifiers_lib.dart"; + +class C1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(C1); + print(C2); + print(C3); + print(C4); + print(C5); + print(C6); + print(C7); + print(C8); + print(C9); + print(BC1); + print(BC2); + print(BC3); + print(BC4); + print(BC5); + print(BC6); + print(BC7); + print(BC8); + print(BC9); + print(IC1); + print(IC2); + print(IC3); + print(IC4); + print(IC5); + print(IC6); + print(IC7); + print(IC8); + print(IC9); + print(FC1); + print(FC2); + print(FC3); + print(FC4); + print(FC5); + print(FC6); + print(FC7); + print(FC8); + print(FC9); + print(SC1); + print(SC2); + print(SC3); + print(SC4); + print(SC5); + print(SC6); + print(SC7); + print(SC8); + print(SC9); + print(AC1); + print(AC2); + print(AC3); + print(AC4); + print(AC5); + print(AC6); + print(AC7); + print(AC8); + print(AC9); + print(ABC1); + print(ABC2); + print(ABC3); + print(ABC4); + print(ABC5); + print(ABC6); + print(ABC7); + print(ABC8); + print(ABC9); + print(AIC1); + print(AIC2); + print(AIC3); + print(AIC4); + print(AIC5); + print(AIC6); + print(AIC7); + print(AIC8); + print(AIC9); + print(AFC1); + print(AFC2); + print(AFC3); + print(AFC4); + print(AFC5); + print(AFC6); + print(AFC7); + print(AFC8); + print(AFC9); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t02.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t02.dart new file mode 100644 index 0000000000..57782287ee --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t02.dart @@ -0,0 +1,599 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is a compile-time error if a class declaration +/// mixes in class not declared as `mixin`. Test the case when mixed in classes +/// defined in the same library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +class Class {} +base class BaseClass {} +interface class InterfaceClass {} +final class FinalClass {} +abstract class AbstractClass {} +sealed class SealedClass {} +abstract base class AbstractBaseClass {} +abstract interface class AbstractInterfaceClass {} +abstract final class AbstractFinalClass {} + +class C1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +class C9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +base class BC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +interface class IC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +final class FC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +sealed class SC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract class AC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract base class ABC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract interface class AIC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +abstract final class AFC9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(C1); + print(C2); + print(C3); + print(C4); + print(C5); + print(C6); + print(C7); + print(C8); + print(C9); + print(BC1); + print(BC2); + print(BC3); + print(BC4); + print(BC5); + print(BC6); + print(BC7); + print(BC8); + print(BC9); + print(IC1); + print(IC2); + print(IC3); + print(IC4); + print(IC5); + print(IC6); + print(IC7); + print(IC8); + print(IC9); + print(FC1); + print(FC2); + print(FC3); + print(FC4); + print(FC5); + print(FC6); + print(FC7); + print(FC8); + print(FC9); + print(SC1); + print(SC2); + print(SC3); + print(SC4); + print(SC5); + print(SC6); + print(SC7); + print(SC8); + print(SC9); + print(AC1); + print(AC2); + print(AC3); + print(AC4); + print(AC5); + print(AC6); + print(AC7); + print(AC8); + print(AC9); + print(ABC1); + print(ABC2); + print(ABC3); + print(ABC4); + print(ABC5); + print(ABC6); + print(ABC7); + print(ABC8); + print(ABC9); + print(AIC1); + print(AIC2); + print(AIC3); + print(AIC4); + print(AIC5); + print(AIC6); + print(AIC7); + print(AIC8); + print(AIC9); + print(AFC1); + print(AFC2); + print(AFC3); + print(AFC4); + print(AFC5); + print(AFC6); + print(AFC7); + print(AFC8); + print(AFC9); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t03.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t03.dart new file mode 100644 index 0000000000..3022d11384 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t03.dart @@ -0,0 +1,511 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is a compile-time error if a class declaration +/// mixes in class not declared as `mixin`. Test the case when mixed in classes +/// defined in another library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +import "class_modifiers_lib.dart"; + +class C1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + + +class C2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(C1); + print(C2); + print(C3); + print(C4); + print(C5); + print(C6); + print(C7); + print(C8); + print(C9); + print(BC1); + print(BC2); + print(BC3); + print(BC4); + print(BC5); + print(BC6); + print(BC7); + print(BC8); + print(BC9); + print(IC1); + print(IC2); + print(IC3); + print(IC4); + print(IC5); + print(IC6); + print(IC7); + print(IC8); + print(IC9); + print(FC1); + print(FC2); + print(FC3); + print(FC4); + print(FC5); + print(FC6); + print(FC7); + print(FC8); + print(FC9); + print(SC1); + print(SC2); + print(SC3); + print(SC4); + print(SC5); + print(SC6); + print(SC7); + print(SC8); + print(SC9); + print(AC1); + print(AC2); + print(AC3); + print(AC4); + print(AC5); + print(AC6); + print(AC7); + print(AC8); + print(AC9); + print(ABC1); + print(ABC2); + print(ABC3); + print(ABC4); + print(ABC5); + print(ABC6); + print(ABC7); + print(ABC8); + print(ABC9); + print(AIC1); + print(AIC2); + print(AIC3); + print(AIC4); + print(AIC5); + print(AIC6); + print(AIC7); + print(AIC8); + print(AIC9); + print(AFC1); + print(AFC2); + print(AFC3); + print(AFC4); + print(AFC5); + print(AFC6); + print(AFC7); + print(AFC8); + print(AFC9); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart new file mode 100644 index 0000000000..287e23e890 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart @@ -0,0 +1,511 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is a compile-time error if a class declaration +/// mixes in class not declared as `mixin`. Test the case when mixed in classes +/// defined in the same library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +import "class_modifiers_lib.dart"; + +class C1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + + +class C2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +class C9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +base class BC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +interface class IC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +final class FC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +sealed class SC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract class AC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract base class ABC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract interface class AIC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC1 = Object with Class; +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC2 = Object with BaseClass; +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC3 = Object with InterfaceClass; +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC4 = Object with FinalClass; +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC5 = Object with SealedClass; +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC6 = Object with AbstractClass; +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC7 = Object with AbstractBaseClass; +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC8 = Object with AbstractInterfaceClass; +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +abstract final class AFC9 = Object with AbstractFinalClass; +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + +main() { + print(C1); + print(C2); + print(C3); + print(C4); + print(C5); + print(C6); + print(C7); + print(C8); + print(C9); + print(BC1); + print(BC2); + print(BC3); + print(BC4); + print(BC5); + print(BC6); + print(BC7); + print(BC8); + print(BC9); + print(IC1); + print(IC2); + print(IC3); + print(IC4); + print(IC5); + print(IC6); + print(IC7); + print(IC8); + print(IC9); + print(FC1); + print(FC2); + print(FC3); + print(FC4); + print(FC5); + print(FC6); + print(FC7); + print(FC8); + print(FC9); + print(SC1); + print(SC2); + print(SC3); + print(SC4); + print(SC5); + print(SC6); + print(SC7); + print(SC8); + print(SC9); + print(AC1); + print(AC2); + print(AC3); + print(AC4); + print(AC5); + print(AC6); + print(AC7); + print(AC8); + print(AC9); + print(ABC1); + print(ABC2); + print(ABC3); + print(ABC4); + print(ABC5); + print(ABC6); + print(ABC7); + print(ABC8); + print(ABC9); + print(AIC1); + print(AIC2); + print(AIC3); + print(AIC4); + print(AIC5); + print(AIC6); + print(AIC7); + print(AIC8); + print(AIC9); + print(AFC1); + print(AFC2); + print(AFC3); + print(AFC4); + print(AFC5); + print(AFC6); + print(AFC7); + print(AFC8); + print(AFC9); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t05.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t05.dart new file mode 100644 index 0000000000..441f23c782 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t05.dart @@ -0,0 +1,96 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is a compile-time error if an enum declaration +/// mixes in class not declared as `mixin`. Test the case when mixed in classes +/// defined in another library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +import "class_modifiers_lib.dart"; + +enum E1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +main() { + print(E1); + print(E2); + print(E3); + print(E4); + print(E5); + print(E6); + print(E7); + print(E8); + print(E9); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t06.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t06.dart new file mode 100644 index 0000000000..c88dd96923 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t06.dart @@ -0,0 +1,104 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is a compile-time error if an enum declaration +/// mixes in class not declared as `mixin`. Test the case when mixed in classes +/// defined in the same library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +class Class {} +base class BaseClass {} +interface class InterfaceClass {} +final class FinalClass {} +abstract class AbstractClass {} +sealed class SealedClass {} +abstract base class AbstractBaseClass {} +abstract interface class AbstractInterfaceClass {} +abstract final class AbstractFinalClass {} + +enum E1 with Class { +// ^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E2 with BaseClass { +// ^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E3 with InterfaceClass { +// ^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E4 with FinalClass { +// ^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E5 with SealedClass { +// ^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E6 with AbstractClass { +// ^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E7 with AbstractBaseClass { +// ^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E8 with AbstractInterfaceClass { +// ^^^^^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +enum E9 with AbstractFinalClass { +// ^^^^^^^^^^^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified + e +} + +main() { + print(E1); + print(E2); + print(E3); + print(E4); + print(E5); + print(E6); + print(E7); + print(E8); + print(E9); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart new file mode 100644 index 0000000000..bea71d37fd --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart @@ -0,0 +1,77 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is not an error if a class declaration mixes in +/// class not declared as `mixin` but defined in a pre-feature library +/// @author sgrekhov22@gmail.com + +// SharedOptions=--enable-experiment=class-modifiers + +import "class_modifiers_pre_feature_lib.dart"; + +class C1 with Class {} + +class C2 with AbstractClass {} + +base class BC1 with Class {} + +base class BC2 with AbstractClass {} + +interface class IC1 with Class {} + +interface class IC2 with AbstractClass {} + +final class FC1 with Class {} + +final class FC2 with AbstractClass {} + +sealed class SC1 with Class {} + +sealed class SC2 with AbstractClass {} + +abstract class AC1 with Class {} + +abstract class AC2 with AbstractClass {} + +abstract base class ABC1 with Class {} + +abstract base class ABC2 with AbstractClass {} + +abstract interface class AIC1 with Class {} + +abstract interface class AIC2 with AbstractClass {} + +abstract final class AFC1 with Class {} + +abstract final class AFC2 with AbstractClass {} + +main() { + print(C1); + print(C2); + print(BC1); + print(BC2); + print(IC1); + print(IC2); + print(FC1); + print(FC2); + print(SC1); + print(SC2); + print(AC1); + print(AC2); + print(ABC1); + print(ABC2); + print(AIC1); + print(AIC2); + print(AFC1); + print(AFC2); +} diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart new file mode 100644 index 0000000000..80f7d4e7e0 --- /dev/null +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart @@ -0,0 +1,36 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// @assertion It's a compile-time error if a class or enum declaration D from +/// library L has S from library K as a declared mixin, unless: +/// - S is a mixin or mixin class declaration (necessarily from a post-feature +/// library), or +/// - S is a non-mixin class declaration which has Object as superclass and +/// declares no generative constructor, and either +/// - K is a pre-feature library, or +/// - K is a platform library and L is a pre-feature library. +/// +/// @description Check that it is not an error if a class declaration from +/// pre-feature library mixes in a class not declared as `mixin` but defined in +/// a platform library +/// @author sgrekhov22@gmail.com + +// @dart=2.19 + +class C1 with Sink { // abstract class + @override + noSuchMethod(Invocation invocation) { + return super.noSuchMethod(invocation); + } +} + +class C2 with Exception {} // abstract interface + +class C3 with Function {} // abstract final + +main() { + print(C1); + print(C2); + print(C3); +} From 0d6584ecb9f61a26ebadf852c6483e16689c63eb Mon Sep 17 00:00:00 2001 From: sgrekhov Date: Mon, 17 Apr 2023 16:08:17 +0300 Subject: [PATCH 3/3] Changes according to the review. Typos fixed --- .../Class-modifiers/mixin_restrictions_A04_t04.dart | 10 +++++++++- .../Class-modifiers/mixin_restrictions_A04_t07.dart | 2 +- .../Class-modifiers/mixin_restrictions_A04_t08.dart | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart index 287e23e890..acfb753129 100644 --- a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t04.dart @@ -18,7 +18,15 @@ // SharedOptions=--enable-experiment=class-modifiers -import "class_modifiers_lib.dart"; +class Class {} +base class BaseClass {} +interface class InterfaceClass {} +final class FinalClass {} +abstract class AbstractClass {} +sealed class SealedClass {} +abstract base class AbstractBaseClass {} +abstract interface class AbstractInterfaceClass {} +abstract final class AbstractFinalClass {} class C1 = Object with Class; // ^^^^^ diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart index bea71d37fd..355a56c64b 100644 --- a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t07.dart @@ -12,7 +12,7 @@ /// - K is a platform library and L is a pre-feature library. /// /// @description Check that it is not an error if a class declaration mixes in -/// class not declared as `mixin` but defined in a pre-feature library +/// a class not declared as `mixin`, but defined in a pre-feature library /// @author sgrekhov22@gmail.com // SharedOptions=--enable-experiment=class-modifiers diff --git a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart index 80f7d4e7e0..8bc35e8816 100644 --- a/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart +++ b/LanguageFeatures/Class-modifiers/mixin_restrictions_A04_t08.dart @@ -12,13 +12,13 @@ /// - K is a platform library and L is a pre-feature library. /// /// @description Check that it is not an error if a class declaration from -/// pre-feature library mixes in a class not declared as `mixin` but defined in +/// pre-feature library mixes in a class not declared as `mixin`, but defined in /// a platform library /// @author sgrekhov22@gmail.com // @dart=2.19 -class C1 with Sink { // abstract class +class C1 with Symbol { // abstract class @override noSuchMethod(Invocation invocation) { return super.noSuchMethod(invocation);