felipebz / zpa

Parser and static code analysis tool for PL/SQL and Oracle SQL.
https://zpa.felipebz.com
GNU Lesser General Public License v3.0
211 stars 77 forks source link

No 'unused parameter check' on a overriding member of type #90

Closed jleendertse closed 5 years ago

jleendertse commented 5 years ago

The signature of an overriding member of a type cannot be changed. So if a parameter of the overriding member of the subtype is unused, the message 'Remove this unused parameter' is not relevant.

I adapted the code of UnusedParameterCheck:

            // overriding procedures
            if (scope.tree().is(PlSqlGrammar.PROCEDURE_DECLARATION, PlSqlGrammar.FUNCTION_DECLARATION) &&
                "OVERRIDING".equals(scope.tree().getParent().getTokenValue())) {
                    continue; 
           }

and added checks:

create type t under super_t (
--
  overriding member procedure foo(a number, b number); -- don't report violation on declaration
)
/

create type body t as 
  overriding member procedure foo(a number, b number) -- don't report violation on overriding member
  as
  begin
      null;
  end;
end;
/
felipebz commented 5 years ago

Thanks!