Dennis Balkir created OFBIZ-9783:
------------------------------------

             Summary: [FB] Package org.apache.ofbiz.order.shoppingcart
                 Key: OFBIZ-9783
                 URL: https://issues.apache.org/jira/browse/OFBIZ-9783
             Project: OFBiz
          Issue Type: Sub-task
          Components: framework
    Affects Versions: Trunk
            Reporter: Dennis Balkir
            Priority: Minor


--- CartEventListener.java:81, DM_BOXED_PRIMITIVE_TOSTRING
Bx: Primitive boxed just to call toString in 
org.apache.ofbiz.order.shoppingcart.CartEventListener.sessionDestroyed(HttpSessionEvent)

A boxed primitive is allocated just to call toString(). It is more effective to 
just use the static form of toString which takes the primitive value. So,

Replace...      With this...
new Integer(1).toString()       Integer.toString(1)
new Long(1).toString()  Long.toString(1)
new Float(1.0).toString()       Float.toString(1.0)
new Double(1.0).toString()      Double.toString(1.0)
new Byte(1).toString()  Byte.toString(1)
new Short(1).toString() Short.toString(1)
new Boolean(true).toString()    Boolean.toString(true)

--- CheckOutEvents.java:70, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of cart, which is known to be non-null in 
org.apache.ofbiz.order.shoppingcart.CheckOutEvents.cartNotEmpty(HttpServletRequest,
 HttpServletResponse)

This method contains a redundant check of a known non-null value against the 
constant null.

--- CheckOutEvents.java:471, DM_CONVERT_CASE
Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
org.apache.ofbiz.order.shoppingcart.CheckOutEvents.createOrder(HttpServletRequest,
 HttpServletResponse)

A String is being converted to upper or lowercase, using the platform's default 
encoding. This may result in improper conversions when used with international 
characters. Use the

String.toUpperCase( Locale l )
String.toLowerCase( Locale l )
versions instead.

--- CheckOutHelper.java:101, DM_STRING_TOSTRING
Dm: 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutShippingAddress(String)
 invokes toString() method on a String

Calling String.toString() is just a redundant operation. Just use the String.

--- CheckOutHelper.java:118, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of CheckOutHelper.cart at line 120 of value previously 
dereferenced in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutShippingAddressInternal(String)

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- CheckOutHelper.java:142, DM_STRING_TOSTRING
Dm: 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutShippingOptions(String,
 String, String, String, String, String, String, String, String) invokes 
toString() method on a String

Calling String.toString() is just a redundant operation. Just use the String.

--- CheckOutHelper.java:170, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of CheckOutHelper.cart at line 172 of value previously 
dereferenced in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutShippingOptionsInternal(String,
 String, String, String, String, String, String, String, String)

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- CheckOutHelper.java:236, DM_STRING_TOSTRING
Dm: org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutPayment(Map, 
List, String) invokes toString() method on a String

Calling String.toString() is just a redundant operation. Just use the String.

--- CheckOutHelper.java:257, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of CheckOutHelper.cart at line 290 of value previously 
dereferenced in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutPaymentInternal(Map,
 List, String)

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- CheckOutHelper.java:374, DM_STRING_TOSTRING
Dm: 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutDates(Timestamp, 
Timestamp) invokes toString() method on a String

Calling String.toString() is just a redundant operation. Just use the String.

--- CheckOutHelper.java:424, DM_STRING_TOSTRING
Dm: 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.setCheckOutOptions(String, 
String, Map, List, String, String, String, String, String, String, String, 
String, String) invokes toString() method on a String

Calling String.toString() is just a redundant operation. Just use the String.

--- CheckOutHelper.java:452, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of CheckOutHelper.cart at line 455 of value previously 
dereferenced in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.checkGiftCard(Map, Map)

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- CheckOutHelper.java:612, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.cart, which is known to be 
non-null in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.createOrder(GenericValue, 
String, String, List, boolean, String, String)

This method contains a redundant check of a known non-null value against the 
constant null.

--- CheckOutHelper.java:1207, DM_CONVERT_CASE
Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.checkOrderBlackList()

A String is being converted to upper or lowercase, using the platform's default 
encoding. This may result in improper conversions when used with international 
characters. Use the

String.toUpperCase( Locale l )
String.toLowerCase( Locale l )
versions instead.

