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)
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'))
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'))
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'))
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'))
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))
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))
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))
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))
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()
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