diff --git a/java-annotations/main/vadl/javaannotations/viam/CollectInputsChecker.java b/java-annotations/main/vadl/javaannotations/viam/CollectInputsChecker.java index 663dc69fd..f02402a8a 100644 --- a/java-annotations/main/vadl/javaannotations/viam/CollectInputsChecker.java +++ b/java-annotations/main/vadl/javaannotations/viam/CollectInputsChecker.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -19,25 +19,28 @@ import com.google.auto.service.AutoService; import com.google.errorprone.BugPattern; import com.google.errorprone.bugpatterns.BugChecker; +import com.google.errorprone.util.ASTHelpers; import com.sun.source.tree.VariableTree; +import java.util.ArrayList; import java.util.List; import vadl.javaannotations.AbstractAnnotationChecker; /** * The CollectInputsChecker class is a bug checker that checks for classes with fields - * annotated with @Input and ensures that they override the collectInputs method. + * annotated with @Input and ensures that they override the forEachInput method. * It will fail if its implementation is not as expected. */ @AutoService(BugChecker.class) @BugPattern( name = "CollectInputs", - summary = "Classes with @Input annotated fields must override the collectInputs method", + summary = "Classes with @Input annotated fields must override the forEachInput method", severity = BugPattern.SeverityLevel.ERROR ) @SuppressWarnings("BugPatternNaming") -public class CollectInputsChecker extends AbstractAnnotationChecker implements DefaultCollectMixin { +public class CollectInputsChecker extends AbstractAnnotationChecker { - private static final String PARAM_TYPE = "java.util.List" + "<" + CheckerUtils.NODE + ">"; + private static final String PARAM_TYPE = + "java.util.function.Consumer" + "<" + CheckerUtils.NODE + ">"; /** * Constructs the bug checker. @@ -45,7 +48,7 @@ public class CollectInputsChecker extends AbstractAnnotationChecker implements D public CollectInputsChecker() { super( Input.class, - "collectInputs", + "forEachInput", "void", List.of(PARAM_TYPE) ); @@ -54,6 +57,27 @@ public CollectInputsChecker() { @Override protected List expectedMethodStatements(List paramNames, List fields) { - return defaultCollectStatements(methodName, paramNames, fields, true); + var stmts = new ArrayList(); + var consumerName = paramNames.get(0); + + stmts.add("super.%s(%s);".formatted(methodName, consumerName)); + for (var field : fields) { + var type = ASTHelpers.getType(field); + assert type != null; + + var hasAnnotation = ASTHelpers + .hasDirectAnnotationWithSimpleName(field, "Nullable"); + + var stmt = type.toString().startsWith(CheckerUtils.NODELIST) + ? "%s.forEach(%s);".formatted(field.getName(), consumerName) + : "%s.accept(%s);".formatted(consumerName, field.getName()); + + if (hasAnnotation) { + stmt = "if (this.%s != null) { %s }".formatted(field.getName(), stmt); + } + + stmts.add(stmt); + } + return stmts; } } diff --git a/java-annotations/main/vadl/javaannotations/viam/CollectSuccessorsChecker.java b/java-annotations/main/vadl/javaannotations/viam/CollectSuccessorsChecker.java index 7c5b47d99..d47212135 100644 --- a/java-annotations/main/vadl/javaannotations/viam/CollectSuccessorsChecker.java +++ b/java-annotations/main/vadl/javaannotations/viam/CollectSuccessorsChecker.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -19,26 +19,28 @@ import com.google.auto.service.AutoService; import com.google.errorprone.BugPattern; import com.google.errorprone.bugpatterns.BugChecker; +import com.google.errorprone.util.ASTHelpers; import com.sun.source.tree.VariableTree; +import java.util.ArrayList; import java.util.List; import vadl.javaannotations.AbstractAnnotationChecker; /** * The CollectSuccessorsChecker class is a bug checker that checks for classes with @Successor - * annotated fields that must override the collectSuccessors method. + * annotated fields that must override the forEachSuccessor method. * It will fail if the method implementation is not as expected. */ @AutoService(BugChecker.class) @BugPattern( name = "CollectSuccessors", - summary = "Classes with @Successor annotated fields must override the collectSuccessors method", + summary = "Classes with @Successor annotated fields must override the forEachSuccessor method", severity = BugPattern.SeverityLevel.ERROR ) @SuppressWarnings("BugPatternNaming") -public class CollectSuccessorsChecker extends AbstractAnnotationChecker - implements DefaultCollectMixin { +public class CollectSuccessorsChecker extends AbstractAnnotationChecker { - private static final String PARAM_TYPE = "java.util.List<" + CheckerUtils.NODE + ">"; + private static final String PARAM_TYPE = + "java.util.function.Consumer" + "<" + CheckerUtils.NODE + ">"; /** * Constructs the bug checker. @@ -46,7 +48,7 @@ public class CollectSuccessorsChecker extends AbstractAnnotationChecker public CollectSuccessorsChecker() { super( Successor.class, - "collectSuccessors", + "forEachSuccessor", "void", List.of(PARAM_TYPE) ); @@ -55,6 +57,27 @@ public CollectSuccessorsChecker() { @Override protected List expectedMethodStatements(List paramNames, List fields) { - return defaultCollectStatements(methodName, paramNames, fields, true); + var stmts = new ArrayList(); + var consumerName = paramNames.get(0); + + stmts.add("super.%s(%s);".formatted(methodName, consumerName)); + for (var field : fields) { + var type = ASTHelpers.getType(field); + assert type != null; + + var hasAnnotation = ASTHelpers + .hasDirectAnnotationWithSimpleName(field, "Nullable"); + + var stmt = type.toString().startsWith(CheckerUtils.NODELIST) + ? "%s.forEach(%s);".formatted(field.getName(), consumerName) + : "%s.accept(%s);".formatted(consumerName, field.getName()); + + if (hasAnnotation) { + stmt = "if (this.%s != null) { %s }".formatted(field.getName(), stmt); + } + + stmts.add(stmt); + } + return stmts; } } diff --git a/vadl/main/vadl/cppCodeGen/model/nodes/CppUpdateBitRangeNode.java b/vadl/main/vadl/cppCodeGen/model/nodes/CppUpdateBitRangeNode.java index 5b602fbea..20de00f54 100644 --- a/vadl/main/vadl/cppCodeGen/model/nodes/CppUpdateBitRangeNode.java +++ b/vadl/main/vadl/cppCodeGen/model/nodes/CppUpdateBitRangeNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -18,6 +18,7 @@ import java.util.List; +import java.util.function.Consumer; import vadl.cppCodeGen.CppCodeGenGraphNodeVisitor; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -76,10 +77,10 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); - collection.add(patch); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); + consumer.accept(patch); } @Override diff --git a/vadl/main/vadl/iss/passes/common/opDecomposition/nodes/IssBinaryNode.java b/vadl/main/vadl/iss/passes/common/opDecomposition/nodes/IssBinaryNode.java index 4131593ff..54060e3a3 100644 --- a/vadl/main/vadl/iss/passes/common/opDecomposition/nodes/IssBinaryNode.java +++ b/vadl/main/vadl/iss/passes/common/opDecomposition/nodes/IssBinaryNode.java @@ -16,7 +16,7 @@ package vadl.iss.passes.common.opDecomposition.nodes; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.Type; import vadl.viam.graph.GraphVisitor; @@ -64,9 +64,9 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(arg1); - collection.add(arg2); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(arg1); + consumer.accept(arg2); } } diff --git a/vadl/main/vadl/iss/passes/common/safeResourceRead/nodes/ExprSaveNode.java b/vadl/main/vadl/iss/passes/common/safeResourceRead/nodes/ExprSaveNode.java index 3e69b6a0f..282be2805 100644 --- a/vadl/main/vadl/iss/passes/common/safeResourceRead/nodes/ExprSaveNode.java +++ b/vadl/main/vadl/iss/passes/common/safeResourceRead/nodes/ExprSaveNode.java @@ -16,7 +16,7 @@ package vadl.iss.passes.common.safeResourceRead.nodes; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; import vadl.viam.graph.GraphVisitor; @@ -70,9 +70,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssConstExtractNode.java b/vadl/main/vadl/iss/passes/nodes/IssConstExtractNode.java index 918ebca86..c038f9509 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssConstExtractNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssConstExtractNode.java @@ -17,6 +17,7 @@ package vadl.iss.passes.nodes; import java.util.List; +import java.util.function.Consumer; import vadl.iss.passes.common.opDecomposition.nodes.IssExprNode; import vadl.iss.passes.tcg.lowering.TcgExtend; import vadl.javaannotations.viam.DataValue; @@ -153,9 +154,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssGhostCastNode.java b/vadl/main/vadl/iss/passes/nodes/IssGhostCastNode.java index 5be5d826e..378135d5c 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssGhostCastNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssGhostCastNode.java @@ -16,7 +16,7 @@ package vadl.iss.passes.nodes; -import java.util.List; +import java.util.function.Consumer; import vadl.iss.passes.common.opDecomposition.nodes.IssExprNode; import vadl.javaannotations.viam.Input; import vadl.types.DataType; @@ -77,9 +77,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssGvecOpNode.java b/vadl/main/vadl/iss/passes/nodes/IssGvecOpNode.java index 5d5656754..47e68d0fb 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssGvecOpNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssGvecOpNode.java @@ -17,6 +17,7 @@ package vadl.iss.passes.nodes; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.iss.passes.extensions.VectorTensorPlan; import vadl.iss.passes.extensions.VectorTensorPlan.OperandForm; @@ -231,16 +232,16 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(destinationAccessorIndices); - collection.addAll(lhsAccessorIndices); - collection.addAll(rhsAccessorIndices); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + destinationAccessorIndices.forEach(consumer); + lhsAccessorIndices.forEach(consumer); + rhsAccessorIndices.forEach(consumer); if (this.scalarOperand != null) { - collection.add(scalarOperand); + consumer.accept(scalarOperand); } if (this.immediateOperand != null) { - collection.add(immediateOperand); + consumer.accept(immediateOperand); } } diff --git a/vadl/main/vadl/iss/passes/nodes/IssMoveNode.java b/vadl/main/vadl/iss/passes/nodes/IssMoveNode.java index 689409e09..d3a27f251 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssMoveNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssMoveNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.iss.passes.nodes; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; import vadl.viam.graph.GraphVisitor; @@ -66,10 +66,10 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(dest); - collection.add(expr); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(dest); + consumer.accept(expr); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssReadRegNode.java b/vadl/main/vadl/iss/passes/nodes/IssReadRegNode.java index 7d8fb2d05..793f18ba0 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssReadRegNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssReadRegNode.java @@ -19,6 +19,7 @@ import com.google.common.collect.Streams; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -28,6 +29,7 @@ import vadl.viam.Constant; import vadl.viam.Counter; import vadl.viam.RegisterTensor; +import vadl.viam.graph.Node; import vadl.viam.graph.NodeList; import vadl.viam.graph.dependency.ConstantNode; import vadl.viam.graph.dependency.ExpressionNode; @@ -290,11 +292,11 @@ public IssReadRegNode shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(accessorIndices); - collection.add(bitOffset); - collection.add(bitWidth); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + accessorIndices.forEach(consumer); + consumer.accept(bitOffset); + consumer.accept(bitWidth); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssRegBitfieldWriteNode.java b/vadl/main/vadl/iss/passes/nodes/IssRegBitfieldWriteNode.java index 0052f689b..471599d97 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssRegBitfieldWriteNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssRegBitfieldWriteNode.java @@ -17,6 +17,7 @@ package vadl.iss.passes.nodes; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -118,12 +119,12 @@ public void verifyState() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); - collection.add(value); - collection.add(bitOffset); - collection.add(bitWidth); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); + consumer.accept(value); + consumer.accept(bitOffset); + consumer.accept(bitWidth); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssSelectNode.java b/vadl/main/vadl/iss/passes/nodes/IssSelectNode.java index 7b1b935ab..bddaa3122 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssSelectNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssSelectNode.java @@ -17,6 +17,7 @@ package vadl.iss.passes.nodes; import java.util.List; +import java.util.function.Consumer; import vadl.iss.passes.TcgPassUtils; import vadl.iss.passes.tcg.lowering.TcgCondition; import vadl.javaannotations.viam.DataValue; @@ -152,12 +153,12 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(c1); - collection.add(c2); - collection.add(trueCase); - collection.add(falseCase); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(c1); + consumer.accept(c2); + consumer.accept(trueCase); + consumer.accept(falseCase); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssValExtractNode.java b/vadl/main/vadl/iss/passes/nodes/IssValExtractNode.java index 1cb850108..94702cc7a 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssValExtractNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssValExtractNode.java @@ -17,6 +17,7 @@ package vadl.iss.passes.nodes; import java.util.List; +import java.util.function.Consumer; import vadl.iss.passes.common.opDecomposition.nodes.IssExprNode; import vadl.iss.passes.tcg.lowering.TcgExtend; import vadl.javaannotations.viam.DataValue; @@ -106,11 +107,11 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); - collection.add(ofs); - collection.add(len); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); + consumer.accept(ofs); + consumer.accept(len); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/IssWriteRegNode.java b/vadl/main/vadl/iss/passes/nodes/IssWriteRegNode.java index 96ee110ee..055529701 100644 --- a/vadl/main/vadl/iss/passes/nodes/IssWriteRegNode.java +++ b/vadl/main/vadl/iss/passes/nodes/IssWriteRegNode.java @@ -19,6 +19,7 @@ import com.google.common.collect.Streams; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -304,11 +305,11 @@ public IssWriteRegNode shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(accessorIndices); - collection.add(bitOffset); - collection.add(bitWidth); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + accessorIndices.forEach(consumer); + consumer.accept(bitOffset); + consumer.accept(bitWidth); } @Override diff --git a/vadl/main/vadl/iss/passes/nodes/TcgVRefNode.java b/vadl/main/vadl/iss/passes/nodes/TcgVRefNode.java index f4bbf121b..b39cdcd59 100644 --- a/vadl/main/vadl/iss/passes/nodes/TcgVRefNode.java +++ b/vadl/main/vadl/iss/passes/nodes/TcgVRefNode.java @@ -17,7 +17,7 @@ package vadl.iss.passes.nodes; import java.util.List; -import java.util.stream.Collectors; +import java.util.function.Consumer; import vadl.iss.passes.tcg.lowering.TcgV; import vadl.iss.passes.tcg.lowering.Tcg_32_64; import vadl.javaannotations.viam.DataValue; @@ -93,9 +93,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBinaryOpNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBinaryOpNode.java index 59f6714c2..8b2f54c75 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBinaryOpNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBinaryOpNode.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import vadl.iss.passes.nodes.TcgVRefNode; @@ -106,10 +107,10 @@ public String cCode(Function nodeToCCode) { @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(arg1); - collection.add(arg2); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(arg1); + consumer.accept(arg2); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBrCond.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBrCond.java index ab0c63cd7..eff61e062 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBrCond.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgBrCond.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.TcgCondition; @@ -109,10 +110,10 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(varArg); - collection.add(immArg); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(varArg); + consumer.accept(immArg); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgConstSelectNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgConstSelectNode.java index 021b0ca14..7d46096cc 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgConstSelectNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgConstSelectNode.java @@ -16,7 +16,7 @@ package vadl.iss.passes.tcg.lowering.nodes; -import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.javaannotations.viam.Input; @@ -72,9 +72,9 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(condition); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(condition); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgDepositNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgDepositNode.java index 01620faa7..951f8bd79 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgDepositNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgDepositNode.java @@ -16,7 +16,7 @@ package vadl.iss.passes.tcg.lowering.nodes; -import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.javaannotations.viam.Input; @@ -97,10 +97,10 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(pos); - collection.add(len); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(pos); + consumer.accept(len); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgExtractNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgExtractNode.java index 28f78f238..5ca60eea4 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgExtractNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgExtractNode.java @@ -17,6 +17,7 @@ package vadl.iss.passes.tcg.lowering.nodes; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.TcgExtend; @@ -117,10 +118,10 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(offset); - collection.add(len); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(offset); + consumer.accept(len); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGenException.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGenException.java index e60fa939d..41ba656f1 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGenException.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGenException.java @@ -19,6 +19,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import vadl.iss.passes.nodes.TcgVRefNode; @@ -84,9 +85,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(args); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + args.forEach(consumer); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGetVar.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGetVar.java index d4691782f..e2a0af75b 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGetVar.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGetVar.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import vadl.iss.passes.nodes.TcgVRefNode; @@ -126,9 +127,9 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(constValue); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(constValue); } @Override @@ -240,9 +241,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGottoTb.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGottoTb.java index aefabae76..6d0ce12b8 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGottoTb.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGottoTb.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.javaannotations.viam.DataValue; @@ -116,9 +117,9 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(targetPc); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(targetPc); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGvecOpNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGvecOpNode.java index 2340fe567..3f8a92217 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGvecOpNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgGvecOpNode.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -256,16 +257,16 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(destinationAccessorIndices); - collection.addAll(lhsAccessorIndices); - collection.addAll(rhsAccessorIndices); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + destinationAccessorIndices.forEach(consumer); + lhsAccessorIndices.forEach(consumer); + rhsAccessorIndices.forEach(consumer); if (this.scalarOperand != null) { - collection.add(scalarOperand); + consumer.accept(scalarOperand); } if (this.immediateOperand != null) { - collection.add(immediateOperand); + consumer.accept(immediateOperand); } } diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgHelperCall.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgHelperCall.java index ce51eb206..7d49ff522 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgHelperCall.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgHelperCall.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -113,12 +114,12 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); if (this.result != null) { - collection.add(result); + consumer.accept(result); } - collection.addAll(args); + args.forEach(consumer); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgLoadMemory.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgLoadMemory.java index 52a7972f1..8f515e4a7 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgLoadMemory.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgLoadMemory.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.TcgEndianness; @@ -143,9 +144,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(addr); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(addr); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgMovCondNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgMovCondNode.java index 4e40f23cd..8c488d0bb 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgMovCondNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgMovCondNode.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.TcgCondition; @@ -97,12 +98,12 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(c1); - collection.add(c2); - collection.add(v1); - collection.add(v2); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(c1); + consumer.accept(c2); + consumer.accept(v1); + consumer.accept(v2); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgOpNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgOpNode.java index 092c7abea..37dea6ccc 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgOpNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgOpNode.java @@ -19,6 +19,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.Tcg_32_64; import vadl.javaannotations.viam.DataValue; @@ -103,8 +104,8 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(destinations); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + destinations.forEach(consumer); } } diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgStoreMemory.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgStoreMemory.java index b2315f181..26d058824 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgStoreMemory.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgStoreMemory.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.TcgEndianness; @@ -145,10 +146,10 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(addr); - collection.add(val); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(addr); + consumer.accept(val); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgUnaryOpNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgUnaryOpNode.java index 3fd50fc00..1aeb45ab6 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgUnaryOpNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgUnaryOpNode.java @@ -16,8 +16,8 @@ package vadl.iss.passes.tcg.lowering.nodes; -import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.javaannotations.viam.Input; @@ -58,9 +58,9 @@ public String cCode(Function nodeToCCode) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(arg); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(arg); } @Override diff --git a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgVarNode.java b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgVarNode.java index 61bb40d53..20f0d9a44 100644 --- a/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgVarNode.java +++ b/vadl/main/vadl/iss/passes/tcg/lowering/nodes/TcgVarNode.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; +import java.util.function.Consumer; import vadl.iss.passes.nodes.TcgVRefNode; import vadl.iss.passes.tcg.lowering.TcgV; import vadl.javaannotations.viam.Input; @@ -61,9 +62,9 @@ public List definedVars() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(variable); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(variable); } @Override diff --git a/vadl/main/vadl/lcb/graph/DefinedImmediateSideEffectNode.java b/vadl/main/vadl/lcb/graph/DefinedImmediateSideEffectNode.java index da71eeb5f..adb772210 100644 --- a/vadl/main/vadl/lcb/graph/DefinedImmediateSideEffectNode.java +++ b/vadl/main/vadl/lcb/graph/DefinedImmediateSideEffectNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.lcb.graph; -import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; @@ -55,9 +55,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCcSD.java b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCcSD.java index 85c4fcd6c..747acf9af 100644 --- a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCcSD.java +++ b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCcSD.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.lcb.passes.llvmLowering.domain.selectionDag; import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.lcb.passes.llvmLowering.LlvmNodeLowerable; @@ -103,11 +104,11 @@ public ExpressionNode immOffset() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(first); - collection.add(second); - collection.add(immOffset); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(first); + consumer.accept(second); + consumer.accept(immOffset); } @Override diff --git a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCondSD.java b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCondSD.java index c613d1058..ef790ba6c 100644 --- a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCondSD.java +++ b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrCondSD.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.lcb.passes.llvmLowering.domain.selectionDag; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.lcb.passes.llvmLowering.LlvmNodeLowerable; import vadl.lcb.passes.llvmLowering.strategies.visitors.TableGenMachineInstructionVisitor; @@ -80,10 +80,10 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(condition); - collection.add(immOffset); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(condition); + consumer.accept(immOffset); } @Override diff --git a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrSD.java b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrSD.java index 67c0943d0..75bfd9d07 100644 --- a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrSD.java +++ b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmBrSD.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.lcb.passes.llvmLowering.domain.selectionDag; import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.lcb.passes.llvmLowering.LlvmNodeLowerable; import vadl.lcb.passes.llvmLowering.strategies.visitors.TableGenMachineInstructionVisitor; @@ -73,9 +74,9 @@ public ExpressionNode bb() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(bb); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(bb); } @Override diff --git a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmUnlowerableSD.java b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmUnlowerableSD.java index b3f64054d..37b3445e4 100644 --- a/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmUnlowerableSD.java +++ b/vadl/main/vadl/lcb/passes/llvmLowering/domain/selectionDag/LlvmUnlowerableSD.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.lcb.passes.llvmLowering.domain.selectionDag; -import java.util.List; +import java.util.function.Consumer; import vadl.lcb.passes.llvmLowering.strategies.visitors.TableGenMachineInstructionVisitor; import vadl.lcb.passes.llvmLowering.strategies.visitors.TableGenNodeVisitor; import vadl.types.BuiltInTable; @@ -70,8 +70,8 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); } @Override diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlDebugPrintNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlDebugPrintNode.java index 3c38fe536..ca549af1a 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlDebugPrintNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlDebugPrintNode.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.regex.Pattern; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; @@ -75,9 +76,9 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(values); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + values.forEach(consumer); } /** diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlDecodeTreeNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlDecodeTreeNode.java index 8e45ca93f..521b7475d 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlDecodeTreeNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlDecodeTreeNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.rtl.ipg.nodes; -import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.rtl.passes.InstructionProgressGraphLowerPass; @@ -75,10 +75,10 @@ public void setInstructionWord(@Nullable ExpressionNode instructionWord) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); if (this.instructionWord != null) { - collection.add(instructionWord); + consumer.accept(instructionWord); } } diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlInstructionWordSliceNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlInstructionWordSliceNode.java index 39effea83..5555e4e49 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlInstructionWordSliceNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlInstructionWordSliceNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -19,6 +19,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -158,10 +159,10 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); if (this.instruction != null) { - collection.add(instruction); + consumer.accept(instruction); } } diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlInvalidInstructionNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlInvalidInstructionNode.java index b241fa89e..879ce3ae0 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlInvalidInstructionNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlInvalidInstructionNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.rtl.ipg.nodes; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.Type; import vadl.viam.graph.GraphNodeVisitor; @@ -58,9 +58,9 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(decodeTree); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(decodeTree); } @Override diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlIsInstructionNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlIsInstructionNode.java index 212a77f80..905199e08 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlIsInstructionNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlIsInstructionNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -20,6 +20,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.types.Type; @@ -84,9 +85,9 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(decodeTree); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(decodeTree); } @Override diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlOneHotDecodeNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlOneHotDecodeNode.java index 81bd47b7b..89722d5ec 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlOneHotDecodeNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlOneHotDecodeNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.types.Type; @@ -60,9 +61,9 @@ public List> instructions() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(decodeTree); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(decodeTree); } @Override diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlReadMemNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlReadMemNode.java index b5ad9df05..41db03c52 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlReadMemNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlReadMemNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.rtl.ipg.nodes; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -81,11 +82,11 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(words); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(words); if (this.condition != null) { - collection.add(condition); + consumer.accept(condition); } } diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlReadRegTensorNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlReadRegTensorNode.java index 6168a9b0f..203ba7dd2 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlReadRegTensorNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlReadRegTensorNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.rtl.ipg.nodes; -import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.types.DataType; @@ -56,10 +56,10 @@ public RtlReadRegTensorNode(RegisterTensor regTensor, NodeList i } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); if (this.condition != null) { - collection.add(condition); + consumer.accept(condition); } } diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlSelectByInstructionNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlSelectByInstructionNode.java index 2256b28e5..dffcbb9e2 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlSelectByInstructionNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlSelectByInstructionNode.java @@ -23,6 +23,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -249,12 +250,12 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); if (this.selection != null) { - collection.add(selection); + consumer.accept(selection); } - collection.addAll(values); + values.forEach(consumer); } @Override diff --git a/vadl/main/vadl/rtl/ipg/nodes/RtlWriteMemNode.java b/vadl/main/vadl/rtl/ipg/nodes/RtlWriteMemNode.java index 3196af413..5e7a3e229 100644 --- a/vadl/main/vadl/rtl/ipg/nodes/RtlWriteMemNode.java +++ b/vadl/main/vadl/rtl/ipg/nodes/RtlWriteMemNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.rtl.ipg.nodes; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; @@ -76,9 +77,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(words); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(words); } @Override diff --git a/vadl/main/vadl/viam/graph/Graph.java b/vadl/main/vadl/viam/graph/Graph.java index c6bdc3cd0..951acbfd5 100644 --- a/vadl/main/vadl/viam/graph/Graph.java +++ b/vadl/main/vadl/viam/graph/Graph.java @@ -228,10 +228,8 @@ public T addWithInputs(T node) { // TODO: We should differ between leafs and none-leafs, and also maintain a leafs cache node.ensure(node instanceof UniqueNode, "Only UniqueNodes might be used to find duplicates"); - var inputs = node.inputList(); - // if it is leaf - if (inputs.isEmpty()) { + if (node.isLeaf()) { //noinspection unchecked return (T) getNodes(node.getClass()) .filter(node::equalData) @@ -244,7 +242,7 @@ public T addWithInputs(T node) { var minCount = Integer.MAX_VALUE; Node minNode = null; - for (Node input : inputs) { + for (Node input : node.inputList()) { if (input.usageCount() <= minUsageNumber) { // there will be no duplicated node, as only this // node is user of some of its inputs @@ -367,7 +365,7 @@ private void deleteIfUnusedRecursively(Node node) { return; } node.safeDelete(); - node.inputs().forEach(this::deleteIfUnusedRecursively); + node.forEachInput(this::deleteIfUnusedRecursively); } // helper method to add node to graph @@ -409,7 +407,7 @@ private void verifyNodes() { * Checks if all inputs were added to the graph. */ private void ensureInputsAdded(Node node) { - for (var input : node.inputList()) { + node.forEachInput(input -> { if (!input.isActive()) { throw new ViamGraphError( "Failed to add `%s` as its input node `%s` is not yet initialized. %s", @@ -430,7 +428,7 @@ private void ensureInputsAdded(Node node) { .addContext("graphOfInput", requireNonNull(input.graph())) .shrinkStacktrace(1); } - } + }); } public SourceLocation sourceLocation() { @@ -504,7 +502,7 @@ public Collection copyInto(Graph graph) { // In this step we replace all inputs and successors by the corresponding new nodes. cache.values().forEach(newNode -> { // replace shallow copied input by new uninitialized one - newNode.inputs().forEach(oldInput -> { + newNode.forEachInput(oldInput -> { var newInput = cache.get(oldInput); // replace inputs newNode.applyOnInputsUnsafe((self, input) -> { @@ -516,7 +514,7 @@ public Collection copyInto(Graph graph) { }); // replace shallow copied successor by new uninitialized one - newNode.successors().forEach(oldSuccessor -> { + newNode.forEachSuccessor(oldSuccessor -> { var newSuccessor = cache.get(oldSuccessor); // replace successor newNode.applyOnSuccessorsUnsafe((self, succ) -> { @@ -566,7 +564,7 @@ public void linkAndAddCopies(Map copies) { }); // replace shallow copied successor by new uninitialized one - newNode.successors().forEach(oldSuccessor -> { + newNode.forEachSuccessor(oldSuccessor -> { var newSuccessor = copies.get(oldSuccessor); if (newSuccessor == null) { return; diff --git a/vadl/main/vadl/viam/graph/Node.java b/vadl/main/vadl/viam/graph/Node.java index c009ad1fc..40aa273c0 100644 --- a/vadl/main/vadl/viam/graph/Node.java +++ b/vadl/main/vadl/viam/graph/Node.java @@ -114,9 +114,7 @@ public void setSourceLocationRecursively(SourceLocation sourceLocation) { return; } this.sourceLocation = sourceLocation; - for (Node input : inputList()) { - input.setSourceLocationRecursively(sourceLocation); - } + forEachInput(input -> input.setSourceLocationRecursively(sourceLocation)); if (this instanceof ControlNode controlNode) { var predecessor = controlNode.predecessor(); if (predecessor != null) { @@ -136,7 +134,12 @@ public final boolean isLeaf() { return false; } - return inputList().isEmpty(); + try { + forEachInput(i -> {throw FoundSignal.INSTANCE;}); + return true; + } catch (FoundSignal ignored) { + return false; + } } /** @@ -154,20 +157,39 @@ public final Stream input(Class clazz) { } /** - * Collects all successors in the provided list. + * Collects all inputs in the provided list. * *

IMPORTANT: *

  • This must be overridden by every node that has inputs * (annotated with {@link vadl.javaannotations.viam.Input}).
  • - *
  • The subclass must call {@code super.collectInputs(collection)} before + *
  • The subclass must call {@code super.forEachInput(consumer)} before * adding its own inputs!
  • - *
  • Optional successors must only be added if they are non-null
  • + *
  • Optional inputs must only be added if they are non-null
  • * - * @param collection to add the successors to. + * @param consumer to add the inputs to. */ - protected void collectInputs(List collection) { /* nothing to add */ + protected void forEachInput(Consumer consumer) { /* nothing to add */ + } + + private static class FoundSignal extends RuntimeException { + @SuppressWarnings("StaticAssignmentOfThrowable") + static final FoundSignal INSTANCE = new FoundSignal(); + + private FoundSignal() { + super(null, null, false, false); + } } + public final boolean containsInput(Node needle) { + try { + forEachInput(input -> {if (input.equals(needle)) + throw FoundSignal.INSTANCE; + }); + return false; + } catch (FoundSignal signal) { + return true; + } + } /** * Collects all successors in the provided list and it's children's successors. @@ -176,7 +198,7 @@ protected void collectInputs(List collection) { /* nothing to add */ */ public final void collectInputsWithChildren(List collection) { var sublist = new ArrayList(); - this.collectInputs(sublist); + this.forEachInput(sublist::add); collection.addAll(sublist); // Only iterate over the newly visited inputs and ignore the rest. @@ -192,7 +214,7 @@ public final void collectInputsWithChildren(List collection) { */ public final void collectInputsWithChildren(List collection, Class clazz) { var sublist = new ArrayList(); - this.collectInputs(sublist); + this.forEachInput(sublist::add); collection.addAll( sublist.stream() .filter(clazz::isInstance) @@ -205,7 +227,7 @@ public final void collectInputsWithChildren(List collection, Class cla protected final List inputList() { var collection = new ArrayList(); - collectInputs(collection); + forEachInput(collection::add); return collection; } @@ -218,24 +240,24 @@ public final Stream successors() { /** - * Collects all successors in the provided list. + * Applies a consumer to all successors. * *

    IMPORTANT: *

  • This must be overridden by every node that has successors * (annotated with {@link vadl.javaannotations.viam.Successor})
  • - *
  • The subclass must call {@code super.collectSuccessors(collection)} before + *
  • The subclass must call {@code super.forEachSuccessor(consumer)} before * adding its own successors!
  • *
  • Optional successors must only be added if they are non-null
  • * - * @param collection to add the successors to. + * @param consumer to apply to the successors. */ - protected void collectSuccessors(List collection) { /* nothing to add */ + protected void forEachSuccessor(Consumer consumer) { /* nothing to add */ } protected final List successorList() { var collection = new ArrayList(); - collectSuccessors(collection); + forEachSuccessor(collection::add); return collection; } @@ -433,9 +455,7 @@ public final void applyOnSuccessors(GraphVisitor.Applier visitor) { * @param visitor the visitor that gets visited */ public final void visitInputs(GraphVisitor visitor) { - for (var input : inputs().toList()) { - visitor.visit(this, input); - } + forEachInput(input -> visitor.visit(this, input)); } /** @@ -444,9 +464,7 @@ public final void visitInputs(GraphVisitor visitor) { * @param visitor the visitor that gets visited */ public final void visitSuccessors(GraphVisitor visitor) { - for (var succ : successors().toList()) { - visitor.visit(this, succ); - } + forEachSuccessor(succ -> visitor.visit(this, succ)); } /** @@ -456,8 +474,8 @@ public final void visitSuccessors(GraphVisitor visitor) { protected void initialize(Graph graph) { graph.include(this); this.graph = graph; - inputs().forEach(e -> e.addUsage(this)); - successors().forEach(e -> e.setPredecessor(this)); + forEachInput(e -> e.addUsage(this)); + forEachSuccessor(e -> e.setPredecessor(this)); } /** @@ -808,7 +826,7 @@ private void clearInputsUsageOfThis() { */ private void clearSuccessorsUsageOfThis() { ensure(isActive(), "node must be active on successor clear"); - successors().forEach(e -> e.setPredecessor(null)); + forEachSuccessor(e -> e.setPredecessor(null)); } /// GRAPH VERIFICATION METHODS @@ -875,15 +893,11 @@ public void accept(T visitor) { } private void verifyAllEdges() { - for (var input : inputList()) { - verifyInput(input); - } + forEachInput(this::verifyInput); for (var usage : usages) { verifyUsage(usage); } - for (var successor : successorList()) { - verifySuccessor(successor); - } + forEachSuccessor(this::verifySuccessor); verifyPredecessor(); } @@ -926,9 +940,7 @@ private void verifyUsage(Node usage) { ensure(usage.isActive(), "usage is not active %s", usage); ensure(usage.graph() == graph, "usage is in other graph %s", usage); - var usageContainsThis = usage - .inputList() - .contains(this); + var usageContainsThis = usage.containsInput(this); ensure(usageContainsThis, "user does not contain this node as input %s", usage); } @@ -1030,7 +1042,7 @@ private Id() { * a different graph. * * @deprecated as it leaves the node in an inconsistent state within the graph. - * Take a look at {@link Graph#deinitializeNodes()} for more information. + * Take a look at {@link Graph()} for more information. */ @Deprecated public void deactivate() { diff --git a/vadl/main/vadl/viam/graph/NodeList.java b/vadl/main/vadl/viam/graph/NodeList.java index 327b963db..42b44c5f8 100644 --- a/vadl/main/vadl/viam/graph/NodeList.java +++ b/vadl/main/vadl/viam/graph/NodeList.java @@ -43,7 +43,7 @@ public NodeList(@Nonnull Collection c) { @SafeVarargs public NodeList(@Nonnull T... c) { - this(Arrays.stream(c).toList()); + super(Arrays.asList(c)); } /** diff --git a/vadl/main/vadl/viam/graph/control/AbstractEndNode.java b/vadl/main/vadl/viam/graph/control/AbstractEndNode.java index 4aa18bf8e..62609993e 100644 --- a/vadl/main/vadl/viam/graph/control/AbstractEndNode.java +++ b/vadl/main/vadl/viam/graph/control/AbstractEndNode.java @@ -17,6 +17,7 @@ package vadl.viam.graph.control; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphVisitor; @@ -62,9 +63,9 @@ public DirectionalNode predecessor() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(sideEffects); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + sideEffects.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/control/ControlSplitNode.java b/vadl/main/vadl/viam/graph/control/ControlSplitNode.java index c9cdcc83a..b226251d6 100644 --- a/vadl/main/vadl/viam/graph/control/ControlSplitNode.java +++ b/vadl/main/vadl/viam/graph/control/ControlSplitNode.java @@ -17,7 +17,7 @@ package vadl.viam.graph.control; import com.google.errorprone.annotations.concurrent.LazyInit; -import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Successor; import vadl.viam.graph.GraphVisitor; @@ -69,9 +69,9 @@ public DirectionalNode predecessor() { } @Override - protected void collectSuccessors(List collection) { - super.collectSuccessors(collection); - collection.addAll(branches); + protected void forEachSuccessor(Consumer consumer) { + super.forEachSuccessor(consumer); + branches.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/control/DirectionalNode.java b/vadl/main/vadl/viam/graph/control/DirectionalNode.java index 16ecd71e9..bb15a1ddc 100644 --- a/vadl/main/vadl/viam/graph/control/DirectionalNode.java +++ b/vadl/main/vadl/viam/graph/control/DirectionalNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; import vadl.javaannotations.viam.Successor; @@ -149,10 +149,10 @@ public ControlNode next() { } @Override - public void collectSuccessors(List collection) { - super.collectSuccessors(collection); + public void forEachSuccessor(Consumer consumer) { + super.forEachSuccessor(consumer); if (this.next != null) { - collection.add(next); + consumer.accept(next); } } diff --git a/vadl/main/vadl/viam/graph/control/ForallNode.java b/vadl/main/vadl/viam/graph/control/ForallNode.java index 59984ba84..4d266f3ec 100644 --- a/vadl/main/vadl/viam/graph/control/ForallNode.java +++ b/vadl/main/vadl/viam/graph/control/ForallNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; import vadl.viam.graph.GraphVisitor; @@ -81,9 +81,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(idx); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(idx); } @Override diff --git a/vadl/main/vadl/viam/graph/control/IfNode.java b/vadl/main/vadl/viam/graph/control/IfNode.java index 211b333f2..7f3c90a43 100644 --- a/vadl/main/vadl/viam/graph/control/IfNode.java +++ b/vadl/main/vadl/viam/graph/control/IfNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; import vadl.viam.graph.GraphVisitor; @@ -88,9 +88,9 @@ public String toString() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(condition); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(condition); } @Override diff --git a/vadl/main/vadl/viam/graph/control/InstrCallNode.java b/vadl/main/vadl/viam/graph/control/InstrCallNode.java index 6effc8a57..178427d2a 100644 --- a/vadl/main/vadl/viam/graph/control/InstrCallNode.java +++ b/vadl/main/vadl/viam/graph/control/InstrCallNode.java @@ -18,6 +18,7 @@ import com.google.common.collect.Streams; import java.util.List; +import java.util.function.Consumer; import java.util.stream.IntStream; import java.util.stream.Stream; import vadl.javaannotations.viam.DataValue; @@ -192,9 +193,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(arguments); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + arguments.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/control/MergeNode.java b/vadl/main/vadl/viam/graph/control/MergeNode.java index 2e7d3ff3a..a1e192909 100644 --- a/vadl/main/vadl/viam/graph/control/MergeNode.java +++ b/vadl/main/vadl/viam/graph/control/MergeNode.java @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import java.util.stream.Collectors; import vadl.javaannotations.viam.Input; import vadl.utils.GraphUtils; @@ -75,9 +75,9 @@ public ControlSplitNode controlSplit() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(branchEnds); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + branchEnds.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/control/NewLabelNode.java b/vadl/main/vadl/viam/graph/control/NewLabelNode.java index de29648dd..5104beafb 100644 --- a/vadl/main/vadl/viam/graph/control/NewLabelNode.java +++ b/vadl/main/vadl/viam/graph/control/NewLabelNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.PseudoInstruction; import vadl.viam.graph.GraphNodeVisitor; @@ -37,9 +37,9 @@ public NewLabelNode(LabelNode label) { } @Override - public void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(label); + public void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(label); } @Override diff --git a/vadl/main/vadl/viam/graph/control/ReturnNode.java b/vadl/main/vadl/viam/graph/control/ReturnNode.java index d1622671a..57cd961fd 100644 --- a/vadl/main/vadl/viam/graph/control/ReturnNode.java +++ b/vadl/main/vadl/viam/graph/control/ReturnNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.Type; import vadl.viam.graph.GraphNodeVisitor; @@ -54,9 +54,9 @@ protected void applyOnInputsUnsafe(GraphVisitor.Applier visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/viam/graph/control/ScheduledNode.java b/vadl/main/vadl/viam/graph/control/ScheduledNode.java index 7f6965844..2538a9a50 100644 --- a/vadl/main/vadl/viam/graph/control/ScheduledNode.java +++ b/vadl/main/vadl/viam/graph/control/ScheduledNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.control; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; import vadl.viam.graph.GraphVisitor; @@ -62,9 +62,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(node); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(node); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/AbstractFunctionCallNode.java b/vadl/main/vadl/viam/graph/dependency/AbstractFunctionCallNode.java index 5e2ca686d..32cf12dc0 100644 --- a/vadl/main/vadl/viam/graph/dependency/AbstractFunctionCallNode.java +++ b/vadl/main/vadl/viam/graph/dependency/AbstractFunctionCallNode.java @@ -16,7 +16,7 @@ package vadl.viam.graph.dependency; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.Type; import vadl.viam.graph.GraphVisitor; @@ -56,9 +56,9 @@ protected boolean hasConstantArgs() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(args); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + args.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/DynSliceNode.java b/vadl/main/vadl/viam/graph/dependency/DynSliceNode.java index 9e56ef772..4f4b8d7c5 100644 --- a/vadl/main/vadl/viam/graph/dependency/DynSliceNode.java +++ b/vadl/main/vadl/viam/graph/dependency/DynSliceNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.dependency; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.DataType; import vadl.viam.Constant; @@ -86,11 +86,11 @@ public DataType type() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); - collection.add(msb); - collection.add(lsb); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); + consumer.accept(msb); + consumer.accept(lsb); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/FoldNode.java b/vadl/main/vadl/viam/graph/dependency/FoldNode.java index 9c282dd55..2bfe28807 100644 --- a/vadl/main/vadl/viam/graph/dependency/FoldNode.java +++ b/vadl/main/vadl/viam/graph/dependency/FoldNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.types.DataType; @@ -98,10 +99,10 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(idx); - collection.add(body); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(idx); + consumer.accept(body); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/LetNode.java b/vadl/main/vadl/viam/graph/dependency/LetNode.java index bf7829f14..9f1206c82 100644 --- a/vadl/main/vadl/viam/graph/dependency/LetNode.java +++ b/vadl/main/vadl/viam/graph/dependency/LetNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.utils.SourceLocation; @@ -67,9 +68,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(expression); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(expression); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/OperationExistsNode.java b/vadl/main/vadl/viam/graph/dependency/OperationExistsNode.java index 59989beba..ec6b844f9 100644 --- a/vadl/main/vadl/viam/graph/dependency/OperationExistsNode.java +++ b/vadl/main/vadl/viam/graph/dependency/OperationExistsNode.java @@ -17,8 +17,8 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.types.Type; @@ -88,11 +88,11 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); if (this.body != null) { - collection.add(body); + consumer.accept(body); } } diff --git a/vadl/main/vadl/viam/graph/dependency/OperationForAllNode.java b/vadl/main/vadl/viam/graph/dependency/OperationForAllNode.java index 32f052e7d..e0a3adb20 100644 --- a/vadl/main/vadl/viam/graph/dependency/OperationForAllNode.java +++ b/vadl/main/vadl/viam/graph/dependency/OperationForAllNode.java @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.types.Type; @@ -71,10 +72,10 @@ public Node shallowCopy() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); - collection.add(body); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); + consumer.accept(body); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/ProcCallNode.java b/vadl/main/vadl/viam/graph/dependency/ProcCallNode.java index 3596fecfa..7c85400b3 100644 --- a/vadl/main/vadl/viam/graph/dependency/ProcCallNode.java +++ b/vadl/main/vadl/viam/graph/dependency/ProcCallNode.java @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import java.util.stream.IntStream; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; @@ -101,9 +102,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(arguments); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + arguments.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/ReadResourceNode.java b/vadl/main/vadl/viam/graph/dependency/ReadResourceNode.java index c43e28955..c23236d96 100644 --- a/vadl/main/vadl/viam/graph/dependency/ReadResourceNode.java +++ b/vadl/main/vadl/viam/graph/dependency/ReadResourceNode.java @@ -19,6 +19,7 @@ import com.google.common.collect.Streams; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.types.DataType; @@ -98,9 +99,9 @@ public void verifyState() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/SelectNode.java b/vadl/main/vadl/viam/graph/dependency/SelectNode.java index abd6f58e7..c715b56eb 100644 --- a/vadl/main/vadl/viam/graph/dependency/SelectNode.java +++ b/vadl/main/vadl/viam/graph/dependency/SelectNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.dependency; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.BoolType; import vadl.types.Type; @@ -65,11 +65,11 @@ public SelectNode(Type type, ExpressionNode condition, ExpressionNode trueCase, } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(condition); - collection.add(trueCase); - collection.add(falseCase); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(condition); + consumer.accept(trueCase); + consumer.accept(falseCase); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/SideEffectNode.java b/vadl/main/vadl/viam/graph/dependency/SideEffectNode.java index 132cb0bbd..20c99fe1f 100644 --- a/vadl/main/vadl/viam/graph/dependency/SideEffectNode.java +++ b/vadl/main/vadl/viam/graph/dependency/SideEffectNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.dependency; -import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.types.Type; @@ -76,10 +76,10 @@ public void setCondition(@Nullable ExpressionNode condition) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); if (this.condition != null) { - collection.add(condition); + consumer.accept(condition); } } diff --git a/vadl/main/vadl/viam/graph/dependency/SliceNode.java b/vadl/main/vadl/viam/graph/dependency/SliceNode.java index 9a4e73aa2..3d2d30dd7 100644 --- a/vadl/main/vadl/viam/graph/dependency/SliceNode.java +++ b/vadl/main/vadl/viam/graph/dependency/SliceNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; import vadl.types.DataType; @@ -95,9 +96,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/StageEffectNode.java b/vadl/main/vadl/viam/graph/dependency/StageEffectNode.java index e78bcf1da..c7aaa2119 100644 --- a/vadl/main/vadl/viam/graph/dependency/StageEffectNode.java +++ b/vadl/main/vadl/viam/graph/dependency/StageEffectNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphVisitor; @@ -50,9 +51,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(miaCall); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(miaCall); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/StructGetFieldNode.java b/vadl/main/vadl/viam/graph/dependency/StructGetFieldNode.java index 8decb26cd..e16e2cb01 100644 --- a/vadl/main/vadl/viam/graph/dependency/StructGetFieldNode.java +++ b/vadl/main/vadl/viam/graph/dependency/StructGetFieldNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import org.apache.commons.lang3.StringUtils; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -84,9 +85,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(expression); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(expression); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/TensorNode.java b/vadl/main/vadl/viam/graph/dependency/TensorNode.java index 72e97dbe5..c2acc8f3e 100644 --- a/vadl/main/vadl/viam/graph/dependency/TensorNode.java +++ b/vadl/main/vadl/viam/graph/dependency/TensorNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.dependency; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.DataType; import vadl.types.Type; @@ -82,10 +82,10 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(idx); - collection.add(body); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(idx); + consumer.accept(body); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/UnaryNode.java b/vadl/main/vadl/viam/graph/dependency/UnaryNode.java index 3eb6933a2..1fdd76563 100644 --- a/vadl/main/vadl/viam/graph/dependency/UnaryNode.java +++ b/vadl/main/vadl/viam/graph/dependency/UnaryNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ package vadl.viam.graph.dependency; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.types.Type; import vadl.viam.graph.GraphVisitor; @@ -77,9 +77,9 @@ public void replaceByNothingAndDelete() { @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/WriteResourceNode.java b/vadl/main/vadl/viam/graph/dependency/WriteResourceNode.java index 3c9da11eb..48ae7f252 100644 --- a/vadl/main/vadl/viam/graph/dependency/WriteResourceNode.java +++ b/vadl/main/vadl/viam/graph/dependency/WriteResourceNode.java @@ -17,8 +17,8 @@ package vadl.viam.graph.dependency; import com.google.common.collect.Streams; -import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.Input; import vadl.types.DataType; @@ -133,10 +133,10 @@ public void verifyState() { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(indices); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + indices.forEach(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/viam/graph/dependency/WriteStageOutputNode.java b/vadl/main/vadl/viam/graph/dependency/WriteStageOutputNode.java index 98c8d6f6b..3d205173e 100644 --- a/vadl/main/vadl/viam/graph/dependency/WriteStageOutputNode.java +++ b/vadl/main/vadl/viam/graph/dependency/WriteStageOutputNode.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.graph.dependency; import java.util.List; +import java.util.function.Consumer; import javax.annotation.Nullable; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -93,9 +94,9 @@ protected void collectData(List collection) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(value); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(value); } @Override diff --git a/vadl/main/vadl/viam/passes/sideEffectScheduling/nodes/InstrExitNode.java b/vadl/main/vadl/viam/passes/sideEffectScheduling/nodes/InstrExitNode.java index f855d6b6e..0efb794e0 100644 --- a/vadl/main/vadl/viam/passes/sideEffectScheduling/nodes/InstrExitNode.java +++ b/vadl/main/vadl/viam/passes/sideEffectScheduling/nodes/InstrExitNode.java @@ -16,7 +16,7 @@ package vadl.viam.passes.sideEffectScheduling.nodes; -import java.util.List; +import java.util.function.Consumer; import vadl.javaannotations.viam.Input; import vadl.viam.graph.GraphNodeVisitor; import vadl.viam.graph.GraphVisitor; @@ -86,9 +86,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(cause); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(cause); } @Override @@ -144,9 +144,9 @@ public void accept(T visitor) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(cause); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(cause); } @Override diff --git a/vadl/test/vadl/viam/helper/TestNodes.java b/vadl/test/vadl/viam/helper/TestNodes.java index 0bb664b24..f3751c680 100644 --- a/vadl/test/vadl/viam/helper/TestNodes.java +++ b/vadl/test/vadl/viam/helper/TestNodes.java @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText : © 2025 TU Wien +// SPDX-FileCopyrightText : © 2025-2026 TU Wien // SPDX-License-Identifier: GPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ package vadl.viam.helper; import java.util.List; +import java.util.function.Consumer; import java.util.stream.Collectors; import vadl.javaannotations.viam.DataValue; import vadl.javaannotations.viam.Input; @@ -110,9 +111,9 @@ public WithInput(Node input) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(input); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(input); } @Override @@ -164,9 +165,9 @@ public WithSuccessor(Node successor) { } @Override - protected void collectSuccessors(List collection) { - super.collectSuccessors(collection); - collection.add(successor); + protected void forEachSuccessor(Consumer consumer) { + super.forEachSuccessor(consumer); + consumer.accept(successor); } @Override @@ -212,10 +213,10 @@ public WithTwoInputs(Node input1, Node input2) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.add(input1); - collection.add(input2); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + consumer.accept(input1); + consumer.accept(input2); } @Override @@ -267,9 +268,9 @@ public WithNodeListInput(NodeList inputs) { } @Override - protected void collectInputs(List collection) { - super.collectInputs(collection); - collection.addAll(inputs); + protected void forEachInput(Consumer consumer) { + super.forEachInput(consumer); + inputs.forEach(consumer); } @Override