--- CheckOutHelper.java:1258, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.cart, which is known to be 
non-null in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.checkOrderBlackList()

This method contains a redundant check of a known non-null value against the 
constant null.

--- CheckOutHelper.java:1273, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of CheckOutHelper.cart at line 1285 of value previously 
dereferenced in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.failedBlacklistCheck(GenericValue,
 GenericValue)

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- CheckOutHelper.java:1335, DM_CONVERT_CASE
Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.checkExternalPayment(String)

A String is being converted to upper or lowercase, using the platform's default 
encoding. This may result in improper conversions when used with international 
characters. Use the

String.toUpperCase( Locale l )
String.toLowerCase( Locale l )
versions instead.

--- CheckOutHelper.java:1426, NP_NULL_ON_SOME_PATH
NP: Possible null pointer dereference of CheckOutHelper.cart in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.finalizeOrderEntryOptions(int,
 String, String, String, String, String, String, String, String, String, String)

There is a branch of statement that, if executed, guarantees that a null value 
will be dereferenced, which would generate a NullPointerException when the code 
is executed. Of course, the problem might be that the branch or statement is 
infeasible and that the null pointer exception can't ever be executed; deciding 
that is beyond the ability of FindBugs.

--- CheckOutHelper.java:1525, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of CheckOutHelper.cart at line 1540 of value previously 
dereferenced in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.validatePaymentMethods()

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- CheckOutHelper.java:1549, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of paymentMethods, which is known to be non-null in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.validatePaymentMethods()

This method contains a redundant check of a known non-null value against the 
constant null.

--- CheckOutHelper.java:1575, DLS_DEAD_LOCAL_STORE
DLS: Dead store to setOverflow in 
org.apache.ofbiz.order.shoppingcart.CheckOutHelper.validatePaymentMethods()

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCart.java:-1, UWF_NULL_FIELD
UwF: Field only ever set to null: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo.carrierRoleTypeId

All writes to this field are of the constant value null, and thus all reads of 
the field will return null. Check for errors, or remove it if it is useless.

--- ShoppingCart.java:-1, UWF_NULL_FIELD
UwF: Field only ever set to null: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartPaymentInfo.track2

All writes to this field are of the constant value null, and thus all reads of 
the field will return null. Check for errors, or remove it if it is useless.

--- ShoppingCart.java:-1, UWF_NULL_FIELD
UwF: Field only ever set to null: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo.telecomContactMechId

All writes to this field are of the constant value null, and thus all reads of 
the field will return null. Check for errors, or remove it if it is useless.

--- ShoppingCart.java:79, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCart is Serializable; 
consider declaring a 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.

--- ShoppingCart.java:434, EI_EXPOSE_REP2
EI2: org.apache.ofbiz.order.shoppingcart.ShoppingCart.setOrderDate(Timestamp) 
may expose internal representation by storing an externally mutable object into 
ShoppingCart.orderDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:438, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.getOrderDate() may expose 
internal representation by returning ShoppingCart.orderDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCart.java:466, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.getCartCreatedTime() may 
expose internal representation by returning ShoppingCart.cartCreatedTs

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCart.java:1202, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.setDefaultShipBeforeDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCart.defaultShipBeforeDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:1206, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.getDefaultShipBeforeDate() 
may expose internal representation by returning 
ShoppingCart.defaultShipBeforeDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCart.java:1210, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.setDefaultShipAfterDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCart.defaultShipAfterDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:1214, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.setCancelBackOrderDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCart.cancelBackOrderDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:1218, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.getCancelBackOrderDate() 
may expose internal representation by returning ShoppingCart.cancelBackOrderDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCart.java:1222, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.getDefaultShipAfterDate() 
may expose internal representation by returning 
ShoppingCart.defaultShipAfterDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCart.java:1322, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.setLastListRestore(Timestamp) 
may expose internal representation by storing an externally mutable object into 
ShoppingCart.lastListRestore

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:1326, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.getLastListRestore() may 
expose internal representation by returning ShoppingCart.lastListRestore

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCart.java:1394, BC_UNCONFIRMED_CAST_OF_RETURN_VALUE
BC: Unchecked/unconfirmed cast from java.util.List to java.util.LinkedList of 
return value in org.apache.ofbiz.order.shoppingcart.ShoppingCart.clear()

