add interprocedural Java example

Reviewed By: cristianoc

Differential Revision: D2744378

fb-gh-sync-id: 0ef57a7
master
Jules Villard 9 years ago committed by facebook-github-bot-1
parent 1666d7f353
commit 731c6cdb0a

@ -23,12 +23,14 @@ Contents
Make sure that you have the Android SDK 22 installed and up to date, and in
particular the "Android SDK Build-tools" and "Android Support Repository".
- ios_hello/: a sample iOS app. Try this example by running
infer -- xcodebuild -target HelloWorldApp -configuration Debug -sdk iphonesimulator
- c_hello/: a sample make-based C project. Try this example by running
infer -- make
- ios_hello/: a sample iOS app. Try this example by running
infer -- xcodebuild -target HelloWorldApp -configuration Debug -sdk iphonesimulator
- java_hello/: a sample Java project. Try this example by running
infer -- javac Pointers.java Resources.java Hello.java
Note
----

@ -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…
Cancel
Save