def identify_type_of_statement(code_statement_list):
    if is_class_statement(code_statement_list):
        return line_type_dict.get(6)

    method_check = is_method_statement(code_statement_list)
    if method_check != -1:
        return line_type_dict.get(method_check)

    expression_or_field_declaration_check = expression_or_field_delcaration(
        code_statement_list)
    if expression_or_field_declaration_check != -1:
        return line_type_dict.get(expression_or_field_declaration_check)
Exemplo n.º 2
0
    def test_Processing_Statement6(self):
        input_code_statement = 'protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException'
        input_word_tokens = get_list_of_words_from_statement(
            input_code_statement)
        actual_output_dict = parse_java_code_line(input_word_tokens)

        self.assertFalse(actual_output_dict.get('left_side_expression'))

        self.assertFalse(actual_output_dict.get('right_side_expression'))

        self.assertEqual(input_code_statement,
                         actual_output_dict.get('statement'))
        self.assertEqual(line_type_dict.get(2),
                         actual_output_dict.get('statement_type'))

        self.assertFalse(actual_output_dict.get('java_data_types'))

        self.assertTrue(actual_output_dict.get('java_return_types'))
        self.assertEqual(['void'], actual_output_dict.get('java_return_types'))

        self.assertTrue(actual_output_dict.get('access_modifiers'))
        self.assertEqual(['protected'],
                         actual_output_dict.get('access_modifiers'))

        self.assertFalse(actual_output_dict.get('inheritance_type'))

        self.assertTrue(actual_output_dict.get('exception_type'))
        self.assertEqual(['throws'], actual_output_dict.get('exception_type'))

        self.assertTrue(actual_output_dict.get('exceptions_and_inheritances'))
        self.assertEqual(['ServletException', 'IOException'],
                         actual_output_dict.get('exceptions_and_inheritances'))

        self.assertFalse(actual_output_dict.get('unknown'))
Exemplo n.º 3
0
    def test_Processing_Statement5(self):
        input_code_statement = 'super();'
        input_word_tokens = get_list_of_words_from_statement(
            input_code_statement)
        actual_output_dict = parse_java_code_line(input_word_tokens)

        self.assertFalse(actual_output_dict.get('left_side_expression'))

        self.assertFalse(actual_output_dict.get('right_side_expression'))

        self.assertEqual(input_code_statement,
                         actual_output_dict.get('statement'))
        self.assertEqual(line_type_dict.get(3),
                         actual_output_dict.get('statement_type'))

        self.assertFalse(actual_output_dict.get('java_data_types'))

        self.assertFalse(actual_output_dict.get('java_return_types'))

        self.assertFalse(actual_output_dict.get('access_modifiers'))

        self.assertFalse(actual_output_dict.get('inheritance_type'))

        self.assertFalse(actual_output_dict.get('exceptions_and_inheritances'))

        self.assertFalse(actual_output_dict.get('unknown'))
Exemplo n.º 4
0
    def test_Processing_Statement3(self):
        input_code_statement = 'private static final long serialVersionUID = 1L;'
        input_word_tokens = get_list_of_words_from_statement(
            input_code_statement)
        actual_output_dict = parse_java_code_line(input_word_tokens)

        self.assertTrue(actual_output_dict.get('left_side_expression'))
        self.assertEqual('serialVersionUID',
                         actual_output_dict.get('left_side_expression'))

        self.assertTrue(actual_output_dict.get('right_side_expression'))
        self.assertEqual('1L;',
                         actual_output_dict.get('right_side_expression'))

        self.assertEqual(input_code_statement,
                         actual_output_dict.get('statement'))
        self.assertEqual(line_type_dict.get(1),
                         actual_output_dict.get('statement_type'))

        self.assertTrue(actual_output_dict.get('java_data_types'))
        self.assertEqual(['long'], actual_output_dict.get('java_data_types'))

        self.assertFalse(actual_output_dict.get('java_return_types'))

        self.assertTrue(actual_output_dict.get('access_modifiers'))
        self.assertEqual(['private'],
                         actual_output_dict.get('access_modifiers'))

        self.assertFalse(actual_output_dict.get('inheritance_type'))

        self.assertFalse(actual_output_dict.get('exceptions_and_inheritances'))

        self.assertTrue(actual_output_dict.get('unknown'))
        self.assertEqual(['static', 'final'],
                         actual_output_dict.get('unknown'))