This code performs an unchecked cast of the return value of a method. The code 
might be calling the method in such a way that the cast is guaranteed to be 
safe, but FindBugs is unable to verify that the cast is safe. Check that your 
program logic ensures that this cast will not fail.

--- ShoppingCart.java:1834, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of paymentMethods, which is known to be non-null in 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.getCreditCards()

This method contains a redundant check of a known non-null value against the 
constant null.

--- ShoppingCart.java:1853, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of paymentMethods, which is known to be non-null in 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.getGiftCards()

This method contains a redundant check of a known non-null value against the 
constant null.

--- ShoppingCart.java:2070, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
RCN: Redundant nullcheck of shipGroups, which is known to be non-null in 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.setShipGroupShipDatesFromItem(ShoppingCartItem)

This method contains a redundant check of a known non-null value against the 
constant null.

--- ShoppingCart.java:3328, NP_NULL_ON_SOME_PATH
NP: Possible null pointer dereference of checkItem in 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.clearAllPromotionAdjustments()

There is a branch of statement that, if executed, guarantees that a null value 
will be dereferenced, which would generate a NullPointerException when the code 
is executed. Of course, the problem might be that the branch or statement is 
infeasible and that the null pointer exception can't ever be executed; deciding 
that is beyond the ability of FindBugs.

--- ShoppingCart.java:3960, WMI_WRONG_MAP_ITERATOR
WMI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.makeAllOrderItemAttributes(String,
 int) makes inefficient use of keySet iterator instead of entrySet iterator

This method accesses the value of a Map entry, using a key that was retrieved 
from a keySet iterator. It is more efficient to use an iterator on the entrySet 
of the map, to avoid the Map.get(key) lookup.

--- ShoppingCart.java:3962, UC_USELESS_CONDITION
Condition has no effect

This condition always produces the same result as the value of the involved 
variable was narrowed before. Probably something else was meant or condition 
can be removed.

--- ShoppingCart.java:4003, DB_DUPLICATE_SWITCH_CLAUSES
DB: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.makeAllOrderAttributes(String, 
int) uses the same code for two switch clauses

This method uses the same code to implement two clauses of a switch statement. 
This could be a case of duplicate code, but it might also indicate a coding 
mistake.

--- ShoppingCart.java:4277, WMI_WRONG_MAP_ITERATOR
WMI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart.createDropShipGroups(LocalDispatcher)
 makes inefficient use of keySet iterator instead of entrySet iterator

This method accesses the value of a Map entry, using a key that was retrieved 
from a keySet iterator. It is more efficient to use an iterator on the entrySet 
of the map, to avoid the Map.get(key) lookup.

--- ShoppingCart.java:4289, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCart$BasePriceOrderComparator 
is Serializable; consider declaring a 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.

--- ShoppingCart.java:4304, RV_NEGATING_RESULT_OF_COMPARETO
RV: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$BasePriceOrderComparator.compare(Object,
 Object) negates the return value of java.math.BigDecimal.compareTo(BigDecimal)

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.

--- ShoppingCart.java:4310, HE_EQUALS_USE_HASHCODE
HE: org.apache.ofbiz.order.shoppingcart.ShoppingCart$BasePriceOrderComparator 
defines equals and uses Object.hashCode()

This class overrides equals(Object), but does not override hashCode(), and 
inherits the implementation of hashCode() from java.lang.Object (which returns 
the identity hash code, an arbitrary value assigned to the object by the VM).  
Therefore, the class is very likely to violate the invariant that equal objects 
must have equal hashcodes.

If you don't think instances of this class will ever be inserted into a 
HashMap/HashTable, the recommended hashCode implementation to use is:

public int hashCode() {
  assert false : "hashCode not designed";
  return 42; // any arbitrary constant will do
  }

--- ShoppingCart.java:4325, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCart$ShoppingCartItemGroup is 
Serializable; consider declaring a 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.

--- ShoppingCart.java:4382, HE_EQUALS_USE_HASHCODE
HE: org.apache.ofbiz.order.shoppingcart.ShoppingCart$ShoppingCartItemGroup 
defines equals and uses Object.hashCode()

