Refactor Leaf(List)EffectiveStatementImpl
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / BaseStatementSupport.java
index 012d7cbaf5665557e57ec533bb60e2739c0121ce..ffb357c4e672c422a690cea38f9e2d02872848c9 100644 (file)
@@ -17,6 +17,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
@@ -50,6 +51,22 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
 
     protected abstract @NonNull E createEmptyEffective(@NonNull StmtContext<A, D, E> ctx, @NonNull D declared);
 
+    protected static final <E extends EffectiveStatement<?, ?>> @Nullable E findFirstStatement(
+            final ImmutableList<? extends EffectiveStatement<?, ?>> statements, final Class<E> type) {
+        for (EffectiveStatement<?, ?> stmt : statements) {
+            if (type.isInstance(stmt)) {
+                return type.cast(stmt);
+            }
+        }
+        return null;
+    }
+
+    protected static final <A, E extends EffectiveStatement<A, ?>> A findFirstArgument(
+            final ImmutableList<? extends EffectiveStatement<?, ?>> statements, final Class<E> type, final A defValue) {
+        final @Nullable E stmt = findFirstStatement(statements, type);
+        return stmt != null ? stmt.argument() : defValue;
+    }
+
     static final <A, D extends DeclaredStatement<A>> @NonNull D buildDeclared(final StmtContext<A, D, ?> ctx) {
         /*
          * Share original instance of declared statement between all effective