Improve ContextBuilder error reporting 21/47321/2
authorRobert Varga <rovarga@cisco.com>
Thu, 20 Oct 2016 15:14:21 +0000 (17:14 +0200)
committerRobert Varga <nite@hq.sk>
Fri, 21 Oct 2016 11:22:06 +0000 (11:22 +0000)
Instead of throwing an IllegalArgumentException throw
a proper SourceException, which will explain what statement
does not take an argument, pointing to the offending source.

Change-Id: Iee9a984c557f218195f0654bbb54d9e27a9cb9f6
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 8de9752c52b6e398d9651088bbd51795719133aa)

yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ContextBuilder.java

index 8828881ab07cdad08a9ac9942054b2a7a2c6665c..17695cb40474cf19f0ac0a163b1094b0ac296eea 100644 (file)
@@ -10,49 +10,50 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 
 import com.google.common.base.Preconditions;
 import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 
-abstract class ContextBuilder<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> {
+abstract class ContextBuilder<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
+    implements Builder<StatementContextBase<A, D, E>> {
 
     private final StatementDefinitionContext<A, D, E> definition;
     private final StatementSourceReference stmtRef;
-    private String rawArg;
+
     private StatementSourceReference argRef;
+    private String rawArg;
 
-    public ContextBuilder(StatementDefinitionContext<A, D, E> def, StatementSourceReference sourceRef) {
-        this.definition = def;
-        this.stmtRef = sourceRef;
+    ContextBuilder(final StatementDefinitionContext<A, D, E> def, final StatementSourceReference sourceRef) {
+        this.definition = Preconditions.checkNotNull(def);
+        this.stmtRef = Preconditions.checkNotNull(sourceRef);
     }
 
-    public void setArgument(@Nonnull String argument, @Nonnull StatementSourceReference argumentSource) {
-        Preconditions.checkArgument(definition.hasArgument(), "Statement does not take argument.");
+    void setArgument(@Nonnull final String argument, @Nonnull final StatementSourceReference argumentSource) {
+        SourceException.throwIf(!definition.hasArgument(), argumentSource, "Statement %s does not take argument",
+            definition.getStatementName());
         this.rawArg = Preconditions.checkNotNull(argument);
         this.argRef = Preconditions.checkNotNull(argumentSource);
     }
 
-    public String getRawArgument() {
+    String getRawArgument() {
         return rawArg;
     }
 
-    public StatementSourceReference getStamementSource() {
+    StatementSourceReference getStamementSource() {
         return stmtRef;
     }
 
-    public StatementSourceReference getArgumentSource() {
+    StatementSourceReference getArgumentSource() {
         return argRef;
     }
 
-    public StatementDefinitionContext<A, D, E> getDefinition() {
+    StatementDefinitionContext<A, D, E> getDefinition() {
         return definition;
     }
 
-    public StatementIdentifier createIdentifier() {
+    StatementIdentifier createIdentifier() {
         return new StatementIdentifier(definition.getStatementName(), rawArg);
     }
-
-    public abstract StatementContextBase<A, D, E> build() throws SourceException;
-
 }