Пример #1
0
def main():
    # folder_path = "..\\benchmark_projects\\JSON\\src\\main\\java\\org\\json"
    folder_path = "/data/Dev/JavaSample/"
    path = get_filenames_in_dir(folder_path)
    print(path)
    # target_class = "CDL"
    target_class = "ReplaceConstructorWithFactoryMethod"

    for file in path:
        if file.endswith('.java') and not file.endswith('_refactored.java'):
            stream = FileStream(file)
            lexer = JavaLexer(stream)
            tokens = CommonTokenStream(lexer)
            parser = JavaParserLabeled(tokens)
            tree = parser.compilationUnit()
            new_file = open(file, mode='w', newline='')
            listener = ReplaceConstructorWithFactoryFunctionRefactoringListener(common_token_stream=tokens,
                                                                                target_class=target_class)
            walker = ParseTreeWalker()
            walker.walk(
                listener=listener,
                t=tree
            )
            new_code = str(listener.codeRewrite.getDefaultText())
            new_file.write(new_code)
Пример #2
0
def main(project_dir: str, package_name: str, children_class: str,
         field_name: str):
    print("Pullup Field")
    print("Success!" if PullUpFieldRefactoring(
        utils2.get_filenames_in_dir(project_dir
                                    ), package_name, children_class, field_name
        # lambda x: "tests/pullup_field_ant/" + x[len(ant_dir):]
    ).do_refactor() else "Cannot refactor.")
Пример #3
0
def main(project_dir: str, package_name: str, children_class: str,
         field_name: str, *args, **kwargs):
    # print("Pull-up field")
    print(f"Success pull-up field {field_name}" if PullUpFieldRefactoring(
        utils2.get_filenames_in_dir(project_dir
                                    ), package_name, children_class, field_name
        # lambda x: "tests/pullup_field_ant/" + x[len(ant_dir):]
    ).do_refactor() else f"Cannot  pull-up field {field_name}")
Пример #4
0
def test_ant():
    """
    target_files = [
        "tests/apache-ant/main/org/apache/tools/ant/types/ArchiveFileSet.java",
        "tests/apache-ant/main/org/apache/tools/ant/types/TarFileSet.java",
        "tests/apache-ant/main/org/apache/tools/ant/types/ZipFileSet.java"
    ]
    """
    ant_dir = "/home/ali/Desktop/code/TestProject/"
    print("Success!" if PushDownField(
        utils2.get_filenames_in_dir(ant_dir),
        "test_package",
        "App",
        "push_down",
        [],
        # lambda x: "tests/pushdown_field_ant/" + x[len(ant_dir):]
    ).do_refactor() else "Cannot refactor.")
Пример #5
0
def main():
    """
    target_files = [
        "tests/apache-ant/main/org/apache/tools/ant/input/InputRequest.java",
        "tests/apache-ant/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java"
    ]
    """
    ant_dir = "/home/ali/Desktop/code/TestProject/"
    print("Success!" if ExtractInterfaceRefactoring(
        utils2.get_filenames_in_dir(ant_dir),
        "test_package",
        ["AppChild1", "AppChild2"],
        ["printTest()"],
        "ExtractedInterface",
        "/home/ali/Desktop/code/TestProject/src/test_package/ExtractedInterface.java",
        # lambda x: "tests/extract_interface_ant/" + x[len(ant_dir):]
    ).do_refactor() else "Cannot refactor.")
Пример #6
0
                    super_class = self.find_super_type(
                        class_item_dic.superclass_name)
                    super_classes.append(super_class.package_name + '.' +
                                         super_class.name)
                    cycle = self.cycle_check(super_classes)
                    class_item_dic = super_class
                    if cycle:
                        print("Find : cyclic inheritance hierarchy...")
                        return

    def find_super_type(self, class_name):
        for package_item in self.program.packages:
            package_item_dic = self.program.packages[package_item]
            for classes_item in package_item_dic.classes:
                class_item_dic = package_item_dic.classes[classes_item]
                if class_item_dic.name == class_name:
                    return class_item_dic

    def cycle_check(self, list):
        if len(list) == len(set(list)):
            return False
        else:
            return True


if __name__ == "__main__":
    mylist = get_filenames_in_dir('C:/Users/Qafari/Desktop/propagationTest')
    print("start ....")
    CyclicHierarchy(mylist).check()
    print("finish ....")
