import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
class A {
void m1() {
try {
m3();
} catch (MyException e) {
} catch (MyException1 | MyException2 e) {
} catch (Exception e) { // Noncompliant [[sc=14;ec=23]] {{Catch a list of specific exception subtypes instead.}}
}
try {
} catch (MyException1 | Exception e) { // Noncompliant
}
try {
m2();
m2();
} catch (Exception e) { // compliant, m2 throws explicitly java.lang.Exception
}
try {
} catch (UnsupportedEncodingException | UnsupportedDataTypeException | RuntimeException e) {
}
}
void m2() throws Exception {
}
void m3() throws MyException {
}
}
class B {
public void foo() {
try {
unknownMethod();
} catch (Exception e) { // Compliant
}
}
}
class ExceptionsWithParametrizedMethods {
void foo() {
try {
AccessController.doPrivileged(new B());
} catch (Exception e) { // Noncompliant
}
try {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() {
@Override
public Object run() {
return null;
}
});
} catch (Exception e) { // Noncompliant
}
try {
java.security.AccessController.doPrivileged(new C());
} catch (Exception e) { // Noncompliant
}
try {
java.security.AccessController.doPrivileged(new C());
} catch (PrivilegedActionException e) { // Compliant
}
try {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedExceptionAction() {
@Override
public Object run() {
return null;
}
});
} catch (Exception e) { // Noncompliant
}
}
class B implements PrivilegedAction<Integer> {
@Override
public Integer run() {
return null;
}
}
class C implements PrivilegedExceptionAction<Integer> {
@Override
public Integer run() throws Exception {
return null;
}
}
class FOoBar {
void plop(Class type) {
try {
type.getMethod("getListeners", new Class[]{Class.class});
}catch (Exception e){ // Noncompliant
}
}
}
}