• 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*/
15enum Color{RED, GREEN, BLUE}
16
17@Retention("SOURCE")
18@interface ClassAuthor{
19    authorName: string = "Jim"
20    authorAge: number = 35
21    testBool: boolean = false
22    favorColor: Color = Color.BLUE
23    color: Color[] = [Color.RED, Color.BLUE]
24    reviewers: string[] = ["Bob", "Jim", "Tom"]
25    reviewersAge: number[] = [18, 21, 32]
26    testBools: boolean[] = [false, true, false]
27    mutiArray: number[][] = [
28        [1, 2, 3],
29        [4, -5, 6],
30        [7, 8, -9]
31    ]
32}
33
34@Retention("SOURCE")
35@interface Log{
36    msg:string = ""
37}
38
39@Retention("SOURCE")
40@interface Anno{}
41
42const base = @ClassAuthor (x: number) => x * 2;
43
44const multipleAnno = @ClassAuthor @Log() @Anno (x: number) => x + 1;
45
46const withArg = @Log("msg") (x: number) => x + 2;
47
48const nested1 = @Log (x: number) => {
49    const inner = @Anno (y: number) => y * 2;
50    return inner(x) + 1;
51};
52const nested2 = @Log("nested") ((x: number) => {
53    const inner = @Anno (y: number) => y * x;
54    return inner(x);
55});
56
57const deeplyNested = @ClassAuthor() @Anno @Log() (x: number) => {
58    const level1 = @ClassAuthor @Anno @Log (y: number) => {
59        const level2 = @ClassAuthor() @Anno() @Log() (z: number) => z * 2;
60        return level2(y) + 1;
61    };
62    return level1(x);
63};
64
65@ClassAuthor (x: number) => x * 2;
66
67function foo(a:()=>number){}
68
69function main(){
70    foo(@Log ()=>1)
71}
72
73class A { name = "Bob" }
74let a = new A();
75let show = @Anno(this: A): string => {
76    return "Hi," + this.name;
77}
78
79let show2 = @Anno()(this: A): string => {
80    return "Hello," + this.name;
81}