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 16class C<in T> { 17 set(_: T): void {} 18} 19 20const C_GLOBAL: C<in Object[]> = new C<Object[]>(); 21 22interface Declaration_Site_I<in In_T, out Out_T> { 23 set(_: In_T): void; 24 get(): Out_T; 25} 26 27interface Use_Site_I<In_T, Out_T> { 28 set(_: In_T): void; 29 get(): Out_T; 30} 31 32class O {} 33 34class Declaration_Site_C implements Declaration_Site_I<O, O> { 35 override set(_: O): void {} 36 override get(): O { 37 return new O(); 38 } 39} 40 41abstract class Use_Site_C implements Use_Site_I<in O, out O> { 42 // override set(_: O): void {} 43 // override get(): O { 44 // return new O(); 45 // } 46} 47 48abstract class Outbounded_Use_Site_C implements Use_Site_I<in O, out> { 49 // override set(_: O): void {} 50 // override get(): Object { 51 // return this; 52 // } 53} 54 55class O2<T> {} 56 57function test(): void { 58 const o: O2<in Object> = new O2<Object>(); 59 const o2: O2<in Object[]> = new O2<Object[]>(); 60} 61