@Override public void visitClassContext(ClassContext classContext) { cls = classContext.getJavaClass(); if (cls.isFinal()) { cls.accept(this); } }
@Override public void visit(JavaClass obj) { classIsFinal = obj.isFinal(); reportedForThisClass = false; classIsVisibleToOtherPackages = obj.isPublic() || obj.isProtected(); }
@Override public void visit(JavaClass obj) { super.visit(obj); allowedFields = new HashSet<>(); fieldsModifyingMethods = new HashSet<>(); subtypes = null; if (!obj.isFinal() && !obj.isEnum()) { try { Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); subtypes = new HashSet<>(subtypes2.getSubtypes(getClassDescriptor())); subtypes.remove(getClassDescriptor()); } catch (ClassNotFoundException e) { } } }
@Override public void visit(Code code) { boolean interesting = !getMethod().isStatic() && !getThisClass().isFinal(); if (interesting) { // initialize any variables we want to initialize for the method pendingBug = null; super.visit(code); // make callbacks to sawOpcode for all opcodes assert (pendingBug == null); } }
if (x.isFinal()) { return result;
&& (upperBound == null || !upperBound.getJavaClass().isFinal() && !upperBound.getMethod().isFinal()) && !receiverTypeIsExact;
isCloneable = false; check = false; isFinal = obj.isFinal(); if (obj.isInterface()) { return;
if (getClassName().equals(left.getConstant()) && rightMatch || leftMatch && getClassName().equals(right.getConstant())) { if (getThisClass().isFinal()) { sawGoodEqualsClass = true; } else {
|| jclass.isFinal()) { priority--;
@Override public void visitClassContext(ClassContext classContext) { cls = classContext.getJavaClass(); if (cls.isFinal()) { cls.accept(this); } }
@Override public void visit(JavaClass obj) { classIsFinal = obj.isFinal(); reportedForThisClass = false; classIsVisibleToOtherPackages = obj.isPublic() || obj.isProtected(); }
@Override public void visit(JavaClass obj) { super.visit(obj); allowedFields = new HashSet<>(); fieldsModifyingMethods = new HashSet<>(); subtypes = null; if (!obj.isFinal() && !obj.isEnum()) { try { Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); subtypes = new HashSet<>(subtypes2.getSubtypes(getClassDescriptor())); subtypes.remove(getClassDescriptor()); } catch (ClassNotFoundException e) { } } }
/** * implements the visitor to set up the stack and methodToCalledmethods map reports calls to public non final methods from methods called from constructors. * * @param classContext * the context object of the currently parsed class */ @Override public void visitClassContext(final ClassContext classContext) { try { JavaClass cls = classContext.getJavaClass(); if (!cls.isFinal()) { stack = new OpcodeStack(); methodToCalledMethods = new HashMap<>(); super.visitClassContext(classContext); if (!methodToCalledMethods.isEmpty()) { reportChainedMethods(); } } } finally { stack = null; methodToCalledMethods = null; } }
/** * implements the visitor to set up the stack and methodToCalledmethods map reports calls to public non final methods from methods called from constructors. * * @param classContext * the context object of the currently parsed class */ @Override public void visitClassContext(final ClassContext classContext) { try { JavaClass cls = classContext.getJavaClass(); if (!cls.isFinal()) { stack = new OpcodeStack(); methodToCalledMethods = new HashMap<>(); super.visitClassContext(classContext); if (!methodToCalledMethods.isEmpty()) { reportChainedMethods(); } } } finally { stack = null; methodToCalledMethods = null; } }
@Override public void visit(Code code) { boolean interesting = !getMethod().isStatic() && !getThisClass().isFinal(); if (interesting) { // initialize any variables we want to initialize for the method pendingBug = null; super.visit(code); // make callbacks to sawOpcode for all opcodes assert (pendingBug == null); } }
/** * overrides the visitor to create the opcode stack * * @param classContext * the context object of the currently parsed class * */ @Override public void visitClassContext(ClassContext classContext) { try { if ((runtimeExceptionClass != null) && (exceptionClass != null)) { stack = new OpcodeStack(); declaredCheckedExceptions = new HashSet<>(6); JavaClass cls = classContext.getJavaClass(); classIsFinal = cls.isFinal(); classIsAnonymous = cls.isAnonymous(); super.visitClassContext(classContext); } } finally { declaredCheckedExceptions = null; stack = null; } }
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); } } } } }