google / google/closure-compiler

BROWSER_WITH_TRANSFORMED_PREFIXES causes NullPointerException when imported module is not found

Open
#3,545 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
7.7k
Forks
1.2k
Avg merge
2d 12h
Merged PRs (30d)
6

Description

Version: v20200112
Built on: 2020-01-13 22:51

file.js:
```js
import foo from './does-not-exist';
window.foo = foo;
```

In any `module_resolution` mode but `BROWSER_WITH_TRANSFORMED_PREFIXES` this raises a properly formatted error:

```
google-closure-compiler --js file.js --module_resolution BROWSER

file.js:1: ERROR - [JSC_JS_MODULE_LOAD_WARNING] Failed to load module "./does-not-exist"
import foo from './does-not-exist';
^

1 error(s), 0 warning(s)
```

In `BROWSER_WITH_TRANSFORMED_PREFIXES` however this causes an exception:

```
google-closure-compiler --js file.js --module_resolution BROWSER_WITH_TRANSFORMED_PREFIXES

java.lang.NullPointerException: NAME default$$module$does_not_exist 2 [length: 3] [originalname: foo] [source_file: file.js]
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:895)
at com.google.javascript.jscomp.RemoveUnusedCode.getVarForNameNode(RemoveUnusedCode.java:719)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNameNode(RemoveUnusedCode.java:574)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:420)
at com.google.javascript.jscomp.RemoveUnusedCode.access$1300(RemoveUnusedCode.java:93)
at com.google.javascript.jscomp.RemoveUnusedCode$Continuation.apply(RemoveUnusedCode.java:1588)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseAndRemoveUnusedReferences(RemoveUnusedCode.java:269)
at com.google.javascript.jscomp.RemoveUnusedCode.process(RemoveUnusedCode.java:250)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:317)
at com.google.javascript.jscomp.PhaseOptimizer$Loop.process(PhaseOptimizer.java:462)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:232)
at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2418)
at com.google.javascript.jscomp.Compiler.lambda$stage2Passes$1(Compiler.java:799)
at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:102)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:473)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
```

Particularly, this breaks `--error_format JSON` by making the result not a valid JSON.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.