google / google/closure-compiler
@nocollapse is not honored by DevirtualizePrototypeMethods
- Dominant language
- JavaScript
- Stars
- 7.7k
- Forks
- 1.2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 6
Description
As discussed [here](http://stackoverflow.com/questions/43187947/preserve-prototypes-in-advanced-mode/), compiler seems to not work properly when using `@nocollapse` JSDoc tag. The compiler is properly not collapsing objects attributes but is sometimes collapsing objects prototypes when using the tag.
Example of code before compilation :
```javascript
/** @constructor */
function MyClass() = { // Some code }
/** @nocollapse */
MyClass.someAttribute = function(someParam) { // Some code };
/** @nocollapse */
MyClass.prototype.someFunc = function() { // Some code calling someOtherFunc };
/** @nocollapse */
MyClass.prototype.someOtherFunc = function(someParam) { // Some code };
```
Example of code after compilation :
```javascript
function MyCompiledClass = { // Some code }
MyCompiledClass.someCompiledAttribute = function(someParam) { // Some code };
MyCompiledClass.prototype.someCompiledFunc = function() { // Some code calling someOtherFunc }
function someOtherCompiledFunc(that, someParam) = { // Some code }
```
I've tried to set `@this` and `@preserve` tags without success. Using `@export` is not a good solution.
Compiler flags are :
- compilation_level : 'ADVANCED'
- warning_level : 'QUIET'
- language_in : 'ECMASCRIPT5_STRICT'
Google-Closure-Compiler versions tested :
- v20160315
- v20170218
- master at ee44867683988d37c9cdb1b5c9557fe984c87135
Contributor guide
Assessment
This issue has not been assessed yet.