@Override public void visit(Field obj) { int accessFlags = obj.getAccessFlags(); if ((accessFlags & Const.ACC_STATIC) != 0) { return; } if (!obj.getName().startsWith("this$") && !BCELUtil.isSynthetic(obj) && !obj.isTransient()) { hasFields = true; } }
@Override public void visit(Field obj) { if (!obj.isFinal() && !obj.isTransient() && !obj.isVolatile()) { bugReporter.reportBug(new BugInstance(this, "JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS", NORMAL_PRIORITY).addClass( this).addVisitedField(this)); } }
if (f.isTransient()) { seenTransientField = true;
|| Subtypes2.instanceOf(fieldType, "javax.ejb.EJBObject") || Subtypes2.instanceOf(fieldType, "javax.naming.Context")) { if (testingEnabled && obj.isTransient()) { bugReporter.reportBug(new BugInstance(this, "TESTING", NORMAL_PRIORITY).addClass(this) .addVisitedField(this) if (obj.isTransient()) { if (isSerializable && !isExternalizable) { seenTransientField = true; && fieldSig.indexOf('L') >= 0 && !obj.isTransient() && !obj.isStatic()) { if (DEBUG) { System.out.println("Examining non-transient field with name: " + getFieldName() + ", sig: " + fieldSig);
@Override public void visit(Field obj) { int accessFlags = obj.getAccessFlags(); if ((accessFlags & ACC_STATIC) != 0) { return; } if (!obj.getName().startsWith("this$") && !BCELUtil.isSynthetic(obj) && !obj.isTransient()) { hasFields = true; } }
/** * looks for fields that are candidates for serialization * * @param cls * the class to look for fields * @return if their is a field that looks like it should be serialized */ private static boolean hasSerializableFields(JavaClass cls) { Field[] fields = cls.getFields(); for (Field f : fields) { if (!f.isStatic() && !f.isTransient() && !f.isSynthetic()) { return true; } } return false; }
/** * looks for fields that are candidates for serialization * * @param cls * the class to look for fields * @return if their is a field that looks like it should be serialized */ private static boolean hasSerializableFields(JavaClass cls) { Field[] fields = cls.getFields(); for (Field f : fields) { if (!f.isStatic() && !f.isTransient() && !f.isSynthetic()) { return true; } } return false; }
@Override public void visit(Field obj) { if (!obj.isFinal() && !obj.isTransient() && !obj.isVolatile()) { bugReporter.reportBug(new BugInstance(this, "JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS", NORMAL_PRIORITY).addClass( this).addVisitedField(this)); } }
Arrays.stream(fields).filter(field -> !field.isPrivate() || (!field.isStatic() && !field.isTransient())) .forEach(field -> { utfUpdate(digest, field.getName());
if (f.isTransient()) { seenTransientField = true;
|| Subtypes2.instanceOf(fieldType, "javax.ejb.EJBObject") || Subtypes2.instanceOf(fieldType, "javax.naming.Context")) { if (testingEnabled && obj.isTransient()) { bugReporter.reportBug(new BugInstance(this, "TESTING", NORMAL_PRIORITY).addClass(this) .addVisitedField(this) if (obj.isTransient()) { if (isSerializable && !isExternalizable) { seenTransientField = true; && fieldSig.indexOf('L') >= 0 && !obj.isTransient() && !obj.isStatic()) { if (DEBUG) { System.out.println("Examining non-transient field with name: " + getFieldName() + ", sig: " + fieldSig);
/** * checks to see if the class is Serializable, then looks for fields that are both final and transient * * @param classContext * the context object of the currently parsed class */ @Override public void visitClassContext(ClassContext classContext) { try { JavaClass cls = classContext.getJavaClass(); if ((serializableClass != null) && (cls.implementationOf(serializableClass))) { Field[] fields = cls.getFields(); setupVisitorForClass(cls); for (Field f : fields) { if (!f.isStatic() && f.isFinal() && f.isTransient()) { bugReporter.reportBug(new BugInstance(this, BugType.NFF_NON_FUNCTIONAL_FIELD.name(), Priorities.NORMAL_PRIORITY).addClass(this) .addField(cls.getClassName(), f.getName(), f.getSignature(), f.getAccessFlags())); } } } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } }
/** * checks to see if the class is Serializable, then looks for fields that are both final and transient * * @param classContext * the context object of the currently parsed class */ @Override public void visitClassContext(ClassContext classContext) { try { JavaClass cls = classContext.getJavaClass(); if ((serializableClass != null) && (cls.implementationOf(serializableClass))) { Field[] fields = cls.getFields(); setupVisitorForClass(cls); for (Field f : fields) { if (!f.isStatic() && f.isFinal() && f.isTransient()) { bugReporter.reportBug(new BugInstance(this, BugType.NFF_NON_FUNCTIONAL_FIELD.name(), Priorities.NORMAL_PRIORITY).addClass(this) .addField(cls.getClassName(), f.getName(), f.getSignature(), f.getAccessFlags())); } } } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } }