Extend Immutable contract 23/80923/6
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 16 Mar 2019 00:53:42 +0000 (01:53 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 16 Mar 2019 08:32:50 +0000 (09:32 +0100)
Rather than using Immutable annotation, extend interface to implement
Immutable interface, which has equal connotations, but can be run-time
checked and implies thread-safety.

Change-Id: Ifc1cdbff50ba328eee7b2afbf85cee5bbe2623bd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueValidator.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueViolation.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java

index 68faf94b670a20bf1f87be813b01fa5ac003dceb..98659230f86f565584c4dc1090fd86293c5e2e4f 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.common;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.concepts.Variant;
 
 /**
@@ -25,7 +26,7 @@ import org.opendaylight.yangtools.concepts.Variant;
  */
 @Beta
 @NonNullByDefault
-public interface CanonicalValueValidator<T extends CanonicalValue<T>, V extends T> {
+public interface CanonicalValueValidator<T extends CanonicalValue<T>, V extends T> extends Immutable {
     /**
      * Returns the instantiated representation class. The representation class is a {@link CanonicalValue} which
      * understands the semantics of modeled data and has some internal representation of it. All {@link CanonicalValue}s
index de6e4800ec274c75967b8775a187b21d1508075e..75be2d4f28abd6aed2d5e4a85bf889ea0e26cf2d 100644 (file)
@@ -16,9 +16,9 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Objects;
 import java.util.Optional;
-import javax.annotation.concurrent.ThreadSafe;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.concepts.Variant;
 
 /**
@@ -28,8 +28,7 @@ import org.opendaylight.yangtools.concepts.Variant;
  */
 @Beta
 @NonNullByDefault
-@ThreadSafe
-public abstract class CanonicalValueViolation implements Serializable {
+public abstract class CanonicalValueViolation implements Immutable, Serializable {
     public static class Regular extends CanonicalValueViolation {
         private static final long serialVersionUID = 1L;
 
index 90daf966ce7c5e6be70be77520285a94c761a842..4edfeb5f7a636b6282ee5b42ccb5b0969abd990a 100644 (file)
@@ -11,7 +11,7 @@ import java.net.URI;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import javax.annotation.concurrent.Immutable;
+import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
@@ -63,8 +63,8 @@ import org.opendaylight.yangtools.yang.common.YangVersion;
 
     </code>
  */
-@Immutable
-public interface Module extends DataNodeContainer, DocumentedNode, NotificationNodeContainer, NamespaceRevisionAware {
+public interface Module extends DataNodeContainer, DocumentedNode, Immutable, NotificationNodeContainer,
+        NamespaceRevisionAware {
     /**
      * Returns the name of the module which is specified as argument of YANG
      * {@link Module <b><font color="#FF0000">module</font></b>} keyword.
index 8546231c6250d278afe40de8eb348dd9450f29b7..2147d9bda5b8b9eae1570e0cc9b7078f7fc7038a 100644 (file)
@@ -14,9 +14,9 @@ import java.net.URI;
 import java.util.Collection;
 import java.util.Optional;
 import java.util.Set;
-import javax.annotation.concurrent.Immutable;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
@@ -29,10 +29,9 @@ import org.opendaylight.yangtools.yang.common.Revision;
  * Instances MUST be immutable and thus usage in multi threaded
  * environment is safe.
  */
-@Immutable
 // FIXME: 3.0.0: ContainerSchemaNode is far too broad. A combination of DataNodeContainer, NotificationNodeContainer
 //               and possibly DataSchemaNode would reflect SchemaContext traits better.
-public interface SchemaContext extends ContainerSchemaNode {
+public interface SchemaContext extends ContainerSchemaNode, Immutable {
     /**
      * QName of NETCONF top-level data node.
      */
index 7fae683b310fb7473c3f360bbf1f72befe8bdb4c..5462606533dea7751b2944169e9a85b3f59a8804 100644 (file)
@@ -33,14 +33,12 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.function.Function;
-import javax.annotation.concurrent.Immutable;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
-@Immutable
 public final class FilteringSchemaContextProxy extends AbstractSchemaContext {
     private final ImmutableMap<QNameModule, Module> moduleMap;