Exemplo n.º 5
0
    def test_Processing_Statement2(self):
        input_code_statement = 'public class CustomerFlightDetails extends HttpServlet'
        input_word_tokens = get_list_of_words_from_statement(
            input_code_statement)
        actual_output_dict = parse_java_code_line(input_word_tokens)

        self.assertFalse(actual_output_dict.get('right_side_expression'))
        self.assertFalse(actual_output_dict.get('left_side_expression'))
        self.assertEqual(input_code_statement,
                         actual_output_dict.get('statement'))
        self.assertEqual(line_type_dict.get(6),
                         actual_output_dict.get('statement_type'))
        self.assertFalse(actual_output_dict.get('java_data_types'))
        self.assertFalse(actual_output_dict.get('java_return_types'))

        self.assertTrue(actual_output_dict.get('access_modifiers'))
        self.assertEqual(['public'],
                         actual_output_dict.get('access_modifiers'))

        self.assertTrue(actual_output_dict.get('inheritance_type'))
        self.assertEqual(['extends'],
                         actual_output_dict.get('inheritance_type'))

        self.assertTrue(actual_output_dict.get('exceptions_and_inheritances'))
        self.assertEqual(['HttpServlet'],
                         actual_output_dict.get('exceptions_and_inheritances'))

        self.assertFalse(actual_output_dict.get('unknown'))
Exemplo n.º 6
0
    def test_processing_statement19(self):
        input_code_statement_list = ['s', '=', '"Hello"', ';']
        actual_output = identify_type_of_statement(input_code_statement_list)
        expected_output = line_type_dict.get(5)

        self.assertEqual(actual_output, expected_output, \
        "Did not get the expected output for method 'identify_type_of_statement' " \
        "\nActual output is {} \nExpected output is {}".format(actual_output, expected_output))
Exemplo n.º 7
0
    def test_field_declaration9(self):
        input_code_statement_list = ['int', '[]', 'a;']
        actual_output = identify_type_of_statement(input_code_statement_list)
        expected_output = line_type_dict.get(1)

        self.assertEqual(actual_output, expected_output, \
        "Did not get the expected output for method 'identify_type_of_statement' " \
        "\nActual output is {} \nExpected output is {}".format(actual_output, expected_output))
Exemplo n.º 8
0
    def test_method_invocation5(self):
        input_code_statement_list = ['person', '=doGet(name);']
        actual_output = identify_type_of_statement(input_code_statement_list)
        expected_output = line_type_dict.get(3)

        self.assertEqual(actual_output, expected_output, \
        "Did not get the expected output for method 'identify_type_of_statement' " \
        "\nActual output is {} \nExpected output is {}".format(actual_output, expected_output))
Exemplo n.º 9
0
    def test_class_check2(self):
        input_code_statement_list = ['public', 'class', 'SampleClass']
        actual_output = identify_type_of_statement(input_code_statement_list)
        expected_output = line_type_dict.get(6)

        self.assertEqual(actual_output, expected_output, \
        "Did not get the expected output for method 'identify_type_of_statement' " \
        "\nActual output is {} \nExpected output is {}".format(actual_output, expected_output))
Exemplo n.º 10
0
    def test_method_declaration2(self):
        input_code_statement_list = [
            'public', 'void', 'doGet(String', 'name){'
        ]
        actual_output = identify_type_of_statement(input_code_statement_list)
        expected_output = line_type_dict.get(2)

        self.assertEqual(actual_output, expected_output, \
        "Did not get the expected output for method 'identify_type_of_statement' " \
        "\nActual output is {} \nExpected output is {}".format(actual_output, expected_output))
