blob: 751e5ef6c7f21cb5120e248401076566f707853d [file] [log] [blame]
/*******************************************************************************
* 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();
}
}