aboutsummaryrefslogtreecommitdiffstats
path: root/tests/new/privilegedAspects/driver/PrivilegedAspect.java
blob: 456dec59b1b045c7849431d255ce7c5ced7f7af3 (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package driver;

import org.aspectj.lang.annotation.SuppressAjWarnings;
// import pack.DefaultTarget; // does not work - ok 
import pack.PublicTarget; 

/**
 * This aspect attempts to bind class references 
 * and read members of all access types 
 * from public- and default-access classes and inner classes
 * from public static methods in the aspect.   Usage:
 * <pre>PrivilegedAspect.main(null);</pre>
 * - or -
 * <pre>PrivilegedAspect.readPublicTarget();
 * PrivilegedAspect.readPublicInnerTarget();
 * PrivilegedAspect.readDefaultTarget();
 * PrivilegedAspect.readDefaultInnerTarget();</pre>
 */
public privileged aspect PrivilegedAspect {
    /** run all other static methods 
     * @param args ignored */
    public static void main(String[] args) {
        readPublicTarget();
        readPublicInnerTarget();
        readDefaultTarget();
        readDefaultInnerTarget();
    }

    /** in public class 
     * read static and instance fields and 
     * invoke methods, both of all access types 
     */
    public static void readPublicTarget() {
        Class c = PublicTarget.class;
        int i = 0;
        i += PublicTarget.publicStaticInt;
        i += PublicTarget.protectedStaticInt;
        i += PublicTarget.defaultStaticInt;
        i += PublicTarget.privateStaticInt;
        PublicTarget publicTarget = new PublicTarget();
        i += publicTarget.publicInt;
        i += publicTarget.protectedInt;
        i += publicTarget.defaultInt;
        i += publicTarget. privateInt;
        publicTarget.publicMethod(); 
        publicTarget.protectedMethod();
        publicTarget.defaultMethod();
        publicTarget.privateMethod();
    }

    /** in public inner class 
     * read static and instance fields and 
     * invoke methods, both of all access types 
     */
    public static void readPublicInnerTarget() {
        Class c = PublicTarget.PublicInner.class;
        int i = 0;
        i += PublicTarget.PublicInner.publicStaticPublicInnerInt;
        i += PublicTarget.PublicInner.protectedStaticPublicInnerInt;
        i += PublicTarget.PublicInner.defaultStaticPublicInnerInt;
        i += PublicTarget.PublicInner.privateStaticPublicInnerInt;
        PublicTarget.PublicInner publicInnerTarget 
            = new PublicTarget().new PublicInner();
        i += publicInnerTarget.publicPublicInnerInt;
        i += publicInnerTarget.protectedPublicInnerInt;
        i += publicInnerTarget.defaultPublicInnerInt;
        i += publicInnerTarget. privatePublicInnerInt;
        publicInnerTarget.publicPublicInnerMethod(); 
        publicInnerTarget.protectedPublicInnerMethod();
        publicInnerTarget.defaultPublicInnerMethod();
        publicInnerTarget.privatePublicInnerMethod();
    }

   
    /** in class with default access 
     * read static and instance fields and 
     * invoke methods, both of all access types 
     */
    public static void readDefaultTarget() {
        Class c = pack.DefaultTarget.class;
        int i = 0;
        i += pack.DefaultTarget.publicStaticInt;
        i += pack.DefaultTarget.protectedStaticInt;
        i += pack.DefaultTarget.defaultStaticInt;
        i += pack.DefaultTarget.privateStaticInt;
        pack.DefaultTarget defaultTarget = new pack.DefaultTarget();
        i += defaultTarget.publicInt;
        i += defaultTarget.protectedInt;
        i += defaultTarget.defaultInt;
        i += defaultTarget. privateInt;
        defaultTarget.publicMethod(); 
        defaultTarget.protectedMethod();
        defaultTarget.defaultMethod();
        defaultTarget.privateMethod();
    }

    /** in inner class with default access 
     * read static and instance fields and 
     * invoke methods, both of all access types 
     */
    public static void readDefaultInnerTarget() {
        Class c = pack.DefaultTarget.DefaultInner.class;
        int i = 0;
        i += pack.DefaultTarget.DefaultInner.publicStaticDefaultInnerInt;
        i += pack.DefaultTarget.DefaultInner.protectedStaticDefaultInnerInt;
        i += pack.DefaultTarget.DefaultInner.defaultStaticDefaultInnerInt;
        i += pack.DefaultTarget.DefaultInner.privateStaticDefaultInnerInt;
        pack.DefaultTarget.DefaultInner defaultInnerTarget 
            = new pack.DefaultTarget().new DefaultInner();
        i += defaultInnerTarget.publicDefaultInnerInt;
        i += defaultInnerTarget.protectedDefaultInnerInt;
        i += defaultInnerTarget.defaultDefaultInnerInt;
        i += defaultInnerTarget.privateDefaultInnerInt;
        defaultInnerTarget.publicDefaultInnerMethod(); 
        defaultInnerTarget.protectedDefaultInnerMethod();
        defaultInnerTarget.defaultDefaultInnerMethod();
        defaultInnerTarget.privateDefaultInnerMethod();
    }
    
    // added for Bugzilla Bug 35593  
	// Problem with priviliged aspects 
    public static void foo(pack.DefaultTarget t) {
    }
    
    @SuppressAjWarnings("adviceDidNotMatch") before(pack.DefaultTarget t): call(void mumble()) && this(t) {}
}