def get_type_of_line():
    print(
        "What does this line number signify? Please select one of the below options"
    )
    for key in line_type_dict:
        print(str(key) + ". " + line_type_dict.get(key))
    line_type_option = int(raw_input())
    if line_type_option == 1 or line_type_option == 2:
        return line_type_option
    else:
        print("Sorry. Incorrect option provided. Please retry")
        get_type_of_line()
Exemplo n.º 12
0
 def test_Processing_Statement1(self):
     input_code_statement = 'String url = "jdbc:mysql://localhost:3306/airline";'
     input_word_tokens = get_list_of_words_from_statement(
         input_code_statement)
     actual_output_dict = parse_java_code_line(input_word_tokens)
     self.assertEqual('"jdbc:mysql://localhost:3306/airline";',
                      actual_output_dict.get('right_side_expression'))
     self.assertEqual('url', actual_output_dict.get('left_side_expression'))
     self.assertEqual(input_code_statement,
                      actual_output_dict.get('statement'))
     self.assertEqual(line_type_dict.get(1),
                      actual_output_dict.get('statement_type'))
     self.assertTrue(actual_output_dict.get('java_data_types'))
     self.assertFalse(actual_output_dict.get('java_return_types'))
     self.assertFalse(actual_output_dict.get('access_modifiers'))
     self.assertFalse(actual_output_dict.get('inheritance_type'))
     self.assertFalse(actual_output_dict.get('exceptions_and_inheritances'))
     self.assertFalse(actual_output_dict.get('unknown'))
