Reviewed By: cristianoc Differential Revision: D2744378 fb-gh-sync-id: 0ef57a7master
parent
1666d7f353
commit
731c6cdb0a
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 - present Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package hello;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
class Hello {
|
||||||
|
|
||||||
|
void doesNotCauseNPE() {
|
||||||
|
Pointers.A a = Pointers.mayReturnNull(10);
|
||||||
|
a.method();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mayCauseNPE() {
|
||||||
|
Random rng = new Random();
|
||||||
|
Pointers.A a = Pointers.mayReturnNull(rng.nextInt());
|
||||||
|
// FIXME: should check for null before calling method()
|
||||||
|
a.method();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mayLeakResource() throws IOException {
|
||||||
|
OutputStream stream = Resources.allocateResource();
|
||||||
|
if (stream == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
stream.write(12);
|
||||||
|
} finally {
|
||||||
|
// FIXME: should close the stream
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should be rewritten with nested try { ... } finally {
|
||||||
|
* ... } statements, or the possible exception raised by fis.close()
|
||||||
|
* should be swallowed.
|
||||||
|
*/
|
||||||
|
void twoResources() throws IOException {
|
||||||
|
FileInputStream fis = null;
|
||||||
|
FileOutputStream fos = null;
|
||||||
|
try {
|
||||||
|
fis = new FileInputStream(new File("whatever.txt"));
|
||||||
|
fos = new FileOutputStream(new File("everwhat.txt"));
|
||||||
|
fos.write(fis.read());
|
||||||
|
} finally {
|
||||||
|
if (fis != null) { fis.close(); }
|
||||||
|
if (fos != null) { fos.close(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 - present Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package hello;
|
||||||
|
|
||||||
|
public class Pointers {
|
||||||
|
|
||||||
|
public static class A {
|
||||||
|
public void method() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static A mayReturnNull(int i) {
|
||||||
|
if (i > 0) {
|
||||||
|
return new A();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 - present Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package hello;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class Resources {
|
||||||
|
|
||||||
|
public static FileOutputStream allocateResource() {
|
||||||
|
try {
|
||||||
|
File file = new File("foo.txt");
|
||||||
|
return new FileOutputStream(file);
|
||||||
|
} catch (IOException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue