summaryrefslogtreecommitdiff
path: root/src/main/java/io/devnulllabs/openjava/ptree/ModifierList.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/devnulllabs/openjava/ptree/ModifierList.java')
-rw-r--r--src/main/java/io/devnulllabs/openjava/ptree/ModifierList.java232
1 files changed, 232 insertions, 0 deletions
diff --git a/src/main/java/io/devnulllabs/openjava/ptree/ModifierList.java b/src/main/java/io/devnulllabs/openjava/ptree/ModifierList.java
new file mode 100644
index 0000000..48c7139
--- /dev/null
+++ b/src/main/java/io/devnulllabs/openjava/ptree/ModifierList.java
@@ -0,0 +1,232 @@
+/*
+ * ModifierList.java 1.0
+ *
+ * @see io.devnulllabs.openjava.ptree.ParseTree
+ * @version last updated: 06/11/97
+ * @author Michiaki Tatsubori
+ */
+package io.devnulllabs.openjava.ptree;
+
+import java.lang.reflect.Modifier;
+
+import io.devnulllabs.openjava.ptree.util.ParseTreeVisitor;
+
+/**
+ * The ModifierList class presents for the node of parse tree
+ * of qualified name.
+ * This is a List of String for extended modifiers.
+ */
+public class ModifierList extends List {
+
+ /*
+ * 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 PROTECTED = Modifier.PROTECTED;
+ public static final int PRIVATE = Modifier.PRIVATE;
+ 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;
+ // public static final int STRICT = Modifier.STRICT;
+ // public static final int EXPLICIT = Modifier.EXPLICIT;
+
+ public static final int EMPTY = 0;
+
+ private int mod = 0;
+
+ public ModifierList() {
+ super(" ");
+ }
+
+ public ModifierList(String e0) {
+ super(" ", e0);
+ }
+
+ public ModifierList(int mod) {
+ this();
+ this.mod = mod;
+ }
+
+ public String toString() {
+ return toString(this.getRegular());
+ }
+
+ /**
+ * Return a string describing the access modifier flags in
+ * the specified modifier. For example:
+ * <blockquote><pre>
+ * public final synchronized
+ * private transient volatile
+ * </pre></blockquote>
+ * The modifier names are return in canonical order, as
+ * specified by <em>The Java Language Specification</em>.
+ */
+ public static String toString(int mod) {
+ StringBuffer sb = new StringBuffer();
+ int len;
+
+ if ((mod & PUBLIC) != 0)
+ sb.append("public ");
+ if ((mod & PRIVATE) != 0)
+ sb.append("private ");
+ if ((mod & PROTECTED) != 0)
+ sb.append("protected ");
+
+ /* Canonical order */
+ if ((mod & ABSTRACT) != 0)
+ sb.append("abstract ");
+ if ((mod & STATIC) != 0)
+ sb.append("static ");
+ if ((mod & FINAL) != 0)
+ sb.append("final ");
+ if ((mod & TRANSIENT) != 0)
+ sb.append("transient ");
+ if ((mod & VOLATILE) != 0)
+ sb.append("volatile ");
+ if ((mod & NATIVE) != 0)
+ sb.append("native ");
+ if ((mod & SYNCHRONIZED) != 0)
+ sb.append("synchronized ");
+
+ // if ((mod & INTERFACE) != 0) sb.append( "interface " );
+
+ // if ((mod & STRICT) != 0) sb.append( "strict " );
+ // if ((mod & EXPLICIT) != 0) sb.append( "explicit " );
+
+ if ((len = sb.length()) > 0) /* trim trailing space */
+ return sb.toString().substring(0, len - 1);
+ return "";
+ }
+
+ public boolean isEmpty() {
+ return (super.isEmpty() && getRegular() == EMPTY);
+ }
+
+ public boolean isEmptyAsRegular() {
+ return (getRegular() == EMPTY);
+ }
+
+ public boolean contains(String str) {
+ if (str == null)
+ return false;
+ if (str.equals("public") && contains(PUBLIC))
+ return true;
+ if (str.equals("private") && contains(PRIVATE))
+ return true;
+ if (str.equals("protected") && contains(PROTECTED))
+ return true;
+ if (str.equals("abstract") && contains(ABSTRACT))
+ return true;
+ if (str.equals("static") && contains(STATIC))
+ return true;
+ if (str.equals("final") && contains(FINAL))
+ return true;
+ if (str.equals("transient") && contains(TRANSIENT))
+ return true;
+ if (str.equals("volatile") && contains(VOLATILE))
+ return true;
+ if (str.equals("native") && contains(NATIVE))
+ return true;
+ if (str.equals("synchronized") && contains(SYNCHRONIZED)) {
+ return true;
+ }
+ return super.contains(str);
+ }
+
+ public boolean contains(int mod) {
+ return ((this.mod & mod) != 0);
+ }
+
+ /**
+ * Gets the specified element at
+ *
+ * @param n
+ */
+ public String get(int n) {
+ return (String) contents_elementAt(n);
+ }
+
+ /**
+ * Sets the specified element at the specified place of the list
+ *
+ * @param p element
+ * @param n the number where to set element
+ */
+ public void set(int n, String p) {
+ contents_setElementAt(p, n);
+ }
+
+ /**
+ * Adds the specified element after the list
+ * This causes side-effect.
+ *
+ * @param p a modifier to be inserted into the list
+ */
+ public void add(int mod) {
+ this.mod |= mod;
+ }
+
+ /**
+ * Adds the specified element after the list
+ * This causes side-effect.
+ *
+ * @param p a modifier to be inserted into the list
+ */
+ public void add(String p) {
+ contents_addElement(p);
+ }
+
+ /**
+ * Removes an element at the specified point from this list
+ *
+ * @param n where to remove element.
+ */
+ public String remove(int n) {
+ String removed = (String) contents_elementAt(n);
+ contents_removeElementAt(n);
+ return removed;
+ }
+
+ /**
+ * Inserts the specified element into the list
+ * before the specified element of the list.
+ * This causes side-effect.
+ *
+ * @param p the element to be inserted into the list
+ * @param n number of the element before which insertion ocuurs
+ */
+ public void insertElementAt(String p, int n) {
+ contents_insertElementAt(p, n);
+ }
+
+ /**
+ * Appends a list after this list.
+ *
+ * @param lst a list to be appended
+ */
+ public void append(ModifierList lst) {
+ this.mod |= lst.getRegular();
+ for (int i = 0; i < lst.size(); i++) {
+ contents_addElement(lst.get(i));
+ }
+ }
+
+ public int getRegular() {
+ return this.mod;
+ }
+
+ public void setRegular(int mod) {
+ this.mod = mod;
+ }
+
+ public void accept(ParseTreeVisitor v) throws ParseTreeException {
+ v.visit(this);
+ }
+
+}