diff --git a/LanguageFeatures/nnbd/static_errors_A07_t01.dart b/LanguageFeatures/nnbd/static_errors_A07_t01.dart new file mode 100644 index 0000000000..5265c83bd8 --- /dev/null +++ b/LanguageFeatures/nnbd/static_errors_A07_t01.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2024, 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 is an error to derive a mixin from a class declaration which +/// contains an instance variable with a potentially non-nullable type and no +/// initializer expression unless the variable is marked with the `late` +/// modifier. +/// +/// @description Check that it is an error for a mixin class to contain an +/// instance variable with a potentially non-nullable type and no initializer +/// expression. +/// @author sgrekhov22@gmail.com + +mixin class C { + Object instance; +// ^^^^^^^^ +// [analyzer] unspecified +// [cfe] unspecified +} + +main() { + print(C); +} diff --git a/LanguageFeatures/nnbd/static_errors_A07_t02.dart b/LanguageFeatures/nnbd/static_errors_A07_t02.dart new file mode 100644 index 0000000000..2837a62ddc --- /dev/null +++ b/LanguageFeatures/nnbd/static_errors_A07_t02.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2024, 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 is an error to derive a mixin from a class declaration which +/// contains an instance variable with a potentially non-nullable type and no +/// initializer expression unless the variable is marked with the `late` +/// modifier. +/// +/// @description Check that it is not an error for a mixin class to contain an +/// instance variable with a potentially non-nullable type and no initializer +/// expression but this variable is marked `late`. +/// @author sgrekhov22@gmail.com + +mixin class C { + late Object instance; +} + +main() { + print(C); +} diff --git a/LanguageFeatures/nnbd/static_errors_A19_t01.dart b/LanguageFeatures/nnbd/static_errors_A19_t01.dart index 0da9225aa0..fcf7f84bc7 100644 --- a/LanguageFeatures/nnbd/static_errors_A19_t01.dart +++ b/LanguageFeatures/nnbd/static_errors_A19_t01.dart @@ -9,7 +9,6 @@ /// expression throw e is not assignable to Object /// @author sgrekhov@unipro.ru - class A { } @@ -55,5 +54,21 @@ void test6(T x) { // [cfe] unspecified } +extension type ET(Object? _) {} + +void test7(ET x) { + throw x; +// ^ +// [analyzer] unspecified +// [cfe] unspecified +} + main() { + print(test1); + print(test2); + print(test3); + print(test4); + print(test5); + print(test6); + print(test7); } diff --git a/LanguageFeatures/nnbd/static_errors_A19_t02.dart b/LanguageFeatures/nnbd/static_errors_A19_t02.dart index 8237a7b694..75f501ce7b 100644 --- a/LanguageFeatures/nnbd/static_errors_A19_t02.dart +++ b/LanguageFeatures/nnbd/static_errors_A19_t02.dart @@ -60,4 +60,10 @@ void test6(T x) { } main() { + print(test1); + print(test2); + print(test3); + print(test4); + print(test5); + print(test6); } diff --git a/LanguageFeatures/nnbd/static_errors_A20_t04.dart b/LanguageFeatures/nnbd/static_errors_A20_t04.dart new file mode 100644 index 0000000000..744c708932 --- /dev/null +++ b/LanguageFeatures/nnbd/static_errors_A20_t04.dart @@ -0,0 +1,31 @@ +// Copyright (c) 2024, 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 is not an error for the body of a `late` field to reference +/// `this`. +/// +/// @description Check that it is not an error for the body of a `late` field to +/// reference `this`. +/// @author sgrekhov22@gmail.com + +// Requirements=nnbd-strong + +import "../../Utils/expect.dart"; + +class A { + int one = 1; +} + +class C extends A { + int two = 2; + late Function p1 = () => this.one; + late final p2 = () { + return this.two; + }; +} + +main() { + Expect.equals(1, new C().p1()); + Expect.equals(2, new C().p2()); +} diff --git a/LanguageFeatures/nnbd/static_errors_A22_t01.dart b/LanguageFeatures/nnbd/static_errors_A22_t01.dart index bdbd33a15e..a01ed6a281 100644 --- a/LanguageFeatures/nnbd/static_errors_A22_t01.dart +++ b/LanguageFeatures/nnbd/static_errors_A22_t01.dart @@ -11,9 +11,6 @@ /// @author sgrekhov@unipro.ru /// @issue 39661 - -import "dart:async"; - class C { static void sTest() async { late int i = await 42; diff --git a/LanguageFeatures/nnbd/static_errors_A24_t01.dart b/LanguageFeatures/nnbd/static_errors_A24_t01.dart index ffc966041c..b6c87c2c82 100644 --- a/LanguageFeatures/nnbd/static_errors_A24_t01.dart +++ b/LanguageFeatures/nnbd/static_errors_A24_t01.dart @@ -2,35 +2,34 @@ // 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 is not a compile time error to write to a final variable if -/// that variable is declared late and does not have an initializer. +/// @assertion It is not a compile time error to write to a `final` non-local or +/// instance variable if that variable is declared `late` and does not have an +/// initializer. /// -/// @description Check that it is not a compile time error to write to a final -/// variable if that variable is declared late and does not have an initializer. +/// @description Check that it is not a compile time error to write to a +/// non-local `final` variable if that variable is declared `late` and does not +/// have an initializer. /// @author sgrekhov@unipro.ru /// @issue 39684 // Requirements=nnbd-strong - import "../../Utils/expect.dart"; - late final g; +import "../../Utils/expect.dart"; - class C { - static late final s; - late final v; - } +late final g; - main() { - late final l; +class C { + static late final s; + late final v; +} - g = "Lily"; - C.s = "was"; - C c = new C(); - c.v = "here"; - l = "Run, Forrest, run"; +main() { + g = "Lily"; + C.s = "was"; + C c = new C(); + c.v = "here"; - Expect.equals("Lily", g); - Expect.equals("was", C.s); - Expect.equals("here", c.v); - Expect.equals("Run, Forrest, run", l); - } + Expect.equals("Lily", g); + Expect.equals("was", C.s); + Expect.equals("here", c.v); +} diff --git a/LanguageFeatures/nnbd/static_errors_A24_t02.dart b/LanguageFeatures/nnbd/static_errors_A24_t02.dart index e22575c4f3..5ff58e7c18 100644 --- a/LanguageFeatures/nnbd/static_errors_A24_t02.dart +++ b/LanguageFeatures/nnbd/static_errors_A24_t02.dart @@ -2,15 +2,18 @@ // 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 is not a compile time error to write to a final variable if -/// that variable is declared late and does not have an initializer. +/// @assertion It is not a compile time error to write to a `final` non-local or +/// instance variable if that variable is declared `late` and does not have an +/// initializer. /// -/// @description Check that it is a runtime error to write to a final variable -/// when that variable is declared late but has been written to already +/// @description Check that it is a runtime error to write to a non-local +/// `final` variable when that variable is declared `late` but has been written +/// to already /// @author sgrekhov@unipro.ru /// @issue 39684 // Requirements=nnbd-strong + import "../../Utils/expect.dart"; late final g; diff --git a/LanguageFeatures/nnbd/static_errors_A34_t01.dart b/LanguageFeatures/nnbd/static_errors_A34_t01.dart new file mode 100644 index 0000000000..44bb3ed51b --- /dev/null +++ b/LanguageFeatures/nnbd/static_errors_A34_t01.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2024, 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 If the static type of `e` is `void`, the expression `await e` is +/// a compile-time error. +/// +/// @description Check that it is a compile-time error if in a `await e` +/// expression the static type of `e` is `void`. +/// @author sgrekhov22@gmail.com + +void foo() {} + +main() async { + void e = 0; + await e; +// ^ +// [analyzer] unspecified +// [cfe] unspecified + await foo(); +// ^^^ +// [analyzer] unspecified +// [cfe] unspecified +} diff --git a/LanguageFeatures/nnbd/static_errors_A35_t01.dart b/LanguageFeatures/nnbd/static_errors_A35_t01.dart new file mode 100644 index 0000000000..710e28957b --- /dev/null +++ b/LanguageFeatures/nnbd/static_errors_A35_t01.dart @@ -0,0 +1,51 @@ +// Copyright (c) 2024, 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 Let `C` be a type literal denoting a class, mixin, or extension. +/// It is a warning to use a null aware member access with receiver `C`. +/// +/// @description Check that it is a warning to use a null aware member access +/// with a type literal. +/// @author sgrekhov22@gmail.com + +class C { + static void test() {} +} + +mixin M { + static void test() {} +} + +enum E { + e0; + static void test() {} +} + +class A {} + +extension Ext on A { + static void test() {} +} + +extension type ET(int _) { + static void test() {} +} + +main() { + C?.test(); +// ^^ +// [analyzer] unspecified + M?.test(); +// ^^ +// [analyzer] unspecified + E?.test(); +// ^^ +// [analyzer] unspecified + Ext?.test(); +// ^^ +// [analyzer] unspecified + ET?.test(); +// ^^ +// [analyzer] unspecified +} diff --git a/LanguageFeatures/nnbd/static_errors_A36_t01.dart b/LanguageFeatures/nnbd/static_errors_A36_t01.dart new file mode 100644 index 0000000000..3caaf6b776 --- /dev/null +++ b/LanguageFeatures/nnbd/static_errors_A36_t01.dart @@ -0,0 +1,29 @@ +// Copyright (c) 2024, 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 is no longer a warning to override a method which has a +/// default value for a parameter with a method with a different default value +/// for the corresponding parameter. +/// +/// @description Check that it is not a warning to override a method which has a +/// default value for a parameter with a method with a different default value +/// for the corresponding parameter. +/// @author sgrekhov22@gmail.com + +import '../../Utils/expect.dart'; + +class A { + int foo([int x = 1]) => x; + int bar({int x = 1}) => x; +} + +class C extends A { + int foo([int x = 2]) => x; + int bar({int x = 2}) => x; +} + +main() { + Expect.equals(2, C().foo()); + Expect.equals(2, C().bar()); +}