FindBugs Report

Project Information

Project:

FindBugs version: 3.0.1

Code analyzed:



Metrics

113838 lines of code analyzed, in 1016 classes, in 16 packages.

Metric Total Density*
High Priority Warnings 1 0.01
Medium Priority Warnings 37 0.33
Total Warnings 38 0.33

(* Defects per Thousand lines of non-commenting source statements)



Contents

Summary

Warning Type Number
Bad practice Warnings 22
Malicious code vulnerability Warnings 1
Dodgy code Warnings 15
Total 38

Warnings

Click on a warning row to see full context information.

Bad practice Warnings

Code Warning
Nm The class name edu.jas.application.FactorFactory shadows the simple name of the superclass edu.jas.ufd.FactorFactory
Nm The method name edu.jas.application.GBAlgorithmBuilder.Arri() doesn't start with a lower case letter
OS edu.jas.application.RunGB.getReader(String) may fail to close stream
RV edu.jas.poly.PolynomialComparator.compare(GenPolynomial, GenPolynomial) negates the return value of edu.jas.poly.GenPolynomial.compareTo(GenPolynomial)
RV edu.jas.poly.TermOrder$11.compare(ExpVector, ExpVector) negates the return value of edu.jas.poly.TermOrder$EVComparator.compare(ExpVector, ExpVector)
RV edu.jas.poly.TermOrder$71.compare(ExpVector, ExpVector) negates the return value of edu.jas.poly.TermOrder$EVComparator.compare(ExpVector, ExpVector)
RV edu.jas.poly.Word.gradInvlexCompareTo(Word) negates the return value of edu.jas.poly.Word.compareTo(Word)
SnVI edu.jas.fd.SGCDParallelProxy is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GBProxy is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GroebnerBaseDistributedEC is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GroebnerBaseDistributedHybridEC is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GroebnerBaseParallel is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GroebnerBaseParIter is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GroebnerBaseSeqPairDistributed is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.GroebnerBaseSeqPairParallel is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.SGBProxy is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.SolvableGroebnerBaseParallel is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gb.SolvableGroebnerBaseSeqPairParallel is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gbufd.GroebnerBasePseudoParallel is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.gbufd.GroebnerBasePseudoRecParallel is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.poly.GenPolynomial is Serializable; consider declaring a serialVersionUID
SnVI edu.jas.ufd.GCDProxy is Serializable; consider declaring a serialVersionUID

Malicious code vulnerability Warnings

Code Warning
MS edu.jas.kern.ComputerThreads.NO_THREADS isn't final and can't be protected from malicious code

Dodgy code Warnings

Code Warning
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.application.SolvableLocalResidueRing.create(GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.application.SolvableLocalResidueRing.create(GenPolynomial, GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.application.SolvableLocalRing.create(GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.application.SolvableLocalRing.create(GenPolynomial, GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.application.SolvableResidueRing.create(GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.application.SolvableResidueRing.create(GenPolynomial, GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.fd.SolvableQuotientRing.create(GenPolynomial)
BC Unchecked/unconfirmed cast from edu.jas.poly.GenPolynomial<C> to edu.jas.poly.GenSolvablePolynomial in edu.jas.fd.SolvableQuotientRing.create(GenPolynomial, GenPolynomial)
BC instanceof will always return true for all non-null values in edu.jas.poly.RecSolvablePolynomial.evalAsRightRecursivePolynomial(), since all edu.jas.poly.RecSolvablePolynomial are instances of edu.jas.poly.RecSolvablePolynomial
BC instanceof will always return true for all non-null values in edu.jas.poly.RecSolvablePolynomial.isRightRecursivePolynomial(GenSolvablePolynomial), since all edu.jas.poly.RecSolvablePolynomial are instances of edu.jas.poly.RecSolvablePolynomial
BC instanceof will always return true for all non-null values in edu.jas.poly.RecSolvablePolynomial.rightRecursivePolynomial(), since all edu.jas.poly.RecSolvablePolynomial are instances of edu.jas.poly.RecSolvablePolynomial
DB edu.jas.application.RingFactoryTokenizer.nextCoefficientRing() uses the same code for two branches
DB edu.jas.poly.GenPolynomialTokenizer.nextCoefficientRing() uses the same code for two branches
SF Switch statement found in edu.jas.poly.GenPolynomialTokenizer.nextPolynomial() where one case falls through to the next case
UCF Useless control flow in edu.jas.fd.GCDLeftRightTest.testBaseQR()

Details

BC_VACUOUS_INSTANCEOF: instanceof will always return true

This instanceof test will always return true (unless the value being tested is null). Although this is safe, make sure it isn't an indication of some misunderstanding or some other logic error. If you really want to test the value for being null, perhaps it would be clearer to do better to do a null test rather than an instanceof test.

BC_UNCONFIRMED_CAST: Unchecked/unconfirmed cast

This cast is unchecked, and not all instances of the type casted from can be cast to the type it is being cast to. Check that your program logic ensures that this cast will not fail.

DB_DUPLICATE_BRANCHES: Method uses the same code for two branches

This method uses the same code to implement two branches of a conditional branch. Check to ensure that this isn't a coding mistake.

MS_CANNOT_BE_FINAL: Field isn't final and can't be protected from malicious code

A mutable static field could be changed by malicious code or by accident from another package. Unfortunately, the way the field is used doesn't allow any easy fix to this problem.

NM_SAME_SIMPLE_NAME_AS_SUPERCLASS: Class names shouldn't shadow simple name of superclass

This class has a simple name that is identical to that of its superclass, except that its superclass is in a different package (e.g., alpha.Foo extends beta.Foo). This can be exceptionally confusing, create lots of situations in which you have to look at import statements to resolve references and creates many opportunities to accidentally define methods that do not override methods in their superclasses.

NM_METHOD_NAMING_CONVENTION: Method names should start with a lower case letter

Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized.

OS_OPEN_STREAM: Method may fail to close stream

The method creates an IO stream object, does not assign it to any fields, pass it to other methods that might close it, or return it, and does not appear to close the stream on all paths out of the method.  This may result in a file descriptor leak.  It is generally a good idea to use a finally block to ensure that streams are closed.

RV_NEGATING_RESULT_OF_COMPARETO: Negating the result of compareTo()/compare()

This code negatives the return value of a compareTo or compare method. This is a questionable or bad programming practice, since if the return value is Integer.MIN_VALUE, negating the return value won't negate the sign of the result. You can achieve the same intended result by reversing the order of the operands rather than by negating the results.

SF_SWITCH_FALLTHROUGH: Switch statement found where one case falls through to the next case

This method contains a switch statement where one case branch will fall through to the next case. Usually you need to end this case with a break or return.

SE_NO_SERIALVERSIONID: Class is Serializable, but doesn't define serialVersionUID

This class implements the Serializable interface, but does not define a serialVersionUID field.  A change as simple as adding a reference to a .class object will add synthetic fields to the class, which will unfortunately change the implicit serialVersionUID (e.g., adding a reference to String.class will generate a static field class$java$lang$String). Also, different source code to bytecode compilers may use different naming conventions for synthetic variables generated for references to class objects or inner classes. To ensure interoperability of Serializable across versions, consider adding an explicit serialVersionUID.

UCF_USELESS_CONTROL_FLOW: Useless control flow

This method contains a useless control flow statement, where control flow continues onto the same place regardless of whether or not the branch is taken. For example, this is caused by having an empty statement block for an if statement:

    if (argv.length == 0) {
    // TODO: handle this case
    }