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 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". 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 - c_hello/: a sample make-based C project. Try this example by running
infer -- make 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 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