-
Notifications
You must be signed in to change notification settings - Fork 94
/
sample_code_generator.py
141 lines (113 loc) · 2.93 KB
/
sample_code_generator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import os
import sys
def CountStartSpaceNum(line):
count = 0
for c in line:
if c == ' ':
count = count + 1
else:
if count < 4:
print line
raise Exception('count should not < 4!')
return count - 4
def Stringlize(lines):
ret = ''
startSpaceCount = CountStartSpaceNum(lines[0])
for i in range(0, len(lines)):
l = lines[i]
l = l.strip('\r\n')
l = l[startSpaceCount:]
l = l.replace('\"', '\\\"')
s = "" if i == len(lines) -1 else "+"
l = '\n\"' + l + '\\n\"' + s
ret = ret + l
return ret
def RemoveHeader(lines):
ret = []
find_header_end = False
for l in lines:
if l.find('public void run') >= 0:
find_header_end = True
elif find_header_end:
ret.append(l)
return ret
def RemoveFooter(lines):
ret = []
findComma1 = False
findComma2 = False
for i in range(len(lines)-1, -1, -1):
l = lines[i]
if len(l) > 0:
if findComma2:
ret.insert(0,l)
elif findComma1:
if l.find(';') >= 0:
findComma2 = True
ret.insert(0,l)
else:
if l.find(';') >= 0:
findComma1 = True
return ret
def ProcessRegisterBlock(lines):
lines = RemoveHeader(lines)
lines = RemoveFooter(lines)
if len(lines) == 0:
return "\"\""
return Stringlize(lines)
def FindKey(line):
start = line.find('Constants.')
end = line.find(',',start)
return line[start: end]
def CheckFile(file,codes):
key = ""
with open(file, 'r') as input:
block = []
find_registery = False
for line in input:
if len(line.strip()) == 0:
continue
if line.find('registery.add(Constants.') >= 0:
find_registery = True
if len(block) > 0:
code= ProcessRegisterBlock(block)
codes[key] = code
block = []
block.append(line)
key = FindKey(line)
elif find_registery:
block.append(line)
if find_registery and len(block) > 0:
code= ProcessRegisterBlock(block)
codes[key] = code
return codes
#find all java files
codes = {}
for root,dirs, files in os.walk('.'):
for file in files:
if file.endswith('java') and root.find('api') >= 0:
codes = CheckFile(os.path.join(root,file), codes)
dest = os.path.join('app','src','main','java','union','uc','com','rxjava_example','plugin')
if not os.path.exists(dest):
os.path.makedirs(dest)
with open(os.path.join(dest,'SampleCode.java'),'w') as output:
header = '''
package union.uc.com.rxjava_example.plugin;
import java.util.HashMap;
import java.util.Map;
import union.uc.com.rxjava_example.contants.Constants;
public class SampleCode{
private Map<String, String> mCodes = new HashMap<>();
public SampleCode(){
'''
footer = '''
}
public String get(String key){
return mCodes.get(key);
}
}
'''
output.write(header)
for key,code in codes.items():
s = '\nmCodes.put(%s,%s);' % (key, code)
output.write(s)
output.write(footer)