Modifier.java
/*******************************************************************************
* Copyright (c) 2026 Carsten Hammer.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Carsten Hammer
*******************************************************************************/
package org.sandbox.ast.api.info;
import java.util.EnumSet;
import java.util.Set;
/**
* Represents Java modifiers (public, private, static, final, etc.).
* This enum provides a type-safe way to work with modifiers without
* relying on JDT-specific flags.
*/
public enum Modifier {
PUBLIC(0x0001),
PRIVATE(0x0002),
PROTECTED(0x0004),
STATIC(0x0008),
FINAL(0x0010),
SYNCHRONIZED(0x0020),
VOLATILE(0x0040),
TRANSIENT(0x0080),
NATIVE(0x0100),
INTERFACE(0x0200),
ABSTRACT(0x0400),
STRICTFP(0x0800),
DEFAULT(0x1000);
private final int flag;
Modifier(int flag) {
this.flag = flag;
}
/**
* Returns the flag value for this modifier.
* @return the flag value
*/
public int getFlag() {
return flag;
}
/**
* Converts JDT modifier flags to a set of Modifier enums.
*
* @param jdtFlags JDT modifier flags (as int)
* @return Set of Modifier enums
*/
public static Set<Modifier> fromJdtFlags(int jdtFlags) {
Set<Modifier> modifiers = EnumSet.noneOf(Modifier.class);
for (Modifier mod : values()) {
if ((jdtFlags & mod.flag) != 0) {
modifiers.add(mod);
}
}
return modifiers;
}
/**
* Converts a set of modifiers to JDT-style flags.
*
* @param modifiers Set of modifiers
* @return JDT flags as int
*/
public static int toJdtFlags(Set<Modifier> modifiers) {
int flags = 0;
for (Modifier mod : modifiers) {
flags |= mod.flag;
}
return flags;
}
/**
* Checks if the given flags contain this modifier.
*
* @param jdtFlags JDT modifier flags
* @return true if this modifier is present
*/
public boolean isPresentIn(int jdtFlags) {
return (jdtFlags & flag) != 0;
}
}