BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / util / AbstractBuilder.java
index 35b869be6bf9f9f13827a8db6b8e067f1a798a97..ba38ddaa02b48431b40e5b688bbf74a3965e7bae 100644 (file)
@@ -7,26 +7,27 @@
  */
 package org.opendaylight.yangtools.yang.parser.builder.util;
 
+import com.google.common.base.Preconditions;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.parser.builder.api.Builder;
 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
 
-import com.google.common.base.Preconditions;
-
 /**
  * Base helper implementation of Builders for Yang Model elements.
  *
+ * @deprecated Pre-Beryllium implementation, scheduled for removal.
  */
+@Deprecated
 public abstract class AbstractBuilder implements Builder {
-    private String moduleName;
+    private final String moduleName;
     private final int line;
     private Builder parentBuilder;
 
     protected final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
-    protected final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
+    protected final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<>();
+    private boolean sealed;
 
     protected AbstractBuilder(final String moduleName, final int line) {
         this.moduleName = Preconditions.checkNotNull(moduleName,"moduleName must not be null");
@@ -38,12 +39,6 @@ public abstract class AbstractBuilder implements Builder {
         return moduleName;
     }
 
-    @Override
-    @Deprecated
-    public void setModuleName(final String moduleName) {
-        this.moduleName = moduleName;
-    }
-
     @Override
     public int getLine() {
         return line;
@@ -56,6 +51,7 @@ public abstract class AbstractBuilder implements Builder {
 
     @Override
     public void setParent(final Builder parentBuilder) {
+        checkNotSealed();
         this.parentBuilder = parentBuilder;
     }
 
@@ -69,4 +65,17 @@ public abstract class AbstractBuilder implements Builder {
         addedUnknownNodes.add(unknownNode);
     }
 
+    void seal() {
+        checkNotSealed();
+        sealed  = true;
+    }
+
+    protected final void checkNotSealed() {
+        Preconditions.checkState(!sealed, "Builder is sealed. No further modifications allowed");
+    }
+
+    boolean isSealed() {
+        return sealed;
+    }
+
 }