Introduce yangtools.binding.lib 87/112287/4
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Jun 2024 15:24:19 +0000 (17:24 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Jun 2024 21:01:00 +0000 (23:01 +0200)
We have a number of classes which are used by generated code as baseline
library classes.

Introduce a new yangtools.binding.lib package to hold these, so we have
a clean separation of the user-facing contracts and their
implementations.

JIRA: YANGTOOLS-1576
Change-Id: I5a8789ccee43e86ddbe66eaa702daedde23f3522
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
22 files changed:
binding/binding-codegen/src/main/java/org/opendaylight/yangtools/binding/codegen/AbstractPrimitiveRangeGenerator.java
binding/binding-codegen/src/main/java/org/opendaylight/yangtools/binding/codegen/BuilderImplTemplate.xtend
binding/binding-codegen/src/main/java/org/opendaylight/yangtools/binding/codegen/Decimal64RangeGenerator.java
binding/binding-codegen/src/main/java/org/opendaylight/yangtools/binding/codegen/JavaFileTemplate.java
binding/binding-codegen/src/main/java/org/opendaylight/yangtools/binding/codegen/YangModuleInfoTemplate.xtend
binding/binding-data-codec-dynamic/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/CodecOpaqueObject.java
binding/binding-data-codec-dynamic/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/ForeignOpaqueData.java
binding/binding-data-codec-dynamic/src/test/java/org/opendaylight/yangtools/binding/data/codec/impl/AnydataLeafTest.java
binding/binding-data-codec-dynamic/src/test/java/org/opendaylight/yangtools/binding/data/codec/impl/AnyxmlLeafTest.java
binding/binding-generator/src/main/java/org/opendaylight/yangtools/binding/generator/impl/reactor/AbstractTypeObjectGenerator.java
binding/binding-spec/src/main/java/module-info.java
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/OpaqueData.java
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/OpaqueObject.java
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/contract/RegexPatterns.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/RegexPatterns.java with 97% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/AbstractAugmentable.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/AbstractAugmentable.java with 92% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/AbstractOpaqueData.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/AbstractOpaqueData.java with 95% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/AbstractOpaqueObject.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/AbstractOpaqueObject.java with 91% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/CodeHelpers.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/CodeHelpers.java with 98% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/DoNotLeakSpotbugs.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/DoNotLeakSpotbugs.java with 96% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/ResourceYangModuleInfo.java [moved from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/ResourceYangModuleInfo.java with 97% similarity]
binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/package-info.java [new file with mode: 0644]
binding/binding-spec/src/test/java/org/opendaylight/yangtools/binding/lib/CodeHelpersTest.java [moved from binding/binding-spec/src/test/java/org/opendaylight/yangtools/binding/CodeHelpersTest.java with 97% similarity]

index 42ade338023528640de8701f99617ecf6d5e7c74..63300fa0267b47530b5e37c0fc4900b07d6e4b01 100644 (file)
@@ -16,7 +16,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.binding.CodeHelpers;
+import org.opendaylight.yangtools.binding.lib.CodeHelpers;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
index 4bfa170241d34e9dea3f0d56915fdb7ab9a6719d..a0d25a185a82594b7989cc4fd4810b772a3f4fd4 100644 (file)
@@ -20,6 +20,7 @@ import static org.opendaylight.yangtools.binding.contract.Naming.NONNULL_PREFIX
 import java.util.Collection
 import java.util.List
 import java.util.Optional
+import org.opendaylight.yangtools.binding.lib.AbstractAugmentable
 import org.opendaylight.yangtools.binding.model.api.AnnotationType
 import org.opendaylight.yangtools.binding.model.api.GeneratedProperty
 import org.opendaylight.yangtools.binding.model.api.GeneratedType
@@ -27,7 +28,6 @@ import org.opendaylight.yangtools.binding.model.api.MethodSignature
 import org.opendaylight.yangtools.binding.model.api.MethodSignature.ValueMechanics
 import org.opendaylight.yangtools.binding.model.api.Type
 import org.opendaylight.yangtools.binding.model.ri.Types
-import org.opendaylight.yangtools.binding.AbstractAugmentable
 
 class BuilderImplTemplate extends AbstractBuilderTemplate {
     val BuilderTemplate builder;
@@ -226,4 +226,4 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
     override protected generateCopyAugmentation(Type implType) '''
         super(base.«AUGMENTATION_FIELD»);
     '''
-}
\ No newline at end of file
+}
index a5fe82c3b4fb4f144124ec75892db3e761950f22..1330fd0bf04b83b67763ae9671b42ff205fb1de4 100644 (file)
@@ -12,7 +12,7 @@ import java.lang.reflect.Array;
 import java.util.Locale;
 import java.util.Set;
 import java.util.function.Function;
