public class Example { public void throws_Throwable() throws Throwable { // Noncompliant [[sc=41;ec=50]] throw new Throwable(); // Noncompliant } public void method_throwing_throwable() throws Throwable { // Compliant throwingExceptionMethod1(); } private void throwingExceptionMethod1() throws Throwable { // Noncompliant [[sc=50;ec=59]] } private void throwingExceptionMethod2() throws java.lang.Throwable { // Noncompliant [[sc=50;ec=69]] } public void throws_Error() { throw new Error(); // Noncompliant [[sc=15;ec=20]] } public void throws_Exception() throws Exception { // Noncompliant {{Define and throw a dedicated exception instead of using a generic one.}} throw new Exception(); // Noncompliant } public void throws_RuntimeException() { throw new RuntimeException(); // Noncompliant } public void throws_custom() throws MyOtherException { // Compliant throw new MyException(); // OK } class MyException extends RuntimeException { // Compliant } class MyOtherException extends Exception { // Compliant } public void throws_value() { throw create(); // OK } public Exception create() { return new RuntimeException(); // OK } public Exception() { try { throws_exception(); } catch (Exception e) { if (e instanceof RuntimeException) { throw (RuntimeException) e; // OK } } } public Example() throws Error, // Noncompliant Exception { // Noncompliant {{Define and throw a dedicated exception instead of using a generic one.}} throw new Throwable(); // Noncompliant throw new int[0]; // Compliant } @Override public void throws_Exception() throws Exception { //Compliant because of overrides } @Deprecated public void throws_Exception() throws Exception { // Noncompliant } } class SubClass extends Example { public void throws_Exception() throws Exception { //Compliant because overrides. super.throws_Exception(); } public static void main(String[] args) throws Exception { //should not raise issue SONARJAVA-671 } }