001    /*
002     * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered
003     * by the modified BSD License. You should have received a copy of the
004     * modified BSD license with this compiler.
005     * 
006     * Copyright (c) 2005-2008, Torbjorn Ekman
007     * All rights reserved.
008     */
009    
010    aspect Flags {
011      public static final int Modifiers.ACC_PUBLIC       = 0x0001; // class field method
012      public static final int Modifiers.ACC_PRIVATE      = 0x0002; //       field method
013      public static final int Modifiers.ACC_PROTECTED    = 0x0004; //       field method
014      public static final int Modifiers.ACC_STATIC       = 0x0008; //       field method
015      public static final int Modifiers.ACC_FINAL        = 0x0010; // class field method
016      public static final int Modifiers.ACC_SYNCHRONIZED = 0x0020; //             method
017      public static final int Modifiers.ACC_SUPER        = 0x0020; // class
018      public static final int Modifiers.ACC_VOLATILE     = 0x0040; //       field
019      public static final int Modifiers.ACC_TRANSIENT    = 0x0080; //       field
020      public static final int Modifiers.ACC_NATIVE       = 0x0100; //             method
021      public static final int Modifiers.ACC_INTERFACE    = 0x0200; // class
022      public static final int Modifiers.ACC_ABSTRACT     = 0x0400; // class       method
023      public static final int Modifiers.ACC_SYNTHETIC    = 0x1000; //       field method
024      public static final int Modifiers.ACC_STRICT       = 0x0800; //             method
025    
026    
027      // mangle modifiers for nested types
028      public int TypeDecl.mangledFlags(int flags) {
029        boolean privateFlag = (flags & Modifiers.ACC_PRIVATE) != 0;
030        boolean protectedFlag = (flags & Modifiers.ACC_PROTECTED) != 0;
031        flags &= ~ Modifiers.ACC_PRIVATE;
032        flags &= ~ Modifiers.ACC_PROTECTED;
033        if(protectedFlag)
034          flags |= Modifiers.ACC_PUBLIC;
035        return flags;
036      }
037    
038    
039    
040      syn lazy int MethodDecl.flags() {
041        int res = 0;
042        if(isPublic()) res |= Modifiers.ACC_PUBLIC;
043        if(isPrivate()) res |= Modifiers.ACC_PRIVATE;
044        if(isProtected()) res |= Modifiers.ACC_PROTECTED;
045        if(isStatic()) res |= Modifiers.ACC_STATIC;
046        if(isFinal()) res |= Modifiers.ACC_FINAL;
047        if(isSynchronized()) res |= Modifiers.ACC_SYNCHRONIZED;
048        if(isNative()) res |= Modifiers.ACC_NATIVE;
049        if(isAbstract()) res |= Modifiers.ACC_ABSTRACT;
050        if(isStrictfp() || (hostType().isStrictfp() && !hostType().isInterfaceDecl())) res |= Modifiers.ACC_STRICT;
051        return res;
052      }
053    
054      syn lazy int ConstructorDecl.flags() {
055        int res = 0;
056        if(isPublic()) res |= Modifiers.ACC_PUBLIC;
057        if(isPrivate()) res |= Modifiers.ACC_PRIVATE;
058        if(isProtected()) res |= Modifiers.ACC_PROTECTED;
059        //if(isSynchronized()) res |= Modifiers.ACC_SYNCHRONIZED;
060        //if(isStrictfp()) res |= Modifiers.ACC_STRICT;
061        return res;
062      }
063    
064      syn lazy int TypeDecl.flags() {
065        int res = 0;
066        if(isPublic()) res |= Modifiers.ACC_PUBLIC;
067        if(isPrivate()) res |= Modifiers.ACC_PRIVATE;
068        if(isProtected()) res |= Modifiers.ACC_PROTECTED;
069        if(isStatic()) res |= Modifiers.ACC_STATIC;
070        if(isFinal()) res |= Modifiers.ACC_FINAL;
071        // ACC_INTERFACE handled in InterfaceDecl
072        if(isAbstract()) res |= Modifiers.ACC_ABSTRACT;
073        return res;
074      }
075    
076      syn lazy int FieldDeclaration.flags() {
077        int res = 0;
078        if(isPublic()) res |= Modifiers.ACC_PUBLIC;
079        if(isPrivate()) res |= Modifiers.ACC_PRIVATE;
080        if(isProtected()) res |= Modifiers.ACC_PROTECTED;
081        if(isStatic()) res |= Modifiers.ACC_STATIC;
082        if(isFinal()) res |= Modifiers.ACC_FINAL;
083        if(isVolatile()) res |= Modifiers.ACC_VOLATILE;
084        if(isTransient()) res |= Modifiers.ACC_TRANSIENT;
085        return res;
086      }
087    }