• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import {
17  sendableClassA,
18  sendableVar,
19  nonSendableClassB,
20  nonSendableVar,
21  sendableInterface,
22  nonSendableInterface,
23  lang,
24} from './@arkts.lang';
25
26// sendable class
27@Sendable
28class localSendableClassA {}
29
30// sendable class var
31let localSendableVar = localSendableClassA
32
33
34// non-sendable class
35class localNonSendableClassB {}
36
37// non-sendable class var
38let localNonSendableVar = localNonSendableClassB
39
40// sendable interface
41interface localSendableInterface extends lang.ISendable {}
42
43// non-sendable interface
44interface localNonSendableInterface {}
45
46// sendable interface type alias
47type localSendableInterfaceAlias = localSendableInterface
48
49// non-sendable interface type alias
50type localNonSendableInterfaceAlias = localNonSendableInterface
51
52// left: sendable class
53
54// class + class
55
56// case1: extends import var
57// == case1.1: extends sendable
58@Sendable
59class sendableClass1 extends sendableVar {} // ERROR
60
61// == case1.2: extends non-sendable
62@Sendable
63class sendableClass2 extends nonSendableVar {} // ERROR
64
65// case2: extends local var
66// == case2.1: extends sendable
67@Sendable
68class sendableClass3 extends localSendableVar {} // ERROR
69
70// == case2.2: extends non-sendable
71@Sendable
72class sendableClass4 extends localNonSendableVar {} // ERROR
73
74// case3: extends import class
75// == case3.1: extends sendable
76@Sendable
77class sendableClass5 extends sendableClassA {} // OK
78
79// == case3.2: extends non-sendable
80@Sendable
81class sendableClass6 extends nonSendableClassB {} // ERROR
82
83// case4: extends local class
84// == case4.1: extends sendable
85@Sendable
86class sendableClass7 extends localSendableClassA {} // OK
87
88// == case4.2: extends non-sendable
89@Sendable
90class sendableClass8 extends localNonSendableClassB {} // ERROR
91
92// class + interface
93
94// case1: implements local interface
95// == case1.1: implements sendable
96@Sendable
97class sendableClass9 implements localSendableInterface {} // OK
98
99// == case1.2: implements non-sendable
100@Sendable
101class sendableClass10 implements localNonSendableInterface {} // OK
102
103// case2: implements import interface
104// == case2.1: implements sendable
105@Sendable
106class sendableClass11 implements sendableInterface {} // OK
107
108// == case2.2: implements non-sendable
109@Sendable
110class sendableClass12 implements nonSendableInterface {} // OK
111
112// case3: implements type alias
113// == case3.1: implements sendable
114@Sendable
115class sendableClass13 implements localSendableInterfaceAlias {} // OK
116
117// == case3.2: implements non-sendable
118@Sendable
119class sendableClass14 implements localNonSendableInterfaceAlias {} // OK
120
121// left: non sendable class
122
123// case1: extends import var
124// == case1.1: extends sendable
125class sendableClass15 extends sendableVar {} // ERROR
126
127// == case1.2: extends non-sendable
128class sendableClass16 extends nonSendableVar {} // OK
129
130// case2: extends local var
131// == case2.1: extends sendable
132class sendableClass17 extends localSendableVar {} // ERROR
133
134// == case2.2: extends non-sendable
135class sendableClass18 extends localNonSendableVar {} // OK
136
137// case3: extends import class
138// == case3.1: extends sendable
139@Sendable
140class sendableClass19 extends sendableClassA {} // ERROR
141
142// == case3.2: extends non-sendable
143class sendableClass20 extends nonSendableClassB {} // OK
144
145// case4: extends local class
146// == case4.1: extends sendable
147@Sendable
148class sendableClass21 extends localSendableClassA {} // ERROR
149
150// == case4.2: extends non-sendable
151class sendableClass22 extends localNonSendableClassB {} // OK
152
153// class + interface
154
155// case1: implements local interface
156// == case1.1: implements sendable
157@Sendable
158class sendableClass23 implements localSendableInterface {} // ERROR
159
160// == case1.2: implements non-sendable
161class sendableClass24 implements localNonSendableInterface {} // OK
162
163// case2: implements import interface
164// == case2.1: implements sendable
165@Sendable
166class sendableClass25 implements sendableInterface {} // ERROR
167
168// == case2.2: implements non-sendable
169class sendableClass26 implements nonSendableInterface {} // OK
170
171// case3: implements type alias
172// == case4.1: implements sendable
173@Sendable
174class sendableClass27 implements localSendableInterfaceAlias {} // ERROR
175
176// == case4.2: implements non-sendable
177class sendableClass28 implements localNonSendableInterfaceAlias {} // OK
178
179// ISendable created by developer is not a sendable interface
180
181interface ISendable {}
182
183interface fakeSendableInterface extends ISendable {}
184
185// fake sendable interface type alias
186type fakeSendableInterfaceAlias = fakeSendableInterface
187
188class sendableClass29 implements fakeSendableInterface {} // OK
189
190class sendableClass30 implements fakeSendableInterfaceAlias {} // OK