blob: b60ba6238e47ba3e4545f6e3b6d80298c80d46af [file]
// 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 Base class can be constructed and extended but not implemented,
/// mixed in and is not exhaustive
///
/// @description Checks that it is a compile-time error if a `base class` is
/// mixed in a `base/final/sealed` class (other cases tested in
/// `basic_restrictions_A04_t*`)
/// @author sgrekhov22@gmail.com
import "class_modifiers_lib.dart";
base class LocalBaseClass {}
base class BaseClassWithBaseClass1 with BaseClass {}
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
base class BaseClassWithBaseClass2 = Object with BaseClass;
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
final class FinalClassWithBaseClass1 with BaseClass {}
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
final class FinalClassWithBaseClass2 = Object with BaseClass;
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
sealed class SealedClassWithBaseClass1 with BaseClass {}
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
sealed class SealedClassWithBaseClass2 = Object with BaseClass;
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract base class AbstractBaseClassWithBaseClass1 with BaseClass {}
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract base class AbstractBaseClassWithBaseClass2 = Object with BaseClass;
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract final class AbstractFinalClassWithBaseClass1 with BaseClass {}
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract final class AbstractFinalClassWithBaseClass2 = Object with BaseClass;
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
enum EnumWithBaseClass with BaseClass {e1, e2}
// ^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
base class BaseClassWithLocalBaseClass1 with LocalBaseClass {}
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
base class BaseClassWithLocalBaseClass2 = Object with LocalBaseClass;
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
final class FinalClassWithLocalBaseClass1 with LocalBaseClass {}
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
final class FinalClassWithLocalBaseClass2 = Object with LocalBaseClass;
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
sealed class SealedClassWithLocalBaseClass1 with LocalBaseClass {}
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
sealed class SealedClassWithLocalBaseClass2 = Object with LocalBaseClass;
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract base class AbstractBaseClassWithLocalBaseClass1 with LocalBaseClass {}
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract base class AbstractBaseClassWithLocalBaseClass2 = Object with LocalBaseClass;
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract final class AbstractFinalClassWithLocalBaseClass1 with LocalBaseClass {}
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract final class AbstractFinalClassWithLocalBaseClass2 = Object with LocalBaseClass;
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
enum EnumWithLocalBaseClass with LocalBaseClass {e1, e2}
// ^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
main() {
print(BaseClassWithBaseClass1);
print(BaseClassWithBaseClass2);
print(FinalClassWithBaseClass1);
print(FinalClassWithBaseClass2);
print(SealedClassWithBaseClass1);
print(SealedClassWithBaseClass2);
print(AbstractBaseClassWithBaseClass1);
print(AbstractBaseClassWithBaseClass2);
print(AbstractFinalClassWithBaseClass1);
print(AbstractFinalClassWithBaseClass2);
print(EnumWithBaseClass);
print(BaseClassWithLocalBaseClass1);
print(BaseClassWithLocalBaseClass2);
print(FinalClassWithLocalBaseClass1);
print(FinalClassWithLocalBaseClass2);
print(SealedClassWithLocalBaseClass1);
print(SealedClassWithLocalBaseClass2);
print(AbstractBaseClassWithLocalBaseClass1);
print(AbstractBaseClassWithLocalBaseClass2);
print(AbstractFinalClassWithLocalBaseClass1);
print(AbstractFinalClassWithLocalBaseClass2);
print(EnumWithLocalBaseClass);
}