package org.foo.bar;
abstract class A {
void tst(Object o) {
try {
foo(o);
} catch (MyException1 e) {
if (o == null) {} // Noncompliant {{Change this condition so that it does not always evaluate to "true"}}
} catch (MyException2 e) {
if (o == null) {} // Noncompliant {{Change this condition so that it does not always evaluate to "false"}}
} finally {
o.toString(); // Noncompliant {{NullPointerException might be thrown as 'o' is nullable here}}
}
}
void tst2(Object o) {
Object o1 = gul(o);
o1.toString(); // Noncompliant {{NullPointerException might be thrown as 'o1' is nullable here}}
}
void tst3(Object o) {
Object o1 = new Object();
try {
o1 = qix(o);
} catch (MyException2 e) {
if (o == null) {} // Noncompliant {{Change this condition so that it does not always evaluate to "false"}}
}
o1.toString(); // Compliant
}
private void foo(Object o) throws MyException1, MyException2 {
if (o == null) {
throw new MyException1();
}
bar();
}
abstract void bar() throws MyException2;
private Object gul(Object o) {
Object result = new Object();
try {
foo(o);
} catch (MyException1 e) {
result = o;
} finally {
return result;
}
}
private Object qix(Object o) throws MyException2 {
Object result;
try {
foo(o);
} catch (MyException1 e) {
result = o;
} finally {
result = new Object();
}
return result;
}
}
class MyException1 extends Exception {}
class MyException2 extends Exception {}