blob: cf806176819c3bf1c2c434e3930375ae17b5655f [file] [log] [blame]
// This test case was intended to simulate the code below, which issued
// a false positive at the call to LOG.warn() because the socket is @MustCall("close"):
//
// synchronized void closeSockets() {
// for (ServerSocket serverSocket : serverSockets) {
// if (!serverSocket.isClosed()) {
// try {
// serverSocket.close();
// } catch (IOException e) {
// LOG.warn("Ignoring unexpected exception during close {}", serverSocket, e);
// }
// }
// }
// }
//
import java.io.IOException;
import java.net.ServerSocket;
import java.nio.channels.SocketChannel;
import org.checkerframework.checker.mustcall.qual.*;
class LogTheSocket {
@NotOwning ServerSocket s;
@MustCall("") Object s2;
void testAssign(@Owning ServerSocket s1) {
s = s1;
// :: error: assignment
s2 = s1;
}
void logVarargs(String s, Object... objects) {}
void logNoVarargs(String s, Object object) {}
void test(ServerSocket serverSocket) {
if (!serverSocket.isClosed()) {
try {
serverSocket.close();
} catch (IOException e) {
logVarargs("Ignoring unexpected exception during close {}", serverSocket, e);
}
}
}
void test2(ServerSocket serverSocket) {
if (!serverSocket.isClosed()) {
try {
serverSocket.close();
} catch (IOException e) {
logNoVarargs("Ignoring unexpected exception during close {}", serverSocket);
}
}
}
// This is (mostly) copied from ACSocketTest; under a previous implementation of the
// ownership-transfer scheme,
// it caused false positive warnings from the Must Call checker.
SocketChannel createSock() throws IOException {
SocketChannel sock;
sock = SocketChannel.open();
sock.configureBlocking(false);
sock.socket().setSoLinger(false, -1);
sock.socket().setTcpNoDelay(true);
return sock;
}
@SuppressWarnings("mustcall") // https://github.com/typetools/checker-framework/pull/3867
void testPrintln(ServerSocket s) {
System.out.println(s);
}
}