Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * fb-contrib - Auxiliary detectors for Java programs
   * Copyright (C) 2005-2012 Dave Brosius
   * 
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   * 
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  * 
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 package com.mebigfatguy.fbcontrib.detect;
 
 import  org.apache.bcel.classfile.Code;
 
 import  edu.umd.cs.findbugs.BugInstance;
 import  edu.umd.cs.findbugs.BugReporter;
 import  edu.umd.cs.findbugs.BytecodeScanningDetector;

looks for methods that set a setter with the value obtained from the same bean's complimentary getter. This is usually a typo.
 
 public class SuspiciousGetterSetterUse extends BytecodeScanningDetector {
 
 	private static enum State {SEEN_NOTHING, SEEN_ALOAD, SEEN_GETFIELD, SEEN_DUAL_LOADS, SEEN_INVOKEVIRTUAL};
 	private final BugReporter bugReporter;
 	private State state;
 	private String beanReference1;
 	private String beanReference2;
 	private String propName;
 	private String propType;
 	private boolean sawField;

constructs a SGSU detector given the reporter to report bugs on

Parameters:
bugReporter the sync of bug reports
 
 	public SuspiciousGetterSetterUse(BugReporter bugReporter) {
 		this. = bugReporter;
 	}

overrides the visitor to reset the state to SEEN_NOTHING, and clear the beanReference, propName and propType

Parameters:
obj the context object of the currently parsed code block
 
 	public void visitCode(Code obj) {
 		 = null;		
 		 = null;
 		 = null;
 		 = null;
 		 = false;
 		super.visitCode(obj);
 	}

overrides the visitor to look for a setXXX with the value returned from a getXXX using the same base object.

Parameters:
seen the currently parsed opcode
 
 	public void sawOpcode(int seen) {
 		boolean reset = true;
 		switch () {
 			case :
 				switch (seen) {
 					case ALOAD:
 					case ALOAD_0:
 					case ALOAD_1:
 					case ALOAD_2:
 					case ALOAD_3:
 						reset = false;
 					break;
 				}
 			break;
 			
 			case :
 				switch (seen) {
 					case ALOAD:
 					case ALOAD_0:
 					case ALOAD_1:
 					case ALOAD_2:
 					case ALOAD_3:
							reset = false;
						}
					break;
					case GETFIELD: {
						if () {
								reset = false;
							}
else {
							 = true;
							reset = false;
						}
					}
				}
			break;
			case : {
				switch (seen) {
					case ALOAD:
					case ALOAD_0:
					case ALOAD_1:
					case ALOAD_2:
					case ALOAD_3:
						reset = false;
					break;
				}
			}
			break;
				if (seen == INVOKEVIRTUAL) {
					if (sig.startsWith("()")) {
						 = sig.substring("()".length());
						if (!.equals("V")) {
							if (.startsWith("get")) {
								reset = false;
							}
						}
					}
				}
			break;
				if (seen == INVOKEVIRTUAL) {
					if (sig.equals("(" +  + ")V")) {
						if (name.startsWith("set")) {
							if (.equals(name.substring("set".length()))) {
								.reportBug(new BugInstance(this"SGSU_SUSPICIOUS_GETTER_SETTER_USE", NORMAL_PRIORITY)
																	.addClass(this)
																	.addMethod(this)
																	.addSourceLine(this));
							}
						}
					}
				}
			break;
		}
		if (reset) {
			 = null;
			 = null;
			 = false;
		}
	}
New to GrepCode? Check out our FAQ X