Suppress issues found by FindBugs: EI_EXPOSE_REP and EI_EXPOSE_REP2
http://findbugs.sourceforge.net/bugDescriptions.html#EI_EXPOSE_REP
http://findbugs.sourceforge.net/bugDescriptions.html#EI_EXPOSE_REP2
A proper fix for EI_EXPOSE_REP would require eventually to return a copy of an
internal object.
A proper fix for EI_EXPOSE_REP2 would require eventually to store a copy of the
provided object-argument.
However, the performance implication of creating the extra copies is not clear,
hence for the time being all those issues are suppressed by using the following
statements:
@SuppressFBWarnings(value = "EI_EXPOSE_REP",
justification = "TODO: Return a copy of the object?")
@SuppressFBWarnings(value = "EI_EXPOSE_REP2",
justification = "TODO: Store a copy of the object?")
Those suppressed warnings should be re-evaluated and addressed on case-by-case, e.g.
create object copies as appropriate.
Change-Id: I2df00242876e6c185d9fc098b15217138a324a8d
diff --git a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
index db354eb..0a7fc5e 100644
--- a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
@@ -4,6 +4,8 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import net.onrc.onos.core.datastore.IKVTableID;
import net.onrc.onos.core.datastore.IMultiEntryOperation;
import net.onrc.onos.core.datastore.hazelcast.HZTable.VersionedValue;
@@ -33,6 +35,8 @@
* @param key
* @param operation
*/
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP2",
+ justification = "TODO: Store a copy of the object?")
public HZMultiEntryOperation(final HZTable table, final byte[] key, final OPERATION operation) {
this.table = table;
this.key = key;
@@ -52,6 +56,8 @@
* @param version
* @param operation
*/
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP2",
+ justification = "TODO: Store a copy of the object?")
public HZMultiEntryOperation(final HZTable table, final byte[] key, final byte[] value, final long version, final OPERATION operation) {
this.table = table;
this.key = key;
@@ -81,6 +87,8 @@
}
@Override
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getKey() {
return key;
}
diff --git a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
index 20501bb..e609bce 100644
--- a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
@@ -7,6 +7,8 @@
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import net.onrc.onos.core.datastore.IKVTable;
import net.onrc.onos.core.datastore.IKVTableID;
import net.onrc.onos.core.datastore.ObjectDoesntExistException;
@@ -152,6 +154,8 @@
byte[] value;
long version;
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP2",
+ justification = "TODO: Store a copy of the object?")
public Entry(final byte[] key, final byte[] value, final long version) {
this.key = key;
this.setValue(value);
@@ -163,11 +167,15 @@
}
@Override
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getKey() {
return key;
}
@Override
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getValue() {
return value;
}
diff --git a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
index 3c78cf1..5ce07a4 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
@@ -1,5 +1,7 @@
package net.onrc.onos.core.datastore.ramcloud;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import net.onrc.onos.core.datastore.IKVTable;
import net.onrc.onos.core.datastore.IKVTableID;
import net.onrc.onos.core.datastore.ObjectDoesntExistException;
@@ -21,6 +23,8 @@
byte[] value;
long version;
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP2",
+ justification = "TODO: Store a copy of the object?")
public Entry(final byte[] key, final byte[] value, final long version) {
this.key = key;
this.setValue(value);
@@ -32,11 +36,15 @@
}
@Override
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getKey() {
return key;
}
@Override
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getValue() {
return value;
}
diff --git a/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
index 4b9d3c3..3c56d2c 100644
--- a/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
@@ -10,6 +10,8 @@
import java.util.Set;
import java.util.TreeSet;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import net.onrc.onos.core.datastore.DataStoreClient;
import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
import net.onrc.onos.core.datastore.topology.KVLink.STATUS;
@@ -75,6 +77,8 @@
return mac;
}
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP2",
+ justification = "TODO: Store a copy of the object?")
public KVDevice(final byte[] mac) {
super(DataStoreClient.getClient().getTable(GLOBAL_DEVICE_TABLE_NAME), getDeviceID(mac));
@@ -121,6 +125,8 @@
}
}
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getMac() {
// TODO may need to clone() to be sure this object will be immutable.
return mac;
diff --git a/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
index 618c31e..078c82d 100644
--- a/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
@@ -6,6 +6,8 @@
import java.util.List;
import java.util.Map;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import net.onrc.onos.core.datastore.DataStoreClient;
import net.onrc.onos.core.datastore.IKVClient;
import net.onrc.onos.core.datastore.IKVTable;
@@ -62,6 +64,8 @@
this(table, key, null, table.getVersionNonexistant());
}
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP2",
+ justification = "TODO: Store a copy of the object?")
public KVObject(final IKVTable table, final byte[] key, final byte[] value, final long version) {
if (table == null) {
throw new IllegalArgumentException("table cannot be null");
@@ -93,6 +97,8 @@
return table.getTableId();
}
+ @SuppressFBWarnings(value = "EI_EXPOSE_REP",
+ justification = "TODO: Return a copy of the object?")
public byte[] getKey() {
return key;
}