001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 */ 018package org.apache.bcel.classfile; 019 020import org.apache.bcel.Const; 021 022/** 023 * Super class for all objects that have modifiers like private, final, ... I.e. classes, fields, and methods. 024 * 025 */ 026public abstract class AccessFlags { 027 028 /** 029 * @deprecated (since 6.0) will be made private; do not access directly, use getter/setter 030 */ 031 @java.lang.Deprecated 032 protected int access_flags; // TODO not used externally at present 033 034 public AccessFlags() { 035 } 036 037 /** 038 * @param a 039 * inital access flags 040 */ 041 public AccessFlags(final int a) { 042 access_flags = a; 043 } 044 045 /** 046 * @return Access flags of the object aka. "modifiers". 047 */ 048 public final int getAccessFlags() { 049 return access_flags; 050 } 051 052 /** 053 * @return Access flags of the object aka. "modifiers". 054 */ 055 public final int getModifiers() { 056 return access_flags; 057 } 058 059 /** 060 * Set access flags aka "modifiers". 061 * 062 * @param access_flags 063 * Access flags of the object. 064 */ 065 public final void setAccessFlags(final int access_flags) { 066 this.access_flags = access_flags; 067 } 068 069 /** 070 * Set access flags aka "modifiers". 071 * 072 * @param access_flags 073 * Access flags of the object. 074 */ 075 public final void setModifiers(final int access_flags) { 076 setAccessFlags(access_flags); 077 } 078 079 private void setFlag(final int flag, final boolean set) { 080 if ((access_flags & flag) != 0) { // Flag is set already 081 if (!set) { 082 access_flags ^= flag; 083 } 084 } else { // Flag not set 085 if (set) { 086 access_flags |= flag; 087 } 088 } 089 } 090 091 public final void isPublic(final boolean flag) { 092 setFlag(Const.ACC_PUBLIC, flag); 093 } 094 095 public final boolean isPublic() { 096 return (access_flags & Const.ACC_PUBLIC) != 0; 097 } 098 099 public final void isPrivate(final boolean flag) { 100 setFlag(Const.ACC_PRIVATE, flag); 101 } 102 103 public final boolean isPrivate() { 104 return (access_flags & Const.ACC_PRIVATE) != 0; 105 } 106 107 public final void isProtected(final boolean flag) { 108 setFlag(Const.ACC_PROTECTED, flag); 109 } 110 111 public final boolean isProtected() { 112 return (access_flags & Const.ACC_PROTECTED) != 0; 113 } 114 115 public final void isStatic(final boolean flag) { 116 setFlag(Const.ACC_STATIC, flag); 117 } 118 119 public final boolean isStatic() { 120 return (access_flags & Const.ACC_STATIC) != 0; 121 } 122 123 public final void isFinal(final boolean flag) { 124 setFlag(Const.ACC_FINAL, flag); 125 } 126 127 public final boolean isFinal() { 128 return (access_flags & Const.ACC_FINAL) != 0; 129 } 130 131 public final void isSynchronized(final boolean flag) { 132 setFlag(Const.ACC_SYNCHRONIZED, flag); 133 } 134 135 public final boolean isSynchronized() { 136 return (access_flags & Const.ACC_SYNCHRONIZED) != 0; 137 } 138 139 public final void isVolatile(final boolean flag) { 140 setFlag(Const.ACC_VOLATILE, flag); 141 } 142 143 public final boolean isVolatile() { 144 return (access_flags & Const.ACC_VOLATILE) != 0; 145 } 146 147 public final void isTransient(final boolean flag) { 148 setFlag(Const.ACC_TRANSIENT, flag); 149 } 150 151 public final boolean isTransient() { 152 return (access_flags & Const.ACC_TRANSIENT) != 0; 153 } 154 155 public final void isNative(final boolean flag) { 156 setFlag(Const.ACC_NATIVE, flag); 157 } 158 159 public final boolean isNative() { 160 return (access_flags & Const.ACC_NATIVE) != 0; 161 } 162 163 public final void isInterface(final boolean flag) { 164 setFlag(Const.ACC_INTERFACE, flag); 165 } 166 167 public final boolean isInterface() { 168 return (access_flags & Const.ACC_INTERFACE) != 0; 169 } 170 171 public final void isAbstract(final boolean flag) { 172 setFlag(Const.ACC_ABSTRACT, flag); 173 } 174 175 public final boolean isAbstract() { 176 return (access_flags & Const.ACC_ABSTRACT) != 0; 177 } 178 179 public final void isStrictfp(final boolean flag) { 180 setFlag(Const.ACC_STRICT, flag); 181 } 182 183 public final boolean isStrictfp() { 184 return (access_flags & Const.ACC_STRICT) != 0; 185 } 186 187 public final void isSynthetic(final boolean flag) { 188 setFlag(Const.ACC_SYNTHETIC, flag); 189 } 190 191 public final boolean isSynthetic() { 192 return (access_flags & Const.ACC_SYNTHETIC) != 0; 193 } 194 195 public final void isAnnotation(final boolean flag) { 196 setFlag(Const.ACC_ANNOTATION, flag); 197 } 198 199 public final boolean isAnnotation() { 200 return (access_flags & Const.ACC_ANNOTATION) != 0; 201 } 202 203 public final void isEnum(final boolean flag) { 204 setFlag(Const.ACC_ENUM, flag); 205 } 206 207 public final boolean isEnum() { 208 return (access_flags & Const.ACC_ENUM) != 0; 209 } 210 211 public final void isVarArgs(final boolean flag) { 212 setFlag(Const.ACC_VARARGS, flag); 213 } 214 215 public final boolean isVarArgs() { 216 return (access_flags & Const.ACC_VARARGS) != 0; 217 } 218}