google / google/closure-compiler

java.lang.NullPointerException: NAME goog 12

Open
#3,484 9 comments 0 reactions 0 assignees View on GitHub
internal-issue-created
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

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.