double mapResult = Analyze.deepInstanceOf(x, map); if (x.isInterface() || x.isAbstract()) { result = Math.max(result, Math.max(mapResult, collectionResult) * 0.95); if (result >= 0.9) { if (x.isAbstract() || x.isInterface()) { confidence = 0.8; result = Math.max(result, 0.4);
publicOrProtectedConstructor = false; isSerializable = false; if (obj.isAbstract()) { data.abstractClasses.add(getDottedClassName()); } else {
priority++; if (obj.isAbstract()) { priority++; if (priority < Priorities.LOW_PRIORITY) { priority--; if (!isAnonymousInnerClass && !isExternalizable && !isGUIClass && !obj.isAbstract() && isSerializable && !isAbstract && !sawSerialVersionUID && !isEjbImplClass && !isJSPClass) { bugReporter.reportBug(new BugInstance(this, "SE_NO_SERIALVERSIONID", priority).addClass(this));
if (type.isAbstract() || type.isInterface()) { priority++;
@Override public void visit(JavaClass obj) { if (Subtypes2.instanceOf(obj, "java.util.Comparator") && !ClassName.isLocalOrAnonymous(getClassName()) && !Subtypes2.instanceOf(obj, "java.io.Serializable")) { int priority = NORMAL_PRIORITY; if (obj.isInterface() || obj.isAbstract()) { return; } double easilySerializable = 1.0; for (Field f : obj.getFields()) { try { if (f.getName().startsWith("this$")) { return; } String signature = f.getSignature(); char firstChar = signature.charAt(0); if (firstChar == 'L' || firstChar == '[') { easilySerializable *= DeepSubtypeAnalysis.isDeepSerializable(signature); } } catch (ClassNotFoundException e) { easilySerializable = 0.0; break; } } if (easilySerializable < 0.9) { priority = LOW_PRIORITY; } bugReporter.reportBug(new BugInstance(this, "SE_COMPARATOR_SHOULD_BE_SERIALIZABLE", priority).addClass(this)); } }
&& (refJavaClass.isInterface() || refJavaClass.isAbstract())) { priority++;
kind = EqualsKindSummary.KindOfEquals.INSTANCE_OF_SUPERCLASS_EQUALS; } else if (sawInstanceOf) { kind = getThisClass().isAbstract() ? EqualsKindSummary.KindOfEquals.ABSTRACT_INSTANCE_OF : EqualsKindSummary.KindOfEquals.INSTANCE_OF_EQUALS; } else if (sawGetClass && sawGoodEqualsClass) { kind = getThisClass().isAbstract() ? EqualsKindSummary.KindOfEquals.ABSTRACT_GETCLASS_GOOD_EQUALS : EqualsKindSummary.KindOfEquals.GETCLASS_GOOD_EQUALS; } else if (sawGetClass && sawBadEqualsClass) {
return; if (obj.isAbstract()) { return;
priority--; if (type.isAbstract() || type.isInterface()) { priority++;
if (x.isAbstract() || x.isInterface()) { return 0.2;
if (usesDefaultHashCode || obj.isAbstract()) { priority++; priority--; if (obj.isAbstract()) { priority++; BugInstance bug = new BugInstance(this, "EQ_COMPARETO_USE_OBJECT_EQUALS", obj.isAbstract() ? Priorities.LOW_PRIORITY : Priorities.NORMAL_PRIORITY).addClass(this); if (compareToSelfMethod != null) { if (equalsMethodIsInstanceOfEquals) { priority += 2; } else if (obj.isAbstract() || !hasEqualsObject) { priority++; } else if (obj.isAbstract()) { priority++; if (!hasHashCode && !hasEqualsObject && !hasEqualsSelf && !usesDefaultEquals && usesDefaultHashCode && !obj.isAbstract() && inheritedEqualsFromAbstractClass) { BugInstance bug = new BugInstance(this, "HE_INHERITS_EQUALS_USE_HASHCODE", NORMAL_PRIORITY) if (!hasEqualsObject && !hasEqualsSelf && !usesDefaultEquals && !obj.isAbstract() && hasFields && inheritedEquals != null && !inheritedEqualsIsFinal && !inheritedEqualsFromAbstractClass && !inheritedEquals.getClassDescriptor().getSimpleName().contains("Abstract")
} else if (hasCloneMethod && !isCloneable && !cloneOnlyThrowsException && !cloneIsDeprecated && !obj.isAbstract()) { int priority = Priorities.NORMAL_PRIORITY; if (referencesCloneMethod) {
private boolean isConcreteClass(File file) throws Exception { ClassParser parser = new ClassParser(file.getAbsolutePath()); JavaClass javaClass = parser.parse(); return !javaClass.isAbstract() && !javaClass.isInterface(); }
throw new IllegalArgumentException( message ); if ( classToWrap.isAbstract() || !classToWrap.isClass() )
/** * overrides the visitor to check for abstract classes. * * @param classContext * the context object that holds the JavaClass being parsed */ @Override public void visitClassContext(ClassContext classContext) { try { JavaClass cls = classContext.getJavaClass(); if (cls.isAbstract()) { interfaceMethods = collectInterfaceMethods(cls); super.visitClassContext(classContext); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } finally { interfaceMethods = null; } }
/** * overrides the visitor to check for abstract classes. * * @param classContext * the context object that holds the JavaClass being parsed */ @Override public void visitClassContext(ClassContext classContext) { try { JavaClass cls = classContext.getJavaClass(); if (cls.isAbstract()) { interfaceMethods = collectInterfaceMethods(cls); super.visitClassContext(classContext); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } finally { interfaceMethods = null; } }
if (clz.isClass() && (!clz.isAbstract())) { Map<JavaClass, List<MethodInfo>> definers = getClassDefiners(clz);
private void defaultToStringSilliness() throws ClassNotFoundException { if (stack.getStackDepth() >= 1) { OpcodeStack.Item item = stack.getStackItem(0); JavaClass toStringClass = item.getJavaClass(); if (toStringClass != null) { String toStringClassName = toStringClass.getClassName(); if (!toStringClass.isInterface() && !toStringClass.isAbstract() && !Values.DOTTED_JAVA_LANG_OBJECT.equals(toStringClassName) && !Values.DOTTED_JAVA_LANG_STRING.equals(toStringClassName) && toStringClasses.add(toStringClassName)) { try { JavaClass cls = Repository.lookupClass(toStringClassName); if (!hasToString(cls)) { bugReporter.reportBug( new BugInstance(this, BugType.SPP_NON_USEFUL_TOSTRING.name(), toStringClass.isFinal() ? NORMAL_PRIORITY : LOW_PRIORITY) .addClass(this).addMethod(this).addSourceLine(this)); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } } } } }
private void defaultToStringSilliness() throws ClassNotFoundException { if (stack.getStackDepth() >= 1) { OpcodeStack.Item item = stack.getStackItem(0); JavaClass toStringClass = item.getJavaClass(); if (toStringClass != null) { String toStringClassName = toStringClass.getClassName(); if (!toStringClass.isInterface() && !toStringClass.isAbstract() && !Values.DOTTED_JAVA_LANG_OBJECT.equals(toStringClassName) && !Values.DOTTED_JAVA_LANG_STRING.equals(toStringClassName) && toStringClasses.add(toStringClassName)) { try { JavaClass cls = Repository.lookupClass(toStringClassName); if (!hasToString(cls)) { bugReporter.reportBug( new BugInstance(this, BugType.SPP_NON_USEFUL_TOSTRING.name(), toStringClass.isFinal() ? NORMAL_PRIORITY : LOW_PRIORITY) .addClass(this).addMethod(this).addSourceLine(this)); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } } } } }
@Override public void visit(JavaClass obj) { if (Subtypes2.instanceOf(obj, "java.util.Comparator") && !ClassName.isAnonymous(getClassName()) && !Subtypes2.instanceOf(obj, "java.io.Serializable")) { int priority = NORMAL_PRIORITY; if (obj.isInterface() || obj.isAbstract()) { return; } double easilySerializable = 1.0; for (Field f : obj.getFields()) { try { if (f.getName().startsWith("this$")) { return; } String signature = f.getSignature(); char firstChar = signature.charAt(0); if (firstChar == 'L' || firstChar == '[') { easilySerializable *= DeepSubtypeAnalysis.isDeepSerializable(signature); } } catch (ClassNotFoundException e) { easilySerializable = 0.0; break; } } if (easilySerializable < 0.9) { priority = LOW_PRIORITY; } bugReporter.reportBug(new BugInstance(this, "SE_COMPARATOR_SHOULD_BE_SERIALIZABLE", priority).addClass(this)); } }