if ((seen == INVOKESPECIAL) && getNameConstantOperand().equals("<init>")) { String cls = getClassConstantOperand(); String sig = getSigConstantOperand(); if ((cls.equals("java/lang/Integer") && sig.equals("(I)V")) ||  (cls.equals("java/lang/Float") && sig.equals("(F)V")) ||  (cls.equals("java/lang/Double") && sig.equals("(D)V")) ||  (cls.equals("java/lang/Long") && sig.equals("(J)V")) ||  (cls.equals("java/lang/Byte") && sig.equals("(B)V")) ||  (cls.equals("java/lang/Character") && sig.equals("(C)V")) ||  (cls.equals("java/lang/Short") && sig.equals("(S)V")) ||  (cls.equals("java/lang/Boolean") && sig.equals("(Z)V"))) { primitiveObjCtorSeen = cls; return; } } else if ((primitiveObjCtorSeen != null) &&  (seen == INVOKEVIRTUAL) &&   getNameConstantOperand().equals("toString") &&   getClassConstantOperand().equals(primitiveObjCtorSeen) &&   getSigConstantOperand().equals("()Ljava/lang/String;")) { bugReporter.reportBug(new BugInstance(this, "DM_BOXED_PRIMITIVE_TOSTRING", LOW_PRIORITY) .addClassAndMethod(this) .addSourceLine(this)); } primitiveObjCtorSeen = null;
	public void sawOpcode(int seen) {		if (isPublicStaticVoidMain && seen == INVOKEVIRTUAL		        && getClassConstantOperand().startsWith("javax/swing/")		        && (getNameConstantOperand().equals("show")		        && getSigConstantOperand().equals("()V")		        || getNameConstantOperand().equals("pack")		        && getSigConstantOperand().equals("()V")		        || getNameConstantOperand().equals("setVisible")		        && getSigConstantOperand().equals("(Z)V")))			bugReporter.reportBug(new BugInstance(this, "SW_SWING_METHODS_INVOKED_IN_SWING_THREAD", LOW_PRIORITY)			        .addClassAndMethod(this)			        .addSourceLine(this));		if ((seen == INVOKESPECIAL)		        && getClassConstantOperand().equals("java/lang/String")		        && getNameConstantOperand().equals("<init>")		        && getSigConstantOperand().equals("(Ljava/lang/String;)V"))			if (alreadyReported.add(getRefConstantOperand()))				bugReporter.reportBug(new BugInstance(this, "DM_STRING_CTOR", NORMAL_PRIORITY)				        .addClassAndMethod(this)				        .addSourceLine(this));		if ((seen == INVOKESPECIAL)		        && getClassConstantOperand().equals("java/lang/String")		        && getNameConstantOperand().equals("<init>")		        && getSigConstantOperand().equals("()V"))			if (alreadyReported.add(getRefConstantOperand()))				bugReporter.reportBug(new BugInstance(this, "DM_STRING_VOID_CTOR", NORMAL_PRIORITY)				        .addClassAndMethod(this)				        .addSourceLine(this));		if (!isPublicStaticVoidMain && seen == INVOKESTATIC		        && getClassConstantOperand().equals("java/lang/System")		        && getNameConstantOperand().equals("exit")		        && !getMethodName().startsWith("windowClos"))			bugReporter.reportBug(new BugInstance(this, "DM_EXIT", LOW_PRIORITY)			        .addClassAndMethod(this)			        .addSourceLine(this));		if (((seen == INVOKESTATIC		        && getClassConstantOperand().equals("java/lang/System"))		        || (seen == INVOKEVIRTUAL		        && getClassConstantOperand().equals("java/lang/Runtime")))		        && getNameConstantOperand().equals("gc")		        && getSigConstantOperand().equals("()V")		        && !getDottedClassName().startsWith("java.lang")		        && !getMethodName().startsWith("gc")		        && !getMethodName().endsWith("gc"))			if (alreadyReported.add(getRefConstantOperand())) {				// System.out.println("Saw call to GC");				if (isPublicStaticVoidMain) {					// System.out.println("Skipping GC complaint in main method");					return;				}				// Just save this report in a field; it will be flushed				// IFF there were no calls to System.currentTimeMillis();				// in the method.				gcInvocationBugReport = new BugInstance(this, "DM_GC", HIGH_PRIORITY)				        .addClassAndMethod(this)				        .addSourceLine(this);				gcInvocationPC = getPC();				//System.out.println("GC invocation at pc " + PC);			}		if ((seen == INVOKESPECIAL)		        && getClassConstantOperand().equals("java/lang/Boolean")		        && getNameConstantOperand().equals("<init>")		        && !getClassName().equals("java/lang/Boolean")		)			if (alreadyReported.add(getRefConstantOperand()))				bugReporter.reportBug(new BugInstance(this, "DM_BOOLEAN_CTOR", NORMAL_PRIORITY)				        .addClassAndMethod(this)				        .addSourceLine(this));		if ((seen == INVOKESTATIC)		        && getClassConstantOperand().equals("java/lang/System")		        && (getNameConstantOperand().equals("currentTimeMillis")		           || getNameConstantOperand().equals("nanoTime")))			sawCurrentTimeMillis = true;		if ((seen == INVOKEVIRTUAL)		        && getClassConstantOperand().equals("java/lang/String")		        && getNameConstantOperand().equals("toString")		        && getSigConstantOperand().equals("()Ljava/lang/String;"))			if (alreadyReported.add(getRefConstantOperand()))				bugReporter.reportBug(new BugInstance(this, "DM_STRING_TOSTRING", NORMAL_PRIORITY)				        .addClassAndMethod(this)				        .addSourceLine(this));		if ((seen == INVOKEVIRTUAL)		        && getClassConstantOperand().equals("java/lang/String")		        && (getNameConstantOperand().equals("toUpperCase")		        ||  getNameConstantOperand().equals("toLowerCase"))		        && getSigConstantOperand().equals("()Ljava/lang/String;"))			if (alreadyReported.add(getRefConstantOperand()))				bugReporter.reportBug(new BugInstance(this, "DM_CONVERT_CASE", LOW_PRIORITY)				        .addClassAndMethod(this)				        .addSourceLine(this));/*	//	// TODO: put this back in when we have a standard way	// of enabling and disabling warnings on a per-bug-pattern	// basis.	//	if ((seen == INVOKEVIRTUAL)				&& sawLDCEmptyString				&& getNameConstantOperand().equals("equals"))		bugReporter.reportBug(new BugInstance("DM_STRING_EMPTY_EQUALS", LOW_PRIORITY)				.addClassAndMethod(this)				.addSourceLine(this));	if ((seen == LDC)				&& (getConstantRefOperand() instanceof ConstantString)				&& (getStringConstantOperand().length() == 0))		sawLDCEmptyString = true;	else		sawLDCEmptyString = false;*/	}