From 305facf09a11e7150d176b35fd5e98af4ec7ba55 Mon Sep 17 00:00:00 2001
From: "Sergey G. Grekhov" <sgrekhov22@gmail.com>
Date: Tue, 16 May 2023 11:51:57 +0300
Subject: [PATCH] #1400. Inline classes syntax tests updated and missing one
 added (#2048)

Update inline class syntax tests, add one missing test
---
 .../Inline-classes/inline_class_lib.dart      |   6 +
 .../Inline-classes/syntax_A01_t01.dart        |   2 +-
 .../Inline-classes/syntax_A01_t02.dart        |   2 +-
 .../Inline-classes/syntax_A01_t03.dart        |   2 +-
 .../Inline-classes/syntax_A01_t04.dart        |   2 +-
 .../Inline-classes/syntax_A02_t01.dart        |   3 +-
 .../Inline-classes/syntax_A02_t02.dart        |   3 +-
 .../Inline-classes/syntax_A02_t03.dart        |   2 +-
 .../Inline-classes/syntax_A02_t04.dart        |   3 +-
 .../Inline-classes/syntax_A02_t05.dart        |   3 +-
 .../Inline-classes/syntax_A02_t06.dart        |   3 +-
 .../Inline-classes/syntax_A02_t07.dart        |  30 ++
 .../Inline-classes/syntax_A02_t08.dart        | 119 ++++++++
 .../Inline-classes/syntax_A02_t09.dart        | 115 +++++++
 .../Inline-classes/syntax_A02_t10.dart        |  36 +++
 .../Inline-classes/syntax_A02_t11.dart        |  37 +++
 .../Inline-classes/syntax_A02_t12.dart        | 141 +++++++++
 .../Inline-classes/syntax_A02_t13.dart        | 285 ++++++++++++++++++
 .../Inline-classes/syntax_A03_t01.dart        |   2 +-
 .../Inline-classes/syntax_A03_t02.dart        |   4 +-
 .../Inline-classes/syntax_A03_t03.dart        |   2 +-
 .../Inline-classes/syntax_A03_t04.dart        |   4 +-
 .../Inline-classes/syntax_A03_t05.dart        |   4 +-
 .../Inline-classes/syntax_A04_t01.dart        |   6 +-
 .../Inline-classes/syntax_A04_t02.dart        |   2 +-
 .../Inline-classes/syntax_A04_t03.dart        |   5 +-
 .../Inline-classes/syntax_A04_t04.dart        |   2 +-
 .../Inline-classes/syntax_A05_t01.dart        |  55 ++++
 .../Inline-classes/syntax_A06_t01.dart        |  55 ++--
 .../Inline-classes/syntax_A07_t01.dart        |  64 ----
 30 files changed, 881 insertions(+), 118 deletions(-)
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t07.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t08.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t09.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t10.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t11.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t12.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A02_t13.dart
 create mode 100644 LanguageFeatures/Inline-classes/syntax_A05_t01.dart
 delete mode 100644 LanguageFeatures/Inline-classes/syntax_A07_t01.dart

diff --git a/LanguageFeatures/Inline-classes/inline_class_lib.dart b/LanguageFeatures/Inline-classes/inline_class_lib.dart
index cac9e5d0a4..8ea538428e 100644
--- a/LanguageFeatures/Inline-classes/inline_class_lib.dart
+++ b/LanguageFeatures/Inline-classes/inline_class_lib.dart
@@ -2,6 +2,7 @@
 // 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 Helper library for testing inline classes
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
@@ -9,3 +10,8 @@
 library inline_class_lib;
 
 int x = 42;
+
+final inline class FinalInlineClass {
+  final int x;
+  const FinalInlineClass([this.x = 0]);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A01_t01.dart b/LanguageFeatures/Inline-classes/syntax_A01_t01.dart
index 8aa892cbb7..af5bde5228 100644
--- a/LanguageFeatures/Inline-classes/syntax_A01_t01.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A01_t01.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A01_t02.dart b/LanguageFeatures/Inline-classes/syntax_A01_t02.dart
index e419ebf01e..38d489b1a0 100644
--- a/LanguageFeatures/Inline-classes/syntax_A01_t02.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A01_t02.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A01_t03.dart b/LanguageFeatures/Inline-classes/syntax_A01_t03.dart
index 68ceef36c0..fcac3ccb1f 100644
--- a/LanguageFeatures/Inline-classes/syntax_A01_t03.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A01_t03.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A01_t04.dart b/LanguageFeatures/Inline-classes/syntax_A01_t04.dart
index dc11fdf027..9fb63620a5 100644
--- a/LanguageFeatures/Inline-classes/syntax_A01_t04.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A01_t04.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t01.dart b/LanguageFeatures/Inline-classes/syntax_A02_t01.dart
index a1f2d14347..5670b25fe0 100644
--- a/LanguageFeatures/Inline-classes/syntax_A02_t01.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t01.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -15,7 +15,6 @@
 ///
 /// @description Checks that an inline class declaration may contain different
 /// constructors
-///
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t02.dart b/LanguageFeatures/Inline-classes/syntax_A02_t02.dart
index bff12b0813..5b44db2e92 100644
--- a/LanguageFeatures/Inline-classes/syntax_A02_t02.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t02.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -15,7 +15,6 @@
 ///
 /// @description Checks that an inline class declaration may contain different
 /// constructors with optional parameters
-///
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t03.dart b/LanguageFeatures/Inline-classes/syntax_A02_t03.dart
index 15c856e4eb..4f31880d79 100644
--- a/LanguageFeatures/Inline-classes/syntax_A02_t03.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t03.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t04.dart b/LanguageFeatures/Inline-classes/syntax_A02_t04.dart
index 9b42db1a30..4c63740102 100644
--- a/LanguageFeatures/Inline-classes/syntax_A02_t04.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t04.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -15,7 +15,6 @@
 ///
 /// @description Checks that an inline class declaration may contain  factory
 /// constructors
-///
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t05.dart b/LanguageFeatures/Inline-classes/syntax_A02_t05.dart
index 14f21db0db..a550070fd5 100644
--- a/LanguageFeatures/Inline-classes/syntax_A02_t05.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t05.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -15,7 +15,6 @@
 ///
 /// @description Checks that an inline class declaration may contain constant
 /// constructors
-///
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t06.dart b/LanguageFeatures/Inline-classes/syntax_A02_t06.dart
index 184929ef67..ac516cba4e 100644
--- a/LanguageFeatures/Inline-classes/syntax_A02_t06.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t06.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -15,7 +15,6 @@
 ///
 /// @description Checks that it is a compile-time error if constant constructor
 /// of an inline class is called with not a potentially constant expression
-///
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t07.dart b/LanguageFeatures/Inline-classes/syntax_A02_t07.dart
new file mode 100644
index 0000000000..95c00fbc88
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t07.dart
@@ -0,0 +1,30 @@
+// 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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that an inline class can be declared as `final`
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+import "../../Utils/expect.dart";
+
+final inline class FIC {
+  final int id;
+  const FIC(this.id);
+}
+
+main() {
+  Expect.equals(1, FIC(1).id);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t08.dart b/LanguageFeatures/Inline-classes/syntax_A02_t08.dart
new file mode 100644
index 0000000000..c75c7755c1
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t08.dart
@@ -0,0 +1,119 @@
+// 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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that it is a compile-time error to extend, implement (by
+/// non-inline class) or declare a mixin on a `final inline` class even in the
+/// same library where it is defined
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+final inline class FinalInlineClass {
+  final int x;
+  const FinalInlineClass([this.x = 0]);
+}
+
+class ClassExtendsFinal extends FinalInlineClass {}
+//                              ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base class BaseClassExtendsFinal extends FinalInlineClass {}
+//                                       ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+interface class InterfaceClassExtendsFinal extends FinalInlineClass {}
+//                                                 ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+final class FinalClassExtendsFinal extends FinalInlineClass {}
+//                                         ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+sealed class SealedClassExtendsFinal extends FinalInlineClass {}
+//                                           ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified  const SC(int id): super(id);
+
+abstract class AbstractClassExtendsFinal extends FinalInlineClass {}
+//                                               ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract base class AbstractBaseClassExtendsFinal extends FinalInlineClass {}
+//                                                        ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract interface class AbstractInterfaceClassExtendsFinal extends FinalInlineClass {}
+//                                                                  ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract final class AbstractFinalClassExtendsFinal extends FinalInlineClass {}
+//                                                          ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin class MixinClassExtendsFinal extends FinalInlineClass {}
+//                                         ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base mixin class BaseMixinClassExtendsFinal extends FinalInlineClass {}
+//                                                  ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract mixin class AbstractMixinClassExtendsFinal extends FinalInlineClass {}
+//                                                          ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract base mixin class AbstractBaseMixinClassExtendsFinal extends FinalInlineClass {}
+//                                                                   ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin Mixin on FinalInlineClass {}
+//             ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base mixin BaseMixin on FinalInlineClass {}
+//                      ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {
+  print(ClassExtendsFinal);
+  print(BaseClassExtendsFinal);
+  print(InterfaceClassExtendsFinal);
+  print(FinalClassExtendsFinal);
+  print(SealedClassExtendsFinal);
+  print(AbstractClassExtendsFinal);
+  print(AbstractBaseClassExtendsFinal);
+  print(AbstractInterfaceClassExtendsFinal);
+  print(AbstractFinalClassExtendsFinal);
+  print(MixinClassExtendsFinal);
+  print(BaseMixinClassExtendsFinal);
+  print(AbstractMixinClassExtendsFinal);
+  print(AbstractBaseMixinClassExtendsFinal);
+  print(Mixin);
+  print(BaseMixin);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t09.dart b/LanguageFeatures/Inline-classes/syntax_A02_t09.dart
new file mode 100644
index 0000000000..38d4a6eb85
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t09.dart
@@ -0,0 +1,115 @@
+// 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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that it is a compile-time error if a `final inline`
+/// class is extended outside of the library where it is defined
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+import "inline_class_lib.dart";
+
+class ClassExtendsFinal extends FinalInlineClass {}
+//                              ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base class BaseClassExtendsFinal extends FinalInlineClass {}
+//                                       ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+interface class InterfaceClassExtendsFinal extends FinalInlineClass {}
+//                                                 ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+final class FinalClassExtendsFinal extends FinalInlineClass {}
+//                                         ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+sealed class SealedClassExtendsFinal extends FinalInlineClass {}
+//                                           ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified  const SC(int id): super(id);
+
+abstract class AbstractClassExtendsFinal extends FinalInlineClass {}
+//                                               ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract base class AbstractBaseClassExtendsFinal extends FinalInlineClass {}
+//                                                        ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract interface class AbstractInterfaceClassExtendsFinal extends FinalInlineClass {}
+//                                                                  ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract final class AbstractFinalClassExtendsFinal extends FinalInlineClass {}
+//                                                          ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin class MixinClassExtendsFinal extends FinalInlineClass {}
+//                                         ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base mixin class BaseMixinClassExtendsFinal extends FinalInlineClass {}
+//                                                  ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract mixin class AbstractMixinClassExtendsFinal extends FinalInlineClass {}
+//                                                          ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+abstract base mixin class AbstractBaseMixinClassExtendsFinal extends FinalInlineClass {}
+//                                                                   ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin Mixin on FinalInlineClass {}
+//             ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base mixin BaseMixin on FinalInlineClass {}
+//                      ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {
+  print(ClassExtendsFinal);
+  print(BaseClassExtendsFinal);
+  print(InterfaceClassExtendsFinal);
+  print(FinalClassExtendsFinal);
+  print(SealedClassExtendsFinal);
+  print(AbstractClassExtendsFinal);
+  print(AbstractBaseClassExtendsFinal);
+  print(AbstractInterfaceClassExtendsFinal);
+  print(AbstractFinalClassExtendsFinal);
+  print(MixinClassExtendsFinal);
+  print(BaseMixinClassExtendsFinal);
+  print(AbstractMixinClassExtendsFinal);
+  print(AbstractBaseMixinClassExtendsFinal);
+  print(Mixin);
+  print(BaseMixin);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t10.dart b/LanguageFeatures/Inline-classes/syntax_A02_t10.dart
new file mode 100644
index 0000000000..fd10a157bf
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t10.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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that it is a compile-time error if a `final inline`
+/// class is extended by another `final inline` class in the same library
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+final inline class FIC {
+  final int id ;
+  const FIC(this.id);
+}
+
+final inline class FIC2 extends FIC {
+//                              ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  const FIC2(int id): super(id);
+}
+
+main() {
+  print(FIC2);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t11.dart b/LanguageFeatures/Inline-classes/syntax_A02_t11.dart
new file mode 100644
index 0000000000..77d271e306
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t11.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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that it is not an error if a `final inline` class is
+/// implemented by another `final inline` class in the same library
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+import "../../Utils/expect.dart";
+
+final inline class FIC {
+  final int id ;
+  const FIC(this.id);
+}
+
+final inline class FIC2 implements FIC {
+  final int id;
+  FIC2(this.id);
+}
+
+main() {
+  Expect.equals(1, FIC(1).id);
+  Expect.equals(2, FIC2(2).id);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t12.dart b/LanguageFeatures/Inline-classes/syntax_A02_t12.dart
new file mode 100644
index 0000000000..354a009441
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t12.dart
@@ -0,0 +1,141 @@
+// 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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that it is a compile-time error if a `final inline`
+/// class is implemented outside of the library where it is defined
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+import "inline_class_lib.dart";
+
+class ClassImplementsFinal implements FinalInlineClass {
+//                                    ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+base class BaseClassImplementsFinal implements FinalInlineClass {
+//                                             ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+interface class InterfaceClassImplementsFinal implements FinalInlineClass {
+//                                                       ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+final class FinalClassImplementsFinal implements FinalInlineClass {
+//                                               ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+sealed class SealedClassImplementsFinal implements FinalInlineClass {
+//                                                 ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified  const SC(int id): super(id);
+  int get x => 0;
+}
+
+abstract class AbstractClassImplementsFinal implements FinalInlineClass {
+//                                                     ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+abstract base class AbstractBaseClassImplementsFinal implements FinalInlineClass {
+//                                                              ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+abstract interface class AbstractInterfaceClassImplementsFinal implements FinalInlineClass {
+//                                                                        ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+abstract final class AbstractFinalClassImplementsFinal implements FinalInlineClass {
+//                                                                ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+mixin class MixinClassImplementsFinal implements FinalInlineClass {
+//                                               ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+base mixin class BaseMixinClassImplementsFinal implements FinalInlineClass {
+//                                                        ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+abstract mixin class AbstractMixinClassImplementsFinal implements FinalInlineClass {
+//                                                                ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+abstract base mixin class AbstractBaseMixinClassImplementsFinal implements FinalInlineClass {
+//                                                                         ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  int get x => 0;
+}
+
+mixin Mixin implements FinalInlineClass {}
+//                     ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+base mixin BaseMixin implements FinalInlineClass {}
+//                              ^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+main() {
+  print(ClassImplementsFinal);
+  print(BaseClassImplementsFinal);
+  print(InterfaceClassImplementsFinal);
+  print(FinalClassImplementsFinal);
+  print(SealedClassImplementsFinal);
+  print(AbstractClassImplementsFinal);
+  print(AbstractBaseClassImplementsFinal);
+  print(AbstractInterfaceClassImplementsFinal);
+  print(AbstractFinalClassImplementsFinal);
+  print(MixinClassImplementsFinal);
+  print(BaseMixinClassImplementsFinal);
+  print(AbstractMixinClassImplementsFinal);
+  print(AbstractBaseMixinClassImplementsFinal);
+  print(Mixin);
+  print(BaseMixin);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A02_t13.dart b/LanguageFeatures/Inline-classes/syntax_A02_t13.dart
new file mode 100644
index 0000000000..fbb43b228a
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A02_t13.dart
@@ -0,0 +1,285 @@
+// 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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+///
+/// @description Checks that it is a compile-time error if an `inline` class has
+/// a modifier which is not `final`
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+base inline class BaseInlineClass1 {
+//   ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  BaseInlineClass1(this.id);
+}
+
+inline base class BaseInlineClass2 {
+//     ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  BaseInlineClass2(this.id);
+}
+
+interface inline class InterfaceInlineClass1 {
+//        ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  InterfaceInlineClass1(this.id);
+}
+
+inline interface class InterfaceInlineClass2 {
+//     ^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  InterfaceInlineClass2(this.id);
+}
+
+sealed inline class SealedInlineClass1 {
+//     ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  SealedInlineClass1(this.id);
+}
+
+inline sealed class SealedInlineClass2 {
+//     ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  SealedInlineClass2(this.id);
+}
+
+abstract inline class AbstractInlineClass1 {
+//       ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractInlineClass1(this.id);
+}
+
+inline abstract class AbstractInlineClass2 {
+//     ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractInlineClass2(this.id);
+}
+
+abstract base inline class AbstractBaseInlineClass1 {
+//            ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseInlineClass1(this.id);
+}
+
+abstract inline base class AbstractBaseInlineClass2 {
+//       ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseInlineClass2(this.id);
+}
+
+inline abstract base class AbstractBaseInlineClass3 {
+//     ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseInlineClass3(this.id);
+}
+
+abstract interface inline class AbstractInterfaceInlineClass1 {
+//                 ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractInterfaceInlineClass1(this.id);
+}
+
+abstract inline interface class AbstractInterfaceInlineClass2 {
+//       ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractInterfaceInlineClass2(this.id);
+}
+
+inline abstract interface class AbstractInterfaceInlineClass3 {
+//     ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractInterfaceInlineClass3(this.id);
+}
+
+abstract final inline class AbstractFinalInlineClass1 {
+//             ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractFinalInlineClass1(this.id);
+}
+
+abstract inline final class AbstractFinalInlineClass2 {
+//       ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractFinalInlineClass2(this.id);
+}
+
+inline abstract final class AbstractFinalInlineClass3 {
+//     ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractFinalInlineClass3(this.id);
+}
+
+
+mixin inline class MixinInlineClass1 {
+//    ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  MixinInlineClass1(this.id);
+}
+
+inline mixin class MixinInlineClass2 {
+//     ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  MixinInlineClass2(this.id);
+}
+
+base mixin inline class BaseMixinInlineClass1 {
+//         ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  BaseMixinInlineClass(this.id);
+}
+
+base inline mixin class BaseMixinInlineClass2 {
+//   ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  BaseMixinInlineClass2(this.id);
+}
+
+inline base mixin class BaseMixinInlineClass3 {
+//     ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  BaseMixinInlineClass3(this.id);
+}
+
+abstract mixin inline class AbstractMixinInlineClass1 {
+//             ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractMixinInlineClass1(this.id);
+}
+
+abstract inline mixin class AbstractMixinInlineClass2 {
+//       ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractMixinInlineClass2(this.id);
+}
+
+inline abstract mixin class AbstractMixinInlineClass3 {
+//     ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractMixinInlineClass3(this.id);
+}
+
+abstract base mixin inline class AbstractBaseMixinInlineClass1 {
+//                  ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseMixinInlineClass1(this.id);
+}
+
+abstract base inline mixin class AbstractBaseMixinInlineClass2 {
+//            ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseMixinInlineClass2(this.id);
+}
+
+abstract inline base mixin class AbstractBaseMixinInlineClass3 {
+//       ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseMixinInlineClass3(this.id);
+}
+
+inline abstract base mixin class AbstractBaseMixinInlineClass4 {
+//     ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  final int id;
+  AbstractBaseMixinInlineClass4(this.id);
+}
+
+main() {
+  print(BaseInlineClass1);
+  print(BaseInlineClass2);
+  print(InterfaceInlineClass1);
+  print(InterfaceInlineClass2);
+  print(SealedInlineClass1);
+  print(SealedInlineClass2);
+  print(AbstractInlineClass1);
+  print(AbstractInlineClass2);
+  print(AbstractBaseInlineClass1);
+  print(AbstractBaseInlineClass2);
+  print(AbstractBaseInlineClass3);
+  print(AbstractInterfaceInlineClass1);
+  print(AbstractInterfaceInlineClass2);
+  print(AbstractInterfaceInlineClass3);
+  print(AbstractFinalInlineClass1);
+  print(AbstractFinalInlineClass2);
+  print(AbstractFinalInlineClass3);
+  print(MixinInlineClass1);
+  print(MixinInlineClass2);
+  print(BaseMixinInlineClass1);
+  print(BaseMixinInlineClass2);
+  print(BaseMixinInlineClass3);
+  print(AbstractMixinInlineClass1);
+  print(AbstractMixinInlineClass2);
+  print(AbstractMixinInlineClass3);
+  print(AbstractBaseMixinInlineClass1);
+  print(AbstractBaseMixinInlineClass2);
+  print(AbstractBaseMixinInlineClass3);
+  print(AbstractBaseMixinInlineClass4);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A03_t01.dart b/LanguageFeatures/Inline-classes/syntax_A03_t01.dart
index a2663f7fd6..7724956a86 100644
--- a/LanguageFeatures/Inline-classes/syntax_A03_t01.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A03_t01.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A03_t02.dart b/LanguageFeatures/Inline-classes/syntax_A03_t02.dart
index 2cd4e98c60..4f555dc84d 100644
--- a/LanguageFeatures/Inline-classes/syntax_A03_t02.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A03_t02.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -20,7 +20,7 @@
 /// otherwise a compile-time error occurs.
 ///
 /// @description Checks that it is a compile-time error if an inline class
-/// declares an instance variable but this variable is not final
+/// declares an instance variable but this variable is not `final`
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A03_t03.dart b/LanguageFeatures/Inline-classes/syntax_A03_t03.dart
index 442e8a03ce..67ecc9145a 100644
--- a/LanguageFeatures/Inline-classes/syntax_A03_t03.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A03_t03.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A03_t04.dart b/LanguageFeatures/Inline-classes/syntax_A03_t04.dart
index 07e1e53abf..4e6d641e1f 100644
--- a/LanguageFeatures/Inline-classes/syntax_A03_t04.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A03_t04.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -20,7 +20,7 @@
 /// otherwise a compile-time error occurs.
 ///
 /// @description Checks that it is a compile-time error if an inline class
-/// declares a late instance variable
+/// declares a `late` instance variable
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A03_t05.dart b/LanguageFeatures/Inline-classes/syntax_A03_t05.dart
index ae15fffde7..fa118b3cca 100644
--- a/LanguageFeatures/Inline-classes/syntax_A03_t05.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A03_t05.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -20,7 +20,7 @@
 /// otherwise a compile-time error occurs.
 ///
 /// @description Checks that it is not an error if an inline class declares one
-/// final instance variable
+/// `final` instance variable
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A04_t01.dart b/LanguageFeatures/Inline-classes/syntax_A04_t01.dart
index 48d7459816..4c2a23702f 100644
--- a/LanguageFeatures/Inline-classes/syntax_A04_t01.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A04_t01.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -17,8 +17,8 @@
 /// of the unique final instance variable that it declares, and the type of the
 /// representation is the declared type of id.
 ///
-/// @description Checks that static type of id is its declared type and there is
-/// a getter named id
+/// @description Checks that static type of `id` is its declared type and there
+/// is a getter named `id`
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A04_t02.dart b/LanguageFeatures/Inline-classes/syntax_A04_t02.dart
index de20175a51..70f04979ef 100644
--- a/LanguageFeatures/Inline-classes/syntax_A04_t02.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A04_t02.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A04_t03.dart b/LanguageFeatures/Inline-classes/syntax_A04_t03.dart
index 1fd740aa05..c67ae0a833 100644
--- a/LanguageFeatures/Inline-classes/syntax_A04_t03.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A04_t03.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
@@ -16,8 +16,7 @@
 /// The name of the representation in an inline class declaration is the name id
 /// of the unique final instance variable that it declares, and the type of the
 /// representation is the declared type of id.
-///
-/// @description Checks that static type of id is its declared type
+/// @description Checks that static type of `id` is its declared type
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
diff --git a/LanguageFeatures/Inline-classes/syntax_A04_t04.dart b/LanguageFeatures/Inline-classes/syntax_A04_t04.dart
index a8e9b7213f..24cc1a7e87 100644
--- a/LanguageFeatures/Inline-classes/syntax_A04_t04.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A04_t04.dart
@@ -6,7 +6,7 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
diff --git a/LanguageFeatures/Inline-classes/syntax_A05_t01.dart b/LanguageFeatures/Inline-classes/syntax_A05_t01.dart
new file mode 100644
index 0000000000..13ff6c3377
--- /dev/null
+++ b/LanguageFeatures/Inline-classes/syntax_A05_t01.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2022, 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 A rule for <inlineClassDeclaration> is added to the grammar,
+/// along with some rules for elements used in inline class declarations:
+///
+/// <inlineClassDeclaration> ::=
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   '{'
+///     (<metadata> <inlineMemberDeclaration>)*
+///   '}'
+///
+/// <inlineMemberDeclaration> ::= <classMemberDefinition>
+/// ...
+/// A compile-time error occurs if an inline class declaration declares an
+/// abstract member.
+///
+/// @description Checks that it is a compile-time error if an inline class
+/// declares an abstract member
+/// @author sgrekhov22@gmail.com
+
+// SharedOptions=--enable-experiment=inline-class
+
+inline class IC1 {
+  final int id;
+
+  IC1(this.id);
+  void foo();
+//^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+inline class IC2 {
+  final int id = 42;
+  int get value;
+//^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+inline class IC3 {
+  final int id = 42;
+  void set value(int val);
+//^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  print(IC1);
+  print(IC2);
+  print(IC3);
+}
diff --git a/LanguageFeatures/Inline-classes/syntax_A06_t01.dart b/LanguageFeatures/Inline-classes/syntax_A06_t01.dart
index d05be07273..c5b4e93d4b 100644
--- a/LanguageFeatures/Inline-classes/syntax_A06_t01.dart
+++ b/LanguageFeatures/Inline-classes/syntax_A06_t01.dart
@@ -6,50 +6,59 @@
 /// along with some rules for elements used in inline class declarations:
 ///
 /// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
+///   'final'? 'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
 ///   '{'
 ///     (<metadata> <inlineMemberDeclaration>)*
 ///   '}'
 ///
 /// <inlineMemberDeclaration> ::= <classMemberDefinition>
 /// ...
-/// A compile-time error occurs if an inline class declaration declares an
-/// abstract member.
+/// There are no special rules for static members in inline classes. They can be
+/// declared and called or torn off as usual, e.g., Inline.myStaticMethod(42)
 ///
-/// @description Checks that it is a compile-time error if an inline class
-/// declares an abstract member
+/// @description Checks that inline classes may have static members. Note that
+/// static members are declared before instance members (and before the unique
+/// instance variable). This is not likely to be the style which is recommended,
+/// but it should be used in at least one test.
 /// @author sgrekhov22@gmail.com
 
 // SharedOptions=--enable-experiment=inline-class
 
+import "../../Utils/expect.dart";
+
 inline class IC1 {
+  static int get staticGetter => 42;
   final int id;
-
   IC1(this.id);
-  void foo();
-//^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
 }
 
 inline class IC2 {
-  final int id = 42;
-  int get value;
-//^^^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+  static int _v;
+  static void set staticSetter(int val) {
+    _v = val;
+  }
+  final int id;
+  IC2(this.id);
 }
 
 inline class IC3 {
-  final int id = 42;
-  void set value(int val);
-//^^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+  static int staticMethod(int val) => val;
+  final int id;
+  IC3(this.id);
+}
+
+inline class IC4 {
+  static int staticVar = 0;
+  final int id;
+  IC4(this.id);
 }
 
 main() {
-  print(IC1);
-  print(IC2);
-  print(IC3);
+  Expect.equals(42, IC1.staticGetter);
+  IC2.staticSetter = -42;
+  Expect.equals(-42, IC2._v);
+  Expect.equals(2, IC3.staticMethod(2));
+  Expect.equals(0, IC4.staticVar);
+  IC4.staticVar = 1;
+  Expect.equals(1, IC4.staticVar);
 }
diff --git a/LanguageFeatures/Inline-classes/syntax_A07_t01.dart b/LanguageFeatures/Inline-classes/syntax_A07_t01.dart
deleted file mode 100644
index 3cdbbbf6c9..0000000000
--- a/LanguageFeatures/Inline-classes/syntax_A07_t01.dart
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2022, 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 A rule for <inlineClassDeclaration> is added to the grammar,
-/// along with some rules for elements used in inline class declarations:
-///
-/// <inlineClassDeclaration> ::=
-///   'inline' 'class' <typeIdentifier> <typeParameters>? <interfaces>?
-///   '{'
-///     (<metadata> <inlineMemberDeclaration>)*
-///   '}'
-///
-/// <inlineMemberDeclaration> ::= <classMemberDefinition>
-/// ...
-/// There are no special rules for static members in inline classes. They can be
-/// declared and called or torn off as usual, e.g., Inline.myStaticMethod(42)
-///
-/// @description Checks that inline classes may have static members. Note that
-/// static members are declared before instance members (and before the unique
-/// instance variable). This is not likely to be the style which is recommended,
-/// but it should be used in at least one test.
-/// @author sgrekhov22@gmail.com
-
-// SharedOptions=--enable-experiment=inline-class
-
-import "../../Utils/expect.dart";
-
-inline class IC1 {
-  static int get staticGetter => 42;
-  final int id;
-  IC1(this.id);
-}
-
-inline class IC2 {
-  static int _v;
-  static void set staticSetter(int val) {
-    _v = val;
-  }
-  final int id;
-  IC2(this.id);
-}
-
-inline class IC3 {
-  static int staticMethod(int val) => val;
-  final int id;
-  IC3(this.id);
-}
-
-inline class IC4 {
-  static int staticVar = 0;
-  final int id;
-  IC4(this.id);
-}
-
-main() {
-  Expect.equals(42, IC1.staticGetter);
-  IC2.staticSetter = -42;
-  Expect.equals(-42, IC2._v);
-  Expect.equals(2, IC3.staticMethod(2));
-  Expect.equals(0, IC4.staticVar);
-  IC4.staticVar = 1;
-  Expect.equals(1, IC4.staticVar);
-}