More use of instanceof patterns
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 6 Jan 2023 22:28:26 +0000 (23:28 +0100)
committerAnil Belur <abelur@linuxfoundation.org>
Wed, 19 Jun 2024 00:41:43 +0000 (10:41 +1000)
Reduce the number of explicit casts by integrating them into instanceof
patterns, which leads to reduction of nested if statements in some
cases.

Change-Id: I1255b4c9998faa1ec0de037fc54dc0d79544ed4f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractAugmentGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractExplicitGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/CaseGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/CompositeRuntimeTypeBuilder.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/Generator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/GeneratorReactor.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/MatchStrategy.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/NotificationGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/OperationContainerGenerator.java
binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/TypeBuilderFactory.java

index 0a70ed04fb7e231a7dd31d35f6f97ce7133b388c..51f188764bf3397cbe89649be4acb8792540f2eb 100644 (file)
@@ -129,8 +129,7 @@ abstract class AbstractAugmentGenerator
             if (gen == this) {
                 break;
             }
-            if (gen instanceof AbstractAugmentGenerator
-                && target.equalRoot(((AbstractAugmentGenerator) gen).targetGenerator().getMember())) {
+            if (gen instanceof AbstractAugmentGenerator aug && target.equalRoot(aug.targetGenerator().getMember())) {
                 offset++;
             }
         }
