google / google/closure-compiler

@nocollapse is not honored by DevirtualizePrototypeMethods

Open
#2,420 6 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

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

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.