def parse_java_code_line(code_statement_in_word_tokens):

    #0. Extract the type of statement
    type_of_statement = identify_type_of_statement(
        code_statement_in_word_tokens)

    #2. Extract all access modifiers
    access_modifiers_identified = [
        token for token in code_statement_in_word_tokens
        if is_access_modifier(token)
    ]

    #3. Extract all java data types
    data_types_identified = [
        token for token in code_statement_in_word_tokens if is_data_type(token)
    ]

    #4. Extract all return types (Do this only for method declaration statements)
    return_types_identified = []
    if type_of_statement == line_type_dict.get(2):
        return_types_identified = [
            token for token in code_statement_in_word_tokens
            if is_return_type_keyword(token)
        ]

    #5. Extract all inheritance tokens
    inheritance_keywords_identified = [
        token for token in code_statement_in_word_tokens
        if is_inheritance_keyword(token)
    ]

    #6. Extract all exception tokens
    exception_keywords_identified = [
        token for token in code_statement_in_word_tokens
        if is_exception_keyword(token)
    ]

    #7. Extract user_defined_data_types such as class or interface or enum
    user_defined_data_type_type_identified = [
        token for token in code_statement_in_word_tokens
        if is_user_data_type_keyword(token)
    ]

    #8. If a user defined data type is present, the retrieve the token that immediately follows it.
    # For e.g. Given a statement such as class SampleClass, the earlier step identified the 'class' token.
    # In this step, we must retrieve 'SampleClass' token
    user_defined_data_type_identified = []
    for index, token in enumerate(code_statement_in_word_tokens):
        for data_type_type in user_defined_data_type_type_identified:
            if data_type_type == token:
                user_defined_data_type_identified.append(
                    code_statement_in_word_tokens[index + 1])
                break
                #Goes with assumption that a line can have only one token such as class or interface

    #9. Keyword markers = A dictionary of all the indices that has a token that we have identified so far.
    # For e.g given a statement such as Class SampleClass => our dict will be {0:['class'], 1:['SampleClass']}
    keywords_markers_dict = {}
    for index, token in enumerate(code_statement_in_word_tokens):
        if (token in access_modifiers_identified \
            or token in data_types_identified \
            or token in return_types_identified \
            or token in inheritance_keywords_identified \
            or token in exception_keywords_identified \
            or token in user_defined_data_type_type_identified \
            or token in user_defined_data_type_identified):
            keywords_markers_dict[index] = token

    #10. Identify inheritance and exception key words in the code statement
    inheritance_marker_positions = []
    exception_marker_positions = []
    for key in sorted(keywords_markers_dict.iterkeys()):
        keyword = keywords_markers_dict.get(key)
        if keyword in inheritance_keywords_identified:
            inheritance_marker_positions.append(key)
        elif keyword in exception_keywords_identified:
            exception_marker_positions.append(key)

    exceptions_and_inheritances_identified = []
    startedReading = False
    for index, token in enumerate(code_statement_in_word_tokens):
        if index in inheritance_marker_positions or index in exception_marker_positions:
            startedReading = True
        elif startedReading and token != ",":
            exceptions_and_inheritances_identified.append(
                token.replace(",", ""))

    #11. The remaining are all user_defined
    remaining_words_identified = []
    for token in code_statement_in_word_tokens:
        if(token.replace(",","") not in access_modifiers_identified \
            and token.replace(",","") not in data_types_identified \
            and token.replace(",","") not in return_types_identified \
            and token.replace(",","") not in user_defined_data_type_type_identified \
            and token.replace(",","") not in user_defined_data_type_identified \
            and token.replace(",","") not in inheritance_keywords_identified \
            and token.replace(",","") not in exception_keywords_identified \
            and token.replace(",","") not in exceptions_and_inheritances_identified):
            remaining_words_identified.append(token)

    #12. If the type of statement is either a field declaration or processing statement,
    # Then we must capture the left_hand_side and right hand side of '='
    expression_list = []
    if type_of_statement == line_type_dict.get(
            1) or type_of_statement == line_type_dict.get(5):
        expression_list = get_tokens_for_field_declaration_and_processing_statements(
            remaining_words_identified)

    left_hand_side_list = []
    right_hand_side_list = []
    remaining_words_filtered = []
    if len(expression_list) > 0:
        left_hand_side_list = expression_list[0]
        right_hand_side_list = expression_list[1]
        for token in remaining_words_identified:
            if token not in expression_list and token not in '=':
                remaining_words_filtered.append(token)

    # print("Code => {}".format(" ".join(code_statement_in_word_tokens)))
    # print("\tType of statement => {}".format(type_of_statement))
    # print("\tLeft-side expression => {}".format(left_hand_side_list))
    # print("\tRight-side expression => {}".format(right_hand_side_list))
    # print("\tAccess modifiers => {}".format(access_modifiers_identified))
    # print("\tJava Data Types identified => {}".format(data_types_identified))
    # print("\tJava Return Types identified => {}".format(return_types_identified))
    # print("\tUser Defined Data Type Type =>{}".format(user_defined_data_type_type_identified))
    # print("\tUser Defined data type =>{}".format(user_defined_data_type_identified))
    # print("\tInheritance keywords =>{}".format(inheritance_keywords_identified))
    # print("\tException keywords =>{}".format(exception_keywords_identified))
    # print("\tException and inheritances identified =>{}".format(exceptions_and_inheritances_identified))
    # print("\tRemaining Words => {}".format(remaining_words_filtered))

    parsed_line_dict = {}
    parsed_line_dict["statement"] = " ".join(code_statement_in_word_tokens)
    parsed_line_dict["statement_type"] = type_of_statement
    parsed_line_dict["left_side_expression"] = left_hand_side_list
    parsed_line_dict["right_side_expression"] = right_hand_side_list
    parsed_line_dict["access_modifiers"] = access_modifiers_identified
    parsed_line_dict["java_data_types"] = data_types_identified
    parsed_line_dict["java_return_types"] = return_types_identified
    parsed_line_dict[
        "user_data_type_type"] = user_defined_data_type_type_identified
    parsed_line_dict["user_data_type"] = user_defined_data_type_identified
    parsed_line_dict["inheritance_type"] = inheritance_keywords_identified
    parsed_line_dict["exception_type"] = exception_keywords_identified
    parsed_line_dict[
        "exceptions_and_inheritances"] = exceptions_and_inheritances_identified
    parsed_line_dict["unknown"] = remaining_words_filtered

    return parsed_line_dict