OSDN Git Service

adding.
authoriga <tosiki.iga@nifty.ne.jp>
Mon, 31 Mar 2014 13:21:30 +0000 (22:21 +0900)
committeriga <tosiki.iga@nifty.ne.jp>
Mon, 31 Mar 2014 13:21:30 +0000 (22:21 +0900)
jcfa/src/jp/igapyon/jcfa/JavaClassFileAnalyzer.java
jcfa/src/jp/igapyon/jcfa/vo/JcfaClass.java
jcfa/src/jp/igapyon/jcfa/vo/JcfaField.java
jcfa/src/jp/igapyon/jcfa/vo/JcfaMethod.java
jcfa/src/jp/igapyon/jcfa/vo/JcfaUnit.java

index 958cc6b..42b4f61 100644 (file)
@@ -4,6 +4,10 @@ import java.io.File;
 import java.io.IOException;\r
 \r
 import jp.igapyon.jcfa.util.JcfaUtil;\r
+import jp.igapyon.jcfa.vo.JcfaClass;\r
+import jp.igapyon.jcfa.vo.JcfaField;\r
+import jp.igapyon.jcfa.vo.JcfaMethod;\r
+import jp.igapyon.jcfa.vo.JcfaUnit;\r
 \r
 import org.apache.bcel.Constants;\r
 import org.apache.bcel.classfile.ClassFormatException;\r
