Remove @(Not)ThreadSafe annotation 53/81553/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 26 Mar 2019 13:03:15 +0000 (14:03 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 11 Apr 2019 09:57:52 +0000 (11:57 +0200)
Use documentation rather than JSR305 to document non-thread-safety.
In package-private classes these annotations often do not make
sense.

Change-Id: Iea39cf23472917e9d5765e6d2a025ff7ab7f6114
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 0a31ba669d9ac4bc0451dcbc9017e1e3645b316c)

13 files changed:
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCursor.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/util/AbstractBindingLazyContainerNode.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/JavassistUtils.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeCursor.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTable.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTableEntry.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardModificationContext.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/SubshardProducerSpecification.java
singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceGroupImpl.java
trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/CloseTrackedRegistry.java

index 1560216b0e34cee70ebbfca4ff5652e51b7b9ad5..adae8f42e2a52d56a2107dab7b5aa5b3ddd5494f 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.mdsal.binding.api;
 
 import com.google.common.annotations.Beta;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
@@ -16,9 +15,11 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 /**
  * A cursor holding a logical position within a conceptual data tree. It allows operations relative to that position,
  * as well as moving the position up or down the tree.
+ *
+ * <p>
+ * Implementations of this interface are expected to be inherently non-thread-safe.
  */
 @Beta
