boolean isEnum = obj.getSuperclassName().equals("java.lang.Enum");
         public void visit(JavaClass obj) {		String superClassname = obj.getSuperclassName();		// System.out.println("superclass of " + getClassName() + " is " + superClassname);		isEnum = superClassname.equals("java.lang.Enum");		if (isEnum) return;		int flags = obj.getAccessFlags();		isAbstract = (flags & ACC_ABSTRACT) != 0		        || (flags & ACC_INTERFACE) != 0;		isAnonymousInnerClass 		  = anonymousInnerClassNamePattern			.matcher(getClassName()).matches();		innerClassHasOuterInstance = false;		for(Field f : obj.getFields()) {			if (f.getName().equals("this$0")) {				innerClassHasOuterInstance = true;				break;			}		}				sawSerialVersionUID = false;		isSerializable = implementsSerializableDirectly = false;		isExternalizable = false;		directlyImplementsExternalizable = false;		isGUIClass = false;		seenTransientField = false;		boolean isEnum = obj.getSuperclassName().equals("java.lang.Enum");		fieldsThatMightBeAProblem.clear();		transientFields.clear();		transientFieldsUpdates.clear();		transientFieldsSetInConstructor.clear();		//isRemote = false;		// Does this class directly implement Serializable?		String[] interface_names = obj.getInterfaceNames();		for (String interface_name : interface_names) {			if (interface_name.equals("java.io.Externalizable")) {				directlyImplementsExternalizable = true;				isExternalizable = true;				// System.out.println("Directly implements Externalizable: " + betterClassName);			} else if (interface_name.equals("java.io.Serializable")) {				implementsSerializableDirectly = true;				isSerializable = true;				break;			}		}		// Does this class indirectly implement Serializable?		if (!isSerializable) {			try {				if (Repository.instanceOf(obj, "java.io.Externalizable"))					isExternalizable = true;				if (Repository.instanceOf(obj, "java.io.Serializable"))					isSerializable = true;/*	        if (Repository.instanceOf(obj,"java.rmi.Remote")) {		    isRemote = true;		    }*/			} catch (ClassNotFoundException e) {				bugReporter.reportMissingClass(e);			}		}		hasPublicVoidConstructor = false;		superClassHasVoidConstructor = true;		superClassImplementsSerializable = isSerializable && !implementsSerializableDirectly;		try {			JavaClass superClass = obj.getSuperClass();			if (superClass != null) {				Method[] superClassMethods = superClass.getMethods();				superClassImplementsSerializable = Repository.instanceOf(superClass,				        "java.io.Serializable");				superClassHasVoidConstructor = false;				for (Method m : superClassMethods) {					/*					                        if (!m.isPrivate())					                        System.out.println("Supercase of " + className						                        + " has an accessible method named " + m.getName()						                        + " with sig " + m.getSignature());					                        */					if (m.getName().equals("<init>")							&& m.getSignature().equals("()V")							&& !m.isPrivate()							) {						// System.out.println("  super has void constructor");						superClassHasVoidConstructor = true;						break;					}				}			}		} catch (ClassNotFoundException e) {			bugReporter.reportMissingClass(e);		}		// Is this a GUI  or other class that is rarely serialized?		try {			isGUIClass = 			 Repository.instanceOf(obj, "java.lang.Throwable")			|| Repository.instanceOf(obj, "java.awt.Component")			|| Repository.implementationOf(obj, "java.awt.event.ActionListener")			|| Repository.implementationOf(obj, "java.util.EventListener")			;		} catch (ClassNotFoundException e) {			bugReporter.reportMissingClass(e);		}		foundSynthetic = false;		foundSynchronizedMethods = false;		writeObjectIsSynchronized = false;		sawReadExternal = sawWriteExternal = sawReadObject = sawReadResolve = sawWriteObject = false;	}