summaryrefslogtreecommitdiff
path: root/src/main/java/io/devnulllabs/openjava/mop/OJModifier.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/devnulllabs/openjava/mop/OJModifier.java')
-rw-r--r--src/main/java/io/devnulllabs/openjava/mop/OJModifier.java246
1 files changed, 246 insertions, 0 deletions
diff --git a/src/main/java/io/devnulllabs/openjava/mop/OJModifier.java b/src/main/java/io/devnulllabs/openjava/mop/OJModifier.java
new file mode 100644
index 0000000..7d2cd45
--- /dev/null
+++ b/src/main/java/io/devnulllabs/openjava/mop/OJModifier.java
@@ -0,0 +1,246 @@
+/*
+ * OJModifier.java
+ *
+ * comments here.
+ *
+ * @author Michiaki Tatsubori
+ * @version %VERSION% %DATE%
+ * @see java.lang.Object
+ *
+ * COPYRIGHT 1999 by Michiaki Tatsubori, ALL RIGHTS RESERVED.
+ */
+package io.devnulllabs.openjava.mop;
+
+import java.lang.reflect.Modifier;
+
+import io.devnulllabs.openjava.ptree.ModifierList;
+
+/**
+ * The class <code>OJModifier</code> extends
+ * <code>java.lang.relfect.Modifier</code> to support user defined
+ * keywords.
+ *
+ * @author Michiaki Tatsubori
+ * @version 1.0
+ * @since %SOFTWARE% 1.0
+ * @see java.lang.reflect.Modifier
+ **/
+public class OJModifier {
+ /*
+ * Access modifier flag constants from <em>The Java Virtual
+ * Machine Specification</em>, Table 4.1.
+ */
+ public static final int PUBLIC = Modifier.PUBLIC;
+ public static final int PRIVATE = Modifier.PRIVATE;
+ public static final int PROTECTED = Modifier.PROTECTED;
+ public static final int STATIC = Modifier.STATIC;
+ public static final int FINAL = Modifier.FINAL;
+ public static final int SYNCHRONIZED = Modifier.SYNCHRONIZED;
+ public static final int VOLATILE = Modifier.VOLATILE;
+ public static final int TRANSIENT = Modifier.TRANSIENT;
+ public static final int NATIVE = Modifier.NATIVE;
+ public static final int INTERFACE = Modifier.INTERFACE;
+ public static final int ABSTRACT = Modifier.ABSTRACT;
+
+ private int javaModifier = 0;
+ private String userModifiers[] = null;
+
+ private static OJModifier _constantEmpty = null;
+
+ OJModifier(int mod) {
+ javaModifier = mod;
+ userModifiers = new String[0];
+ }
+
+ OJModifier(int mod, String[] user_modifs) {
+ javaModifier = mod;
+ userModifiers = user_modifs;
+ }
+
+ public static final OJModifier constantEmpty() {
+ if (_constantEmpty == null)
+ _constantEmpty = new OJModifier(0);
+ return _constantEmpty;
+ }
+
+ /**
+ * Returns the specifier int for modifiers in regular Java.
+ *
+ * @return integer specifier
+ * @see java.lang.reflect.Modifier
+ */
+ public int toModifier() {
+ return javaModifier;
+ }
+
+ public static OJModifier forModifier(int mod) {
+ return new OJModifier(mod);
+ }
+
+ public static OJModifier forParseTree(ModifierList ptree) {
+ int regular_modifs = ptree.getRegular();
+ String[] oj_modifs = new String[ptree.size()];
+ for (int i = 0; i < ptree.size(); ++i) {
+ oj_modifs[i] = ptree.get(i);
+ }
+ return new OJModifier(regular_modifs, oj_modifs);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>public</tt>
+ * modifier.
+ */
+ public final boolean isPublic() {
+ return ((javaModifier & PUBLIC) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>private</tt>
+ * modifier.
+ */
+ public final boolean isPrivate() {
+ return ((javaModifier & PRIVATE) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>protected</tt>
+ * modifier.
+ */
+ public final boolean isProtected() {
+ return ((javaModifier & PROTECTED) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>static</tt>
+ * modifier.
+ */
+ public final boolean isStatic() {
+ return ((javaModifier & STATIC) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>final</tt>
+ * modifier.
+ */
+ public final boolean isFinal() {
+ return ((javaModifier & FINAL) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>synchronized</tt>
+ * modifier.
+ */
+ public final boolean isSynchronized() {
+ return ((javaModifier & SYNCHRONIZED) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>volatile</tt>
+ * modifier.
+ */
+ public final boolean isVolatile() {
+ return ((javaModifier & VOLATILE) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>transient</tt>
+ * modifier.
+ */
+ public final boolean isTransient() {
+ return ((javaModifier & TRANSIENT) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>native</tt>
+ * modifier.
+ */
+ public final boolean isNative() {
+ return ((javaModifier & NATIVE) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>interface</tt>
+ * modifier.
+ */
+ public final boolean isInterface() {
+ return ((javaModifier & INTERFACE) != 0);
+ }
+
+ /**
+ * Returns true if this modifier includes the <tt>abstract</tt>
+ * modifier.
+ */
+ public final boolean isAbstract() {
+ return ((javaModifier & ABSTRACT) != 0);
+ }
+
+ /**
+ *
+ */
+ public final boolean has(String str) {
+ for (int i = 0; i < userModifiers.length; ++i) {
+ if (userModifiers[i].equals(str))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Generates a string describing the access modifier flags
+ * without user modifiers.
+ * For example:
+ * <pre>
+ * public final synchronized
+ * private transient volatile
+ * </pre>
+ * The modifier names are return in canonical order, as
+ * specified by <em>The Java Language Specification<em>.
+ */
+ public String toString() {
+ return Modifier.toString(javaModifier);
+ }
+
+ private static final int ACCESS = PUBLIC | PROTECTED | PRIVATE;
+ private static final int INHERIT = ABSTRACT | FINAL;
+
+ public OJModifier add(int mods) {
+ if ((mods & ACCESS) != 0) {
+ return new OJModifier(removedModifier(ACCESS) | mods);
+ }
+ return new OJModifier(toModifier() | mods);
+ }
+
+ public OJModifier remove(int mods) {
+ return new OJModifier(removedModifier(mods));
+ }
+
+ private final int removedModifier(int mods) {
+ int toBeRemoved = this.toModifier() & mods;
+ return this.toModifier() - toBeRemoved;
+ }
+
+ public OJModifier setPublic() {
+ return new OJModifier(removedModifier(ACCESS) | PUBLIC);
+ }
+
+ public OJModifier setProtected() {
+ return new OJModifier(removedModifier(ACCESS) | PROTECTED);
+ }
+
+ public OJModifier setPrivate() {
+ return new OJModifier(removedModifier(ACCESS) | PRIVATE);
+ }
+
+ public OJModifier setPackaged() {
+ return new OJModifier(removedModifier(ACCESS));
+ }
+
+ public OJModifier setAbstract() {
+ return new OJModifier(removedModifier(INHERIT) | ABSTRACT);
+ }
+
+ public OJModifier setFinal() {
+ return new OJModifier(removedModifier(INHERIT) | FINAL);
+ }
+
+}