package com.ragnarok.jparseutil.memberparser;

import com.github.javaparser.ast.body.FieldDeclaration;
import com.ragnarok.jparseutil.dataobject.*;
import com.ragnarok.jparseutil.dataobject.Modifier;
import com.ragnarok.jparseutil.util.Log;
import com.sun.tools.javac.tree.JCTree;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ragnarok on 15/5/25.
 * retrieve variable information from a {@link JCTree.JCVariableDecl} object
 * Note: the variable type currently only support primitive type, exclude array!
 */
public class VariableParser {
    
    public static final String TAG = "JParserUtil.VariableParser";
    
    public static VariableInfo parseVariable(SourceInfo sourceInfo, FieldDeclaration variableDecl) {
        VariableInfo result = new VariableInfo();
        
        String name = variableDecl.name.toString();
        String type = variableDecl.vartype.toString();
        
        result.setVariableName(name);
        
        if (variableDecl.getModifiers().getFlags() != null && variableDecl.getModifiers().getFlags().size() > 0) {
            for (javax.lang.model.element.Modifier modifier : variableDecl.getModifiers().getFlags()) {
                result.addModifier(Modifier.convertFromToolsModifier(modifier));
            }
        }
        
        Log.d(TAG, "vartype class name: %s", variableDecl.vartype.getClass().getSimpleName());
        
        Object value = null;
        if (variableDecl.init != null) {
            Log.d(TAG, "varinit class name: %s", variableDecl.init.getClass().getSimpleName());
            value = VariableInitParser.parseVariableInit(sourceInfo, type, variableDecl.vartype, variableDecl.init);   
        }

        Type variableType = TypeParser.parseType(sourceInfo, variableDecl.vartype, type);
        Log.d(TAG, "variableType: %s", variableType);
        result.setType(variableType);
        
        if (value != null) {
            result.setVariableValue(value);
        }
        
        if (variableDecl.getModifiers().getAnnotations() != null && variableDecl.getModifiers().getAnnotations().size() > 0) {
            List<JCTree.JCAnnotation> annotationList = variableDecl.getModifiers().getAnnotations();
            for (JCTree.JCAnnotation annotation : annotationList) {
                AnnotationModifier annotationModifier = AnnotationModifierParser.parseAnnotation(sourceInfo, annotation);
                if (annotationModifier != null) {
                    result.putAnnotation(annotationModifier);
                }
            }
        }
        
        Log.d(TAG, "parseVariable, name: %s, type: %s, value: %s", name, type, value);
        
        return result;
    }
}

@@ -96,16 +96,128 @@
 ration;%0A
+import com.github.javaparser.ast.body.VariableDeclarator;%0Aimport com.github.javaparser.ast.expr.AnnotationExpr;%0A
 import c
@@ -899,32 +899,125 @@
 nfo();%0A        %0A
+        VariableDeclarator variableDeclarator = variableDecl.getVariables().get(0);%0A        %0A
         String n
@@ -1038,22 +1038,30 @@
 Decl
-.name.toString
+arator.getId().getName
 ();%0A
@@ -1095,23 +1095,25 @@
 bleDecl.
-vart
+getT
 ype
+()
 .toStrin
@@ -1216,134 +1216,50 @@
 rs()
-.getFlags() != null && variableDecl.getModifiers().getFlags().size() %3E 0) %7B%0A            for (javax.lang.model.element.
+ != 0) %7B%0A            result.addAll
 Modifier
  mod
@@ -1258,156 +1258,73 @@
 fier
- m
+s(M
 odifier
- : variableDecl.getModifiers().getFlags()) %7B%0A                result.addModifier(Modifier.convertFromToolsModifier(modifier));%0A            %7D
+.parseModifiersFromFlags(variableDecl.getModifiers()));
 %0A   
@@ -1397,23 +1397,25 @@
 bleDecl.
-vart
+getT
 ype
+()
 .getClas
@@ -1498,21 +1498,32 @@
 ableDecl
-.i
+arator.getI
 nit
+()
  != null
@@ -1587,21 +1587,32 @@
 ableDecl
-.i
+arator.getI
 nit
+()
 .getClas
@@ -1724,35 +1724,24 @@
 Decl
-.vartype, variableDecl.i
+arator.getI
 nit
+()
 );  
@@ -1827,23 +1827,25 @@
 bleDecl.
-vart
+getT
 ype
+()
 , type);
@@ -2059,39 +2059,24 @@
 ariableDecl.
-getModifiers().
 getAnnotatio
@@ -2100,39 +2100,24 @@
 ariableDecl.
-getModifiers().
 getAnnotatio
@@ -2152,25 +2152,16 @@
    List%3C
-JCTree.JC
 Annotati
@@ -2162,16 +2162,20 @@
 notation
+Expr
 %3E annota
@@ -2202,23 +2202,8 @@
 ecl.
-getModifiers().
 getA
@@ -2233,25 +2233,16 @@
    for (
-JCTree.JC
 Annotati
@@ -2243,16 +2243,20 @@
 notation
+Expr
  annotat

fix VariableParser compile error