| /******************************************************************************* |
| * Copyright (c) 2000, 2009 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * IBM Corporation - added constant AccDefault |
| * IBM Corporation - added constants AccBridge and AccVarargs for J2SE 1.5 |
| *******************************************************************************/ |
| package org.eclipse.wst.jsdt.core; |
| |
| import org.eclipse.wst.jsdt.internal.compiler.classfmt.ClassFileConstants; |
| |
| /** |
| * Utility class for decoding modifier flags in JavaScript elements. |
| * <p> |
| * This class provides static methods only; it is not intended to be |
| * instantiated or subclassed by clients. |
| * </p> |
| * |
| * @see IMember#getFlags() |
| * |
| * Provisional API: This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| */ |
| public final class Flags { |
| |
| /** |
| * Constant representing the absence of any flag |
| */ |
| public static final int AccDefault = ClassFileConstants.AccDefault; |
| /** |
| * Public access flag. |
| * |
| * <b>This flag only applies to ECMAScript 4 which is not yet supported</b> |
| */ |
| public static final int AccPublic = ClassFileConstants.AccPublic; |
| /** |
| * Private access flag. |
| * |
| * <b>This flag only applies to ECMAScript 4 which is not yet supported</b> |
| */ |
| public static final int AccPrivate = ClassFileConstants.AccPrivate; |
| /** |
| * Protected access flag. |
| * |
| * <b>This flag only applies to ECMAScript 4 which is not yet supported</b> |
| */ |
| public static final int AccProtected = ClassFileConstants.AccProtected; |
| /** |
| * Static access flag. |
| */ |
| public static final int AccStatic = ClassFileConstants.AccStatic; |
| /** |
| * Abstract property flag. |
| * |
| * <b>This flag only applies to ECMAScript 4 which is not yet supported</b> |
| */ |
| public static final int AccAbstract = ClassFileConstants.AccAbstract; |
| /** |
| * Super property flag. |
| * |
| * <b>This flag only applies to ECMAScript 4 which is not yet supported</b> |
| */ |
| public static final int AccSuper = ClassFileConstants.AccSuper; |
| /** |
| * Deprecated property flag. |
| */ |
| public static final int AccDeprecated = ClassFileConstants.AccDeprecated; |
| |
| /**= |
| * Varargs method property |
| * Used to flag variable arity method declarations. |
| * |
| * <b>This flag only applies to ECMAScript 4 which is not yet supported</b> |
| */ |
| public static final int AccVarargs = ClassFileConstants.AccVarargs; |
| |
| /** |
| * Not instantiable. |
| */ |
| private Flags() { |
| // Not instantiable |
| } |
| /** |
| * Returns whether the given integer includes the <code>abstract</code> modifier. |
| * |
| * <p><b>Note: This Method only applies to ECMAScript 4 which is not yet supported</b></p> |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>abstract</code> modifier is included |
| */ |
| public static boolean isAbstract(int flags) { |
| return (flags & AccAbstract) != 0; |
| } |
| /** |
| * Returns whether the given integer includes the indication that the |
| * element is deprecated (<code>@deprecated</code> tag in jsdoc comment). |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the element is marked as deprecated |
| */ |
| public static boolean isDeprecated(int flags) { |
| return (flags & AccDeprecated) != 0; |
| } |
| /* |
| * Returns whether the given integer does not include one of the |
| * <code>public</code>, <code>private</code>, or <code>protected</code> flags. |
| * |
| * <p><b>Note: This Method only applies to ECMAScript 4 which is not yet supported</b></p> |
| * |
| * @param flags the flags |
| * @return <code>true</code> if no visibility flag is set |
| */ |
| public static boolean isPackageDefault(int flags) { |
| return (flags & (AccPublic | AccProtected | AccPrivate)) == 0; |
| } |
| /** |
| * Returns whether the given integer includes the <code>private</code> modifier. |
| * |
| * <p><b>Note: This Method only applies to ECMAScript 4 which is not yet supported</b></p> |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>private</code> modifier is included |
| */ |
| public static boolean isPrivate(int flags) { |
| return (flags & AccPrivate) != 0; |
| } |
| /** |
| * Returns whether the given integer includes the <code>protected</code> modifier. |
| * |
| * <p><b>Note: This Method only applies to ECMAScript 4 which is not yet supported</b></p> |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>protected</code> modifier is included |
| */ |
| public static boolean isProtected(int flags) { |
| return (flags & AccProtected) != 0; |
| } |
| /** |
| * Returns whether the given integer includes the <code>public</code> modifier. |
| * |
| * <p><b>Note: This Method only applies to ECMAScript 4 which is not yet supported</b></p> |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>public</code> modifier is included |
| */ |
| public static boolean isPublic(int flags) { |
| return (flags & AccPublic) != 0; |
| } |
| /** |
| * Returns whether the given integer includes the <code>static</code> modifier. |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>static</code> modifier is included |
| */ |
| public static boolean isStatic(int flags) { |
| return (flags & AccStatic) != 0; |
| } |
| /** |
| * Returns whether the given integer includes the <code>super</code> modifier. |
| * |
| * <p><b>Note: This Method only applies to ECMAScript 4 which is not yet supported</b></p> |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>super</code> modifier is included |
| */ |
| public static boolean isSuper(int flags) { |
| return (flags & AccSuper) != 0; |
| } |
| |
| /* |
| * Returns whether the given integer has the <code>AccVarargs</code> |
| * bit set. |
| * |
| * @param flags the flags |
| * @return <code>true</code> if the <code>AccVarargs</code> flag is included |
| * @see #AccVarargs |
| */ |
| public static boolean isVarargs(int flags) { |
| return (flags & AccVarargs) != 0; |
| } |
| |
| /** |
| * Returns a standard string describing the given modifier flags. |
| * Only modifier flags are included in the output; deprecated, |
| * synthetic, bridge, etc. flags are ignored. |
| * <p> |
| * The flags are output in the following order: |
| * <pre> |
| * <code>public</code> <code>protected</code> <code>private</code> |
| * <code>static</code> |
| * <code>abstract</code> <code>final</code> <code>native</code> <code>synchronized</code> <code>transient</code> <code>volatile</code> <code>strictfp</code> |
| * </pre> |
| * </p> |
| * <p> |
| * Examples results: |
| * <pre> |
| * <code>"public static final"</code> |
| * <code>"private native"</code> |
| * </pre> |
| * </p> |
| * |
| * @param flags the flags |
| * @return the standard string representation of the given flags |
| */ |
| public static String toString(int flags) { |
| StringBuffer sb = new StringBuffer(); |
| |
| if (isPublic(flags)) |
| sb.append("public "); //$NON-NLS-1$ |
| if (isPrivate(flags)) |
| sb.append("private "); //$NON-NLS-1$ |
| if (isStatic(flags)) |
| sb.append("static "); //$NON-NLS-1$ |
| if (isAbstract(flags)) |
| sb.append("abstract "); //$NON-NLS-1$ |
| |
| int len = sb.length(); |
| if (len == 0) |
| return ""; //$NON-NLS-1$ |
| sb.setLength(len - 1); |
| return sb.toString(); |
| } |
| } |