package com.siyeh.igtest.errorhandling.toobroadcatch;
import java.io.FileNotFoundException;
import java.io.EOFException;
import java.io.IOException;
import java.net.URL;
public class TooBroadCatchBlock{
public void foo(){
try{
if(bar()){
throw new FileNotFoundException();
} else{
throw new EOFException();
}
} catch(FileNotFoundException e){
e.printStackTrace();
} catch(<warning descr="'catch' of 'IOException' is too broad, masking exception 'EOFException'">IOException</warning> e){
e.printStackTrace();
}
}
private boolean bar(){
return false;
}
void foos() {
try {
new URL(null);
throw new NullPointerException();
} catch (<warning descr="'catch' of 'IOException' is too broad, masking exception 'MalformedURLException'">IOException</warning> e) {
} catch (<warning descr="'catch' of 'RuntimeException' is too broad, masking exception 'NullPointerException'">RuntimeException</warning> e) {
}
}
void bars(boolean a, boolean b, boolean c) {
try {
if (!a) {
throw new NotActiveException(); // extends ObjectStreamException
}
if (b) {
throw new StreamCorruptedException(); // extends ObjectStreamException
}
if (c) {
throw new IOException();
}
} catch (<warning descr="'catch' of 'ObjectStreamException' is too broad, masking exceptions 'NotActiveException' and 'StreamCorruptedException'">ObjectStreamException</warning> e) {
// Deal with ObjectStreamException (a subclass of IOException)...
} catch (IOException e) {
// Deal with IOException...
}
}
class ObjectStreamException extends IOException {}
class StreamCorruptedException extends ObjectStreamException {}
class NotActiveException extends ObjectStreamException {}
void test() {
try {
try (java.io.FileInputStream in = new java.io.FileInputStream("asdf")) {}
} catch (<warning descr="'catch' of 'IOException' is too broad, masking exception 'FileNotFoundException'">IOException</warning> e) {}
try (java.io.InputStream in = new java.io.FileInputStream("")) {
} catch (<warning descr="'catch' of 'Exception' is too broad, masking exceptions 'IOException' and 'FileNotFoundException'">Exception</warning> e) {}
}
boolean m() {
try {
new java.io.FileInputStream("");
return new java.io.File("can_reset").isFile();
} catch (FileNotFoundException e) {
return false;
} catch (<warning descr="'catch' of 'Exception' is too broad, masking exception 'RuntimeException'">Exception</warning> e ) {
return false;
}
}
boolean m2() {
try {
new java.io.FileInputStream("");
return new java.io.File("can_reset").isFile();
} catch (<warning descr="'catch' of 'Exception' is too broad, masking exception 'FileNotFoundException'">Exception</warning> e ) {
return false;
}
}
void m3() {
try {
new Object() {
void f() throws FileNotFoundException {
throw new FileNotFoundException();
}
};
throw new IOException();
} catch (IOException e) {}
try {
System.out.println();
} catch (<warning descr="'catch' of 'Exception' is too broad, masking exception 'RuntimeException'">Exception</warning> e) {
}
try {
System.out.println();
} catch (RuntimeException e) {
} catch (Exception e) {
}
try {
System.out.println();
throw new NumberFormatException();
} catch (<warning descr="'catch' of 'IllegalArgumentException' is too broad, masking exception 'NumberFormatException'">IllegalArgumentException</warning> | NullPointerException e) {
}
}
void incomplete() {
try {
throw <error descr="Cannot resolve symbol 'undeclared'">undeclared</error>;
} catch (NumberFormatException e) {}
}
}
interface ThrowsTypeParameter<T, E extends Exception> {
T execute() throws E;
static void go(ThrowsTypeParameter<String, IllegalArgumentException> action) {
try {
action.execute();
} catch(<warning descr="'catch' of 'Exception' is too broad, masking exception 'IllegalArgumentException'">Exception</warning> e) {}
}
static void perform(ThrowsTypeParameter<?, ?> manager) {
try {
manager.execute();
} catch (Exception e) {}
}
}
class Ex<T extends S, S extends IOException> {
void bar() throws T, S {}
void foo(Ex<?, ?> i) {
try {
i.bar();
}
catch (<warning descr="'catch' of 'Exception' is too broad, masking exception 'IOException'">Exception</warning> ignored) {}
}
void foo2(Ex<?, ?> ex) {
try {
ex.bar();
}
catch (IOException ignored) {}
}
}