5

I have the following piece of code

 try{//do something
     }
  catch (Exception e) {
        log.error(e, e);
        if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            throw new RuntimeException(e);
        }
    }

the findbugs stataic analysis tool throws this warning on it

instanceof will always return true for all nonnull values in methodX, since all RuntimeException are instances of RuntimeException

what i dont understand is that its Exception which is being caught and not the RuntimeException, so why this warning ?

comatose
  • 1,952
  • 7
  • 26
  • 42

4 Answers4

6

Perhaps, the // do something code does not throw any checked exception, so the only exceptions you can get in your try-block are unchecked ones (subclassing RuntimeException).

Alexander Pavlov
  • 31,598
  • 5
  • 67
  • 93
4

You could also try following code. This will be better to read and maintain.

try{//do something
}
catch (RuntimeException e) {
    throw e;
} 
catch (Exception e) {
    throw new RuntimeException(e);
}
Daniel Engmann
  • 2,840
  • 1
  • 23
  • 17
2

Probably there is no methods that throws not RuntimeException in "try" part. Therefore, you can use construction

catch(RuntimeException e)
{
 //Do something
}
anstarovoyt
  • 7,956
  • 2
  • 27
  • 35
0

Try http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Throwables.html#propagate%28java.lang.Throwable%29. It does exactly what you want. Today I did the replacement for the same reason (findbugs warning), also looked the source of this method.

gyorgyabraham
  • 2,550
  • 1
  • 28
  • 46