blob: 713d1750801a4aba7baae2f2620c8a1cffbf9ef1 [file] [log] [blame]
// 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 Final class can be constructed but not extended, implemented or
/// mixed in and is not exhaustive
///
/// @description Checks that it is a compile-time error if `final class`
/// is mixed in outside of the library where it is defined
/// @author sgrekhov22@gmail.com
import "class_modifiers_lib.dart";
class ClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
class ClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
base class BaseClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
base class BaseClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
interface class InterfaceClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
interface class InterfaceClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
final class FinalClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
final class FinalClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
sealed class SealedClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
sealed class SealedClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract class AbstractClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract class AbstractClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract base class AbstractBaseClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract base class AbstractBaseClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract interface class AbstractInterfaceClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract interface class AbstractInterfaceClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract final class AbstractFinalClassWithFinalClass1 with FinalClass {}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
abstract final class AbstractFinalClassWithFinalClass2 = Object with FinalClass;
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
enum EnumWithFinalClass with FinalClass {e1, e2}
// ^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
main() {
print(ClassWithFinalClass1);
print(ClassWithFinalClass2);
print(BaseClassWithFinalClass1);
print(BaseClassWithFinalClass2);
print(InterfaceClassWithFinalClass1);
print(InterfaceClassWithFinalClass2);
print(FinalClassWithFinalClass1);
print(FinalClassWithFinalClass2);
print(SealedClassWithFinalClass1);
print(SealedClassWithFinalClass2);
print(AbstractClassWithFinalClass1);
print(AbstractClassWithFinalClass2);
print(AbstractBaseClassWithFinalClass1);
print(AbstractBaseClassWithFinalClass2);
print(AbstractInterfaceClassWithFinalClass1);
print(AbstractInterfaceClassWithFinalClass2);
print(AbstractFinalClassWithFinalClass1);
print(AbstractFinalClassWithFinalClass2);
print(EnumWithFinalClass);
}