Bug 4412: New yang parser effective statements cleanup
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / MustEffectiveStatementImpl.java
index bbb7437c236f3df0693f975cd3fb6c641c75be25..e76d12296eaf852168ee29056d44c1e6bec25d4f 100644 (file)
@@ -10,46 +10,33 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class MustEffectiveStatementImpl extends
-        EffectiveStatementBase<RevisionAwareXPath, MustStatement> implements
+public class MustEffectiveStatementImpl extends EffectiveStatementBase<RevisionAwareXPath, MustStatement> implements
         MustDefinition {
 
-    private RevisionAwareXPath xPath;
-    private String description;
-    private String errorAppTag;
-    private String errorMessage;
-    private String reference;
+    private final RevisionAwareXPath xPath;
+    private final String description;
+    private final String errorAppTag;
+    private final String errorMessage;
+    private final String reference;
 
-    public MustEffectiveStatementImpl(
-            StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
+    public MustEffectiveStatementImpl(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
         super(ctx);
+        this.xPath = ctx.getStatementArgument();
 
-        initFields();
+        DescriptionEffectiveStatementImpl descriptionStmt = firstEffective(DescriptionEffectiveStatementImpl.class);
+        this.description = (descriptionStmt == null) ? null : descriptionStmt.argument();
 
-        xPath = ctx.getStatementArgument();
-    }
+        ErrorAppTagEffectiveStatementImpl errorAppTagStmt = firstEffective(ErrorAppTagEffectiveStatementImpl.class);
+        this.errorAppTag = (errorAppTagStmt == null) ? null : errorAppTagStmt.argument();
 
-    private void initFields() {
-
-        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-
-            if (effectiveStatement instanceof DescriptionEffectiveStatementImpl) {
-                description = ((DescriptionEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ErrorAppTagEffectiveStatementImpl) {
-                errorAppTag = ((ErrorAppTagEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ErrorMessageEffectiveStatementImpl) {
-                errorMessage = ((ErrorMessageEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ReferenceEffectiveStatementImpl) {
-                reference = ((ReferenceEffectiveStatementImpl) effectiveStatement).argument();
-            }
-        }
+        ErrorMessageEffectiveStatementImpl errorMessageStmt = firstEffective(ErrorMessageEffectiveStatementImpl.class);
+        this.errorMessage = (errorMessageStmt == null) ? null : errorMessageStmt.argument();
+
+        ReferenceEffectiveStatementImpl referenceStmt = firstEffective(ReferenceEffectiveStatementImpl.class);
+        this.reference = (referenceStmt == null) ? null : referenceStmt.argument();
     }
 
     @Override
@@ -99,25 +86,13 @@ public class MustEffectiveStatementImpl extends
             return false;
         }
         final MustEffectiveStatementImpl other = (MustEffectiveStatementImpl) obj;
-        if (xPath == null) {
-            if (other.xPath != null) {
-                return false;
-            }
-        } else if (!xPath.equals(other.xPath)) {
+        if (!Objects.equals(xPath, other.xPath)) {
             return false;
         }
-        if (description == null) {
-            if (other.description != null) {
-                return false;
-            }
-        } else if (!description.equals(other.description)) {
+        if (!Objects.equals(description, other.description)) {
             return false;
         }
-        if (reference == null) {
-            if (other.reference != null) {
-                return false;
-            }
-        } else if (!reference.equals(other.reference)) {
+        if (!Objects.equals(reference, other.reference)) {
             return false;
         }
         return true;