From f29337d95c1979aee4f2352b3f83ba027ee5041a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 26 Mar 2019 14:03:15 +0100 Subject: [PATCH] Remove @(Not)ThreadSafe annotation 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 (cherry picked from commit 0a31ba669d9ac4bc0451dcbc9017e1e3645b316c) --- .../mdsal/binding/api/DataTreeCursor.java | 5 +++-- .../codec/util/AbstractBindingLazyContainerNode.java | 3 +-- .../mdsal/binding/generator/impl/ModuleContext.java | 8 +++++--- .../mdsal/binding/generator/util/JavassistUtils.java | 6 ++---- .../java/api/generator/AbstractJavaGeneratedType.java | 4 +--- .../opendaylight/mdsal/dom/api/DOMDataTreeCursor.java | 5 +++-- .../broker/ShardedDOMDataTreeWriteTransaction.java | 2 -- .../mdsal/dom/spi/DOMDataTreePrefixTable.java | 6 ++---- .../mdsal/dom/spi/DOMDataTreePrefixTableEntry.java | 8 +++++--- .../spi/shard/ForeignShardModificationContext.java | 9 +++++---- .../dom/spi/shard/SubshardProducerSpecification.java | 8 +++----- .../dom/impl/ClusterSingletonServiceGroupImpl.java | 2 -- .../mdsal/trace/impl/CloseTrackedRegistry.java | 11 +++++------ 13 files changed, 35 insertions(+), 42 deletions(-) diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCursor.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCursor.java index 1560216b0e..adae8f42e2 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCursor.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCursor.java @@ -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. + * + *

+ * 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. diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/util/AbstractBindingLazyContainerNode.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/util/AbstractBindingLazyContainerNode.java index da6ab8cdb3..08e6d48bf3 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/util/AbstractBindingLazyContainerNode.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/util/AbstractBindingLazyContainerNode.java @@ -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 Binding DataObject type * @author Robert Varga */ @Beta -@ThreadSafe public abstract class AbstractBindingLazyContainerNode extends ForwardingObject implements BindingLazyContainerNode { private final @NonNull NodeIdentifier identifier; diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java index c938f5e11a..baa5824c6d 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java @@ -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 typeToAugmentation = HashBiMap.create(); diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/JavassistUtils.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/JavassistUtils.java index a2c6456c01..406242c769 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/JavassistUtils.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/JavassistUtils.java @@ -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 INSTANCES = new WeakHashMap<>(); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java index 95741f79a5..2326fbda61 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java @@ -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 nameCache = new HashMap<>(); private final ImmutableMap enclosedTypes; diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeCursor.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeCursor.java index a4c802ad55..7f8520d63b 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeCursor.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeCursor.java @@ -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. + * + *

+ * 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. diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java index 28b91dc141..2621a60876 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java @@ -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(); diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTable.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTable.java index 71b64dc389..fd548dfa60 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTable.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTable.java @@ -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 Value type */ @Beta -@NotThreadSafe public final class DOMDataTreePrefixTable { private static final Logger LOG = LoggerFactory.getLogger(DOMDataTreePrefixTable.class); diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTableEntry.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTableEntry.java index b7e7b4404e..27bcb6b18c 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTableEntry.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTableEntry.java @@ -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 implements Identifiable { +public final class DOMDataTreePrefixTableEntry implements Identifiable, Mutable { private static final Logger LOG = LoggerFactory.getLogger(DOMDataTreePrefixTableEntry.class); // FIXME: We do probably want to adapt map private final Map> children = new HashMap<>(); diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardModificationContext.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardModificationContext.java index ed7d00f62c..0f9471f801 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardModificationContext.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/ForeignShardModificationContext.java @@ -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 { +public final class ForeignShardModificationContext implements Identifiable, Mutable { private static final Logger LOG = LoggerFactory.getLogger(ForeignShardModificationContext.class); private final DOMDataTreeIdentifier identifier; diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/SubshardProducerSpecification.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/SubshardProducerSpecification.java index 80b3cf64d1..5c297eba82 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/SubshardProducerSpecification.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/shard/SubshardProducerSpecification.java @@ -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 prefixes = new ArrayList<>(1); private final ChildShardContext shard; diff --git a/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceGroupImpl.java b/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceGroupImpl.java index e9f9cce81a..1d83e09e9d 100644 --- a/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceGroupImpl.java +++ b/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceGroupImpl.java @@ -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 the GenericEntityOwnershipListener type * @param the GenericEntityOwnershipService type */ -@ThreadSafe final class ClusterSingletonServiceGroupImpl

, E extends GenericEntity

, C extends GenericEntityOwnershipChange, G extends GenericEntityOwnershipListener, S extends GenericEntityOwnershipService> extends ClusterSingletonServiceGroup { diff --git a/trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/CloseTrackedRegistry.java b/trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/CloseTrackedRegistry.java index d501a31afb..00d5129404 100644 --- a/trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/CloseTrackedRegistry.java +++ b/trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/CloseTrackedRegistry.java @@ -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> { private final Object anchor; @@ -52,7 +50,8 @@ class CloseTrackedRegistry> { * 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> { } // package protected, not public; only CloseTrackedTrait invokes this - void add(CloseTracked closeTracked) { + void add(final CloseTracked closeTracked) { tracked.add(closeTracked); } // package protected, not public; only CloseTrackedTrait invokes this - void remove(CloseTracked closeTracked) { + void remove(final CloseTracked closeTracked) { tracked.remove(closeTracked); } -- 2.36.6