Move KeyEffectiveStatement implementations 22/95522/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Mar 2021 11:54:10 +0000 (12:54 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Mar 2021 12:02:48 +0000 (13:02 +0100)
We have 4 different implementations, but there is no reason why
they'd need to reside in yang-parser-rfc7950. Move them to
yang-model-ri.

JIRA: YANGTOOLS-1241
Change-Id: Ibf0ac700bfb525fe4eefe28e6555cbf14a7551aa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java
yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractKeyEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/AbstractKeyEffectiveStatement.java with 65% similarity]
yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyForeignKeyEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/EmptyForeignKeyEffectiveStatement.java with 65% similarity]
yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyLocalKeyEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/EmptyLocalKeyEffectiveStatement.java with 63% similarity]
yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularForeignKeyEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/RegularForeignKeyEffectiveStatement.java with 78% similarity]
yang/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularLocalKeyEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/RegularLocalKeyEffectiveStatement.java with 79% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/KeyStatementSupport.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java with 81% similarity]

index 57d57c96b3c8b988b29b4fedd01d38d8f0e4ae99..70510c3631c68a6a23061b0023d4de4a60467c0a 100644 (file)
@@ -12,9 +12,11 @@ import static com.google.common.base.Preconditions.checkArgument;
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import java.util.Set;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 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.model.api.AnydataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
@@ -84,6 +86,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
@@ -175,12 +179,14 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyEnumEffective
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorAppTagEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorMessageEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFeatureEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyForeignKeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFractionDigitsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIdentityEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIfFeatureEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIncludeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMandatoryEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMaxElementsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMinElementsEffectiveStatement;
@@ -224,12 +230,14 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularEnumEffecti
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorAppTagEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorMessageEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFeatureEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularForeignKeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFractionDigitsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIdentityEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIfFeatureEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIncludeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMandatoryEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMaxElementsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMinElementsEffectiveStatement;
@@ -547,6 +555,16 @@ public final class EffectiveStatements {
         return new DeclaredInputEffectiveStatement(declared, substatements, path, flags);
     }
 
+    public static KeyEffectiveStatement createKey(final KeyStatement declared, final Set<QName> argument,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        if (substatements.isEmpty()) {
+            return argument.equals(declared.argument()) ? new EmptyLocalKeyEffectiveStatement(declared)
+                : new EmptyForeignKeyEffectiveStatement(declared, argument);
+        }
+        return argument.equals(declared.argument()) ? new RegularLocalKeyEffectiveStatement(declared, substatements)
+            : new RegularForeignKeyEffectiveStatement(declared, argument, substatements);
+    }
+
     public static LeafEffectiveStatement copyLeaf(final LeafEffectiveStatement original, final Immutable path,
             final int flags, final @Nullable LeafSchemaNode newOriginal) {
         checkArgument(original instanceof AbstractLeafEffectiveStatement, "Unsupported original %s", original);
@@ -5,9 +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.yang.parser.rfc7950.stmt.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
+import static com.google.common.base.Verify.verify;
+
+import com.google.common.collect.ImmutableSet;
 import java.util.Set;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
@@ -22,12 +26,25 @@ abstract class AbstractKeyEffectiveStatement
 
         Foreign(final KeyStatement declared, final Set<QName> argument) {
             super(declared);
-            this.argument = KeyStatementSupport.maskSet(argument);
+            this.argument = maskSet(argument);
         }
 
         @Override
         public final Set<QName> argument() {
-            return KeyStatementSupport.unmaskSet(argument);
+            return unmaskSet(argument);
+        }
+
+        private static @NonNull Object maskSet(final @NonNull Set<QName> set) {
+            return set.size() == 1 ? set.iterator().next() : set;
+        }
+
+        @SuppressWarnings("unchecked")
+        private static @NonNull Set<QName> unmaskSet(final @NonNull Object masked) {
+            if (masked instanceof Set) {
+                return (Set<QName>) masked;
+            }
+            verify(masked instanceof QName, "Unexpected argument %s", masked);
+            return ImmutableSet.of((QName) masked);
         }
     }
 
@@ -5,14 +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.yang.parser.rfc7950.stmt.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 
-final class EmptyForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
-    EmptyForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument) {
+public final class EmptyForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
+    public EmptyForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument) {
         super(declared, argument);
     }
 }
@@ -5,12 +5,12 @@
  * 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.yang.parser.rfc7950.stmt.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 
-final class EmptyLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
-    EmptyLocalKeyEffectiveStatement(final KeyStatement declared) {
+public final class EmptyLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
+    public EmptyLocalKeyEffectiveStatement(final KeyStatement declared) {
         super(declared);
     }
 }
@@ -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.yang.parser.rfc7950.stmt.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import com.google.common.collect.ImmutableList;
 import java.util.Set;
@@ -14,10 +14,10 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 
-final class RegularForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
+public final class RegularForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
     private final @NonNull Object substatements;
 
-    RegularForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument,
+    public RegularForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, argument);
         this.substatements = maskList(substatements);
@@ -5,17 +5,17 @@
  * 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.yang.parser.rfc7950.stmt.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 
-final class RegularLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
+public final class RegularLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
     private final @NonNull Object substatements;
 
-    RegularLocalKeyEffectiveStatement(final KeyStatement declared,
+    public RegularLocalKeyEffectiveStatement(final KeyStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
         this.substatements = maskList(substatements);
index 2bd7201c3f2dc389c8d215fae6b73135aacf5831..928f61291ccba56dab1c0cd7a9b437a3882c44c8 100644 (file)
@@ -29,7 +29,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureS
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureStatementRFC7950Support;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportedVersionNamespace;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key.KeyStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ConfigListWarningNamespace;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementSupport;
@@ -57,6 +56,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.GroupingStatemen
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.IdentityStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.IncludeStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.InputStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.KeyStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LengthStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.MandatoryStatementSupport;
@@ -5,9 +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.yang.parser.rfc7950.stmt.key;
-
-import static com.google.common.base.Verify.verify;
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
 
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Splitter;
@@ -15,7 +13,6 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import java.util.Set;
-import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
@@ -24,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
+import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.parser.antlr.YangStatementLexer;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
@@ -117,27 +115,6 @@ public final class KeyStatementSupport
     @Override
     protected KeyEffectiveStatement createEffective(final Current<Set<QName>, KeyStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        final Set<QName> arg = stmt.getArgument();
-        final KeyStatement declared = stmt.declared();
-        if (substatements.isEmpty()) {
-            return arg.equals(declared.argument()) ? new EmptyLocalKeyEffectiveStatement(declared)
-                : new EmptyForeignKeyEffectiveStatement(declared, arg);
-        }
-
-        return arg.equals(declared.argument()) ? new RegularLocalKeyEffectiveStatement(declared, substatements)
-                : new RegularForeignKeyEffectiveStatement(declared, arg, substatements);
-    }
-
-    static @NonNull Object maskSet(final @NonNull Set<QName> set) {
-        return set.size() == 1 ? set.iterator().next() : set;
-    }
-
-    @SuppressWarnings("unchecked")
-    static @NonNull Set<QName> unmaskSet(final @NonNull Object masked) {
-        if (masked instanceof Set) {
-            return (Set<QName>) masked;
-        }
-        verify(masked instanceof QName, "Unexpected argument %s", masked);
-        return ImmutableSet.of((QName) masked);
+        return EffectiveStatements.createKey(stmt.declared(), stmt.getArgument(), substatements);
     }
 }