Make getOriginalCtx() give out an Optional 64/58564/5
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 9 Jun 2017 00:11:29 +0000 (02:11 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 9 Jun 2017 10:38:58 +0000 (12:38 +0200)
This simplifies its users and make things more streamlined, by
eliminating a source of nulls. While we are at it, migrate some
optionals.

Change-Id: I9f5c051db33b1898ca5decd523055adbd1309855
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
16 files changed:
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyXmlEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeclaredEffectiveStatementBase.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/AnyDataEffectiveStatementImpl.java

index a54ae2744a74c7a4ecaef51bca0e75d16a43788f..8b79e61e01f05e4768470c568caeeb5c0ff05ca2 100644 (file)
@@ -7,9 +7,9 @@
  */
 package org.opendaylight.yangtools.yang.parser.spi.meta;
 
-import com.google.common.base.Optional;
 import java.util.Collection;
 import java.util.Map;
+import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QNameModule;
@@ -54,7 +54,7 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
 
     /**
      * Return the {@link SchemaPath} of this statement. Not all statements have a SchemaPath, in which case
-     * {@link Optional#absent()} is returned.
+     * {@link Optional#empty()} is returned.
      *
      * @return Optional SchemaPath
      */
@@ -135,7 +135,7 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
 
     boolean isSupportedByFeatures();
 
-    StmtContext<?, ?, ?> getOriginalCtx();
+    Optional<StmtContext<?, ?, ?>> getOriginalCtx();
 
     int getOrder();
 
index 300c7e7f6f7bd7a63bc74778a84ed0c9837ef18f..bf42a44511d6a5bf13ffedd6b8c35c98a220352b 100644 (file)
@@ -515,7 +515,7 @@ public final class StmtContextUtils {
             }
             if (qNameModule == null
                     && ctx.getCopyHistory().getLastOperation() == CopyType.ADDED_BY_AUGMENTATION) {
-                ctx = ctx.getOriginalCtx();
+                ctx = ctx.getOriginalCtx().orElse(null);
                 qNameModule = StmtContextUtils.getModuleQNameByPrefix(ctx, prefix);
             }
             break;
index 1246b9a8357f4838d8f5dae34465c64fbb1fcd9e..16d82e7fc5ceca617983218c3674a55f340da588 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Verify;
 import com.google.common.collect.ImmutableList;
@@ -16,6 +15,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QNameModule;
index d394e2715ed7d34146430c3235d33781c07efd5e..6c148f50a679c499b0e242c40de81479a3a5eb49 100644 (file)
@@ -115,12 +115,7 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
                 original.getStatementSourceReference());
         this.rawArgument = original.rawArgument;
         this.copyHistory = CopyHistory.of(copyType, original.getCopyHistory());
-
-        if (original.getOriginalCtx() != null) {
-            this.originalCtx = original.getOriginalCtx();
-        } else {
-            this.originalCtx = original;
-        }
+        this.originalCtx = original.getOriginalCtx().orElse(original);
     }
 
     @Override
@@ -177,8 +172,8 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
     }
 
     @Override
-    public StmtContext<?, ?, ?> getOriginalCtx() {
-        return originalCtx;
+    public Optional<StmtContext<?, ?, ?>> getOriginalCtx() {
+        return Optional.ofNullable(originalCtx);
     }
 
     @Override
@@ -384,9 +379,8 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
 
         final Optional<StatementContextBase<?, ?, ?>> implicitStatement = definition.beforeSubStatementCreated(this,
             offset, def, ref, argument);
-        if(implicitStatement.isPresent()) {
-            final StatementContextBase<?, ?, ?> presentImplicitStmt = implicitStatement.get();
-            return presentImplicitStmt.createSubstatement(offset, def, ref, argument);
+        if (implicitStatement.isPresent()) {
+            return implicitStatement.get().createSubstatement(offset, def, ref, argument);
         }
 
         final StatementContextBase<CA, CD, CE> ret = new SubstatementContext<>(this, def, ref, argument);
index 08c53f156e9b49dce99089fa6d0170fd823819a9..9b35dcaca2f8913e22addc3a51f97a996e7a2afc 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Verify;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Set;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -230,7 +230,7 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
         if (argument instanceof QName) {
             final QName qname = (QName) argument;
             if (StmtContextUtils.producesDeclared(this, UsesStatement.class)) {
-                return maybeParentPath.orNull();
+                return maybeParentPath.orElse(null);
             }
 
             final SchemaPath path;
@@ -245,21 +245,20 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
         }
         if (argument instanceof String) {
             // FIXME: This may yield illegal argument exceptions
-            final StmtContext<?, ?, ?> originalCtx = getOriginalCtx();
-            final QName qname = originalCtx != null ? StmtContextUtils.qnameFromArgument(originalCtx, (String) argument)
-                    : StmtContextUtils.qnameFromArgument(this, (String) argument);
+            final Optional<StmtContext<?, ?, ?>> originalCtx = getOriginalCtx();
+            final QName qname = StmtContextUtils.qnameFromArgument(originalCtx.orElse(this), (String) argument);
             return parentPath.createChild(qname);
         }
         if (argument instanceof SchemaNodeIdentifier
-                && (StmtContextUtils.producesDeclared(this, AugmentStatement.class) || StmtContextUtils
-                        .producesDeclared(this, RefineStatement.class) || StmtContextUtils
-                .producesDeclared(this, DeviationStatement.class))) {
+                && (StmtContextUtils.producesDeclared(this, AugmentStatement.class)
+                        || StmtContextUtils.producesDeclared(this, RefineStatement.class)
+                        || StmtContextUtils.producesDeclared(this, DeviationStatement.class))) {
 
             return parentPath.createChild(((SchemaNodeIdentifier) argument).getPathFromRoot());
         }
 
         // FIXME: this does not look right
-        return maybeParentPath.orNull();
+        return maybeParentPath.orElse(null);
     }
 
     @Nonnull
@@ -277,7 +276,7 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
 
         }
 
