google / google/closure-compiler
java.lang.NullPointerException: NAME goog 12
- Dominant language
- JavaScript
- Stars
- 7.7k
- Forks
- 1.2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 6
Description
Playing around with '@implements' and an error occurred when the method 'getSpecial' has an '@export'
GCC version is: closure-compiler-v20190819.jar
Running with
````
java -jar $CLOSURE_PATH --js step.js --generate_exports --compilation_level ADVANCED_OPTIMIZATIONS > result.js
````
Error is:
````
java.lang.NullPointerException: NAME goog 12 [length: 4] [source_file: step.js]
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:895)
at com.google.javascript.jscomp.RemoveUnusedCode.getVarForNameNode(RemoveUnusedCode.java:723)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNameNode(RemoveUnusedCode.java:578)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:424)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseGetProp(RemoveUnusedCode.java:467)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:429)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseChildren(RemoveUnusedCode.java:1126)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseCall(RemoveUnusedCode.java:635)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:352)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseChildren(RemoveUnusedCode.java:1126)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:433)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseChildren(RemoveUnusedCode.java:1126)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:433)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseChildren(RemoveUnusedCode.java:1126)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseNode(RemoveUnusedCode.java:433)
at com.google.javascript.jscomp.RemoveUnusedCode.access$1300(RemoveUnusedCode.java:95)
at com.google.javascript.jscomp.RemoveUnusedCode$Continuation.apply(RemoveUnusedCode.java:1592)
at com.google.javascript.jscomp.RemoveUnusedCode.traverseAndRemoveUnusedReferences(RemoveUnusedCode.java:273)
at com.google.javascript.jscomp.RemoveUnusedCode.process(RemoveUnusedCode.java:252)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:326)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:235)
at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2413)
at com.google.javascript.jscomp.Compiler.lambda$stage2Passes$1(Compiler.java:786)
at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:102)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
````
Example is:
````
/**
* @interface
*/
var IStep = function() {}
/** @return {IStep|null} */
IStep.prototype.getSpecial = function() {}
/**
* @implements {IStep}
*/
class Implementor1 {
constructor(parent = null) {
/** @type {IStep|null} */
this._parent = parent;
}
getNotSpecial() {
return new Date();
}
/**
* @export
* @return {IStep|null}
*/
getSpecial() {
if (this.getNotSpecial().now() > 2529644667834) {
return null;
}
return this._parent;
}
}
class Implementor2 {
constructor() {}
/**
* @return {IStep} null
*/
getSpecial() {
return new Implementor1()
}
}
const array = []
array.push(new Implementor1(new Implementor1()))
array.push(new Implementor2())
console.log(new Implementor1().getNotSpecial())
console.log(array[1].getSpecial())
````
Contributor guide
Assessment
This issue has not been assessed yet.