This class overrides equals(Object), but does not override hashCode(), and 
inherits the implementation of hashCode() from java.lang.Object (which returns 
the identity hash code, an arbitrary value assigned to the object by the VM).  
Therefore, the class is very likely to violate the invariant that equal objects 
must have equal hashcodes.

If you don't think instances of this class will ever be inserted into a 
HashMap/HashTable, the recommended hashCode implementation to use is:

public int hashCode() {
  assert false : "hashCode not designed";
  return 42; // any arbitrary constant will do
  }

--- ShoppingCart.java:4383, BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS
BC: Equals method for 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$ShoppingCartItemGroup assumes 
the argument is of type ShoppingCart$ShoppingCartItemGroup

The equals(Object o) method shouldn't make any assumptions about the type of o. 
It should simply return false if o is not the same type as this.

--- ShoppingCart.java:4391, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCart$ProductPromoUseInfo is 
Serializable; consider declaring a 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.

--- ShoppingCart.java:4416, WMI_WRONG_MAP_ITERATOR
WMI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$ProductPromoUseInfo.getUsageWeight()
 makes inefficient use of keySet iterator instead of entrySet iterator

This method accesses the value of a Map entry, using a key that was retrieved 
from a keySet iterator. It is more efficient to use an iterator on the entrySet 
of the map, to avoid the Map.get(key) lookup.

--- ShoppingCart.java:4427, EQ_COMPARETO_USE_OBJECT_EQUALS
Eq: org.apache.ofbiz.order.shoppingcart.ShoppingCart$ProductPromoUseInfo 
defines compareTo(ShoppingCart$ProductPromoUseInfo) and uses Object.equals()

This class defines a compareTo(...) method but inherits its equals() method 
from java.lang.Object. Generally, the value of compareTo should return zero if 
and only if equals returns true. If this is violated, weird and unpredictable 
failures will occur in classes such as PriorityQueue. In Java 5 the 
PriorityQueue.remove method uses the compareTo method, while in Java 6 it uses 
the equals method.

>From the JavaDoc for the compareTo method in the Comparable interface:

It is strongly recommended, but not strictly required that (x.compareTo(y)==0) 
== (x.equals(y)). Generally speaking, any class that implements the Comparable 
interface and violates this condition should clearly indicate this fact. The 
recommended language is "Note: this class has a natural ordering that is 
inconsistent with equals."

--- ShoppingCart.java:4431, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo is 
Serializable; consider declaring a 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.

--- ShoppingCart.java:4604, WMI_WRONG_MAP_ITERATOR
WMI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo.makeItemShipGroupAndAssoc(Delegator,
 ShoppingCart, String, boolean) makes inefficient use of keySet iterator 
instead of entrySet iterator

This method accesses the value of a Map entry, using a key that was retrieved 
from a keySet iterator. It is more efficient to use an iterator on the entrySet 
of the map, to avoid the Map.get(key) lookup.

