bazelbuild / bazelbuild/rules_closure

JsChecker NullPointerException when there is a function redefinition

Open
#266 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
159
Forks
111
PR merge metrics
No merged PRs in 30d

Description

If a javascript class has a function redefined, the JsChecker will crash with the NullPointerException. This is critical because in react, we had to use this.toggleButton = this.toggleButton.bind(this); And this is considered as function redefinition.

ERROR: /home/liangzou/gitreview/XXX/javascript/common/react/components/BUILD:18:1: Checking 3 JS files in //javascript/common/react/components:search failed (Exit 1).
ERROR: Program threw uncaught exception with args: JsChecker --label //javascript/common/react/components:search --output bazel-out/local-fastbuild/bin/javascript/common/react/components/search.pbtxt --output_errors bazel-out/local-fastbuild/bin/javascript/common/react/components/search-stderr.txt --output_ijs_file bazel-out/local-fastbuild/bin/javascript/common/react/components/search.i.js --convention CLOSURE --src javascript/common/react/components/search.js --src javascript/common/react/components/search_form.js --src javascript/common/react/components/search_details.js --dep bazel-out/local-fastbuild/bin/external/io_bazel_rules_closure/closure/library/library.pbtxt --dep bazel-out/local-fastbuild/bin/javascript/third_party/react/react_with_addons_lib.pbtxt --dep bazel-out/local-fastbuild/bin/javascript/common/services/query_class_lib.pbtxt --dep bazel-out/local-fastbuild/bin/javascript/third_party/react/react_material_ui_lib.pbtxt
java.lang.NullPointerException
at com.google.javascript.jscomp.ijs.ConvertToTypedInterface$SimplifyDeclarations.shouldRemove(ConvertToTypedInterface.java:521)
at com.google.javascript.jscomp.ijs.ConvertToTypedInterface$SimplifyDeclarations.processDeclaration(ConvertToTypedInterface.java:443)
at com.google.javascript.jscomp.ijs.ConvertToTypedInterface$SimplifyDeclarations.simplifyAll(ConvertToTypedInterface.java:437)
at com.google.javascript.jscomp.ijs.ConvertToTypedInterface.processFile(ConvertToTypedInterface.java:96)
at com.google.javascript.jscomp.ijs.ConvertToTypedInterface.process(ConvertToTypedInterface.java:87)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:300)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:227)
at com.google.javascript.jscomp.Compiler.check(Compiler.java:1067)
at com.google.javascript.jscomp.Compiler.performChecksAndTranspilation(Compiler.java:866)
at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:102)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:800)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:797)
at com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread(CompilerExecutor.java:128)
at com.google.javascript.jscomp.Compiler.runInCompilerThread(Compiler.java:854)
at com.google.javascript.jscomp.Compiler.stage1Passes(Compiler.java:796)
at com.google.javascript.jscomp.Compiler.compile(Compiler.java:713)
at com.google.javascript.jscomp.JsChecker.run(JsChecker.java:249)
at com.google.javascript.jscomp.JsChecker.access$300(JsChecker.java:63)
at com.google.javascript.jscomp.JsChecker$Program.apply(JsChecker.java:341)
at io.bazel.rules.closure.worker.LegacyAspect.run(LegacyAspect.java:38)
at io.bazel.rules.closure.ClosureWorker.run(ClosureWorker.java:69)
at io.bazel.rules.closure.worker.PersistentWorker.runProgram(PersistentWorker.java:109)
at io.bazel.rules.closure.worker.PersistentWorker.runAsPersistentWorker(PersistentWorker.java:144)
at io.bazel.rules.closure.worker.PersistentWorker.run(PersistentWorker.java:84)
at io.bazel.rules.closure.ClosureWorker.main(ClosureWorker.java:111)

Contributor guide

Open the contributing guide

Research direction

Start in com.google.javascript.jscomp.ijs.ConvertToTypedInterface.java, especially SimplifyDeclarations.shouldRemove at line 521 and processDeclaration around line 443. Reproduce with the JsChecker command and JavaScript class pattern described in the report. Done means JsChecker handles the function redefinition without an uncaught NullPointerException.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, javascript
Domain
compilers, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.