*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key;
-import static com.google.common.base.Verify.verify;
-
-import com.google.common.collect.ImmutableSet;
import java.util.Collection;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
Foreign(final KeyStatement declared, final Collection<SchemaNodeIdentifier> argument) {
super(declared);
- this.argument = argument.size() == 1 ? argument.iterator().next() : argument;
+ this.argument = KeyStatementSupport.maskCollection(argument);
}
@Override
- @SuppressWarnings("unchecked")
public final Collection<SchemaNodeIdentifier> argument() {
- if (argument instanceof Collection) {
- return (Collection<SchemaNodeIdentifier>) argument;
- }
- verify(argument instanceof SchemaNodeIdentifier, "Unexpected argument %s", argument);
- return ImmutableSet.of((SchemaNodeIdentifier) argument);
+ return KeyStatementSupport.unmaskCollection(argument);
}
}
--- /dev/null
+/*
+ * Copyright (c) 2020 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
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key;
+
+import java.util.Collection;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithRawArgument;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+abstract class AbstractKeyStatement extends WithRawArgument<Collection<SchemaNodeIdentifier>> implements KeyStatement {
+ final @NonNull Object argument;
+
+ AbstractKeyStatement(final StmtContext<Collection<SchemaNodeIdentifier>, ?, ?> context) {
+ super(context);
+ this.argument = KeyStatementSupport.maskCollection(context.coerceStatementArgument());
+ }
+
+ @Override
+ public final @NonNull Collection<SchemaNodeIdentifier> argument() {
+ return KeyStatementSupport.unmaskCollection(argument);
+ }
+}
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key;
import java.util.Collection;
-import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-final class EmptyKeyStatement extends WithArgument<Collection<SchemaNodeIdentifier>> implements KeyStatement {
+final class EmptyKeyStatement extends AbstractKeyStatement {
EmptyKeyStatement(final StmtContext<Collection<SchemaNodeIdentifier>, ?, ?> context) {
super(context);
}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key;
+import static com.google.common.base.Verify.verify;
+import static com.google.common.base.Verify.verifyNotNull;
+
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;
import java.util.Collection;
+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;
return arg.equals(declared.argument()) ? new EmptyLocalKeyEffectiveStatement(declared)
: new EmptyForeignKeyEffectiveStatement(declared, arg);
}
+
+ static @NonNull Object maskCollection(final @NonNull Collection<SchemaNodeIdentifier> coll) {
+ return coll.size() == 1 ? verifyNotNull(coll.iterator().next()) : coll;
+ }
+
+ @SuppressWarnings("unchecked")
+ static @NonNull Collection<SchemaNodeIdentifier> unmaskCollection(final @NonNull Object masked) {
+ if (masked instanceof Collection) {
+ return (Collection<SchemaNodeIdentifier>) masked;
+ }
+ verify(masked instanceof SchemaNodeIdentifier, "Unexpected argument %s", masked);
+ return ImmutableSet.of((SchemaNodeIdentifier) masked);
+ }
}
import java.util.Collection;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-final class RegularKeyStatement extends WithArgument<Collection<SchemaNodeIdentifier>> implements KeyStatement {
+final class RegularKeyStatement extends AbstractKeyStatement {
private final @NonNull Object substatements;
RegularKeyStatement(final StmtContext<Collection<SchemaNodeIdentifier>, ?, ?> context,