package com.ragnarok.jparseutil.dataobject;

/**
 * Created by ragnarok on 15/7/14.
 * copy from javax.lang.model.element.Modifier
 */
public enum Modifier {
    /** The modifier {@code public} */          PUBLIC,
    /** The modifier {@code protected} */       PROTECTED,
    /** The modifier {@code private} */         PRIVATE,
    /** The modifier {@code abstract} */        ABSTRACT,
    /** The modifier {@code static} */          STATIC,
    /** The modifier {@code final} */           FINAL,
    /** The modifier {@code transient} */       TRANSIENT,
    /** The modifier {@code volatile} */        VOLATILE,
    /** The modifier {@code synchronized} */    SYNCHRONIZED,
    /** The modifier {@code native} */          NATIVE,
    /** The modifier {@code strictfp} */        STRICTFP;


    private String lowercase = null;    // modifier name in lowercase

    /**
     * Returns this modifier's name in lowercase.
     */
    public String toString() {
        if (lowercase == null) {
            lowercase = name().toLowerCase(java.util.Locale.US);
        }
        return lowercase;
    }
    
    public static Modifier convertFromToolsModifier(javax.lang.model.element.Modifier toolsModifier) {
        if  (toolsModifier == javax.lang.model.element.Modifier.PUBLIC) {
            return PUBLIC;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.PROTECTED) {
            return PROTECTED;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.PRIVATE) {
            return PRIVATE;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.ABSTRACT) {
            return ABSTRACT;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.STATIC) {
            return STATIC;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.FINAL) {
            return FINAL;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.TRANSIENT) {
            return TRANSIENT;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.VOLATILE) {
            return VOLATILE;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.SYNCHRONIZED) {
            return SYNCHRONIZED;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.NATIVE) {
            return NATIVE;
        }
        if  (toolsModifier == javax.lang.model.element.Modifier.STRICTFP) {
            return STRICTFP;
        }
        return null;
    }
}

@@ -203,16 +203,21 @@
     
+%0A    
 PUBLIC,%0A
     
@@ -208,24 +208,29 @@
     PUBLIC,%0A
+    %0A
     /** The 
@@ -265,16 +265,21 @@
 /       
+%0A    
 PROTECTE
@@ -277,24 +277,29 @@
  PROTECTED,%0A
+    %0A
     /** The 
@@ -334,16 +334,21 @@
         
+%0A    
 PRIVATE,
@@ -348,16 +348,21 @@
 RIVATE,%0A
+    %0A
     /** 
@@ -401,16 +401,21 @@
         
+%0A    
 ABSTRACT
@@ -416,16 +416,21 @@
 STRACT,%0A
+    %0A
     /** 
@@ -473,16 +473,21 @@
     
+%0A    
 STATIC,%0A
     
@@ -478,24 +478,29 @@
     STATIC,%0A
+    %0A
     /** The 
@@ -539,15 +539,25 @@
     
+%0A    
 FINAL,%0A
+    %0A
     
@@ -600,16 +600,21 @@
 /       
+%0A    
 TRANSIEN
@@ -616,16 +616,21 @@
 NSIENT,%0A
+    %0A
     /** 
@@ -669,16 +669,21 @@
         
+%0A    
 VOLATILE
@@ -684,16 +684,21 @@
 LATILE,%0A
+    %0A
     /** 
@@ -729,24 +729,29 @@
 hronized%7D */
+    %0A
     SYNCHRON
@@ -752,24 +752,29 @@
 NCHRONIZED,%0A
+    %0A
     /** The 
@@ -813,16 +813,21 @@
     
+%0A    
 NATIVE,%0A
     
@@ -822,16 +822,21 @@
 NATIVE,%0A
+    %0A
     /** 
@@ -875,24 +875,29 @@
         
+%0A    
 STRICTFP
 ;%0A%0A%0A    
@@ -888,16 +888,70 @@
 STRICTFP
+,%0A%0A    /**%0A     * unknown modifier%0A     */%0A    UNKNOWN
 ;%0A%0A%0A    
@@ -2634,20 +2634,23 @@
  return 
-null
+UNKNOWN
 ;%0A    %7D%0A

add UNKNOWN Modifier