include::../description.adoc[]

== Noncompliant Code Example

----
void doSomething(int a, int b) {     // "b" is unused
  compute(a);
}
----

== Compliant Solution

----
void doSomething(int a) {
  compute(a);
}
----

== Exceptions

The rule will not raise issues for unused parameters:

* that are annotated with ``@javax.enterprise.event.Observes`` 
* in overrides and implementation methods
* in interface ``default`` methods 
* in non-private methods that only ``throw`` or that have empty bodies
* in annotated methods, unless the annotation is ``@SuppressWarning("unchecked")`` or ``@SuppressWarning("rawtypes")``, in which case the annotation will be ignored
* in overridable methods (non-final, or not member of a final class, non-static, non-private), if the parameter is documented with a proper javadoc.

----
@Override
void doSomething(int a, int b) {     // no issue reported on b
  compute(a);
}

public void foo(String s) {
  // designed to be extended but noop in standard case
}

protected void bar(String s) {
  //open-closed principle
}

public void qix(String s) {
  throw new UnsupportedOperationException("This method should be implemented in subclasses");
}

/**
 * @param s This string may be use for further computation in overriding classes
 */
protected void foobar(int a, String s) { // no issue, method is overridable and unused parameter has proper javadoc
  compute(a);
}
----

include::../see.adoc[]
