@override a method, Google Closure Compiler
google-closure-compiler, inheritance, javascript, jsdoc
Solution
Overridden methods must have the same (or at least very similar) signatures. Specifically, Subclass methods must be able to be used anywhere the base class could be used. See a full discussion: https://groups.google.com/d/topic/closure-compiler-discuss/o_CMZAvFOLU/discussion
The error message you post above shows that the overriding method has more required arguments than the original which is specifically not allowed. You could however have more optional arguments.
Problem
I'm trying to override a method of a superclass and compile the code using Google Closure Compiler but I'm getting a warning about wrong types. ``` /Users/Jan/dev/cro/public/app/js/LibraryController.js:55: WARNING - mismatch of the setState property type and the type of the property it overrides from superclass app.Controller original: function (this:app.Controller, Object): undefined override: function (this:app.LibraryController, Object, string, string): undefined app.LibraryController.prototype.setState = function (state, section, article) { ``` As you can see, I'm not changing the type of the argument accepted by the super method nor do I change the returned type. Does anyone know how to resolve this issue? thanks. To clarify, here are the definitions of the individual methods. ``` /** * @param {!Object} state The new state. */ app.Controller.prototype.setState = function (state) { ... }; /** * @param {!Object} state The new state. * @param {string} section A section ID. * @param {string} article An article ID. * @override */ app.LibraryController.prototype.setState = function (state, section, article) { ... } ```