1/* 2 * Copyright (c) 2024 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 139class sendableClass19 extends sendableClassA {} // ERROR 140 141// == case3.2: extends non-sendable 142class sendableClass20 extends nonSendableClassB {} // OK 143 144// case4: extends local class 145// == case4.1: extends sendable 146class sendableClass21 extends localSendableClassA {} // ERROR 147 148// == case4.2: extends non-sendable 149class sendableClass22 extends localNonSendableClassB {} // OK 150 151// class + interface 152 153// case1: implements local interface 154// == case1.1: implements sendable 155class sendableClass23 implements localSendableInterface {} // ERROR 156 157// == case1.2: implements non-sendable 158class sendableClass24 implements localNonSendableInterface {} // OK 159 160// case2: implements import interface 161// == case2.1: implements sendable 162class sendableClass25 implements sendableInterface {} // ERROR 163 164// == case2.2: implements non-sendable 165class sendableClass26 implements nonSendableInterface {} // OK 166 167// case3: implements type alias 168// == case4.1: implements sendable 169class sendableClass27 implements localSendableInterfaceAlias {} // ERROR 170 171// == case4.2: implements non-sendable 172class sendableClass28 implements localNonSendableInterfaceAlias {} // OK 173 174// ISendable created by developer is not a sendable interface 175 176interface ISendable {} 177 178interface fakeSendableInterface extends ISendable {} 179 180// fake sendable interface type alias 181type fakeSendableInterfaceAlias = fakeSendableInterface 182 183class sendableClass29 implements fakeSendableInterface {} // OK 184 185class sendableClass30 implements fakeSendableInterfaceAlias {} // OK