-import org.opendaylight.yangtools.binding.CodeHelpers;
+import org.opendaylight.yangtools.binding.lib.CodeHelpers;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint8;
index e4a443e265d7063768d941321ddeed69e93782f3..7bfd599eda268eefb3e57f9f9cb579fa25d71477 100644 (file)
@@ -38,8 +38,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.xtext.xbase.lib.StringExtensions;
 import org.opendaylight.yangtools.binding.Augmentable;
-import org.opendaylight.yangtools.binding.CodeHelpers;
 import org.opendaylight.yangtools.binding.contract.Naming;
+import org.opendaylight.yangtools.binding.lib.CodeHelpers;
 import org.opendaylight.yangtools.binding.model.api.AnnotationType;
 import org.opendaylight.yangtools.binding.model.api.ConcreteType;
 import org.opendaylight.yangtools.binding.model.api.GeneratedProperty;
index e708adbb2f385e070b5382e6d8b4c53fb6b39741..0cde2abb2137ad1d84002e21a19ff46235be5685 100644 (file)
@@ -47,7 +47,7 @@ final class YangModuleInfoTemplate {
         import java.lang.Override;
         import java.lang.String;
         import org.eclipse.jdt.annotation.NonNull;
-        import org.opendaylight.yangtools.binding.ResourceYangModuleInfo;
+        import org.opendaylight.yangtools.binding.lib.ResourceYangModuleInfo;
         import org.opendaylight.yangtools.binding.meta.YangModuleInfo;
         import org.opendaylight.yangtools.yang.common.QName;
     '''
@@ -58,7 +58,7 @@ final class YangModuleInfoTemplate {
         import java.util.HashSet;
         import java.util.Set;
         import org.eclipse.jdt.annotation.NonNull;
-        import org.opendaylight.yangtools.binding.ResourceYangModuleInfo;
+        import org.opendaylight.yangtools.binding.lib.ResourceYangModuleInfo;
         import org.opendaylight.yangtools.binding.meta.YangModuleInfo;
         import org.opendaylight.yangtools.yang.common.QName;
     '''
index fbcebdde04fa00929fefe61c4291dbe704f294d9..124934302fd16d18cbe3d7c31c77cfe01c042338 100644 (file)
@@ -11,9 +11,9 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.binding.AbstractOpaqueObject;
 import org.opendaylight.yangtools.binding.OpaqueData;
 import org.opendaylight.yangtools.binding.OpaqueObject;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueObject;
 
 /**
  * A base class for {@link OpaqueObject}s backed by {@link ForeignOpaqueData}. While this class is public, it not part
index e65affdfa2b6febc4c83328a8042fba723cd9443..24ee48019e0dbe160c5138e06a03786c205ab331 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.yangtools.binding.data.codec.impl;
 
 import static java.util.Objects.requireNonNull;
 
-import org.opendaylight.yangtools.binding.AbstractOpaqueData;
 import org.opendaylight.yangtools.binding.OpaqueData;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueData;
 import org.opendaylight.yangtools.yang.data.api.schema.ForeignDataNode;
 
 /**
index 545dcdd05fd57335c7b36ecba50b62175c184ca9..7d87ce0eb494549a3f7e8c3c5072deb3ae4b90b2 100644 (file)
@@ -21,10 +21,10 @@ import org.junit.Test;
 import org.opendaylight.yang.gen.v1.mdsal438.norev.Cont;
 import org.opendaylight.yang.gen.v1.mdsal438.norev.ContBuilder;
 import org.opendaylight.yang.gen.v1.mdsal438.norev.cont.ContAny;
-import org.opendaylight.yangtools.binding.AbstractOpaqueData;
-import org.opendaylight.yangtools.binding.AbstractOpaqueObject;
 import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.binding.OpaqueData;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueData;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueObject;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
index 4cd90c2a596983d2a2eab0e029ee3e99e2d22a21..82de995f4b415abbab5b19ea3bb43ef74d58b805 100644 (file)
@@ -21,10 +21,10 @@ import org.junit.Test;
 import org.opendaylight.yang.gen.v1.mdsal437.norev.Cont;
 import org.opendaylight.yang.gen.v1.mdsal437.norev.ContBuilder;
 import org.opendaylight.yang.gen.v1.mdsal437.norev.cont.ContAny;
-import org.opendaylight.yangtools.binding.AbstractOpaqueData;
-import org.opendaylight.yangtools.binding.AbstractOpaqueObject;
 import org.opendaylight.yangtools.binding.DataObject;
 import org.opendaylight.yangtools.binding.OpaqueData;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueData;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueObject;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
index 4d32bc8e4b7d193d74da9e1bf014bd5b05ed1967..8f61c554a19bdb8add224ccb9cbd13f9ff9fa368 100644 (file)
@@ -22,9 +22,9 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.binding.RegexPatterns;
 import org.opendaylight.yangtools.binding.TypeObject;
 import org.opendaylight.yangtools.binding.contract.Naming;
+import org.opendaylight.yangtools.binding.contract.RegexPatterns;
 import org.opendaylight.yangtools.binding.generator.BindingGeneratorUtil;
 import org.opendaylight.yangtools.binding.generator.impl.reactor.TypeReference.ResolvedLeafref;
 import org.opendaylight.yangtools.binding.model.api.ConcreteType;
index cd73af940d641aa74126f55994f8f037b178fc7a..048dbd5f8bbb56671f4d1b72623fbcca797d50f7 100644 (file)
@@ -9,6 +9,7 @@ module org.opendaylight.yangtools.binding.spec {
     exports org.opendaylight.yangtools.binding;
     exports org.opendaylight.yangtools.binding.annotations;
     exports org.opendaylight.yangtools.binding.contract;
+    exports org.opendaylight.yangtools.binding.lib;
     exports org.opendaylight.yangtools.binding.meta;
     exports org.opendaylight.yangtools.binding.util;
     // FIXME: inhume this package
index 6fced645f132ce1e25d2ccffcfd60a9d30484dce..b6dbd60089ee3c31defebed00636c4d6acfe095b 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.binding;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueData;
 import org.opendaylight.yangtools.concepts.Immutable;
 
 /**
index 8735d4bc512ed6480e9f864b59724ad38f5f7c06..5aefcb5ed4315b772a49e7cb461801ef1a4a5ae0 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.binding;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.binding.lib.AbstractOpaqueObject;
 
 /**
  * An opaque object. This interface supports code generation for both {@code anyxml} and {@code anydata}. Both of these
similarity index 97%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/RegexPatterns.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/contract/RegexPatterns.java
index 9f4b22ee17b0098cd3a0e112608210a0b3d9a74a..abafbecde28a69115d3fd8cdcf59e7d8d6cd7d36 100644 (file)
@@ -5,20 +5,18 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.contract;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import com.google.common.annotations.Beta;
 import java.util.regex.Pattern;
 
-@Beta
 public final class RegexPatterns {
     private static final String NEGATED_PATTERN_PREFIX = "^(?!";
     private static final String NEGATED_PATTERN_SUFFIX = ").*$";
 
     private RegexPatterns() {
-
+        // Hidden on purpose
     }
 
     /**
similarity index 92%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/AbstractAugmentable.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/AbstractAugmentable.java
index 4a784927804afb1352b5ca71aeaeec742b2a9e65..a29f521bcb2763ce324a2c1f213dc87b8091b385 100644 (file)
@@ -5,7 +5,7 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import static java.util.Objects.requireNonNull;
 
@@ -13,6 +13,8 @@ import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableMap;
 import java.util.Map;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.binding.Augmentable;
+import org.opendaylight.yangtools.binding.Augmentation;
 
 /**
  * Abstract base class for implementing immutable {@link Augmentable} classes. This class is provided as a convenience.
similarity index 95%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/AbstractOpaqueData.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/AbstractOpaqueData.java
index e7371bfbe8ce3b99e5dae64a7b4e05d5a09e1551..1c78255bb480734cb60c172f3b47306f58eebf6b 100644 (file)
@@ -5,12 +5,13 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.binding.OpaqueData;
 
 /**
  * Utility class for {@link OpaqueData} implementations. This class provides baseline implementation of
similarity index 91%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/AbstractOpaqueObject.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/AbstractOpaqueObject.java
index 0411105532a9211f6aa38e762b94180debcb8cb0..e3b8b5e45aa1703e70d65b0f7fe4f0d4a0163725 100644 (file)
@@ -5,12 +5,14 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.binding.OpaqueData;
+import org.opendaylight.yangtools.binding.OpaqueObject;
 
 /**
  * Utility base class for {@link OpaqueObject} implementations. This class provides baseline implementation of
similarity index 98%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/CodeHelpers.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/CodeHelpers.java
index acbf6bc28a42ec8e732010938363f17aab74cd86..6acbeb3fd7eeed12af556c414f94a4e0f9de9791 100644 (file)
@@ -5,7 +5,7 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Verify.verify;
@@ -25,6 +25,10 @@ import java.util.Set;
 import java.util.regex.Pattern;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.binding.Augmentable;
+import org.opendaylight.yangtools.binding.BindingContract;
+import org.opendaylight.yangtools.binding.EnumTypeObject;
+import org.opendaylight.yangtools.binding.contract.RegexPatterns;
 
 /**
  * Helper methods for generated binding code. This class concentrates useful primitives generated code may call
similarity index 96%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/DoNotLeakSpotbugs.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/DoNotLeakSpotbugs.java
index a01a9b30b7bdf362a46b2fa2b403783cf23ed93c..5004b3b27f1071dc4f5c9adb3fcba52372362966 100644 (file)
@@ -5,7 +5,7 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import static java.util.Objects.requireNonNull;
 
similarity index 97%
rename from binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/ResourceYangModuleInfo.java
rename to binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/ResourceYangModuleInfo.java
index 87f80968b2f8d32c0a8a64cf7882b617dcf8e04d..fa3629997cfb08c77ae51fe94e7d4d87f7c55903 100644 (file)
@@ -5,7 +5,7 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import static com.google.common.base.Verify.verifyNotNull;
 
diff --git a/binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/package-info.java b/binding/binding-spec/src/main/java/org/opendaylight/yangtools/binding/lib/package-info.java
new file mode 100644 (file)
index 0000000..0772279
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+/**
+ * Library of utilities for use by generated code. The contents of this package as well as their semantics are an
+ * implementation detail of the Binding Specification.
+ */
+@org.osgi.annotation.bundle.Export
+package org.opendaylight.yangtools.binding.lib;
\ No newline at end of file
similarity index 97%
rename from binding/binding-spec/src/test/java/org/opendaylight/yangtools/binding/CodeHelpersTest.java
rename to binding/binding-spec/src/test/java/org/opendaylight/yangtools/binding/lib/CodeHelpersTest.java
index f561a5a9eb90c1acd1e3dedd2dc58e2a80631afd..5145a63c92f6c2efcae9ae650d92739216aaa4e3 100644 (file)
@@ -5,7 +5,7 @@
  * 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.yangtools.binding;
+package org.opendaylight.yangtools.binding.lib;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -19,6 +19,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import org.junit.Test;
+import org.opendaylight.yangtools.binding.EnumTypeObject;
 
 public class CodeHelpersTest {
     @Test