pos = 1;
case AASTORE: case BASTORE: case CASTORE: case SASTORE: pos = 2;
         public void sawOpcode(int seen) {				opcodeStack.mergeJumps(this);		if (seen == GETSTATIC) {			XField f = XFactory.createReferencedXField(this);                	staticFieldsReadInThisMethod.add(f);			}		else if (seen == INVOKESTATIC) {			seenInvokeStatic = true;			}		else if (seen == PUTSTATIC 			&& !getMethod().isStatic()) {			XField f = XFactory.createReferencedXField(this);                	if (!staticFieldsReadInThisMethod.contains(f)) {				int priority = LOW_PRIORITY;				if (!publicOrProtectedConstructor)					priority--;				if (!seenInvokeStatic 				     && staticFieldsReadInThisMethod.isEmpty())					priority--;				if (getThisClass().isPublic() 					&& getMethod().isPublic())					priority--;				if (getThisClass().isPrivate() 				    || getMethod().isPrivate())					priority++;				if (getClassName().indexOf('$') != -1)					priority++;				bugReporter.reportBug(new BugInstance(this, 						"ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD",					priority					)				        .addClassAndMethod(this)				        .addField(f)				        .addSourceLine(this)					);				}			}		if (seen == INVOKEVIRTUAL || seen == INVOKEINTERFACE			|| seen == INVOKESPECIAL)  {				String sig = getSigConstantOperand();				int pos = PreorderVisitor.getNumberArguments(sig);				if (opcodeStack.getStackDepth() > pos) {				OpcodeStack.Item item = opcodeStack.getStackItem(pos);				if (DEBUG)				System.out.println("In " + getFullyQualifiedMethodName()					+ " saw call on " + item);				boolean superCall = seen == INVOKESPECIAL					&&  !getClassConstantOperand() .equals(getClassName());				boolean selfCall = item.getRegisterNumber() == 0 					&& !superCall;				if (selfCall && getMethodName().equals("<init>")) {					sawSelfCallInConstructor = true;						if (DEBUG)					System.out.println("Saw self call in " + getFullyQualifiedMethodName()  + " to " + getClassConstantOperand() + "." + getNameConstantOperand()					);					}				}			}		if ((seen == IFNULL || seen == IFNONNULL) 			&& opcodeStack.getStackDepth() > 0)  {			OpcodeStack.Item item = opcodeStack.getStackItem(0);			XField f = item.getXField();			if (f != null) {				nullTested.add(f);				if (DEBUG)				System.out.println(f + " null checked in " +					getFullyQualifiedMethodName());				}			}		if (seen == GETFIELD || seen == INVOKEVIRTUAL 				|| seen == INVOKEINTERFACE				|| seen == INVOKESPECIAL || seen == PUTFIELD 				|| seen == IALOAD				|| seen == IASTORE)  {			int pos = 0;			switch(seen) {			case GETFIELD :				pos = 0;				break;			case INVOKEVIRTUAL :			case INVOKEINTERFACE:			case INVOKESPECIAL:				String sig = getSigConstantOperand();				pos = PreorderVisitor.getNumberArguments(sig);				break;			case PUTFIELD :			case IALOAD :			case IASTORE :				pos = 1;				break;			default: throw new RuntimeException("Impossible");			}			if (opcodeStack.getStackDepth() > pos) {			OpcodeStack.Item item = opcodeStack.getStackItem(pos);			XField f = item.getXField();			if (f != null && !nullTested.contains(f) 					&& ! (writtenInConstructorFields.contains(f)						 && writtenNonNullFields.contains(f))					) {				ProgramPoint p = new ProgramPoint(this);				HashSet <ProgramPoint> s = assumedNonNull.get(f);				if (s == null) {					s = new HashSet<ProgramPoint>();					assumedNonNull.put(f,s);					}				s.add(p);				if (DEBUG)				System.out.println(f + " assumed non-null in " +					getFullyQualifiedMethodName());				}			}			}		if (seen == ALOAD_1) {			count_aload_1++;		} else if (seen == GETFIELD || seen == GETSTATIC) {			XField f = XFactory.createReferencedXField(this);			if (DEBUG) System.out.println("get: " + f);			readFields.add(f);		} else if (seen == PUTFIELD || seen == PUTSTATIC) {			XField f = XFactory.createReferencedXField(this);			OpcodeStack.Item item = null;			if (opcodeStack.getStackDepth() > 0) {				item = opcodeStack.getStackItem(0);				if (!item.isNull()) nullTested.add(f);			}			writtenFields.add(f);			if (previousOpcode != ACONST_NULL || previousPreviousOpcode == GOTO )  {				writtenNonNullFields.add(f);				if (DEBUG) System.out.println("put nn: " + f);			}			else if (DEBUG) System.out.println("put: " + f);						if (					getMethodName().equals("<init>") 					|| getMethodName().equals("<clinit>") 					|| getMethod().isPrivate()) {				writtenInConstructorFields.add(f);				if (previousOpcode != ACONST_NULL || previousPreviousOpcode == GOTO ) 					assumedNonNull.remove(f);			}								}		opcodeStack.sawOpcode(this, seen);		previousPreviousOpcode = previousOpcode;		previousOpcode = seen;		if (DEBUG) {		System.out.println("After " + OPCODE_NAMES[seen] + " opcode stack is");		System.out.println(opcodeStack);		}			}