index ad1f91154f1c173f2d10ea14f710d5eacfc025f7..8960b6a7a67cdd1cfc55bb9ee1ce0ad1e64a8c16 100644 (file)
@@ -159,12 +159,12 @@ public abstract class AbstractExplicitGenerator<S extends EffectiveStatement<?,
 
     @Override
     public final boolean isAddedByUses() {
-        return statement instanceof AddedByUsesAware && ((AddedByUsesAware) statement).isAddedByUses();
+        return statement instanceof AddedByUsesAware aware && aware.isAddedByUses();
     }
 
     @Override
     public final boolean isAugmenting() {
-        return statement instanceof CopyableNode && ((CopyableNode) statement).isAugmenting();
+        return statement instanceof CopyableNode copyable && copyable.isAugmenting();
     }
 
     /**
@@ -257,12 +257,9 @@ public abstract class AbstractExplicitGenerator<S extends EffectiveStatement<?,
 
     final @Nullable AbstractExplicitGenerator<?, ?> findLocalSchemaTreeGenerator(final QName qname) {
         for (Generator child : this) {
-            if (child instanceof AbstractExplicitGenerator) {
-                final AbstractExplicitGenerator<?, ?> gen = (AbstractExplicitGenerator<?, ?>) child;
-                final EffectiveStatement<?, ?> stmt = gen.statement();
-                if (stmt instanceof SchemaTreeEffectiveStatement && qname.equals(stmt.argument())) {
-                    return gen;
-                }
+            if (child instanceof AbstractExplicitGenerator<?, ?> gen
+                && gen.statement() instanceof SchemaTreeEffectiveStatement<?> stmt && qname.equals(stmt.argument())) {
+                return gen;
             }
         }
         return null;
index f49f371aca0c755d401c1b94959ca2aa80bdfa10..b775edc30e4208e4fc9bb26ffbf7ee493e939c92 100644 (file)
@@ -41,8 +41,8 @@ final class CaseGenerator extends CompositeSchemaTreeGenerator<CaseEffectiveStat
         // - being a child of an augment (i.e. augmented into a choice)
         final AbstractCompositeGenerator<?, ?> parent = getParent();
         final ChoiceGenerator choice;
-        if (parent instanceof AbstractAugmentGenerator) {
-            final AbstractCompositeGenerator<?, ?> target = ((AbstractAugmentGenerator) parent).targetGenerator();
+        if (parent instanceof AbstractAugmentGenerator augGen) {
+            final AbstractCompositeGenerator<?, ?> target = augGen.targetGenerator();
             verify(target instanceof ChoiceGenerator, "Unexpected parent augment %s target %s", parent, target);
             choice = (ChoiceGenerator) target;
         } else {
index b58527adc250f9bdb32af784ac25c5fc806bf34f..4c13f3d5bb04b399bd3f401e1552d8f06a751fec 100644 (file)
@@ -92,17 +92,15 @@ abstract class CompositeRuntimeTypeBuilder<S extends EffectiveStatement<?, ?>, R
         // those two we only generate things for 'module'.
         if (!(statement instanceof ModuleEffectiveStatement)) {
             for (var stmt : statement.effectiveSubstatements()) {
-                if (stmt instanceof AugmentEffectiveStatement) {
-                    processAugment(resolver, resolver.getAugment((AugmentEffectiveStatement) stmt));
+                if (stmt instanceof AugmentEffectiveStatement augment) {
+                    processAugment(resolver, resolver.getAugment(augment));
                 }
             }
         }
 
         // Now construct RuntimeTypes for each schema tree child of stmt
         for (var stmt : statement.effectiveSubstatements()) {
-            if (stmt instanceof SchemaTreeEffectiveStatement) {
-                final var child = (SchemaTreeEffectiveStatement<?>) stmt;
-
+            if (stmt instanceof SchemaTreeEffectiveStatement<?> child) {
                 // Try valid augments first: they should be empty most of the time and filter all the cases where we
                 // would not find the streamChild among our local and grouping statements. Note that unlike all others,
                 // such matches are not considered to be children in Binding DataObject tree, they are only considered
@@ -132,8 +130,8 @@ abstract class CompositeRuntimeTypeBuilder<S extends EffectiveStatement<?, ?>, R
                 @SuppressWarnings("unchecked")
                 final AbstractExplicitGenerator<S, ?> gen = (AbstractExplicitGenerator<S, ?>) child;
                 final EffectiveStatement<?, ?> genStmt = gen.statement();
-                if (genStmt instanceof SchemaTreeEffectiveStatement
-                    && localName.equals(((SchemaTreeEffectiveStatement<?>) genStmt).argument().getLocalName())) {
+                if (genStmt instanceof SchemaTreeEffectiveStatement<?> schemaStmt
+                    && localName.equals(schemaStmt.argument().getLocalName())) {
                     return gen;
                 }
             }
index 66fdadaf8d1cdeae76fb59493616a37d8dbf1c6f..aecc4d92ec5be732fe12c13cf7a906e3e95d4aaa 100644 (file)
@@ -243,12 +243,10 @@ public abstract class Generator implements Iterable<Generator> {
             }
 
             // if we into a choice we need to follow the hierararchy of that choice
-            if (ancestor instanceof AbstractAugmentGenerator augment) {
-                final AbstractCompositeGenerator<?, ?> target = augment.targetGenerator();
-                if (target instanceof ChoiceGenerator) {
-                    ancestor = target;
-                    continue;
-                }
+            if (ancestor instanceof AbstractAugmentGenerator augment
+                && augment.targetGenerator() instanceof ChoiceGenerator targetChoice) {
+                ancestor = targetChoice;
+                continue;
             }
 
             break;
index a201f5a5ab4471a51127b88d5704374017a5ac55..d2cc1ecc1c4f760df0763a3752215aa395c0f1e7 100644 (file)
@@ -136,8 +136,8 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
         final var augments = new ArrayList<AugmentRequirement>();
         for (ModuleGenerator module : children) {
             for (Generator gen : module) {
-                if (gen instanceof ModuleAugmentGenerator) {
-                    augments.add(((ModuleAugmentGenerator) gen).startLinkage(this));
+                if (gen instanceof ModuleAugmentGenerator moduleGen) {
+                    augments.add(moduleGen.startLinkage(this));
                 }
             }
         }
@@ -245,8 +245,8 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
         for (Generator gen : parent) {
             gen.ensureMember();
             collectCollisionDomains(result, gen);
-            if (gen instanceof AbstractCompositeGenerator) {
-                result.add(((AbstractCompositeGenerator<?, ?>) gen).domain());
+            if (gen instanceof AbstractCompositeGenerator<?, ?> compositeGen) {
+                result.add(compositeGen.domain());
             }
         }
     }
@@ -349,8 +349,8 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
         // Now kick of the search
         final List<EffectiveStatement<?, ?>> stmtPath = inferenceStack.toInference().statementPath();
         final AbstractExplicitGenerator<?, ?> found = gen.findGenerator(stmtPath);
-        if (found instanceof AbstractTypeAwareGenerator) {
-            return (AbstractTypeAwareGenerator<?, ?, ?>) found;
+        if (found instanceof AbstractTypeAwareGenerator<?, ?, ?> typeAware) {
+            return typeAware;
         }
         throw new VerifyException("Statements " + stmtPath + " resulted in unexpected " + found);
     }
@@ -358,9 +358,8 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
     // Note: unlike other methods, this method pushes matching child to the stack
     private void linkUsesDependencies(final Iterable<? extends Generator> parent) {
         for (Generator child : parent) {
-            if (child instanceof AbstractCompositeGenerator) {
-                LOG.trace("Visiting composite {}", child);
-                final var composite = (AbstractCompositeGenerator<?, ?>) child;
+            if (child instanceof AbstractCompositeGenerator<?, ?> composite) {
+                LOG.trace("Visiting composite {}", composite);
                 stack.push(composite);
                 composite.linkUsesDependencies(this);
                 linkUsesDependencies(composite);
@@ -395,8 +394,8 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
 
     private void linkDependencies(final Iterable<? extends Generator> parent) {
         for (Generator child : parent) {
-            if (child instanceof AbstractDependentGenerator) {
-                ((AbstractDependentGenerator<?, ?>) child).linkDependencies(this);
+            if (child instanceof AbstractDependentGenerator<?, ?> dependent) {
+                dependent.linkDependencies(this);
             } else if (child instanceof AbstractCompositeGenerator) {
                 stack.push(child);
                 linkDependencies(child);
@@ -408,8 +407,8 @@ public final class GeneratorReactor extends GeneratorContext implements Mutable
     private void bindTypeDefinition(final Iterable<? extends Generator> parent) {
         for (Generator child : parent) {
             stack.push(child);
-            if (child instanceof AbstractTypeObjectGenerator) {
-                ((AbstractTypeObjectGenerator<?, ?>) child).bindTypeDefinition(this);
+            if (child instanceof AbstractTypeObjectGenerator<?, ?> typeObject) {
+                typeObject.bindTypeDefinition(this);
             } else if (child instanceof AbstractCompositeGenerator) {
                 bindTypeDefinition(child);
             }
index 436ac4104721ee99151d67f41f90fc557e9e3e4c..fac712d9e45f9985c4433c84d05e26dad5771fc4 100644 (file)
@@ -31,11 +31,8 @@ abstract class MatchStrategy {
         AbstractExplicitGenerator<?, ?> findGenerator(final EffectiveStatement<?, ?> needle,
                 final Iterable<? extends Generator> haystack) {
             for (Generator gen : haystack) {
-                if (gen instanceof AbstractExplicitGenerator) {
-                    final AbstractExplicitGenerator<?, ?> ret = (AbstractExplicitGenerator<?, ?>) gen;
-                    if (needle == ret.statement()) {
-                        return ret;
-                    }
+                if (gen instanceof AbstractExplicitGenerator<?, ?> ret && needle == ret.statement()) {
+                    return ret;
                 }
             }
             return null;
@@ -59,11 +56,8 @@ abstract class MatchStrategy {
         AbstractExplicitGenerator<?, ?> findGenerator(final QName needle,
                 final Iterable<? extends Generator> haystack) {
             for (Generator gen : haystack) {
-                if (gen instanceof AbstractExplicitGenerator) {
-                    final AbstractExplicitGenerator<?, ?> ret = (AbstractExplicitGenerator<?, ?>) gen;
-                    if (needle.equals(ret.statement().argument())) {
-                        return ret;
-                    }
+                if (gen instanceof AbstractExplicitGenerator<?, ?> ret && needle.equals(ret.statement().argument())) {
+                    return ret;
                 }
             }
             return null;
index 5243366dd84b72a3caa2798c33ca12518ef4a43e..fea693bbeb608c4a169311a995a1421fbabbda4f 100644 (file)
@@ -81,8 +81,8 @@ final class NotificationGenerator
         }
 
         final Type parentType = Type.of(parent.typeName());
-        if (parent instanceof ListGenerator) {
-            final KeyGenerator keyGen = ((ListGenerator) parent).keyGenerator();
+        if (parent instanceof ListGenerator listGen) {
+            final KeyGenerator keyGen = listGen.keyGenerator();
             if (keyGen != null) {
                 return BindingTypes.keyedListNotification(builder, parentType, keyGen.getGeneratedType(builderFactory));
             }
index ab848bc68fa83d15454ce3a1a6377430139cc10d..78084894fc3f7718d7be1329a37204ba6174c040 100644 (file)
@@ -57,7 +57,7 @@ abstract sealed class OperationContainerGenerator<S extends DataTreeEffectiveSta
     @Override
     final GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
         final AbstractCompositeGenerator<?, ?> parent = getParent();
-        if (parent instanceof ActionGenerator && ((ActionGenerator) parent).isAddedByUses()) {
+        if (parent instanceof ActionGenerator actionParent && actionParent.isAddedByUses()) {
             //        final ActionDefinition orig = findOrigAction(parentSchema, action).get();
             //        // Original definition may live in a different module, make sure we account for that
             //        final ModuleContext origContext = moduleContext(
index e1fbd9ca4dcabdf154dc7c01272b34820a42db22..5aa32d74df8636e87e0d227c22f9612f48258f70 100644 (file)
@@ -71,8 +71,8 @@ public abstract class TypeBuilderFactory implements Immutable {
         @Override
         void addCodegenInformation(final EffectiveStatement<?, ?> stmt,
                 final GeneratedTypeBuilderBase<?> builder) {
-            if (stmt instanceof DocumentedNode) {
-                addCodegenInformation((DocumentedNode) stmt, builder);
+            if (stmt instanceof DocumentedNode documented) {
+                addCodegenInformation(documented, builder);
             }
         }
 
@@ -96,15 +96,13 @@ public abstract class TypeBuilderFactory implements Immutable {
         @Override
         void addCodegenInformation(final ModuleGenerator module, final EffectiveStatement<?, ?> stmt,
                 final GeneratedTypeBuilderBase<?> builder) {
-            if (stmt instanceof DocumentedNode) {
-                final DocumentedNode node = (DocumentedNode) stmt;
-                TypeComments.description(node).ifPresent(builder::addComment);
-                node.getDescription().ifPresent(builder::setDescription);
-                node.getReference().ifPresent(builder::setReference);
+            if (stmt instanceof DocumentedNode documented) {
+                TypeComments.description(documented).ifPresent(builder::addComment);
+                documented.getDescription().ifPresent(builder::setDescription);
+                documented.getReference().ifPresent(builder::setReference);
             }
-            if (stmt instanceof SchemaNode) {
-                YangSourceDefinition.of(module.statement(), (SchemaNode) stmt)
-                    .ifPresent(builder::setYangSourceDefinition);
+            if (stmt instanceof SchemaNode schema) {
+                YangSourceDefinition.of(module.statement(), schema).ifPresent(builder::setYangSourceDefinition);
             }
         }