Unclassified

The initial set of checks.

AppleOrange

Detects when calling A.equals(B) method with A, B types are not compatible.

Here's an example of code that would trigger this checker:

			

public class AppleOrangeExample {
    public void foo(){
        System.out.println(equals("xya"));
    }
    public void bar(){
        System.out.println(equals(new Object()));
    }
}

    
		

ObjectToString

Detects when o.toString() calling with the type of o is java.lang.Object

Here's an example of code that would trigger this checker:

			

public class ObjectToStringExample {
    public void foo(){
        try {

            /* generate a md5 code */

            MessageDigest md = MessageDigest.getInstance("MD5");
            String ssn = "111111111111111xxx21";
            String ssns = md.digest(ssn.getBytes()).toString();
            System.out.println("md5 code is: "+ssns);
            System.out.println("The length of md5 code is: "+md.getDigestLength());
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
        }
    }
}

    
		

FinalizeChecker

Detects when finalize() method is not protected or does not call super.finalize() along all the pathes

Here's an example of code that would trigger this checker:

			

public class FinalizeFailExample {
    protected void finalize() throws Throwable{
        if(Math.random() > 0.0) {
           super.finalize();
        }
     }
}

    
		

InfiniteRecursion

Detects when there is a self method call along all the pathes in the method

Here's an example of code that would trigger this checker:

			

public class InfiniteRecursionExample {
	public void foo(){
		int i=1;
		i++;
		foo();
		System.out.print(i);
	}
}

    
		

LockUnLock

Detects when there is a unbalanced lock/unlock pair along some path

Here's an example of code that would trigger this checker:

			

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class LockUnLockExample {
    public final void bar(){
        
        Lock l= new ReentrantLock();
        l.lock();
        System.out.print(x);
    }
}

    
		

ResourceOpenCloseMatch

Detects when there is a unbalanced database connection open/close pair along some path

Here's an example of code that would trigger this checker:

			

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
class ResourceOpenCloseExample {
    public void m() throws ClassNotFoundException,
	    SQLException {
	Connection connection = null;
        String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
        Class.forName(driverName);
    
        // Create a connection to the database
        String serverName = "localhost";
        String mydatabase = "mydatabase";
        String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
        String username = "username";
        String password = "password";
        connection = DriverManager.getConnection(url, username, password);
        boolean closed = connection.isClosed();
        System.out.println("Is closed "+closed);
        connection.close();
        
        System.out.println("Hello World!"); //Display the string.
    }
    
   public void foo()
       throws ClassNotFoundException,
	    SQLException {
	Connection connection = null;
   //try {
       // Load the JDBC driver
       String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
       Class.forName(driverName);
   
       // Create a connection to the database
       String serverName = "localhost";
       String mydatabase = "mydatabase";
       String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
       String username = "username";
       String password = "password";
       connection = DriverManager.getConnection(url, username, password);
       boolean closed = connection.isClosed();
       System.out.println("Is closed "+closed);
       connection = null;
       connection.close();
       System.out.println("Hello World!"); //Display the string.
   }
   
   public void finalize() throws ClassNotFoundException,
	    SQLException {
	Connection connection = null;
       // Load the JDBC driver
       String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
       Class.forName(driverName);
   
       // Create a connection to the database
       String serverName = "localhost";
       String mydatabase = "mydatabase";
       String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
       String username = "username";
       String password = "password";
       connection = DriverManager.getConnection(url, username, password);
       boolean closed = connection.isClosed();
       System.out.println("Is closed "+closed);
       //connection = null;
       //connection.close();
       System.out.println("Hello World!"); //Display the string.
   
   }
}


    
		

RunOnInitialization

Detects when there is a reference field is not initialized in a constructor

Here's an example of code that would trigger this checker:

			

class RunOnInitializationExample {
    Object obj;
    public RunOnInitializationExample(){
        
    }