-        return Optional.fromNullable(local);
+        return Optional.ofNullable(local);
     }
 
     @Override
index a8da00c16a42f5ba8eccea79d91b4270beda7389..999a6cbb7412cacdd7cd14c2ba66cb3129eb0f24 100644 (file)
@@ -24,7 +24,7 @@ public class AnyXmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNod
     public AnyXmlEffectiveStatementImpl(
             final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (AnyXmlSchemaNode) ctx.getOriginalCtx().buildEffective();
+        this.original = (AnyXmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
     }
 
     @Override
index f97300282e2c07e0303b4940fdb628b406a061dc..18c64e9e16756b751499bafbcbea5a531ba2a939 100644 (file)
@@ -58,7 +58,7 @@ public final class AugmentEffectiveStatementImpl extends
         this.revision = rootModuleQName.getRevision();
 
         this.order = ctx.getOrder();
-        this.copyOf = ctx.getOriginalCtx() == null ? null : (AugmentationSchema) ctx.getOriginalCtx().buildEffective();
+        this.copyOf = (AugmentationSchema) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
         final WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class);
         this.whenCondition = whenStmt == null ? null : whenStmt.argument();
index a5c8b3bf5df9f64ac540d2c9a8ba2b3b7efc426b..c21e0865ab41d718ef79be2faa91299e99906785 100644 (file)
@@ -26,7 +26,7 @@ public final class CaseEffectiveStatementImpl extends AbstractEffectiveSimpleDat
     public CaseEffectiveStatementImpl(
             final StmtContext<QName, CaseStatement, EffectiveStatement<QName, CaseStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (ChoiceCaseNode) ctx.getOriginalCtx().buildEffective();
+        this.original = (ChoiceCaseNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
         if (ctx.isConfiguration()) {
             configuration = isAtLeastOneChildConfiguration(ctx.declaredSubstatements())
index 70f69786945fc01bdb9e9160048c0ee5e7594ebc..3de2f2f6b3f637470dc2edceea458007677019b9 100644 (file)
@@ -45,7 +45,7 @@ public final class ChoiceEffectiveStatementImpl extends AbstractEffectiveDataSch
     public ChoiceEffectiveStatementImpl(
             final StmtContext<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (ChoiceSchemaNode) ctx.getOriginalCtx().buildEffective();
+        this.original = (ChoiceSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
         final DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
         this.defaultCase = defaultStmt == null ? null : defaultStmt.argument();
index 16c5a79633927d663428d997f7999bdb1f93e7da..e79777079039e500749ad218339e2916b9fa4a74 100644 (file)
@@ -30,8 +30,7 @@ public final class ContainerEffectiveStatementImpl extends AbstractEffectiveCont
     public ContainerEffectiveStatementImpl(
             final StmtContext<QName, ContainerStatement, EffectiveStatement<QName, ContainerStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (ContainerSchemaNode) ctx.getOriginalCtx()
-                .buildEffective();
+        this.original = (ContainerSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
         final ImmutableSet.Builder<ActionDefinition> actionsBuilder = ImmutableSet.builder();
         final Builder<NotificationDefinition> notificationsBuilder = ImmutableSet.builder();
         for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
index 71912a2099c1ed260268bea5ce552a86b24bf444..6cc7101115ccfa89d248c54e82c9e8e45784bef7 100644 (file)
@@ -13,7 +13,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
 
 public abstract class DeclaredEffectiveStatementBase<A, D extends DeclaredStatement<A>> extends
         EffectiveStatementBase<A, D> {
@@ -28,7 +27,7 @@ public abstract class DeclaredEffectiveStatementBase<A, D extends DeclaredStatem
      * @param ctx
      *            context of statement.
      */
-    protected DeclaredEffectiveStatementBase(StmtContext<A, D, ?> ctx) {
+    protected DeclaredEffectiveStatementBase(final StmtContext<A, D, ?> ctx) {
         super(ctx);
 
         this.argument = ctx.getStatementArgument();
@@ -40,12 +39,9 @@ public abstract class DeclaredEffectiveStatementBase<A, D extends DeclaredStatem
          * declared statement.
          */
         @SuppressWarnings("unchecked")
-        final StatementContextBase<A, D, ?> originalCtx = (StatementContextBase<A, D, ?>) ctx.getOriginalCtx();
-        if (originalCtx != null) {
-            ctx = originalCtx;
-        }
-        declaredInstance = Verify.verifyNotNull(ctx.buildDeclared(), "Statement %s failed to build declared statement",
-                ctx);
+        final StmtContext<?, D, ?> lookupCtx = (StmtContext<?, D, ?>) ctx.getOriginalCtx().orElse(ctx);
+        declaredInstance = Verify.verifyNotNull(lookupCtx.buildDeclared(),
+            "Statement %s failed to build declared statement", lookupCtx);
     }
 
     @Nonnull
index 77dfcd9db1cee9e078bce4b700d2ec85f8a55ad7..93d2cfc87ca294bf54e1c6c9a47ab14cdf6d5533 100644 (file)
@@ -31,7 +31,7 @@ public final class LeafEffectiveStatementImpl extends AbstractEffectiveDataSchem
 
     public LeafEffectiveStatementImpl(final StmtContext<QName, LeafStatement, EffectiveStatement<QName, LeafStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (LeafSchemaNode) ctx.getOriginalCtx().buildEffective();
+        this.original = (LeafSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
         final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
                 firstSubstatementOfType(TypeEffectiveStatement.class), ctx.getStatementSourceReference(),
index 9a3e9f1672deabea4e45a9d65723f9688434b65a..fc779aef34cf5df68fa91826010f3e1cbc0fd1b5 100644 (file)
@@ -37,8 +37,7 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS
     public LeafListEffectiveStatementImpl(
             final StmtContext<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (LeafListSchemaNode) ctx.getOriginalCtx()
-                .buildEffective();
+        this.original = (LeafListSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
         final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
             firstSubstatementOfType(TypeEffectiveStatement.class), ctx.getStatementSourceReference(),
index e13f827fde5214ed18e3fa43ae62e13cb1bff949..55e8f58a8b869ec28698faeed2f8d2dc72922209 100644 (file)
@@ -46,7 +46,7 @@ public final class ListEffectiveStatementImpl extends AbstractEffectiveSimpleDat
             final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
         super(ctx);
 
-        this.original = ctx.getOriginalCtx() == null ? null : (ListSchemaNode) ctx.getOriginalCtx().buildEffective();
+        this.original = (ListSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
         final OrderedByEffectiveStatementImpl orderedByStmt = firstEffective(OrderedByEffectiveStatementImpl.class);
         if (orderedByStmt != null && ORDER_BY_USER_KEYWORD.equals(orderedByStmt.argument())) {
index 7d636cee022e5a6712a55529a060baa1b005e02b..bfcc758f65ca01d80a073e3b7759105818c2db2c 100644 (file)
@@ -26,8 +26,8 @@ public final class UnknownEffectiveStatementImpl extends UnknownEffectiveStateme
         super(ctx);
 
         // FIXME: Remove following section after fixing 4380
-        final UnknownSchemaNode original = ctx.getOriginalCtx() == null ? null : (UnknownSchemaNode) ctx
-                .getOriginalCtx().buildEffective();
+        final UnknownSchemaNode original = (UnknownSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective)
+                .orElse(null);
         if (original != null) {
             this.maybeQNameArgument = original.getQName();
         } else {
index 83c23163ac8fe51c2e7608f27e65f24e572bbfbb..efbf4917aa940f9ab63887df3c9bd1418d57a04a 100644 (file)
@@ -33,7 +33,7 @@ public final class AnyDataEffectiveStatementImpl extends AbstractEffectiveDataSc
     public AnyDataEffectiveStatementImpl(
             final StmtContext<QName, AnydataStatement, EffectiveStatement<QName, AnydataStatement>> ctx) {
         super(ctx);
-        this.original = ctx.getOriginalCtx() == null ? null : (AnyDataSchemaNode) ctx.getOriginalCtx().buildEffective();
+        this.original = (AnyDataSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
         /*
          * :TODO we need to determine a way how to set schema of AnyData
          */