Skip to content

Commit e155e4d

Browse files
kallentuCommit Queue
authored and
Commit Queue
committed
[cfe] Add tests for pre-feature and a post-feature declaration interactions.
Just adding a few tests to make sure there's no regressions. Bug: #52259 Change-Id: I6aad2d0040736462117a0ce60e3001725923e242 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/302445 Commit-Queue: Kallen Tu <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 13c094e commit e155e4d

30 files changed

+1682
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
// @dart=2.19
6+
7+
// Tests that it's a compile-time error if a class declaration from a
8+
// pre-feature library mixes in a mixin marked `base` in a
9+
// post-feature library, but is not marked 'base', 'final' or 'sealed'.
10+
11+
import 'main_lib.dart';
12+
13+
class WithBaseMixinClass with BaseMixinClass {}
14+
15+
class WithAbstractBaseMixinClass with AbstractBaseMixinClass {}
16+
17+
class WithBaseMixin with BaseMixin {}
18+
19+
abstract class AbstractWithBaseMixinClass with BaseMixinClass {}
20+
21+
abstract class AbstractWithAbstractBaseMixinClass with AbstractBaseMixinClass {}
22+
23+
abstract class AbstractWithBaseMixin with BaseMixin {}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:13:7: Error: The type 'WithBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixinClass' is 'base'.
6+
// Try adding 'base', 'final', or 'sealed' to the type.
7+
// class WithBaseMixinClass with BaseMixinClass {}
8+
// ^
9+
//
10+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:15:7: Error: The type 'WithAbstractBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'AbstractBaseMixinClass' is 'base'.
11+
// Try adding 'base', 'final', or 'sealed' to the type.
12+
// class WithAbstractBaseMixinClass with AbstractBaseMixinClass {}
13+
// ^
14+
//
15+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:17:7: Error: The type 'WithBaseMixin' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixin' is 'base'.
16+
// Try adding 'base', 'final', or 'sealed' to the type.
17+
// class WithBaseMixin with BaseMixin {}
18+
// ^
19+
//
20+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:19:16: Error: The type 'AbstractWithBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixinClass' is 'base'.
21+
// Try adding 'base', 'final', or 'sealed' to the type.
22+
// abstract class AbstractWithBaseMixinClass with BaseMixinClass {}
23+
// ^
24+
//
25+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:21:16: Error: The type 'AbstractWithAbstractBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'AbstractBaseMixinClass' is 'base'.
26+
// Try adding 'base', 'final', or 'sealed' to the type.
27+
// abstract class AbstractWithAbstractBaseMixinClass with AbstractBaseMixinClass {}
28+
// ^
29+
//
30+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:23:16: Error: The type 'AbstractWithBaseMixin' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixin' is 'base'.
31+
// Try adding 'base', 'final', or 'sealed' to the type.
32+
// abstract class AbstractWithBaseMixin with BaseMixin {}
33+
// ^
34+
//
35+
import self as self;
36+
import "dart:core" as core;
37+
import "main_lib.dart" as mai;
38+
39+
import "org-dartlang-testcase:///main_lib.dart";
40+
41+
abstract final class _WithBaseMixinClass&Object&BaseMixinClass = core::Object with mai::BaseMixinClass /*isAnonymousMixin,hasConstConstructor*/ {
42+
const synthetic constructor •() → self::_WithBaseMixinClass&Object&BaseMixinClass
43+
: super core::Object::•()
44+
;
45+
}
46+
class WithBaseMixinClass extends self::_WithBaseMixinClass&Object&BaseMixinClass {
47+
synthetic constructor •() → self::WithBaseMixinClass
48+
: super self::_WithBaseMixinClass&Object&BaseMixinClass::•()
49+
;
50+
}
51+
abstract final class _WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass = core::Object with mai::AbstractBaseMixinClass /*isAnonymousMixin,hasConstConstructor*/ {
52+
const synthetic constructor •() → self::_WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass
53+
: super core::Object::•()
54+
;
55+
}
56+
class WithAbstractBaseMixinClass extends self::_WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass {
57+
synthetic constructor •() → self::WithAbstractBaseMixinClass
58+
: super self::_WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass::•()
59+
;
60+
}
61+
abstract final class _WithBaseMixin&Object&BaseMixin = core::Object with mai::BaseMixin /*isAnonymousMixin,hasConstConstructor*/ {
62+
const synthetic constructor •() → self::_WithBaseMixin&Object&BaseMixin
63+
: super core::Object::•()
64+
;
65+
}
66+
class WithBaseMixin extends self::_WithBaseMixin&Object&BaseMixin {
67+
synthetic constructor •() → self::WithBaseMixin
68+
: super self::_WithBaseMixin&Object&BaseMixin::•()
69+
;
70+
}
71+
abstract final class _AbstractWithBaseMixinClass&Object&BaseMixinClass = core::Object with mai::BaseMixinClass /*isAnonymousMixin,hasConstConstructor*/ {
72+
const synthetic constructor •() → self::_AbstractWithBaseMixinClass&Object&BaseMixinClass
73+
: super core::Object::•()
74+
;
75+
}
76+
abstract class AbstractWithBaseMixinClass extends self::_AbstractWithBaseMixinClass&Object&BaseMixinClass {
77+
synthetic constructor •() → self::AbstractWithBaseMixinClass
78+
: super self::_AbstractWithBaseMixinClass&Object&BaseMixinClass::•()
79+
;
80+
}
81+
abstract final class _AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass = core::Object with mai::AbstractBaseMixinClass /*isAnonymousMixin,hasConstConstructor*/ {
82+
const synthetic constructor •() → self::_AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass
83+
: super core::Object::•()
84+
;
85+
}
86+
abstract class AbstractWithAbstractBaseMixinClass extends self::_AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass {
87+
synthetic constructor •() → self::AbstractWithAbstractBaseMixinClass
88+
: super self::_AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass::•()
89+
;
90+
}
91+
abstract final class _AbstractWithBaseMixin&Object&BaseMixin = core::Object with mai::BaseMixin /*isAnonymousMixin,hasConstConstructor*/ {
92+
const synthetic constructor •() → self::_AbstractWithBaseMixin&Object&BaseMixin
93+
: super core::Object::•()
94+
;
95+
}
96+
abstract class AbstractWithBaseMixin extends self::_AbstractWithBaseMixin&Object&BaseMixin {
97+
synthetic constructor •() → self::AbstractWithBaseMixin
98+
: super self::_AbstractWithBaseMixin&Object&BaseMixin::•()
99+
;
100+
}
101+
102+
library /*isNonNullableByDefault*/;
103+
import self as mai;
104+
import "dart:core" as core;
105+
106+
base mixin class BaseMixinClass extends core::Object {
107+
synthetic constructor •() → mai::BaseMixinClass
108+
: super core::Object::•()
109+
;
110+
}
111+
abstract base mixin class AbstractBaseMixinClass extends core::Object {
112+
synthetic constructor •() → mai::AbstractBaseMixinClass
113+
: super core::Object::•()
114+
;
115+
}
116+
abstract base class BaseMixin extends core::Object /*isMixinDeclaration*/ {
117+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:13:7: Error: The type 'WithBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixinClass' is 'base'.
6+
// Try adding 'base', 'final', or 'sealed' to the type.
7+
// class WithBaseMixinClass with BaseMixinClass {}
8+
// ^
9+
//
10+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:15:7: Error: The type 'WithAbstractBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'AbstractBaseMixinClass' is 'base'.
11+
// Try adding 'base', 'final', or 'sealed' to the type.
12+
// class WithAbstractBaseMixinClass with AbstractBaseMixinClass {}
13+
// ^
14+
//
15+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:17:7: Error: The type 'WithBaseMixin' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixin' is 'base'.
16+
// Try adding 'base', 'final', or 'sealed' to the type.
17+
// class WithBaseMixin with BaseMixin {}
18+
// ^
19+
//
20+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:19:16: Error: The type 'AbstractWithBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixinClass' is 'base'.
21+
// Try adding 'base', 'final', or 'sealed' to the type.
22+
// abstract class AbstractWithBaseMixinClass with BaseMixinClass {}
23+
// ^
24+
//
25+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:21:16: Error: The type 'AbstractWithAbstractBaseMixinClass' must be 'base', 'final' or 'sealed' because the supertype 'AbstractBaseMixinClass' is 'base'.
26+
// Try adding 'base', 'final', or 'sealed' to the type.
27+
// abstract class AbstractWithAbstractBaseMixinClass with AbstractBaseMixinClass {}
28+
// ^
29+
//
30+
// pkg/front_end/testcases/class_modifiers/base/outside_library_mixedin_legacy/main.dart:23:16: Error: The type 'AbstractWithBaseMixin' must be 'base', 'final' or 'sealed' because the supertype 'BaseMixin' is 'base'.
31+
// Try adding 'base', 'final', or 'sealed' to the type.
32+
// abstract class AbstractWithBaseMixin with BaseMixin {}
33+
// ^
34+
//
35+
import self as self;
36+
import "dart:core" as core;
37+
import "main_lib.dart" as mai;
38+
39+
import "org-dartlang-testcase:///main_lib.dart";
40+
41+
abstract final class _WithBaseMixinClass&Object&BaseMixinClass extends core::Object implements mai::BaseMixinClass /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
42+
const synthetic constructor •() → self::_WithBaseMixinClass&Object&BaseMixinClass
43+
: super core::Object::•()
44+
;
45+
}
46+
class WithBaseMixinClass extends self::_WithBaseMixinClass&Object&BaseMixinClass {
47+
synthetic constructor •() → self::WithBaseMixinClass
48+
: super self::_WithBaseMixinClass&Object&BaseMixinClass::•()
49+
;
50+
}
51+
abstract final class _WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass extends core::Object implements mai::AbstractBaseMixinClass /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
52+
const synthetic constructor •() → self::_WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass
53+
: super core::Object::•()
54+
;
55+
}
56+
class WithAbstractBaseMixinClass extends self::_WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass {
57+
synthetic constructor •() → self::WithAbstractBaseMixinClass
58+
: super self::_WithAbstractBaseMixinClass&Object&AbstractBaseMixinClass::•()
59+
;
60+
}
61+
abstract final class _WithBaseMixin&Object&BaseMixin extends core::Object implements mai::BaseMixin /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
62+
const synthetic constructor •() → self::_WithBaseMixin&Object&BaseMixin
63+
: super core::Object::•()
64+
;
65+
}
66+
class WithBaseMixin extends self::_WithBaseMixin&Object&BaseMixin {
67+
synthetic constructor •() → self::WithBaseMixin
68+
: super self::_WithBaseMixin&Object&BaseMixin::•()
69+
;
70+
}
71+
abstract final class _AbstractWithBaseMixinClass&Object&BaseMixinClass extends core::Object implements mai::BaseMixinClass /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
72+
const synthetic constructor •() → self::_AbstractWithBaseMixinClass&Object&BaseMixinClass
73+
: super core::Object::•()
74+
;
75+
}
76+
abstract class AbstractWithBaseMixinClass extends self::_AbstractWithBaseMixinClass&Object&BaseMixinClass {
77+
synthetic constructor •() → self::AbstractWithBaseMixinClass
78+
: super self::_AbstractWithBaseMixinClass&Object&BaseMixinClass::•()
79+
;
80+
}
81+
abstract final class _AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass extends core::Object implements mai::AbstractBaseMixinClass /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
82+
const synthetic constructor •() → self::_AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass
83+
: super core::Object::•()
84+
;
85+
}
86+
abstract class AbstractWithAbstractBaseMixinClass extends self::_AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass {
87+
synthetic constructor •() → self::AbstractWithAbstractBaseMixinClass
88+
: super self::_AbstractWithAbstractBaseMixinClass&Object&AbstractBaseMixinClass::•()
89+
;
90+
}
91+
abstract final class _AbstractWithBaseMixin&Object&BaseMixin extends core::Object implements mai::BaseMixin /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
92+
const synthetic constructor •() → self::_AbstractWithBaseMixin&Object&BaseMixin
93+
: super core::Object::•()
94+
;
95+
}
96+
abstract class AbstractWithBaseMixin extends self::_AbstractWithBaseMixin&Object&BaseMixin {
97+
synthetic constructor •() → self::AbstractWithBaseMixin
98+
: super self::_AbstractWithBaseMixin&Object&BaseMixin::•()
99+
;
100+
}
101+
102+
library /*isNonNullableByDefault*/;
103+
import self as mai;
104+
import "dart:core" as core;
105+
106+
base mixin class BaseMixinClass extends core::Object {
107+
synthetic constructor •() → mai::BaseMixinClass
108+
: super core::Object::•()
109+
;
110+
}
111+
abstract base mixin class AbstractBaseMixinClass extends core::Object {
112+
synthetic constructor •() → mai::AbstractBaseMixinClass
113+
: super core::Object::•()
114+
;
115+
}
116+
abstract base class BaseMixin extends core::Object /*isMixinDeclaration*/ {
117+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @dart = 2.19
2+
import 'main_lib.dart';
3+
4+
class WithBaseMixinClass with BaseMixinClass {}
5+
6+
class WithAbstractBaseMixinClass with AbstractBaseMixinClass {}
7+
8+
class WithBaseMixin with BaseMixin {}
9+
10+
abstract class AbstractWithBaseMixinClass with BaseMixinClass {}
11+
12+
abstract class AbstractWithAbstractBaseMixinClass with AbstractBaseMixinClass {}
13+
14+
abstract class AbstractWithBaseMixin with BaseMixin {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @dart = 2.19
2+
import 'main_lib.dart';
3+
4+
abstract class AbstractWithAbstractBaseMixinClass with AbstractBaseMixinClass {}
5+
6+
abstract class AbstractWithBaseMixin with BaseMixin {}
7+
8+
abstract class AbstractWithBaseMixinClass with BaseMixinClass {}
9+
10+
class WithAbstractBaseMixinClass with AbstractBaseMixinClass {}
11+
12+
class WithBaseMixin with BaseMixin {}
13+
14+
class WithBaseMixinClass with BaseMixinClass {}

0 commit comments

Comments
 (0)