Project:
FindBugs version: 3.0.1
Code analyzed:
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)
Warning Type | Number |
---|---|
Bad practice Warnings | 22 |
Malicious code vulnerability Warnings | 1 |
Dodgy code Warnings | 15 |
Total | 38 |
Click on a warning row to see full context information.
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 |
Code | Warning |
---|---|
MS | edu.jas.kern.ComputerThreads.NO_THREADS isn't final and can't be protected from malicious code |
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() |
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.
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.
This method uses the same code to implement two branches of a conditional branch. Check to ensure that this isn't a coding mistake.
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.
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.
Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized.
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.
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.
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.
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.
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 }