Teach YANG parser to retain DeclarationReference
[yangtools.git] / yang / yang-parser-api / src / main / java / org / opendaylight / yangtools / yang / model / parser / api / YangParserConfiguration.java
index 7040ab16fd6d414113033b020089308e5a140beb..a602a821fe72d68ec8b030bb4cfeeba0d2d3ec65 100644 (file)
@@ -10,7 +10,10 @@ package org.opendaylight.yangtools.yang.model.parser.api;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode;
 
@@ -20,24 +23,59 @@ import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode;
 @Beta
 @NonNullByDefault
 public final class YangParserConfiguration implements Immutable {
-    public static final YangParserConfiguration DEFAULT = new YangParserConfiguration(StatementParserMode.DEFAULT_MODE);
+    /**
+     * System-wide default configuration.
+     */
+    public static final YangParserConfiguration DEFAULT = builder().build();
 
     private final StatementParserMode parserMode;
+    private final boolean retainDeclarationReferences;
 
-    private YangParserConfiguration(final StatementParserMode parserMode) {
+    private YangParserConfiguration(final StatementParserMode parserMode, final boolean retainDeclarationReferences) {
         this.parserMode = requireNonNull(parserMode);
+        this.retainDeclarationReferences = retainDeclarationReferences;
     }
 
     public StatementParserMode parserMode() {
         return parserMode;
     }
 
+    public boolean retainDeclarationReferences() {
+        return retainDeclarationReferences;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(parserMode, retainDeclarationReferences);
+    }
+
+    @Override
+    public boolean equals(final @Nullable Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof YangParserConfiguration)) {
+            return false;
+        }
+        final YangParserConfiguration other = (YangParserConfiguration) obj;
+        return parserMode == other.parserMode && retainDeclarationReferences == other.retainDeclarationReferences;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("parserMode", parserMode)
+            .add("retainDeclarationReferences", retainDeclarationReferences)
+            .toString();
+    }
+
     public static Builder builder() {
         return new Builder();
     }
 
     public static final class Builder implements org.opendaylight.yangtools.concepts.Builder<YangParserConfiguration> {
         private StatementParserMode parserMode = StatementParserMode.DEFAULT_MODE;
+        private boolean retainDeclarationReferences = false;
 
         private Builder() {
             // Hidden on purpose
@@ -45,11 +83,16 @@ public final class YangParserConfiguration implements Immutable {
 
         @Override
         public YangParserConfiguration build() {
-            return new YangParserConfiguration(parserMode);
+            return new YangParserConfiguration(parserMode, retainDeclarationReferences);
+        }
+
+        public Builder parserMode(final StatementParserMode newParserMode) {
+            this.parserMode = requireNonNull(newParserMode);
+            return this;
         }
 
-        public Builder setParserMode(final StatementParserMode parserMode) {
-            this.parserMode = requireNonNull(parserMode);
+        public Builder retainDeclarationReferences(final boolean newRetainDeclarationReferences) {
+            this.retainDeclarationReferences = newRetainDeclarationReferences;
             return this;
         }
     }