OSDN Git Service

b765466f045ab4fe979d925030d04da0ed1c8470
[jcfa/jcfa.git] / jcfa / src / jp / igapyon / jcfa / util / JcfaWriteUtil.java
1 package jp.igapyon.jcfa.util;
2
3 import java.io.BufferedWriter;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.io.OutputStreamWriter;
7
8 import jp.igapyon.jcfa.vo.JcfaClass;
9 import jp.igapyon.jcfa.vo.JcfaComment;
10 import jp.igapyon.jcfa.vo.JcfaField;
11 import jp.igapyon.jcfa.vo.JcfaMethod;
12 import jp.igapyon.jcfa.vo.JcfaUnit;
13
14 public class JcfaWriteUtil {
15         public static void writeToFile(final JcfaUnit jcfaUnit) throws IOException {
16                 final StringBuffer result = new StringBuffer();
17
18                 for (JcfaClass jcfaClass : jcfaUnit.getClassList()) {
19                         writeToBuffer(jcfaClass, result);
20                 }
21
22                 final BufferedWriter writer = new BufferedWriter(
23                                 new OutputStreamWriter(new FileOutputStream(
24                                                 jcfaUnit.getTargetFile())));
25                 writer.write(JcfaEclipseUtil.formatSource(result.toString()));
26                 writer.close();
27         }
28
29         /**
30          * Write class
31          * 
32          * @param jcfaClass
33          * @param result
34          */
35         public static void writeToBuffer(final JcfaClass jcfaClass,
36                         final StringBuffer result) {
37
38                 if (jcfaClass.isMainClass()) {
39                         if (jcfaClass.getName().contains(".")) {
40                                 result.append(" package "
41                                                 + jcfaClass.getName().substring(0,
42                                                                 jcfaClass.getName().lastIndexOf(".")) + ";");
43                         }
44                 }
45
46                 writeToBuffer(jcfaClass.getComment(), result);
47
48                 result.append(jcfaClass.getAccess());
49                 result.append(" class " + jcfaClass.getLocalName());
50                 if (jcfaClass.getExtendsName() != null
51                                 && jcfaClass.getExtendsName().length() > 0
52                                 && jcfaClass.getExtendsName().equals("java.lang.Object") == false) {
53                         result.append(" extends " + jcfaClass.getExtendsName());
54                 }
55                 result.append("{");
56
57                 for (JcfaField jcfaField : jcfaClass.getFieldList()) {
58                         writeToBuffer(jcfaField, result);
59                 }
60
61                 for (JcfaMethod jcfaMethod : jcfaClass.getMethodList()) {
62                         writeToBuffer(jcfaClass, jcfaMethod, result);
63                 }
64
65                 result.append("}");
66         }
67
68         /**
69          * Write field.
70          * 
71          * @param jcfaField
72          * @param result
73          */
74         public static void writeToBuffer(final JcfaField jcfaField,
75                         final StringBuffer result) {
76                 writeToBuffer(jcfaField.getComment(), result);
77
78                 result.append(" " + jcfaField.getAccess() + " " + jcfaField.getType()
79                                 + " " + jcfaField.getName());
80                 if (jcfaField.getConstantValue() != null) {
81                         result.append(" = ");
82                         result.append(jcfaField.getConstantValue());
83                 }
84                 result.append(";");
85         }
86
87         /**
88          * Write method.
89          * 
90          * @param jcfaClass
91          * @param jcfaMethod
92          * @param result
93          */
94         public static void writeToBuffer(final JcfaClass jcfaClass,
95                         final JcfaMethod jcfaMethod, final StringBuffer result) {
96
97                 writeToBuffer(jcfaMethod.getComment(), result);
98
99                 if (jcfaMethod.getName().equals("<init>")) {
100                         result.append("public " + jcfaClass.getLocalName() + "(");
101                 } else {
102                         result.append("public " + jcfaMethod.getType() + " "
103                                         + jcfaMethod.getName() + "(");
104                 }
105
106                 int argNo = 0;
107                 for (String argumentType : jcfaMethod.getArugumentTypeList()) {
108                         if (argNo != 0) {
109                                 result.append(", ");
110                         }
111                         result.append(argumentType);
112                         result.append(" arg" + argNo);
113                 }
114
115                 result.append(")");
116
117                 result.append("{");
118                 result.append("}");
119         }
120
121         /**
122          * Write comment.
123          * 
124          * @param jcfaComment
125          * @param result
126          */
127         public static void writeToBuffer(final JcfaComment jcfaComment,
128                         final StringBuffer result) {
129                 if (jcfaComment.isJavaDoc()) {
130                         result.append("\n/** ");
131                 } else {
132                         result.append("\n/* ");
133                 }
134
135                 if (jcfaComment.getCommentList().size() > 1) {
136                         result.append("\n");
137                 }
138
139                 for (String comment : jcfaComment.getCommentList()) {
140                         if (jcfaComment.getCommentList().size() > 1) {
141                                 result.append(" * " + comment + "\n");
142                         } else {
143                                 result.append(comment);
144                         }
145                 }
146
147                 result.append(" */\n");
148         }
149 }