@@ -15,6 +19,8 @@ import org.apache.bcel.classfile.JavaClass;
 import org.apache.bcel.classfile.Method;\r
 \r
 public class JavaClassFileAnalyzer {\r
+       protected JcfaUnit jcfaUnit = new JcfaUnit();\r
+\r
        public static final void main(final String[] args) {\r
                new JavaClassFileAnalyzer().process(new File(\r
                                "./bin/test/TestJavaClass002.class"), new File(\r
@@ -25,6 +31,12 @@ public class JavaClassFileAnalyzer {
                try {\r
                        final JavaClass jc = new ClassParser(inputFile.getCanonicalPath())\r
                                        .parse();\r
+                       final JcfaClass jcfaClass = new JcfaClass();\r
+                       jcfaUnit.getClassList().add(jcfaClass);\r
+\r
+                       jcfaClass.setName(jc.getClassName());\r
+                       jcfaClass.setExtendsName(jc.getSuperclassName());\r
+\r
                        System.out.println("Classname   : " + jc.getClassName());\r
                        System.out.println("Parent class: " + jc.getSuperclassName());\r
 \r
@@ -37,11 +49,11 @@ public class JavaClassFileAnalyzer {
                                }\r
                        }\r
 \r
+                       analyzeFields(jc, jcfaClass);\r
+                       analyzeMethods(jc, jcfaClass);\r
+\r
                        new File(actualyTargetDir, split[split.length - 1] + ".jcfa")\r
                                        .createNewFile();\r
-\r
-                       analyzeFields(jc);\r
-                       analyzeMethods(jc);\r
                } catch (ClassFormatException e) {\r
                        e.printStackTrace();\r
                } catch (IOException e) {\r
@@ -49,16 +61,20 @@ public class JavaClassFileAnalyzer {
                }\r
        }\r
 \r
-       private void analyzeFields(final JavaClass jc) {\r
+       private void analyzeFields(final JavaClass jc, final JcfaClass jcfaClass) {\r
                final org.apache.bcel.classfile.Field[] fields = jc.getFields();\r
                for (int indexField = 0; indexField < fields.length; indexField++) {\r
                        final Field field = fields[indexField];\r
-                       analyzeField(jc, field);\r
+                       analyzeField(jc, field, jcfaClass);\r
                }\r
        }\r
 \r
-       private void analyzeField(final JavaClass jc, final Field field) {\r
-               System.out.println("  Field:" + field.getName());\r
+       private void analyzeField(final JavaClass jc, final Field field,\r
+                       final JcfaClass jcfaClass) {\r
+               final JcfaField jcfaField = new JcfaField();\r
+               jcfaField.setName(field.getName());\r
+               jcfaClass.getFieldList().add(jcfaField);\r
+\r
                String access = "";\r
                access += field.isPublic() ? "public " : "";\r
                access += field.isProtected() ? "protected " : "";\r
@@ -67,30 +83,39 @@ public class JavaClassFileAnalyzer {
                access += field.isStatic() ? "static " : "";\r
                access += field.isVolatile() ? "volatile " : "";\r
                access += field.isFinal() ? "final " : "";\r
+               jcfaField.setAccess(access);\r
 \r
                String constValue = null;\r
                final ConstantValue cv = field.getConstantValue();\r
                if (cv != null) {\r
-                       constValue = jc.getConstantPool().getConstantString(\r
-                                       cv.getConstantValueIndex(), Constants.CONSTANT_String);\r
+                       jcfaField.setConstantValue(jc.getConstantPool().getConstantString(\r
+                                       cv.getConstantValueIndex(), Constants.CONSTANT_String));\r
+                       // FIXME other type support add.\r
+                       jcfaField.setConstantValueType(Constants.CONSTANT_String);\r
                }\r
+\r
                System.out.println("    " + access + field.getType().toString() + " "\r
                                + field.getName()\r
                                + (constValue == null ? "" : " = \"" + constValue + "\""));\r
        }\r
 \r
-       private void analyzeMethods(final JavaClass jc) throws IOException {\r
+       private void analyzeMethods(final JavaClass jc, final JcfaClass jcfaClass)\r
+                       throws IOException {\r
                final org.apache.bcel.classfile.Method[] methods = jc.getMethods();\r
                for (int indexMethod = 0; indexMethod < methods.length; indexMethod++) {\r
                        final Method method = methods[indexMethod];\r
-                       analyzeMethod(jc, method);\r
+                       analyzeMethod(jc, method, jcfaClass);\r
 \r
                }\r
        }\r
 \r
-       private void analyzeMethod(final JavaClass jc, final Method method)\r
-                       throws IOException {\r
-               System.out.println("  Method:" + method.getName());\r
+       private void analyzeMethod(final JavaClass jc, final Method method,\r
+                       final JcfaClass jcfaClass) throws IOException {\r
+               final JcfaMethod jcfaMethod = new JcfaMethod();\r
+               jcfaClass.getMethodList().add(jcfaMethod);\r
+\r
+               jcfaMethod.setName(method.getName());\r
+\r
                final Code code = method.getCode();\r
                if (code == null) {\r
                        return;\r
index 0732701..a4e6bc5 100644 (file)
@@ -8,5 +8,43 @@ public class JcfaClass extends JcfaNode {
 
        protected String name;
 
-       protected final List<JcfaMethod> classList = new ArrayList<JcfaMethod>();
+       protected String extendsName;
+
+       // TODO interfaces
+
+       protected final List<JcfaField> fieldList = new ArrayList<JcfaField>();
+
+       protected final List<JcfaMethod> methodList = new ArrayList<JcfaMethod>();
+
+       public String getAccess() {
+               return access;
+       }
+
+       public void setAccess(String access) {
+               this.access = access;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       public String getExtendsName() {
+               return extendsName;
+       }
+
+       public void setExtendsName(String extendsName) {
+               this.extendsName = extendsName;
+       }
+
+       public List<JcfaField> getFieldList() {
+               return fieldList;
+       }
+
+       public List<JcfaMethod> getMethodList() {
+               return methodList;
+       }
 }
index 655c2ea..4d0d1d1 100644 (file)
@@ -3,4 +3,41 @@ package jp.igapyon.jcfa.vo;
 public class JcfaField extends JcfaNode {
        protected String name;
 
+       protected String access;
+
+       protected String constantValue;
+
+       protected short constantValueType;
+
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       public String getAccess() {
+               return access;
+       }
+
+       public void setAccess(String access) {
+               this.access = access;
+       }
+
+       public String getConstantValue() {
+               return constantValue;
+       }
+
+       public void setConstantValue(String constantValue) {
+               this.constantValue = constantValue;
+       }
+
+       public short getConstantValueType() {
+               return constantValueType;
+       }
+
+       public void setConstantValueType(short constantValueType) {
+               this.constantValueType = constantValueType;
+       }
 }
index 6ca7c0e..34cdbcf 100644 (file)
@@ -3,4 +3,12 @@ package jp.igapyon.jcfa.vo;
 public class JcfaMethod extends JcfaNode {
        protected String name;
 
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
 }
index 53ce1a7..8d8a08a 100644 (file)
@@ -7,4 +7,16 @@ public class JcfaUnit extends JcfaNode {
        protected String name;
 
        protected final List<JcfaClass> classList = new ArrayList<JcfaClass>();
+
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       public List<JcfaClass> getClassList() {
+               return classList;
+       }
 }