--- ShoppingCart.java:4686, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo.resetShipBeforeDateIfAfter(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCart$CartShipInfo.shipBeforeDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:4698, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo.resetShipAfterDateIfBefore(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCart$CartShipInfo.shipAfterDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCart.java:4723, SE_NO_SERIALVERSIONID
SnVI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartShipInfo$CartShipItemInfo 
is Serializable; consider declaring a 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.

--- ShoppingCart.java:4753, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartPaymentInfo is 
Serializable; consider declaring a 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.

--- ShoppingCart.java:4948, EQ_COMPARETO_USE_OBJECT_EQUALS
Eq: org.apache.ofbiz.order.shoppingcart.ShoppingCart$CartPaymentInfo defines 
compareTo(Object) and uses Object.equals()

This class defines a compareTo(...) method but inherits its equals() method 
from java.lang.Object. Generally, the value of compareTo should return zero if 
and only if equals returns true. If this is violated, weird and unpredictable 
failures will occur in classes such as PriorityQueue. In Java 5 the 
PriorityQueue.remove method uses the compareTo method, while in Java 6 it uses 
the equals method.

>From the JavaDoc for the compareTo method in the Comparable interface:

It is strongly recommended, but not strictly required that (x.compareTo(y)==0) 
== (x.equals(y)). Generally speaking, any class that implements the Comparable 
interface and violates this condition should clearly indicate this fact. The 
recommended language is "Note: this class has a natural ordering that is 
inconsistent with equals."

--- ShoppingCart.java:5017, FI_USELESS
FI: org.apache.ofbiz.order.shoppingcart.ShoppingCart.finalize() does nothing 
except call super.finalize(); delete it

The only thing this finalize() method does is call the superclass's finalize() 
method, making it redundant.  Delete it.

--- ShoppingCartEvents.java:74, MS_SHOULD_BE_FINAL
MS: org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.module isn't final 
but should be

This static field public but not final, and could be changed by malicious code 
or by accident from another package. The field could be made final to avoid 
this vulnerability.

--- ShoppingCartEvents.java:361, DM_BOXED_PRIMITIVE_FOR_PARSING
Bx: Boxing/unboxing to parse a primitive 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.addToCart(HttpServletRequest,
 HttpServletResponse)

A boxed primitive is created from a String, just to extract the unboxed 
primitive value. It is more efficient to just call the static parseXXX method.

--- ShoppingCartEvents.java:412, DLS_DEAD_LOCAL_STORE
DLS: Dead store to reservLength in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.addToCart(HttpServletRequest,
 HttpServletResponse)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartEvents.java:425, DLS_DEAD_LOCAL_STORE
DLS: Dead store to reservPersons in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.addToCart(HttpServletRequest,
 HttpServletResponse)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartEvents.java:479, REC_CATCH_EXCEPTION
REC: Exception is caught when Exception is not thrown in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.addToCart(HttpServletRequest,
 HttpServletResponse)

This method uses a try-catch block that catches Exception objects, but 
Exception is not thrown within the try block, and RuntimeException is not 
explicitly caught. It is a common bug pattern to say try { ... } catch 
(Exception e) { something } as a shorthand for catching a number of types of 
exception each of whose catch blocks is identical, but this construct also 
accidentally catches RuntimeException as well, masking potential bugs.

A better approach is to either explicitly catch the specific exceptions that 
are thrown, or to explicitly catch RuntimeException exception, rethrow it, and 
then catch all non-Runtime Exceptions, as shown below:

  try {
    ...
  } catch (RuntimeException e) {
    throw e;
  } catch (Exception e) {
    ... deal with all non-runtime exceptions ...
  }

--- ShoppingCartEvents.java:608, GC_UNRELATED_TYPES
GC: String is incompatible with expected argument type 
org.apache.ofbiz.entity.GenericValue in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.addToCart(HttpServletRequest,
 HttpServletResponse)

This call to a generic collection method contains an argument with an 
incompatible class from that of the collection's parameter (i.e., the type of 
the argument is neither a supertype nor a subtype of the corresponding generic 
type argument). Therefore, it is unlikely that the collection contains any 
objects that are equal to the method argument used here. Most likely, the wrong 
value is being passed to the method.

In general, instances of two unrelated classes are not equal. For example, if 
the Foo and Bar classes are not related by subtyping, then an instance of Foo 
should not be equal to an instance of Bar. Among other issues, doing so will 
likely result in an equals method that is not symmetrical. For example, if you 
define the Foo class so that a Foo can be equal to a String, your equals method 
isn't symmetrical since a String can only be equal to a String.

In rare cases, people do define nonsymmetrical equals methods and still manage 
to make their code work. Although none of the APIs document or guarantee it, it 
is typically the case that if you check if a Collection<String> contains a Foo, 
the equals method of argument (e.g., the equals method of the Foo class) used 
to perform the equality checks.

--- ShoppingCartEvents.java:1468, DLS_DEAD_LOCAL_STORE
DLS: Dead store to orderAdjustments in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.loadCartFromOrder(HttpServletRequest,
 HttpServletResponse)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartEvents.java:1871, NP_LOAD_OF_KNOWN_NULL_VALUE
NP: Load of known null value in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.bulkAddProducts(HttpServletRequest,
 HttpServletResponse)

The variable referenced at this point is known to be null due to an earlier 
check against null. Although this is valid, it might be a mistake (perhaps you 
intended to refer to a different variable, or perhaps the earlier check to see 
if the variable is null should have been a check to see if it was non-null).

--- ShoppingCartEvents.java:1995, DLS_DEAD_LOCAL_STORE
DLS: Dead store to quantity in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.bulkAddProductsInApprovedOrder(HttpServletRequest,
 HttpServletResponse)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartEvents.java:2064, NP_LOAD_OF_KNOWN_NULL_VALUE
NP: Load of known null value in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents.bulkAddProductsInApprovedOrder(HttpServletRequest,
 HttpServletResponse)

The variable referenced at this point is known to be null due to an earlier 
check against null. Although this is valid, it might be a mistake (perhaps you 
intended to refer to a different variable, or perhaps the earlier check to see 
if the variable is null should have been a check to see if it was non-null).

--- ShoppingCartHelper.java:68, MS_SHOULD_BE_FINAL
MS: org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.module isn't final 
but should be

This static field public but not final, and could be changed by malicious code 
or by accident from another package. The field could be made final to avoid 
this vulnerability.

--- ShoppingCartHelper.java:210, WMI_WRONG_MAP_ITERATOR
WMI: org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.addToCart(String, 
String, String, String, String, String, String, BigDecimal, BigDecimal, 
BigDecimal, Timestamp, BigDecimal, BigDecimal, String, String, Timestamp, 
Timestamp, ProductConfigWrapper, String, Map, String) makes inefficient use of 
keySet iterator instead of entrySet iterator

This method accesses the value of a Map entry, using a key that was retrieved 
from a keySet iterator. It is more efficient to use an iterator on the entrySet 
of the map, to avoid the Map.get(key) lookup.

--- ShoppingCartHelper.java:232, DM_STRING_TOSTRING
Dm: org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.addToCart(String, 
String, String, String, String, String, String, BigDecimal, BigDecimal, 
BigDecimal, Timestamp, BigDecimal, BigDecimal, String, String, Timestamp, 
Timestamp, ProductConfigWrapper, String, Map, String) invokes toString() method 
on a String

Calling String.toString() is just a redundant operation. Just use the String.

--- ShoppingCartHelper.java:272, DM_NUMBER_CTOR
Bx: org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.addToCart(String, 
String, String, String, String, String, String, BigDecimal, BigDecimal, 
BigDecimal, Timestamp, BigDecimal, BigDecimal, String, String, Timestamp, 
Timestamp, ProductConfigWrapper, String, Map, String) invokes inefficient new 
Integer(int) constructor; use Integer.valueOf(int) instead

Using new Integer(int) is guaranteed to always result in a new object whereas 
Integer.valueOf(int) allows caching of values to be done by the compiler, class 
library, or JVM. Using of cached values avoids object allocation and the code 
will be faster.

Values between -128 and 127 are guaranteed to have corresponding cached 
instances and using valueOf is approximately 3.5 times faster than using 
constructor. For values outside the constant range the performance of both 
styles is the same.

Unless the class must be compatible with JVMs predating Java 1.5, use either 
autoboxing or the valueOf() method when creating instances of Long, Integer, 
Short, Character, and Byte.

--- ShoppingCartHelper.java:435, DLS_DEAD_LOCAL_STORE
DLS: Dead store to piecesIncluded in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.addToCartBulk(String, 
String, Map)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartHelper.java:528, DLS_DEAD_LOCAL_STORE
DLS: Dead store to quantity in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.addToCartBulkRequirements(String,
 Map)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartHelper.java:636, DM_CONVERT_CASE
Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.deleteFromCart(Map)

A String is being converted to upper or lowercase, using the platform's default 
encoding. This may result in improper conversions when used with international 
characters. Use the

String.toUpperCase( Locale l )
String.toLowerCase( Locale l )
versions instead.

--- ShoppingCartHelper.java:670, DLS_DEAD_LOCAL_STORE
DLS: Dead store to oldQuantity in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.modifyCart(Security, 
GenericValue, Map, boolean, String[], Locale)

This instruction assigns a value to a local variable, but the value is not read 
or used in any subsequent instruction. Often, this indicates an error, because 
the value computed is never used.

Note that Sun's javac compiler often generates dead stores for final local 
variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
eliminate these false positives.

--- ShoppingCartHelper.java:691, WMI_WRONG_MAP_ITERATOR
WMI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.modifyCart(Security, 
GenericValue, Map, boolean, String[], Locale) makes inefficient use of keySet 
iterator instead of entrySet iterator

This method accesses the value of a Map entry, using a key that was retrieved 
from a keySet iterator. It is more efficient to use an iterator on the entrySet 
of the map, to avoid the Map.get(key) lookup.

--- ShoppingCartHelper.java:699, DM_CONVERT_CASE
Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.modifyCart(Security, 
GenericValue, Map, boolean, String[], Locale)

A String is being converted to upper or lowercase, using the platform's default 
encoding. This may result in improper conversions when used with international 
characters. Use the

String.toUpperCase( Locale l )
String.toLowerCase( Locale l )
versions instead.

--- ShoppingCartHelper.java:892, REC_CATCH_EXCEPTION
REC: Exception is caught when Exception is not thrown in 
org.apache.ofbiz.order.shoppingcart.ShoppingCartHelper.modifyCart(Security, 
GenericValue, Map, boolean, String[], Locale)

This method uses a try-catch block that catches Exception objects, but 
Exception is not thrown within the try block, and RuntimeException is not 
explicitly caught. It is a common bug pattern to say try { ... } catch 
(Exception e) { something } as a shorthand for catching a number of types of 
exception each of whose catch blocks is identical, but this construct also 
accidentally catches RuntimeException as well, masking potential bugs.

A better approach is to either explicitly catch the specific exceptions that 
are thrown, or to explicitly catch RuntimeException exception, rethrow it, and 
then catch all non-Runtime Exceptions, as shown below:

  try {
    ...
  } catch (RuntimeException e) {
    throw e;
  } catch (Exception e) {
    ... deal with all non-runtime exceptions ...
  }

--- ShoppingCartItem.java:-1, SE_TRANSIENT_FIELD_NOT_RESTORED
Se: The field 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem._parentProduct is 
transient but isn't set by deserialization

This class contains a field that is updated at multiple places in the class, 
thus it seems to be part of the state of the class. However, since the field is 
marked as transient and not set in readObject or readResolve, it will contain 
the default value in any deserialized instance of the class.

--- ShoppingCartItem.java:-1, SE_TRANSIENT_FIELD_NOT_RESTORED
Se: The field org.apache.ofbiz.order.shoppingcart.ShoppingCartItem._product is 
transient but isn't set by deserialization

This class contains a field that is updated at multiple places in the class, 
thus it seems to be part of the state of the class. However, since the field is 
marked as transient and not set in readObject or readResolve, it will contain 
the default value in any deserialized instance of the class.

--- ShoppingCartItem.java:78, MS_SHOULD_BE_FINAL
MS: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.module isn't final but 
should be

This static field public but not final, and could be changed by malicious code 
or by accident from another package. The field could be made final to avoid 
this vulnerability.

--- ShoppingCartItem.java:78, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem is Serializable; 
consider declaring a 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.

--- ShoppingCartItem.java:81, MS_FINAL_PKGPROTECT
MS: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.attributeNames should 
be both final and package protected

A mutable static field could be changed by malicious code or by accident from 
another package. The field could be made package protected and/or made final to 
avoid this vulnerability.

--- ShoppingCartItem.java:705, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
RCN: Nullcheck of product at line 706 of value previously dereferenced in new 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem(GenericValue, Map, Map, 
String, Locale, String, ShoppingCart$ShoppingCartItemGroup, LocalDispatcher)

A value is checked here to see whether it is null, but this value can't be null 
because it was previously dereferenced and if it were null a null pointer 
exception would have occurred at the earlier dereference. Essentially, this 
code and the previous dereference disagree as to whether this value is allowed 
to be null. Either the check is redundant or the previous dereference is 
erroneous.

--- ShoppingCartItem.java:835, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.setReservStart(Timestamp) 
may expose internal representation by storing an externally mutable object into 
ShoppingCartItem.reservStart

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCartItem.java:1236, EI_EXPOSE_REP
EI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.getReservStart(BigDecimal) 
may expose internal representation by returning ShoppingCartItem.reservStart

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCartItem.java:1274, IS2_INCONSISTENT_SYNC
IS: Inconsistent synchronization of 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.promoQuantityUsed; locked 
71% of time

The fields of this class appear to be accessed inconsistently with respect to 
synchronization.  This bug report indicates that the bug pattern detector 
judged that

The class contains a mix of locked and unlocked accesses,
The class is not annotated as javax.annotation.concurrent.NotThreadSafe,
At least one locked access was performed by one of the class's own methods, and
The number of unsynchronized field accesses (reads and writes) was no more than 
one third of all accesses, with writes being weighed twice as high as reads
A typical bug matching this bug pattern is forgetting to synchronize one of the 
methods in a class that is intended to be thread-safe.

You can select the nodes labeled "Unsynchronized access" to show the code 
locations where the detector believed that a field was accessed without 
synchronization.

Note that there are various sources of inaccuracy in this detector; for 
example, the detector cannot statically detect all situations in which a lock 
is held.  Also, even when the detector is accurate in distinguishing locked vs. 
unlocked accesses, the code in question may still be correct.

--- ShoppingCartItem.java:1433, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.setShipBeforeDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCartItem.shipBeforeDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCartItem.java:1439, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.getShipBeforeDate() 
may expose internal representation by returning ShoppingCartItem.shipBeforeDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCartItem.java:1444, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.setShipAfterDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCartItem.shipAfterDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCartItem.java:1449, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.getShipAfterDate() may 
expose internal representation by returning ShoppingCartItem.shipAfterDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCartItem.java:1454, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.setCancelBackOrderDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCartItem.cancelBackOrderDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCartItem.java:1459, EI_EXPOSE_REP
EI: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.getCancelBackOrderDate() 
may expose internal representation by returning 
ShoppingCartItem.cancelBackOrderDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCartItem.java:1464, EI_EXPOSE_REP2
EI2: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.setEstimatedShipDate(Timestamp)
 may expose internal representation by storing an externally mutable object 
into ShoppingCartItem.estimatedShipDate

This code stores a reference to an externally mutable object into the internal 
representation of the object.  If instances are accessed by untrusted code, and 
unchecked changes to the mutable object would compromise security or other 
important properties, you will need to do something different. Storing a copy 
of the object is better approach in many situations.

--- ShoppingCartItem.java:1469, EI_EXPOSE_REP
EI: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem.getEstimatedShipDate() 
may expose internal representation by returning 
ShoppingCartItem.estimatedShipDate

Returning a reference to a mutable object value stored in one of the object's 
fields exposes the internal representation of the object.  If instances are 
accessed by untrusted code, and unchecked changes to the mutable object would 
compromise security or other important properties, you will need to do 
something different. Returning a new copy of the object is better approach in 
many situations.

--- ShoppingCartItem.java:2266, EQ_SELF_USE_OBJECT
Eq: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem defines 
equals(ShoppingCartItem) method and uses Object.equals(Object)

This class defines a covariant version of the equals() method, but inherits the 
normal equals(Object) method defined in the base java.lang.Object class.  The 
class should probably define a boolean equals(Object) method.

--- ShoppingCartItem.java:2266, HE_EQUALS_USE_HASHCODE
HE: org.apache.ofbiz.order.shoppingcart.ShoppingCartItem defines equals and 
uses Object.hashCode()

This class overrides equals(Object), but does not override hashCode(), and 
inherits the implementation of hashCode() from java.lang.Object (which returns 
the identity hash code, an arbitrary value assigned to the object by the VM).  
Therefore, the class is very likely to violate the invariant that equal objects 
must have equal hashcodes.

If you don't think instances of this class will ever be inserted into a 
HashMap/HashTable, the recommended hashCode implementation to use is:

public int hashCode() {
  assert false : "hashCode not designed";
  return 42; // any arbitrary constant will do
  }
  
--- ShoppingCartServices.java:867, DM_BOOLEAN_CTOR
Dm: 
org.apache.ofbiz.order.shoppingcart.ShoppingCartServices.loadCartFromQuote(DispatchContext,
 Map) invokes inefficient Boolean constructor; use Boolean.valueOf(...) instead

Creating new instances of java.lang.Boolean wastes memory, since Boolean 
objects are immutable and there are only two useful values of this type.  Use 
the Boolean.valueOf() method (or Java 1.5 autoboxing) to create Boolean objects 
instead.

--- WebShoppingCart.java:45, SE_NO_SERIALVERSIONID
SnVI: org.apache.ofbiz.order.shoppingcart.WebShoppingCart is Serializable; 
consider declaring a 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.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to