@Override public void visit(Field field) { if (!field.isStatic()) { return; } String signature = field.getSignature(); if (signature.startsWith("Ljava/util/") && !"Ljava/util/regex/Pattern;".equals(signature) && !"Ljava/util/logging/Logger;".equals(signature) && !"Ljava/util/BitSet;".equals(signature) && !"Ljava/util/ResourceBundle;".equals(signature) && !"Ljava/util/Comparator;".equals(signature) && getXField().getAnnotation(ConstantAnnotation) == null) { boolean flagged = analysisContextContained(getXClass()); bugReporter.reportBug(new BugInstance(this, "TESTING", flagged ? NORMAL_PRIORITY : LOW_PRIORITY).addClass(this).addField(this).addType(signature)); } } @Override
void report() { for(ValueInfo vi : observedValues.values()) { if(!vi.escaped) { if(vi.hasObjectOnlyCall && vi.used && vi.var == null) { continue; } if(vi.hasObjectOnlyCall || (vi.used && vi.var != null)) { BugInstance bug = new BugInstance(vi.var == null ? "UC_USELESS_OBJECT_STACK" : "UC_USELESS_OBJECT", NORMAL_PRIORITY).addClassAndMethod(classContext.getJavaClass(), method); if(vi.var != null) { bug.add(new StringAnnotation(vi.var)); } reporter.reportBug(bug.addType(vi.type).addSourceLine(classContext, method, vi.created)); } } } } }
.addClass(getThisClass().getClassName()).addField(f).addType(genSig) .describe("TYPE_FOUND").addSourceLine(this));
.addClassAndMethod(this).addType(primitiveArraySig).describe(TypeAnnotation.FOUND_ROLE) .addCalledMethod(this).addSourceLine(this));
accumulator.accumulateBug( new BugInstance("CO_COMPARETO_INCORRECT_FLOATING", NORMAL_PRIORITY).addClassAndMethod(this) .addType(item1.getSignature()) .addMethod(item1.getSignature().equals("D")?DOUBLE_DESCRIPTOR:FLOAT_DESCRIPTOR).describe(MethodAnnotation.SHOULD_CALL) .addValueSource(item1, this)
if (!isCast) { accumulator.accumulateBug(new BugInstance(this, "NP_NULL_INSTANCEOF", split ? LOW_PRIORITY : NORMAL_PRIORITY) .addClassAndMethod(methodGen, sourceFile).addType(castSig), sourceLineAnnotation);
.addClassAndMethod(this).addType(syncSignature).addOptionalField(field) .addOptionalLocalVariable(this, top); } else if (isSyncOnBoolean) { } else { pendingBug = new BugInstance(this, "DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE", priority).addClassAndMethod(this) .addType(syncSignature).addOptionalField(field).addOptionalLocalVariable(this, top);
if ((getPC() < lastQuestionableCheckTarget) && (lastQuestionableCheckTarget != -1)) { bugReporter.reportBug(new BugInstance(this, "AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION", priority) .addClassAndMethod(this).addType(xClass.getClassDescriptor()).addCalledMethod(this) .addSourceLine(this));
.addType("L" + lhs.replace('.', '/') + ";").describe(TypeAnnotation.FOUND_ROLE); if (xf != null) { instance.addField(xf).describe(FieldAnnotation.LOADED_FROM_ROLE);
bugReporter.reportBug(new BugInstance(this, "JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT", priority) .addClassAndMethod(classContext.getJavaClass(), method).addCalledMethod(cpg, iv).addMethod(m) .describe(MethodAnnotation.METHOD_ALTERNATIVE_TARGET).addType(classDescriptor) .describe(TypeAnnotation.FOUND_ROLE).addSourceLine(classContext, method, location)); : NORMAL_PRIORITY).addClassAndMethod(classContext.getJavaClass(), method).addType(sig) .addSourceForTopStackValue(classContext, method, location).addSourceLine(classContext, method, location)); } else if (isUtilConcurrentSig) { .addClassAndMethod(classContext.getJavaClass(), method).addType(sig) .addSourceForTopStackValue(classContext, method, location).addSourceLine(classContext, method, location));
.addClassAndMethod(methodGen, sourceFile).addType(problem).describe(TypeAnnotation.FOUND_ROLE) .addSourceLine(sourceLineAnnotation));
.addClassAndMethod(methodGen, sourceFile).addType(problem).describe(TypeAnnotation.FOUND_ROLE), sourceLineAnnotation);
fieldWarningList.add(new BugInstance(this, "SE_BAD_FIELD", priority) .addClass(getThisClass().getClassName()) .addField(xfield).addType(problemType) .describe("TYPE_FOUND"));
.addClassAndMethod(methodGen, sourceFile).addType(problem).describe(TypeAnnotation.FOUND_ROLE), sourceLineAnnotation);
.addType("Ljava/lang/String;").describe(TypeAnnotation.FOUND_ROLE).addSomeSourceForTopTwoStackValues(classContext, method, location); SourceLineAnnotation sourceLineAnnotation = SourceLineAnnotation.fromVisitedInstruction(classContext, methodGen, sourceFile, location.getHandle());
/** * */ private void check(ClassDescriptor c) { OpcodeStack.Item item = stack.getStackItem(0); if (item.isInitialParameter() && item.getRegisterNumber() == 1) { ClassDescriptor thisClassDescriptor = getClassDescriptor(); if (c.equals(thisClassDescriptor)) { return; } Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); try { if (!c.isArray() && (subtypes2.isSubtype(c, thisClassDescriptor) || subtypes2.isSubtype(thisClassDescriptor, c))) { return; } Type thisType = Type.getType(thisClassDescriptor.getSignature()); Type cType = Type.getType(c.getSignature()); IncompatibleTypes check = IncompatibleTypes.getPriorityForAssumingCompatible(thisType, cType, false); int priority = check.getPriority(); if ("java/lang/Object".equals(getSuperclassName()) && ClassName.isLocalOrAnonymous(getClassName())) { priority++; } bugAccumulator.accumulateBug(new BugInstance(this, "EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS", priority) .addClassAndMethod(this).addType(c).describe(TypeAnnotation.FOUND_ROLE), this); classSummary.checksForEqualTo(thisClassDescriptor, c); } catch (ClassNotFoundException e) { bugReporter.reportMissingClass(e); } } }
.addType(initializationOf); accumulator.accumulateBug(bugInstance, sourceLineAnnotation); continue;
.addClassAndMethod(methodDescriptor).add(new StringAnnotation(normalize(condition.getTrueCondition()))); if(condition.isByType()) { bug.addType(condition.getSignature());
@Override public void visit(Field field) { if (!field.isStatic()) { return; } String signature = field.getSignature(); if (signature.startsWith("Ljava/util/") && !"Ljava/util/regex/Pattern;".equals(signature) && !"Ljava/util/logging/Logger;".equals(signature) && !"Ljava/util/BitSet;".equals(signature) && !"Ljava/util/ResourceBundle;".equals(signature) && !"Ljava/util/Comparator;".equals(signature) && getXField().getAnnotation(ConstantAnnotation) == null) { boolean flagged = analysisContextContained(getXClass()); bugReporter.reportBug(new BugInstance(this, "TESTING", flagged ? NORMAL_PRIORITY : LOW_PRIORITY).addClass(this).addField(this).addType(signature)); } } @Override
void report() { for(ValueInfo vi : observedValues.values()) { if(!vi.escaped) { if(vi.hasObjectOnlyCall && vi.used && vi.var == null) { continue; } if(vi.hasObjectOnlyCall || (vi.used && vi.var != null)) { BugInstance bug = new BugInstance(vi.var == null ? "UC_USELESS_OBJECT_STACK" : "UC_USELESS_OBJECT", NORMAL_PRIORITY).addClassAndMethod(classContext.getJavaClass(), method); if(vi.var != null) { bug.add(new StringAnnotation(vi.var)); } reporter.reportBug(bug.addType(vi.type).addSourceLine(classContext, method, vi.created)); } } } } }