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);
}
----

== See

* https://wiki.sei.cmu.edu/confluence/x/5dUxBQ[CERT, MSC12-C.] - Detect and remove code that has no effect or is never executed

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
