continue;
propertySet.addProperty(InconsistentSyncWarningProperty.NEVER_READ);
	public void report() {		for (Iterator<XField> i = statMap.keySet().iterator(); i.hasNext(); ) {			XField xfield = i.next();			FieldStats stats = statMap.get(xfield);			int numReadUnlocked = stats.getNumAccesses(READ_UNLOCKED);			int numWriteUnlocked = stats.getNumAccesses(WRITE_UNLOCKED);			int numReadLocked = stats.getNumAccesses(READ_LOCKED);			int numWriteLocked = stats.getNumAccesses(WRITE_LOCKED);			int locked = numReadLocked + numWriteLocked;			int biasedLocked = numReadLocked + (int) (WRITE_BIAS * numWriteLocked);			int unlocked = numReadUnlocked + numWriteUnlocked;			int biasedUnlocked = numReadUnlocked + (int) (WRITE_BIAS * numWriteUnlocked);			int writes = numWriteLocked + numWriteUnlocked;			if (locked == 0)				continue;			if (unlocked == 0)				continue;			if (DEBUG) {				System.out.println("IS2: " + xfield);				System.out.println("  RL: " + numReadLocked);				System.out.println("  WL: " + numWriteLocked);				System.out.println("  RU: " + numReadUnlocked);				System.out.println("  WU: " + numWriteUnlocked);			}			if (!EVAL && numReadUnlocked > 0 && ((int) (UNSYNC_FACTOR * biasedUnlocked)) > biasedLocked)				continue;			// NOTE: we ignore access to public, volatile, and final fields			if (numWriteUnlocked + numWriteLocked == 0) {				// No writes outside of constructor				if (DEBUG) System.out.println("  No writes outside of constructor");				continue;			}			if (numReadUnlocked + numReadLocked == 0) {				// No reads outside of constructor				if (DEBUG) System.out.println("  No reads outside of constructor");				continue;			}			if (stats.getNumLocalLocks() == 0) {				if (DEBUG) System.out.println("  No local locks");				continue;			}			int freq = (100 * locked) / (locked + unlocked);			if (DEBUG) System.out.println("  Sync %: " + freq);			if (freq < MIN_SYNC_PERCENT) continue;			// At this point, we report the field as being inconsistently synchronized			int priority = NORMAL_PRIORITY;			if (stats.getNumGetterMethodAccesses() >= unlocked)			// Unlocked accesses are only in getter method(s).				priority = LOW_PRIORITY;			BugInstance bugInstance = new BugInstance("IS2_INCONSISTENT_SYNC", priority)			        .addClass(xfield.getClassName())			        .addField(xfield)			        .addInt(freq).describe("INT_SYNC_PERCENT");			// Add source lines for unsynchronized accesses			for (Iterator<SourceLineAnnotation> j = stats.unsyncAccessIterator(); j.hasNext();) {				SourceLineAnnotation accessSourceLine = j.next();				bugInstance.addSourceLine(accessSourceLine).describe("SOURCE_LINE_UNSYNC_ACCESS");			}			if (SYNC_ACCESS) {				// Add source line for synchronized accesses;				// useful for figuring out what the detector is doing				for (Iterator<SourceLineAnnotation> j = stats.syncAccessIterator(); j.hasNext();) {					SourceLineAnnotation accessSourceLine = j.next();					bugInstance.addSourceLine(accessSourceLine).describe("SOURCE_LINE_SYNC_ACCESS");				}			}			if (EVAL) {				bugInstance.addInt(biasedLocked).describe("INT_BIASED_LOCKED");				bugInstance.addInt(biasedUnlocked).describe("INT_BIASED_UNLOCKED");			}			bugReporter.reportBug(bugInstance);		}	}