forked from m-zakeri/CodART
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.py
More file actions
108 lines (94 loc) · 4.4 KB
/
test.py
File metadata and controls
108 lines (94 loc) · 4.4 KB
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
"""
The main module of CodART
-changelog
-- Add C++ backend support
"""
__version__ = '0.2.0'
__author__ = 'Morteza'
import argparse
import os
import time
from antlr4 import *
from refactorings.collapse_hierarchy import CollapseHierarchyRefactoringListener
from refactorings.inline_class import InlineClassRefactoringListener
from refactorings.make_method_static import MakeMethodStaticRefactoringListener
from refactorings.make_method_non_static import MakeMethodNonStaticRefactoringListener
from gen.javaLabeled.JavaLexer import JavaLexer
from gen.javaLabeled.JavaParserLabeled import JavaParserLabeled
def main(args):
input_directory = args.directory
input_java_files = [file for file in os.listdir(input_directory) if '.java' in file]
refactoring_id = args.refactor
source_class_data = None
target_class = None
target_class_data = None
is_complete = False
print("Process started")
for i in range(2):
for file in input_java_files:
# Step 1: Load input source into stream
if i == 0:
stream = FileStream(input_directory + '/' + file, encoding='utf8')
else:
stream = FileStream('testproject/refactored/' + '/' + file, encoding='utf8')
# input_stream = StdinStream()
# Step 2: Create an instance of AssignmentStLexer
lexer = JavaLexer(stream)
# Step 3: Convert the input source into a list of tokens
token_stream = CommonTokenStream(lexer)
# Step 4: Create an instance of the AssignmentStParser
parser = JavaParserLabeled(token_stream)
tree = parser.compilationUnit()
# Step 6: Create an instance of AssignmentStListener
if refactoring_id == 'c':
my_listener = CollapseHierarchyRefactoringListener(
common_token_stream=token_stream, source_class='JSONStringer',
target_class=target_class, source_class_data=source_class_data,
target_class_data=target_class_data, is_complete=is_complete
)
walker = ParseTreeWalker()
walker.walk(t=tree, listener=my_listener)
target_class = my_listener.target_class
source_class_data = my_listener.source_class_data
target_class_data = my_listener.target_class_data
is_complete = my_listener.is_complete
elif refactoring_id == 'i':
my_listener = InlineClassRefactoringListener(
common_token_stream=token_stream, source_class='HTTPTokener',
target_class='JSONTokener', source_class_data=source_class_data,
target_class_data=target_class_data, is_complete=is_complete
)
walker = ParseTreeWalker()
walker.walk(t=tree, listener=my_listener)
target_class = my_listener.target_class
source_class_data = my_listener.source_class_data
target_class_data = my_listener.target_class_data
is_complete = my_listener.is_complete
elif refactoring_id == 'ms':
my_listener = MakeMethodStaticRefactoringListener(
common_token_stream=token_stream, target_class='JSONPointer',
target_methods=['toURIFragment']
)
walker = ParseTreeWalker()
walker.walk(t=tree, listener=my_listener)
else:
my_listener = MakeMethodNonStaticRefactoringListener(
common_token_stream=token_stream, target_class='JSONPointer',
target_methods=['builder']
)
with open('testproject/refactored/' + file, mode='w+', newline='') as f:
f.write(my_listener.token_stream_rewriter.getDefaultText())
print("/\\", end='')
if __name__ == '__main__':
argparser = argparse.ArgumentParser()
argparser.add_argument(
'-d', '--directory',
help='Input source', default=r'testproject/input/src/main/java/org/json')
argparser.add_argument(
'-r', '--refactor',
help='i: inline class & c: collapse hierarchy & ms: make method static & mn: make method non static',
default='c')
args = argparser.parse_args()
start_time = time.time()
main(args)
print(f"\n finished in {time.time() - start_time}'s")