-@NotThreadSafe
 public interface DataTreeCursor extends AutoCloseable {
     /**
      * Move the cursor to the specified child of the current position.
index da6ab8cdb358e8ca6ced01cb23bfe2a0c84f23ff..08e6d48bf31d469292277157cf9dcd0450d05bd0 100644 (file)
@@ -15,7 +15,6 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode;
@@ -28,12 +27,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 
 /**
  * A {@link ContainerNode} backed by a binding {@link DataObject}, with lazy instantiation of the ContainerNode view.
+ * This class is thread-safe.
  *
  * @param <T> Binding DataObject type
  * @author Robert Varga
  */
 @Beta
-@ThreadSafe
 public abstract class AbstractBindingLazyContainerNode<T extends DataObject, C> extends ForwardingObject
         implements BindingLazyContainerNode<T> {
     private final @NonNull NodeIdentifier identifier;
index c938f5e11a93bde45e3f979042bd443f508de791..baa5824c6d505a6ca87aeaff6ba21ff33bc2ce0f 100644 (file)
@@ -22,12 +22,12 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
+import org.opendaylight.yangtools.concepts.Mutable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
@@ -44,8 +44,10 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@NotThreadSafe
-public final class ModuleContext {
+/**
+ * Utility class for building up Binding mapping information. This class is NOT thread-safe.
+ */
+public final class ModuleContext implements Mutable {
     private static final Logger LOG = LoggerFactory.getLogger(ModuleContext.class);
 
     private final BiMap<Type, AugmentationSchemaNode> typeToAugmentation = HashBiMap.create();
index a2c6456c0159cfa41ebd67ad7ff7e020df5e4d52..406242c76995a62f982d3a2818381c9875ebeb42 100644 (file)
@@ -20,17 +20,15 @@ import javassist.CtClass;
 import javassist.LoaderClassPath;
 import javassist.NotFoundException;
 import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Users of this utility class are expected to synchronize on this instance
- * it they need to ensure atomic operations on it.
+ * Users of this utility class are expected to synchronize on this instance it they need to ensure atomic operations
+ * on it. Individual operations are synchronized and therefore are thread-safe.
  */
 @NonNullByDefault
-@ThreadSafe
 public final class JavassistUtils {
     private static final Logger LOG = LoggerFactory.getLogger(JavassistUtils.class);
     private static final Map<ClassPool, JavassistUtils> INSTANCES = new WeakHashMap<>();
index 95741f79a595eb6402c79b354ebea5c1fba31f4c..2326fbda61559a10a32f5d61285f7690d94861ec 100644 (file)
@@ -17,7 +17,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.model.api.Enumeration;
@@ -30,12 +29,11 @@ import org.opendaylight.mdsal.binding.model.api.WildcardType;
 
 /**
  * Abstract class representing a generated type, either top-level or nested. It takes care of tracking references
- * to other Java types and resolving them as best as possible.
+ * to other Java types and resolving them as best as possible. This class is NOT thread-safe.
  *
  * @author Robert Varga
  */
 @NonNullByDefault
-@NotThreadSafe
 abstract class AbstractJavaGeneratedType {
     private final Map<JavaTypeName, @Nullable String> nameCache = new HashMap<>();
     private final ImmutableMap<String, NestedJavaGeneratedType> enclosedTypes;
index a4c802ad5571de7ebeba0dd74567335dc7695881..7f8520d63b89ad57d9b33b4ee8dea58b68f1802d 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.mdsal.dom.api;
 
 import com.google.common.annotations.Beta;
 import java.util.Arrays;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
@@ -17,9 +16,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
 /**
  * A cursor holding a logical position within a conceptual data tree. It allows operations relative
  * to that position, as well as moving the position up or down the tree.
+ *
+ * <p>
+ * Implementations of this interface are expected to be inherently not-thread-safe.
  */
 @Beta
-@NotThreadSafe
 public interface DOMDataTreeCursor extends AutoCloseable {
     /**
      * Move the cursor to the specified child of the current position.
index 28b91dc141b42a09b57c041d7529e535117c15ae..2621a6087638c816dec94ab81edbd4cf79a97483 100644 (file)
@@ -26,7 +26,6 @@ import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
@@ -38,7 +37,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@NotThreadSafe
 final class ShardedDOMDataTreeWriteTransaction implements DOMDataTreeCursorAwareTransaction {
     private static final Logger LOG = LoggerFactory.getLogger(ShardedDOMDataTreeWriteTransaction.class);
     private static final AtomicLong COUNTER = new AtomicLong();
index 71b64dc389ec5b28da67b0bd01e01140e6bd40da..fd548dfa603bc49ce1a1eb2b1622022393f2f668 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.mdsal.dom.spi;
 import com.google.common.annotations.Beta;
 import java.util.EnumMap;
 import java.util.Map;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -19,13 +18,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Prefix table indexed by {@link DOMDataTreeIdentifier}.
- * Stores values in tree and provides lookup of closest ancestor
+ * Prefix table indexed by {@link DOMDataTreeIdentifier}. Stores values in tree and provides lookup of closest ancestor.
+ * This class is not thread-safe.
  *
  * @param <V> Value type
  */
 @Beta
-@NotThreadSafe
 public final class DOMDataTreePrefixTable<V> {
 
     private static final Logger LOG = LoggerFactory.getLogger(DOMDataTreePrefixTable.class);
index b7e7b4404eb77b493087efd4f4a607dc9b156b87..27bcb6b18c46e75f41ea984b8077222c0a4e6e54 100644 (file)
@@ -14,16 +14,18 @@ import com.google.common.annotations.Beta;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.yangtools.concepts.Identifiable;
+import org.opendaylight.yangtools.concepts.Mutable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * An entry in DOMDataTreePrefixTable. This class is not thread-safe.
+ */
 @Beta
-@NotThreadSafe
-public final class DOMDataTreePrefixTableEntry<V> implements Identifiable<PathArgument> {
+public final class DOMDataTreePrefixTableEntry<V> implements Identifiable<PathArgument>, Mutable {
     private static final Logger LOG = LoggerFactory.getLogger(DOMDataTreePrefixTableEntry.class);
     // FIXME: We do probably want to adapt map
     private final Map<PathArgument, DOMDataTreePrefixTableEntry<V>> children = new HashMap<>();
index ed7d00f62c5a601600555512fe44945598ff40d4..0f9471f801134bb5f59ab325a907179c05a7b50c 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.mdsal.dom.spi.shard;
 
 import static com.google.common.base.Preconditions.checkState;
@@ -13,16 +12,18 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import com.google.common.util.concurrent.ListenableFuture;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor;
 import org.opendaylight.yangtools.concepts.Identifiable;
+import org.opendaylight.yangtools.concepts.Mutable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * A handle for a transaction being done on a different shard. This class is not thread-safe.
+ */
 @Beta
-@NotThreadSafe
-public final class ForeignShardModificationContext implements Identifiable<DOMDataTreeIdentifier> {
+public final class ForeignShardModificationContext implements Identifiable<DOMDataTreeIdentifier>, Mutable {
     private static final Logger LOG = LoggerFactory.getLogger(ForeignShardModificationContext.class);
 
     private final DOMDataTreeIdentifier identifier;
index 80b3cf64d1020aafb86e960936646d886c386b00..5c297eba82ed3f9bebf2eed47934f27b79d8aff4 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.mdsal.dom.spi.shard;
 
 import static java.util.Objects.requireNonNull;
@@ -13,18 +12,17 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.annotations.Beta;
 import java.util.ArrayList;
 import java.util.Collection;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.yangtools.concepts.Mutable;
 
 /**
  * Specification of subshard producer context that's used for building modification factories that span into the
- * subshards.
+ * subshards. This class is not thread-safe.
  */
 @Beta
 @NonNullByDefault
-@NotThreadSafe
-public final class SubshardProducerSpecification {
+public final class SubshardProducerSpecification implements Mutable {
     private final Collection<DOMDataTreeIdentifier> prefixes = new ArrayList<>(1);
     private final ChildShardContext shard;
 
index e9f9cce81a3cf0fa9960f5c752a3197f2d71012f..1d83e09e9db769666c15fad6c7439a5ab8f167b4 100644 (file)
@@ -32,7 +32,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
@@ -69,7 +68,6 @@ import org.slf4j.LoggerFactory;
  * @param <G> the GenericEntityOwnershipListener type
  * @param <S> the GenericEntityOwnershipService type
  */
-@ThreadSafe
 final class ClusterSingletonServiceGroupImpl<P extends Path<P>, E extends GenericEntity<P>,
         C extends GenericEntityOwnershipChange<P, E>,  G extends GenericEntityOwnershipListener<P, C>,
         S extends GenericEntityOwnershipService<P, E, G>> extends ClusterSingletonServiceGroup<P, E, C> {
index d501a31afb0e356349f9c64546921dd4c07b13fb..00d51294047d83d313c5b275da1ff08394d74317 100644 (file)
@@ -20,14 +20,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentSkipListSet;
-import javax.annotation.concurrent.ThreadSafe;
 
 /**
- * Registry of {@link CloseTracked} instances.
+ * Registry of {@link CloseTracked} instances. This class is thread-safe.
  *
  * @author Michael Vorburger.ch
  */
-@ThreadSafe
 class CloseTrackedRegistry<T extends CloseTracked<T>> {
 
     private final Object anchor;
@@ -52,7 +50,8 @@ class CloseTrackedRegistry<T extends CloseTracked<T>> {
      *            course) an expensive operation, and should only be used during
      *            troubleshooting
      */
-    public CloseTrackedRegistry(Object anchor, String createDescription, boolean isDebugContextEnabled) {
+    public CloseTrackedRegistry(final Object anchor, final String createDescription,
+            final boolean isDebugContextEnabled) {
         this.anchor = anchor;
         this.createDescription = createDescription;
         this.isDebugContextEnabled = isDebugContextEnabled;
@@ -71,12 +70,12 @@ class CloseTrackedRegistry<T extends CloseTracked<T>> {
     }
 
     // package protected, not public; only CloseTrackedTrait invokes this
-    void add(CloseTracked<T> closeTracked) {
+    void add(final CloseTracked<T> closeTracked) {
         tracked.add(closeTracked);
     }
 
     // package protected, not public; only CloseTrackedTrait invokes this
-    void remove(CloseTracked<T> closeTracked) {
+    void remove(final CloseTracked<T> closeTracked) {
         tracked.remove(closeTracked);
     }