An exception in a ``++throws++`` declaration in Java is superfluous if it is:


* listed multiple times
* a subclass of another listed exception
* a ``++RuntimeException++``, or one of its descendants
* completely unnecessary because the declared exception type cannot actually be thrown


== Noncompliant Code Example

----
void foo() throws MyException {
  throw new MyException();
}

@Test
public void testMethod1() throws MyException, MyException {  // Noncompliant; should be listed once
  foo();
}

@Test  
public void testMethod2() throws MyException { //Noncompliant, exception cannot be thrown
}

@Test
public void testMethod3() throws Throwable, Exception {}  // Noncompliant; Exception is a subclass of Throwable

@Test
public void testMethod4 throws RuntimeException {}  // Noncompliant; RuntimeException can always be thrown
----


== Compliant Solution

----
@Test
public void testMethod1() throws MyException {
  foo();
}

@Test  
public void testMethod2() {
}

@Test
public void testMethod3()throws Throwable {}

@Test
public void testMethod4() {}
----


== See

* Related rule {S1130}


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[]
