// Path: src/main/java/com/shapesecurity/shift/es2017/semantics/asg/Node.java
// public interface Node {
// 
// 	default boolean equalsIgnoringChildren(@Nonnull Node node) {
// 		return node.getClass() == this.getClass();
// 	}
// 
// }


import com.shapesecurity.functional.data.ConcatList;
import com.shapesecurity.functional.data.ImmutableList;
import com.shapesecurity.functional.data.Monoid;
import com.shapesecurity.shift.es2017.semantics.asg.Node;
import javax.annotation.Nonnull;
package com.shapesecurity.shift.es2017.semantics.visitor;



// order not defined, but is deterministic
public final class GetDescendents extends MonoidalReducer<ConcatList<Node>> {

	public static ImmutableList<Node> getDescendants(@Nonnull Node node) {
// Path: src/main/java/com/shapesecurity/shift/es2017/semantics/asg/Node.java
// public interface Node {
// 
// 	default boolean equalsIgnoringChildren(@Nonnull Node node) {
// 		return node.getClass() == this.getClass();
// 	}
// 
// }


// Path: src/main/java/com/shapesecurity/shift/es2017/semantics/visitor/GetDescendents.java
import com.shapesecurity.functional.data.ConcatList;
import com.shapesecurity.functional.data.ImmutableList;
import com.shapesecurity.functional.data.Monoid;
import com.shapesecurity.shift.es2017.semantics.asg.Node;
import javax.annotation.Nonnull;

package com.shapesecurity.shift.es2017.semantics.visitor;



// order not defined, but is deterministic
public final class GetDescendents extends MonoidalReducer<ConcatList<Node>> {

	public static ImmutableList<Node> getDescendants(@Nonnull Node node) {
		return new Director<>(new GetDescendents()).reduceNode(node).toList();