From: Robert Varga Date: Sat, 16 Mar 2019 00:53:42 +0000 (+0100) Subject: Extend Immutable contract X-Git-Tag: v3.0.0~95 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f2c2d685a6acdf303c9d187d8e16f5bd20b1af20;p=yangtools.git Extend Immutable contract 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 --- diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueValidator.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueValidator.java index 68faf94b67..98659230f8 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueValidator.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueValidator.java @@ -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, V extends T> { +public interface CanonicalValueValidator, 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 diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueViolation.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueViolation.java index de6e4800ec..75be2d4f28 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueViolation.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/CanonicalValueViolation.java @@ -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; diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java index 90daf966ce..4edfeb5f7a 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java @@ -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; */ -@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 module} keyword. diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java index 8546231c62..2147d9bda5 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java @@ -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. */ diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java index 7fae683b31..5462606533 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java @@ -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 moduleMap;