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

Unified Diff: Source/devtools/scripts/compile_frontend.py

Issue 573453004: DevTools: Get rid of frontend_modules.json (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: Source/devtools/scripts/compile_frontend.py
diff --git a/Source/devtools/scripts/compile_frontend.py b/Source/devtools/scripts/compile_frontend.py
index c240c1be766fdf7752e275795eedc81ed7ba811a..a1e89368517579490fb0c309caac6507d3f7400b 100755
--- a/Source/devtools/scripts/compile_frontend.py
+++ b/Source/devtools/scripts/compile_frontend.py
@@ -30,6 +30,7 @@
import os
import os.path as path
import generate_protocol_externs
+import modular_build
import re
import shutil
import subprocess
@@ -57,7 +58,6 @@ java_exec = "java -Xms1024m -server -XX:+TieredCompilation"
generate_protocol_externs.generate_protocol_externs(protocol_externs_file, path.join(devtools_path, "protocol.json"))
jsmodule_name_prefix = "jsmodule_"
-frontend_modules_name = "frontend_modules.json"
runtime_module_name = "_runtime"
module_initializer_name = "_module.js"
@@ -71,12 +71,10 @@ def error_excepthook(exctype, value, traceback):
sys.__excepthook__(exctype, value, traceback)
sys.excepthook = error_excepthook
-try:
- with open(path.join(scripts_path, frontend_modules_name), "rt") as js_modules_file:
- modules = json.loads(js_modules_file.read())
-except:
- log_error("Failed to read %s" % frontend_modules_name)
- raise
+
+loader = modular_build.DescriptorLoader(devtools_frontend_path)
+descriptors = loader.load_application('devtools.json')
+modules_by_name = descriptors.modules
type_checked_jsdoc_tags_list = ["param", "return", "type", "enum"]
@@ -100,27 +98,13 @@ def hasErrors(output):
return re.search(error_warning_regex, output) != None
-def dump_all_checked_files():
- files = {}
- for module in modules:
- for source in module["sources"]:
- files[path.join(devtools_frontend_path, source)] = True
- return files.keys()
-
-
def verify_jsdoc_extra(additional_files):
- return run_in_shell("%s -jar %s %s" % (java_exec, jsdoc_validator_jar, " ".join(dump_all_checked_files() + additional_files)))
+ return run_in_shell("%s -jar %s %s" % (java_exec, jsdoc_validator_jar, " ".join(descriptors.all_compiled_files() + additional_files)))
def verify_jsdoc(additional_files):
def file_list():
- result = []
- for module in modules:
- for file_name in module["sources"]:
- result.append(path.join(devtools_frontend_path, file_name))
- for file in additional_files:
- result.append(file)
- return result
+ return descriptors.all_compiled_files() + additional_files
errors_found = False
for full_file_name in file_list():
@@ -169,16 +153,14 @@ common_closure_args = " --summary_detail_level 3 --jscomp_error visibility --com
spawned_compiler_command = "%s -jar %s %s \\\n" % (java_exec, closure_compiler_jar, common_closure_args)
-modules_by_name = {}
standalone_modules_by_name = {}
dependents_by_module_name = {}
-for module in modules:
- name = module["name"]
- modules_by_name[name] = module
+for name in modules_by_name:
+ module = modules_by_name[name]
if "standalone" in module:
standalone_modules_by_name[name] = module
- for dep in module["dependencies"]:
+ for dep in module.get("dependencies", []):
list = dependents_by_module_name.get(dep)
if not list:
list = []
@@ -187,10 +169,10 @@ for module in modules:
def verify_standalone_modules():
- for module in modules:
- for dependency in module["dependencies"]:
+ for name in modules_by_name:
+ for dependency in modules_by_name[name].get("dependencies", []):
if dependency in standalone_modules_by_name:
- log_error("Standalone module '%s' may not be present among the dependencies of '%s'" % (dependency, module["name"]))
+ log_error("Standalone module '%s' may not be present among the dependencies of '%s'" % (dependency, name))
errors_found = True
verify_standalone_modules()
@@ -201,10 +183,10 @@ def check_duplicate_files():
def check_module(module, seen_files, seen_modules):
name = module["name"]
seen_modules[name] = True
- for dep_name in module["dependencies"]:
+ for dep_name in module.get("dependencies", []):
if not dep_name in seen_modules:
check_module(modules_by_name[dep_name], seen_files, seen_modules)
- for source in module["sources"]:
+ for source in module.get("scripts", []):
referencing_module = seen_files.get(source)
if referencing_module:
log_error("Duplicate use of %s in '%s' (previously seen in '%s')" % (source, name, referencing_module))
@@ -226,38 +208,51 @@ def dump_module(name, recursively, processed_modules):
return ""
processed_modules[name] = True
module = modules_by_name[name]
+ skipped_scripts = set(module.get("skip_compilation", []))
+
+ def filter_scripts():
+ result = []
+ for script in module.get("scripts", []):
+ if script in skipped_scripts:
+ continue
+ result.append(script)
+ return result
+
command = ""
if recursively:
- for dependency in module["dependencies"]:
+ for dependency in module.get("dependencies", []):
command += dump_module(dependency, recursively, processed_modules)
- command += module_arg(module["name"]) + ":"
- command += str(len(module["sources"]))
+ command += module_arg(name) + ":"
+ filtered_scripts = filter_scripts()
+ command += str(len(filtered_scripts))
firstDependency = True
- for dependency in module["dependencies"] + [runtime_module_name]:
+ for dependency in module.get("dependencies", []) + [runtime_module_name]:
if firstDependency:
command += ":"
else:
command += ","
firstDependency = False
command += jsmodule_name_prefix + dependency
- for script in module["sources"]:
- command += " --js " + path.join(devtools_frontend_path, script)
+ for script in filtered_scripts:
+ command += " --js " + path.join(devtools_frontend_path, name, script)
return command
print "Compiling frontend..."
compiler_args_file = tempfile.NamedTemporaryFile(mode='wt', delete=False)
-closure_runner_command = "%s -jar %s --compiler-args-file %s" % (java_exec, closure_runner_jar, compiler_args_file.name)
-
-for module in modules:
- closure_args = common_closure_args
- closure_args += " --externs " + global_externs_file
- closure_args += " --externs " + protocol_externs_file
- runtime_module = module_arg(runtime_module_name) + ":1 --js " + path.join(devtools_frontend_path, "Runtime.js")
- closure_args += runtime_module + dump_module(module["name"], True, {})
- compiler_args_file.write("%s %s\n" % (module["name"], closure_args))
+try:
+ closure_runner_command = "%s -jar %s --compiler-args-file %s" % (java_exec, closure_runner_jar, compiler_args_file.name)
+
+ for name in descriptors.sorted_modules():
+ closure_args = common_closure_args
+ closure_args += " --externs " + global_externs_file
+ closure_args += " --externs " + protocol_externs_file
+ runtime_module = module_arg(runtime_module_name) + ":1 --js " + path.join(devtools_frontend_path, "Runtime.js")
+ closure_args += runtime_module + dump_module(name, True, {})
+ compiler_args_file.write("%s %s\n" % (name, closure_args))
+finally:
+ compiler_args_file.close()
-compiler_args_file.close()
modular_compiler_proc = run_in_shell(closure_runner_command)

Powered by Google App Engine
This is Rietveld 408576698