Пример #7
0
        else:
            token_stream_rewriter.insertBeforeIndex(
                method_declaration_info.stop,
                text=self.class_name + " " + str.lower(self.class_name))

        strofmethod = token_stream_rewriter.getText(
            program_name=token_stream_rewriter.DEFAULT_PROGRAM_NAME,
            start=tokens_info.start,
            stop=tokens_info.stop)

        Rewriter_.insert_before(tokens_info=class_tokens_info,
                                text=strofmethod)
        Rewriter_.insert_after(
            package_tokens_info, "import " + self.target_package_name + "." +
            self.target_class_name + ";")
        Rewriter_.replace(tokens_info, "")
        Rewriter_.apply()
        return True


if __name__ == "__main__":
    mylist = get_filenames_in_dir('/home/ali/Desktop/code/TestProject/')
    # mylist = get_filenames_in_dir('tests/movemethod_test')
    print("Testing move_method...")
    if MoveMethodRefactoring(mylist, "test_package", "AppChild1", "testFunc()",
                             "AppChild2", "test_package").do_refactor():
        # if move_method_refactoring(mylist, "ss", "source", "m(int)","target","sss"):
        print("Success!")
    else:
        print("Cannot refactor.")
Пример #8
0
        class_tokens_info = TokensInfo(_targetclass.parser_context.classBody())
        class_tokens_info.stop = class_tokens_info.start
        key = min(len_params, key=len_params.get)
        _method_name1 = program.packages[
            self.package_name].classes[key].methods[removemethod[key][0]]
        tokens_info = TokensInfo(_method_name1.parser_context)
        singlefileelement = SingleFileElement(_method_name1.parser_context,
                                              _method_name1.filename)
        token_stream_rewriter = TokenStreamRewriter(
            singlefileelement.get_token_stream())
        strofmethod = token_stream_rewriter.getText(
            program_name=token_stream_rewriter.DEFAULT_PROGRAM_NAME,
            start=tokens_info.start,
            stop=tokens_info.stop)
        strofmethod = strofmethod.replace(_method_name1.class_name,
                                          target_class_name)

        Rewriter_.insert_after(tokens_info=class_tokens_info, text=strofmethod)
        Rewriter_.apply()

        return True


if __name__ == "__main__":
    mylist = get_filenames_in_dir('/data/Dev/JavaSample/')
    if PullUpConstructorRefactoring(mylist, "", "Admin").do_refactor():
        print("Success!")
    else:
        print("Cannot refactor.")
Пример #9
0

def clean_up_dir(files: list) -> list:
    """
    :param files: List of files in the project directory
    :return: list

    Cleans up trashed files and gives original files
    """

    original_files = list()
    for file in files:
        if "rewritten.java" in file:
            os.remove(file)
        else:
            original_files.append(file)
    return original_files


if __name__ == '__main__':
    path = "/data/Dev/JavaSample/"
    my_list = get_filenames_in_dir(path)

    filtered = clean_up_dir(my_list)

    refactoring = MoveFieldRefactoring(filtered, 'my_package', 'Source',
                                       'number', 'Target', 'my_package')

    result = refactoring.move()
    print(result)
Пример #10
0
        is_public = "public" in method.modifiers
        is_protected = "protected" in method.modifiers
        is_private = "private" in method.modifiers

        for c in classes_to_add_to:
            c_body_start = utils_listener_fast.TokensInfo(
                c.parser_context.classBody())
            c_body_start.stop = c_body_start.start
            rewriter.insert_after(
                c_body_start, "\n\n    %s %s %s() {\n       %s\n    }\n" %
                (" ".join(method.modifiers), method.returntype, method.name,
                 method.body_text[1:-1]))

        method_token_info = utils_listener_fast.TokensInfo(
            method.parser_context)
        rewriter.replace(method_token_info, "")

        rewriter.apply()
        return True


if __name__ == "__main__":
    my_list = get_filenames_in_dir(
        'D:/archive/uni/CD/project/CodART/tests/pushdown_method/vehicle')
    print("Testing pushdown_method...")
    if PushDownMethodRefactoring(my_list, "pushdown_method_test_vehicle",
                                 "Vehicle", "epicMethod()").do_refactor():
        print("Success!")
    else:
        print("Cannot refactor.")