Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: Source/core/inspector/CodeGeneratorInspector.py

Issue 325833002: DevTools: eliminate 1k lines of generated code in InspectorBackendDispatcher.cpp (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 Google Inc. All rights reserved. 2 # Copyright (c) 2011 Google Inc. All rights reserved.
3 # Copyright (c) 2012 Intel Corporation. All rights reserved. 3 # Copyright (c) 2012 Intel Corporation. All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 1884 matching lines...) Expand 10 before | Expand all | Expand 10 after
1895 def process_command(json_command, domain_name, agent_field_name, agent_inter face_name): 1895 def process_command(json_command, domain_name, agent_field_name, agent_inter face_name):
1896 if (("handlers" in json_command) and (not ("renderer" in json_command["h andlers"]))): 1896 if (("handlers" in json_command) and (not ("renderer" in json_command["h andlers"]))):
1897 return 1897 return
1898 1898
1899 json_command_name = json_command["name"] 1899 json_command_name = json_command["name"]
1900 1900
1901 cmd_enum_name = "k%s_%sCmd" % (domain_name, json_command["name"]) 1901 cmd_enum_name = "k%s_%sCmd" % (domain_name, json_command["name"])
1902 1902
1903 Generator.method_name_enum_list.append(" %s," % cmd_enum_name) 1903 Generator.method_name_enum_list.append(" %s," % cmd_enum_name)
1904 Generator.method_handler_list.append(" &InspectorBackendDispa tcherImpl::%s_%s," % (domain_name, json_command_name)) 1904 Generator.method_handler_list.append(" &InspectorBackendDispa tcherImpl::%s_%s," % (domain_name, json_command_name))
1905 Generator.backend_method_declaration_list.append(" void %s_%s(long ca llId, JSONObject* requestMessageObject);" % (domain_name, json_command_name)) 1905 Generator.backend_method_declaration_list.append(" void %s_%s(long ca llId, JSONObject* requestMessageObject, JSONArray* protocolErrors);" % (domain_n ame, json_command_name))
1906 1906
1907 backend_agent_interface_list = [] if "redirect" in json_command else Gen erator.backend_agent_interface_list 1907 backend_agent_interface_list = [] if "redirect" in json_command else Gen erator.backend_agent_interface_list
1908 1908
1909 ad_hoc_type_output = [] 1909 ad_hoc_type_output = []
1910 backend_agent_interface_list.append(ad_hoc_type_output) 1910 backend_agent_interface_list.append(ad_hoc_type_output)
1911 ad_hoc_type_writer = Writer(ad_hoc_type_output, " ") 1911 ad_hoc_type_writer = Writer(ad_hoc_type_output, " ")
1912 1912
1913 backend_agent_interface_list.append(" virtual void %s(ErrorString *" % json_command_name) 1913 backend_agent_interface_list.append(" virtual void %s(ErrorString *" % json_command_name)
1914 1914
1915 method_in_code = "" 1915 method_in_code = ""
1916 method_out_code = "" 1916 method_out_code = ""
1917 result_object_declaration = ""
1917 agent_call_param_list = [] 1918 agent_call_param_list = []
1919 send_response_call_params_list = ["error"]
1918 request_message_param = "" 1920 request_message_param = ""
1919 normal_response_cook_text = "" 1921 normal_response_cook_text = ""
1920 error_response_cook_text = ""
1921 error_type_binding = None 1922 error_type_binding = None
1922 if "error" in json_command: 1923 if "error" in json_command:
1923 json_error = json_command["error"] 1924 json_error = json_command["error"]
1924 error_type_binding = Generator.resolve_type_and_generate_ad_hoc(json _error, json_command_name + "Error", json_command_name, domain_name, ad_hoc_type _writer, agent_interface_name + "::") 1925 error_type_binding = Generator.resolve_type_and_generate_ad_hoc(json _error, json_command_name + "Error", json_command_name, domain_name, ad_hoc_type _writer, agent_interface_name + "::")
1925 error_type_model = error_type_binding.get_type_model().get_optional( ) 1926 error_type_model = error_type_binding.get_type_model().get_optional( )
1926 error_annotated_type = error_type_model.get_command_return_pass_mode l().get_output_parameter_type() 1927 error_annotated_type = error_type_model.get_command_return_pass_mode l().get_output_parameter_type()
1927 agent_call_param_list.append(", %serrorData" % error_type_model.get_ command_return_pass_model().get_output_argument_prefix()) 1928 agent_call_param_list.append(", %serrorData" % error_type_model.get_ command_return_pass_model().get_output_argument_prefix())
1928 backend_agent_interface_list.append(", %s errorData" % error_annotat ed_type) 1929 backend_agent_interface_list.append(", %s errorData" % error_annotat ed_type)
1929 method_in_code += " %s errorData;\n" % error_type_model.get_comma nd_return_pass_model().get_return_var_type() 1930 method_in_code += " %s errorData;\n" % error_type_model.get_comma nd_return_pass_model().get_return_var_type()
1930 1931 send_response_call_params_list.append("errorData")
1931 setter_argument = error_type_model.get_command_return_pass_model().g et_output_to_raw_expression() % "errorData"
1932 if error_type_binding.get_setter_value_expression_pattern():
1933 setter_argument = error_type_binding.get_setter_value_expression _pattern() % setter_argument
1934 error_assigment_value = error_type_binding.reduce_to_raw_type().get_ constructor_pattern() % setter_argument
1935
1936 cook = " resultErrorData = %s;\n" % error_assigment_value
1937
1938 error_condition_pattern = error_type_model.get_command_return_pass_m odel().get_set_return_condition()
1939 cook = (" if (%s)\n " % (error_condition_pattern % "er rorData")) + cook
1940 error_response_cook_text = " if (error.length()) {\n" + cook + " }\n"
1941 1932
1942 if "parameters" in json_command: 1933 if "parameters" in json_command:
1943 json_params = json_command["parameters"] 1934 json_params = json_command["parameters"]
1944 request_message_param = " requestMessageObject" 1935 request_message_param = " requestMessageObject"
1945 1936
1946 if json_params: 1937 if json_params:
1947 method_in_code += Templates.param_container_access_code 1938 method_in_code += Templates.param_container_access_code
1948 1939
1949 for json_parameter in json_params: 1940 for json_parameter in json_params:
1950 json_param_name = json_parameter["name"] 1941 json_param_name = json_parameter["name"]
1951 param_raw_type = resolve_param_raw_type(json_parameter, domain_n ame) 1942 param_raw_type = resolve_param_raw_type(json_parameter, domain_n ame)
1952 1943
1953 getter_name = param_raw_type.get_getter_name() 1944 getter_name = param_raw_type.get_getter_name()
1954 1945
1955 optional = json_parameter.get("optional") 1946 optional = json_parameter.get("optional")
1956 1947
1957 non_optional_type_model = param_raw_type.get_raw_type_model() 1948 non_optional_type_model = param_raw_type.get_raw_type_model()
1958 if optional: 1949 if optional:
1959 type_model = non_optional_type_model.get_optional() 1950 type_model = non_optional_type_model.get_optional()
1960 else: 1951 else:
1961 type_model = non_optional_type_model 1952 type_model = non_optional_type_model
1962 1953
1963 if optional: 1954 if optional:
1964 code = (" bool %s_valueFound = false;\n" 1955 code = (" bool %s_valueFound = false;\n"
1965 " %s in_%s = get%s(paramsContainerPtr, \"%s\", &% s_valueFound, protocolErrorsPtr);\n" % 1956 " %s in_%s = get%s(paramsContainerPtr, \"%s\", &% s_valueFound, protocolErrors);\n" %
1966 (json_param_name, non_optional_type_model.get_command _return_pass_model().get_return_var_type(), json_param_name, getter_name, json_p aram_name, json_param_name)) 1957 (json_param_name, non_optional_type_model.get_command _return_pass_model().get_return_var_type(), json_param_name, getter_name, json_p aram_name, json_param_name))
1967 param = ", %s_valueFound ? &in_%s : 0" % (json_param_name, j son_param_name) 1958 param = ", %s_valueFound ? &in_%s : 0" % (json_param_name, j son_param_name)
1968 # FIXME: pass optional refptr-values as PassRefPtr 1959 # FIXME: pass optional refptr-values as PassRefPtr
1969 formal_param_type_pattern = "const %s*" 1960 formal_param_type_pattern = "const %s*"
1970 else: 1961 else:
1971 code = (" %s in_%s = get%s(paramsContainerPtr, \"%s\", 0, protocolErrorsPtr);\n" % 1962 code = (" %s in_%s = get%s(paramsContainerPtr, \"%s\", 0, protocolErrors);\n" %
1972 (non_optional_type_model.get_command_return_pass_mod el().get_return_var_type(), json_param_name, getter_name, json_param_name)) 1963 (non_optional_type_model.get_command_return_pass_mod el().get_return_var_type(), json_param_name, getter_name, json_param_name))
1973 param = ", in_%s" % json_param_name 1964 param = ", in_%s" % json_param_name
1974 # FIXME: pass not-optional refptr-values as NonNullPassRefPt r 1965 # FIXME: pass not-optional refptr-values as NonNullPassRefPt r
1975 if param_raw_type.is_heavy_value(): 1966 if param_raw_type.is_heavy_value():
1976 formal_param_type_pattern = "const %s&" 1967 formal_param_type_pattern = "const %s&"
1977 else: 1968 else:
1978 formal_param_type_pattern = "%s" 1969 formal_param_type_pattern = "%s"
1979 1970
1980 method_in_code += code 1971 method_in_code += code
1981 agent_call_param_list.append(param) 1972 agent_call_param_list.append(param)
(...skipping 26 matching lines...) Expand all
2008 1999
2009 assigment_value = error_type_model.get_event_setter_expression_p attern() % "errorData" 2000 assigment_value = error_type_model.get_event_setter_expression_p attern() % "errorData"
2010 assigment_value = error_type_binding.reduce_to_raw_type().get_co nstructor_pattern() % assigment_value 2001 assigment_value = error_type_binding.reduce_to_raw_type().get_co nstructor_pattern() % assigment_value
2011 2002
2012 Generator.backend_method_implementation_list.append(Templates.ca llback_failure_method.substitute(None, 2003 Generator.backend_method_implementation_list.append(Templates.ca llback_failure_method.substitute(None,
2013 agentName=agent_interface_name, 2004 agentName=agent_interface_name,
2014 callbackName=callback_name, 2005 callbackName=callback_name,
2015 parameter=annotated_type + " errorData", 2006 parameter=annotated_type + " errorData",
2016 argument=assigment_value)) 2007 argument=assigment_value))
2017 2008
2018
2019
2020 ad_hoc_type_output.append(callback_output) 2009 ad_hoc_type_output.append(callback_output)
2021 2010
2022 method_out_code += " RefPtr<" + agent_interface_name + "::" + cal lback_name + "> callback = adoptRef(new " + agent_interface_name + "::" + callba ck_name + "(this, callId));\n" 2011 method_out_code += " RefPtr<" + agent_interface_name + "::" + cal lback_name + "> callback = adoptRef(new " + agent_interface_name + "::" + callba ck_name + "(this, callId));\n"
2023 agent_call_param_list.append(", callback") 2012 agent_call_param_list.append(", callback")
2024 normal_response_cook_text += " if (!error.length()) \n" 2013 normal_response_cook_text += " if (!error.length()) \n"
2025 normal_response_cook_text += " return;\n" 2014 normal_response_cook_text += " return;\n"
2026 normal_response_cook_text += " callback->disable();\n" 2015 normal_response_cook_text += " callback->disable();\n"
2027 backend_agent_interface_list.append(", PassRefPtr<%s> callback" % ca llback_name) 2016 backend_agent_interface_list.append(", PassRefPtr<%s> callback" % ca llback_name)
2028 else: 2017 else:
2029 if "returns" in json_command: 2018 if "returns" in json_command:
2030 method_out_code += "\n" 2019 method_out_code += "\n"
2020 result_object_declaration = "\n RefPtr<JSONObject> result = J SONObject::create();"
2021 send_response_call_params_list.append("result")
2031 response_cook_list = [] 2022 response_cook_list = []
2032 for json_return in json_command["returns"]: 2023 for json_return in json_command["returns"]:
2033 2024
2034 json_return_name = json_return["name"] 2025 json_return_name = json_return["name"]
2035 2026
2036 optional = bool(json_return.get("optional")) 2027 optional = bool(json_return.get("optional"))
2037 2028
2038 return_type_binding = Generator.resolve_param_type_and_gener ate_ad_hoc(json_return, json_command_name, domain_name, ad_hoc_type_writer, agen t_interface_name + "::") 2029 return_type_binding = Generator.resolve_param_type_and_gener ate_ad_hoc(json_return, json_command_name, domain_name, ad_hoc_type_writer, agen t_interface_name + "::")
2039 2030
2040 raw_type = return_type_binding.reduce_to_raw_type() 2031 raw_type = return_type_binding.reduce_to_raw_type()
2041 setter_type = raw_type.get_setter_name() 2032 setter_type = raw_type.get_setter_name()
2042 initializer = raw_type.get_c_initializer() 2033 initializer = raw_type.get_c_initializer()
2043 2034
2044 type_model = return_type_binding.get_type_model() 2035 type_model = return_type_binding.get_type_model()
2045 if optional: 2036 if optional:
2046 type_model = type_model.get_optional() 2037 type_model = type_model.get_optional()
2047 2038
2048 code = " %s out_%s;\n" % (type_model.get_command_return_p ass_model().get_return_var_type(), json_return_name) 2039 code = " %s out_%s;\n" % (type_model.get_command_return_p ass_model().get_return_var_type(), json_return_name)
2049 param = ", %sout_%s" % (type_model.get_command_return_pass_m odel().get_output_argument_prefix(), json_return_name) 2040 param = ", %sout_%s" % (type_model.get_command_return_pass_m odel().get_output_argument_prefix(), json_return_name)
2050 var_name = "out_%s" % json_return_name 2041 var_name = "out_%s" % json_return_name
2051 setter_argument = type_model.get_command_return_pass_model() .get_output_to_raw_expression() % var_name 2042 setter_argument = type_model.get_command_return_pass_model() .get_output_to_raw_expression() % var_name
2052 if return_type_binding.get_setter_value_expression_pattern() : 2043 if return_type_binding.get_setter_value_expression_pattern() :
2053 setter_argument = return_type_binding.get_setter_value_e xpression_pattern() % setter_argument 2044 setter_argument = return_type_binding.get_setter_value_e xpression_pattern() % setter_argument
2054 2045
2055 cook = " result->set%s(\"%s\", %s);\n" % (setter_ type, json_return_name, 2046 cook = " result->set%s(\"%s\", %s);\n" % (setter_type , json_return_name,
2056 setter_ argument) 2047 setter_ argument)
2057 2048
2058 set_condition_pattern = type_model.get_command_return_pass_m odel().get_set_return_condition() 2049 set_condition_pattern = type_model.get_command_return_pass_m odel().get_set_return_condition()
2059 if set_condition_pattern: 2050 if set_condition_pattern:
2060 cook = (" if (%s)\n " % (set_condition_pat tern % var_name)) + cook 2051 cook = (" if (%s)\n " % (set_condition_pattern % var_name)) + cook
2061 annotated_type = type_model.get_command_return_pass_model(). get_output_parameter_type() 2052 annotated_type = type_model.get_command_return_pass_model(). get_output_parameter_type()
2062 2053
2063 param_name = var_name 2054 param_name = var_name
2064 if optional: 2055 if optional:
2065 param_name = "opt_" + param_name 2056 param_name = "opt_" + param_name
2066 2057
2067 backend_agent_interface_list.append(", %s %s" % (annotated_t ype, param_name)) 2058 backend_agent_interface_list.append(", %s %s" % (annotated_t ype, param_name))
2068 response_cook_list.append(cook) 2059 response_cook_list.append(cook)
2069 2060
2070 method_out_code += code 2061 method_out_code += code
2071 agent_call_param_list.append(param) 2062 agent_call_param_list.append(param)
2072 2063
2073 normal_response_cook_text += "".join(response_cook_list) 2064 normal_response_cook_text += "".join(response_cook_list)
2074 2065
2075 if len(normal_response_cook_text) != 0: 2066 if len(normal_response_cook_text) != 0:
2076 normal_response_cook_text = " if (!error.length()) {\ n" + normal_response_cook_text + " }" 2067 normal_response_cook_text = " if (!error.length()) {\n" + normal_response_cook_text + " }"
2077 2068
2078 # Redirect to another agent's implementation. 2069 # Redirect to another agent's implementation.
2079 agent_field = "m_" + agent_field_name 2070 agent_field = "m_" + agent_field_name
2080 if "redirect" in json_command: 2071 if "redirect" in json_command:
2081 domain_fixes = DomainNameFixes.get_fixed_data(json_command.get("redi rect")) 2072 domain_fixes = DomainNameFixes.get_fixed_data(json_command.get("redi rect"))
2082 agent_field = "m_" + domain_fixes.agent_field_name 2073 agent_field = "m_" + domain_fixes.agent_field_name
2083 2074
2084 Generator.backend_method_implementation_list.append(Templates.backend_me thod.substitute(None, 2075 Generator.backend_method_implementation_list.append(Templates.backend_me thod.substitute(None,
2085 domainName=domain_name, methodName=json_command_name, 2076 domainName=domain_name, methodName=json_command_name,
2086 agentField=agent_field, 2077 agentField=agent_field,
2087 methodInCode=method_in_code, 2078 methodCode="".join([method_in_code, method_out_code, result_object_d eclaration]),
2088 methodOutCode=method_out_code,
2089 agentCallParams="".join(agent_call_param_list), 2079 agentCallParams="".join(agent_call_param_list),
2090 requestMessageObject=request_message_param, 2080 requestMessageObject=request_message_param,
2091 responseCook=normal_response_cook_text, 2081 responseCook=normal_response_cook_text,
2092 errorCook=error_response_cook_text, 2082 sendResponseCallParams=", ".join(send_response_call_params_list),
2093 commandNameIndex=cmd_enum_name)) 2083 commandNameIndex=cmd_enum_name))
2094 declaration_command_name = "%s.%s\\0" % (domain_name, json_command_name) 2084 declaration_command_name = "%s.%s\\0" % (domain_name, json_command_name)
2095 Generator.backend_method_name_declaration_list.append(" \"%s\"" % dec laration_command_name) 2085 Generator.backend_method_name_declaration_list.append(" \"%s\"" % dec laration_command_name)
2096 Generator.backend_method_name_declaration_index_list.append(" %d," % Generator.backend_method_name_declaration_current_index) 2086 Generator.backend_method_name_declaration_index_list.append(" %d," % Generator.backend_method_name_declaration_current_index)
2097 Generator.backend_method_name_declaration_current_index += len(declarati on_command_name) - 1 2087 Generator.backend_method_name_declaration_current_index += len(declarati on_command_name) - 1
2098 2088
2099 backend_agent_interface_list.append(") = 0;\n") 2089 backend_agent_interface_list.append(") = 0;\n")
2100 2090
2101 class CallbackMethodStructTemplate: 2091 class CallbackMethodStructTemplate:
2102 @staticmethod 2092 @staticmethod
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
2363 validatorIfdefName=VALIDATOR_IFDEF_NAME)) 2353 validatorIfdefName=VALIDATOR_IFDEF_NAME))
2364 2354
2365 backend_h_file.close() 2355 backend_h_file.close()
2366 backend_cpp_file.close() 2356 backend_cpp_file.close()
2367 2357
2368 frontend_h_file.close() 2358 frontend_h_file.close()
2369 frontend_cpp_file.close() 2359 frontend_cpp_file.close()
2370 2360
2371 typebuilder_h_file.close() 2361 typebuilder_h_file.close()
2372 typebuilder_cpp_file.close() 2362 typebuilder_cpp_file.close()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698