~ubuntu-branches/ubuntu/natty/aspectj/natty

« back to all changes in this revision

Viewing changes to org.aspectj/modules/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ModifiersPattern.java

  • Committer: Bazaar Package Importer
  • Author(s): Damien Raude-Morvan
  • Date: 2009-10-04 16:37:23 UTC
  • mfrom: (1.1.3 upstream) (3.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20091004163723-ck4y7j7fhjxskkie
Tags: 1.6.6+dfsg-1
* New upstream release.
  - Update 02_use_gjdoc.diff patch
* Update my email address

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* *******************************************************************
 
2
 * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
 
3
 * All rights reserved. 
 
4
 * This program and the accompanying materials are made available 
 
5
 * under the terms of the Eclipse Public License v1.0 
 
6
 * which accompanies this distribution and is available at 
 
7
 * http://www.eclipse.org/legal/epl-v10.html 
 
8
 *  
 
9
 * Contributors: 
 
10
 *     PARC     initial implementation 
 
11
 * ******************************************************************/
 
12
 
 
13
 
 
14
package org.aspectj.weaver.patterns;
 
15
 
 
16
import java.io.DataOutputStream;
 
17
import java.io.IOException;
 
18
import java.lang.reflect.Modifier;
 
19
import java.util.HashMap;
 
20
import java.util.Map;
 
21
 
 
22
import org.aspectj.weaver.VersionedDataInputStream;
 
23
 
 
24
public class ModifiersPattern extends PatternNode {
 
25
        private int requiredModifiers;
 
26
        private int forbiddenModifiers;
 
27
        
 
28
        public static final ModifiersPattern ANY = new ModifiersPattern(0, 0);
 
29
        
 
30
        public ModifiersPattern(int requiredModifiers, int forbiddenModifiers) {
 
31
                this.requiredModifiers = requiredModifiers;
 
32
                this.forbiddenModifiers = forbiddenModifiers;
 
33
        }
 
34
 
 
35
        public String toString() {
 
36
                if (this == ANY) return "";
 
37
                
 
38
                String ret = Modifier.toString(requiredModifiers);
 
39
                if (forbiddenModifiers == 0) return ret;
 
40
                else return ret + " !" + Modifier.toString(forbiddenModifiers);
 
41
        }
 
42
    
 
43
        public boolean equals(Object other) {
 
44
                if (!(other instanceof ModifiersPattern)) return false;
 
45
                ModifiersPattern o = (ModifiersPattern)other;
 
46
                return o.requiredModifiers == this.requiredModifiers &&
 
47
                                o.forbiddenModifiers == this.forbiddenModifiers;
 
48
        }
 
49
    public int hashCode() {
 
50
        int result = 17;
 
51
        result = 37*result + requiredModifiers;
 
52
        result = 37*result + forbiddenModifiers;
 
53
        return result;
 
54
    }   
 
55
    
 
56
        public boolean matches(int modifiers) {
 
57
                return ((modifiers & requiredModifiers) == requiredModifiers) &&
 
58
                        ((modifiers & forbiddenModifiers) == 0);
 
59
        }
 
60
        
 
61
 
 
62
        public static ModifiersPattern read(VersionedDataInputStream s) throws IOException {
 
63
                int requiredModifiers = s.readShort();
 
64
                int forbiddenModifiers = s.readShort();
 
65
                if (requiredModifiers == 0 && forbiddenModifiers == 0) return ANY;
 
66
                return new ModifiersPattern(requiredModifiers, forbiddenModifiers);
 
67
        }
 
68
 
 
69
        /**
 
70
         * @see org.aspectj.weaver.patterns.PatternNode#write(DataOutputStream)
 
71
         */
 
72
        public void write(DataOutputStream s) throws IOException {
 
73
                //s.writeByte(MODIFIERS_PATTERN);
 
74
                s.writeShort(requiredModifiers);
 
75
                s.writeShort(forbiddenModifiers);
 
76
        }
 
77
        
 
78
        
 
79
        private static Map modifierFlags = null;
 
80
 
 
81
        public static int getModifierFlag(String name) {
 
82
                if (modifierFlags == null) {
 
83
                        modifierFlags = new HashMap();
 
84
                        int flag = 1;
 
85
                        while (flag <= Modifier.STRICT) {
 
86
                                String flagName = Modifier.toString(flag);
 
87
                                modifierFlags.put(flagName, new Integer(flag));
 
88
                                flag = flag << 1;
 
89
                        }
 
90
                }
 
91
                Integer flag = (Integer)modifierFlags.get(name);
 
92
                if (flag == null) return -1;
 
93
                return flag.intValue();
 
94
        }
 
95
 
 
96
    public Object accept(PatternNodeVisitor visitor, Object data) {
 
97
        return visitor.visit(this, data);
 
98
    }
 
99
}