1 /*******************************************************************************
2  * Copyright (c) 2007, 2013 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.pde.api.tools.internal.provisional;
15 
16 import org.eclipse.pde.api.tools.internal.search.UseReportConverter;
17 import org.eclipse.pde.api.tools.internal.util.Util;
18 
19 /**
20  * Class containing constants and utility methods for visibility modifiers
21  *
22  * @since 1.0.0
23  */
24 public final class VisibilityModifiers {
25 
26 	/**
27 	 * Visibility constant indicating an element is public API.
28 	 */
29 	public static final int API = 0x0001;
30 	/**
31 	 * Visibility constant indicating a element should not be referenced. This
32 	 * indicates the element is internal and not intended for general use.
33 	 */
34 	public static final int PRIVATE = 0x0002;
35 	/**
36 	 * Visibility constant indicating an element is public for a specific
37 	 * audience (service provider interface).
38 	 */
39 	public static final int SPI = 0x0004;
40 	/**
41 	 * Visibility constant indicating an element is API but illegal to use. i.e.
42 	 * the element has API restrictions
43 	 */
44 	public static final int ILLEGAL_API = 0x0016;
45 	/**
46 	 * Visibility constant indicating an element is private, but some clients
47 	 * have been permitted access to the element.
48 	 */
49 	public static final int PRIVATE_PERMISSIBLE = 0x0008;
50 
51 	/**
52 	 * Bit mask of all visibilities.
53 	 */
54 	public static final int ALL_VISIBILITIES = 0xFFFF;
55 
56 	/**
57 	 * Constructor no instantiating
58 	 */
VisibilityModifiers()59 	private VisibilityModifiers() {
60 	}
61 
62 	/**
63 	 * Returns if the modifier is 'API'
64 	 *
65 	 * @param modifiers the modifiers to resolve
66 	 * @return if the modifier is 'API'
67 	 */
isAPI(int modifiers)68 	public static final boolean isAPI(int modifiers) {
69 		return (modifiers & API) > 0;
70 	}
71 
72 	/**
73 	 * Returns if the modifier is 'SPI'
74 	 *
75 	 * @param modifiers the modifiers to resolve
76 	 * @return if the modifier is 'SPI'
77 	 */
isSPI(int modifiers)78 	public static final boolean isSPI(int modifiers) {
79 		return (modifiers & SPI) > 0;
80 	}
81 
82 	/**
83 	 * Returns if the modifier is 'Private'
84 	 *
85 	 * @param modifiers the modifiers to resolve
86 	 * @return if the modifier is 'Private'
87 	 */
isPrivate(int modifiers)88 	public static final boolean isPrivate(int modifiers) {
89 		return (modifiers & PRIVATE) > 0;
90 	}
91 
92 	/**
93 	 * Returns if the modifier is 'Private Permissible'
94 	 *
95 	 * @param modifiers the modifiers to resolve
96 	 * @return if the modifier is 'Private Permissible'
97 	 */
isPermissiblePrivate(int modifiers)98 	public static final boolean isPermissiblePrivate(int modifiers) {
99 		return (modifiers & PRIVATE_PERMISSIBLE) > 0;
100 	}
101 
102 	/**
103 	 * Returns the string representation of the specified visibility modifier or
104 	 * <code>UNKNOWN_VISIBILITY</code> if the modifier is unknown.
105 	 *
106 	 * @param visibility
107 	 * @return the string representation of the visibility or
108 	 *         <code>UNKNOWN_VISIBILITY</code>
109 	 * @since 1.0.1
110 	 */
getVisibilityName(int visibility)111 	public static String getVisibilityName(int visibility) {
112 		switch (visibility) {
113 			case ALL_VISIBILITIES: {
114 				return "ALL_VISIBILITIES"; //$NON-NLS-1$
115 			}
116 			case API: {
117 				return "API"; //$NON-NLS-1$
118 			}
119 			case PRIVATE: {
120 				return "PRIVATE"; //$NON-NLS-1$
121 			}
122 			case PRIVATE_PERMISSIBLE: {
123 				return "PRIVATE_PERMISSIBLE"; //$NON-NLS-1$
124 			}
125 			case UseReportConverter.FRAGMENT_PERMISSIBLE: {
126 				return "FRAGMENT_PERMISSIBLE"; //$NON-NLS-1$
127 			}
128 			case SPI: {
129 				return "SPI"; //$NON-NLS-1$
130 			}
131 			case ILLEGAL_API: {
132 				return "ILLEGAL_API"; //$NON-NLS-1$
133 			}
134 			case 0: {
135 				return "INHERITED"; //$NON-NLS-1$
136 			}
137 			default:
138 				break;
139 		}
140 		return Util.UNKNOWN_VISIBILITY;
141 	}
142 }
143