aboutsummaryrefslogtreecommitdiffstats
path: root/tests/new/IntroducedModifiers.java
blob: da9f8da61e8053d3269b52c33cc15c5853f45f21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import org.aspectj.testing.Tester;

import java.lang.reflect.*;

public class IntroducedModifiers {
    public static void main(String[] args) throws Exception {
        Field f = C.class.getField("cf");
        Tester.check(Modifier.isVolatile(f.getModifiers()), "volatile");
        Tester.check(Modifier.isTransient(f.getModifiers()), "transient");

        Method m = C.class.getMethod("m", new Class[0]);
        Tester.check(Modifier.isSynchronized(m.getModifiers()), "synchronized");
        Tester.check(Modifier.isStrict(m.getModifiers()), "strictfp");

        f = C.class.getField("scf");
        Tester.check(Modifier.isVolatile(f.getModifiers()), "volatile");
        Tester.check(Modifier.isTransient(f.getModifiers()), "transient");
        Tester.check(Modifier.isStatic(f.getModifiers()), "static");

        //XXX this name depends on implementation details for field intro on interfaces
        try {
            f = C.class.getField("ajc$interField$A$I$iField");
        } catch (NoSuchFieldException e) {
            f = C.class.getField("iField");
        }
        Tester.check(Modifier.isVolatile(f.getModifiers()), "volatile");
        Tester.check(Modifier.isTransient(f.getModifiers()), "transient");

        m = C.class.getMethod("im", new Class[0]);
        Tester.check(Modifier.isSynchronized(m.getModifiers()), "synchronized");
        Tester.check(Modifier.isStrict(m.getModifiers()), "strictfp");
    }
}


interface I {
}

class C implements I {
}

aspect A {
    public transient volatile int C.cf = 0;
    public synchronized strictfp int C.m() { return 0; }

    public transient volatile static int C.scf = 0;

    public synchronized strictfp int I.im() { return 0; }
    public transient volatile int I.iField = 1;
}