package st.gravel.support.compiler.ast;
/*
This file is automatically generated from typed smalltalk source. Do not edit by hand.
(C) AG5.com
*/
import java.math.BigInteger;
import st.gravel.support.jvm.NonLocalReturn;
import st.gravel.support.compiler.ast.Node;
import st.gravel.support.compiler.ast.Node.Node_Factory;
import st.gravel.support.compiler.ast.PackageNode;
import st.gravel.support.compiler.ast.NodeVisitor;
import st.gravel.support.compiler.ast.Reference;
import st.gravel.support.compiler.ast.ClassNode;
import st.gravel.support.compiler.ast.NamespaceNode;
import st.gravel.support.compiler.ast.SourcePrinter;
import st.gravel.support.compiler.ast.SourcePosition;
public class SystemDefinitionNode extends Node implements Cloneable {
public static SystemDefinitionNode_Factory factory = new SystemDefinitionNode_Factory();
PackageNode[] _packageNodes;
public static class SystemDefinitionNode_Factory extends Node_Factory {
public SystemDefinitionNode basicNew() {
SystemDefinitionNode newInstance = new SystemDefinitionNode();
newInstance.initialize();
return newInstance;
}
public SystemDefinitionNode packageNodes_(final PackageNode[] _anArray) {
return ((SystemDefinitionNode) this.basicNew().initializePackageNodes_(_anArray));
}
}
static public SystemDefinitionNode _packageNodes_(Object receiver, final PackageNode[] _anArray) {
return factory.packageNodes_(_anArray);
}
@Override
public <X> X accept_(final NodeVisitor<X> _visitor) {
return _visitor.visitSystemDefinitionNode_(this);
}
@Override
public SystemDefinitionNode allNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
return _each.withAllNodesDo_(_aBlock);
}
});
return this;
}
@Override
public SystemDefinitionNode allNodesDo_pruneWhere_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock, final st.gravel.support.jvm.Block1<Boolean, Node> _pruneBlock) {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
if (!_pruneBlock.value_(_each)) {
return _each.withAllNodesDo_pruneWhere_(_aBlock, _pruneBlock);
}
return SystemDefinitionNode.this;
}
});
return this;
}
public ClassNode classNodeAt_ifAbsent_(final Reference _reference, final st.gravel.support.jvm.Block0<ClassNode> _aBlock) {
final ClassNode[] _cn;
_cn = new ClassNode[1];
for (final PackageNode _each : _packageNodes) {
_cn[0] = _each.classNodeAt_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<ClassNode>) (new st.gravel.support.jvm.Block0<ClassNode>() {
@Override
public ClassNode value() {
return (ClassNode) null;
}
})));
if (_cn[0] != null) {
return _cn[0];
}
}
return _aBlock.value();
}
public SystemDefinitionNode copy() {
try {
SystemDefinitionNode _temp1 = (SystemDefinitionNode) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public SystemDefinitionNode copyUpdatePackage_do_(final st.gravel.core.Symbol _packageName, final st.gravel.support.jvm.Block1<PackageNode, PackageNode> _aBlock) {
final int _idx;
final PackageNode _updatedPackage;
_idx = st.gravel.support.jvm.ArrayExtensions.indexWhere_(_packageNodes, new st.gravel.support.jvm.Predicate1<PackageNode>() {
@Override
public boolean value_(final PackageNode _pkg) {
return st.gravel.support.jvm.ObjectExtensions.equals_(_pkg.name(), _packageName);
}
});
_updatedPackage = _aBlock.value_(_packageNodes[_idx - 1]);
return this.copy().pvtSetPackageNodes_(st.gravel.support.jvm.ArrayExtensions.copyAt_put_(_packageNodes, _idx, _updatedPackage));
}
public SystemDefinitionNode_Factory factory() {
return factory;
}
public SystemDefinitionNode initializePackageNodes_(final PackageNode[] _anArray) {
_packageNodes = _anArray;
this.initialize();
return this;
}
@Override
public SystemDefinitionNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) {
return this;
}
@Override
public SystemDefinitionNode nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
for (final PackageNode _temp1 : _packageNodes) {
_aBlock.value_(_temp1);
}
return this;
}
public st.gravel.core.Symbol[] packageNames() {
return st.gravel.support.jvm.ArrayExtensions.collect_(_packageNodes, ((st.gravel.support.jvm.Block1<st.gravel.core.Symbol, PackageNode>) (new st.gravel.support.jvm.Block1<st.gravel.core.Symbol, PackageNode>() {
@Override
public st.gravel.core.Symbol value_(final PackageNode _each) {
return (st.gravel.core.Symbol) _each.name();
}
})));
}
public PackageNode[] packageNodes() {
return _packageNodes;
}
@Override
public SystemDefinitionNode prettySourceOn_(final StringBuilder _aStream) {
SourcePrinter.factory.on_(_aStream).visit_(this);
return this;
}
@Override
public SystemDefinitionNode printOn_(final StringBuilder _aStream) {
final String _title;
_title = this.factory().toString();
_aStream.append(st.gravel.support.jvm.CharacterExtensions.isVowel(_title.charAt(0)) ? "an " : "a ");
_aStream.append(_title);
_aStream.append('[');
this.sourceOn_(_aStream);
_aStream.append(']');
return this;
}
public SystemDefinitionNode pvtSetPackageNodes_(final PackageNode[] _anArray) {
_packageNodes = _anArray;
return this;
}
@Override
public SystemDefinitionNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) {
_sourcePosition = _aSourcePosition;
return this;
}
@Override
public SystemDefinitionNode sourceOn_(final StringBuilder _aStream) {
return this;
}
@Override
public SystemDefinitionNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
_aBlock.value_(this);
this.allNodesDo_(_aBlock);
return this;
}
@Override
public SystemDefinitionNode withAllNodesDo_pruneWhere_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock, final st.gravel.support.jvm.Block1<Boolean, Node> _pruneBlock) {
_aBlock.value_(this);
this.allNodesDo_pruneWhere_(_aBlock, _pruneBlock);
return this;
}
public SystemDefinitionNode withPackageNamed_classNode_(final st.gravel.core.Symbol _packageName, final ClassNode _aClassNode) {
return this.withPackageNode_(PackageNode.factory.name_classes_namespaces_(_packageName, st.gravel.support.jvm.ArrayFactory.with_(_aClassNode), new NamespaceNode[] {}));
}
public SystemDefinitionNode withPackageNode_(final PackageNode _aPackageNode) {
return this.copy().pvtSetPackageNodes_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_packageNodes, _aPackageNode));
}
@Override
public SystemDefinitionNode withSourcePosition_(final SourcePosition _aSourcePosition) {
if (_sourcePosition == _aSourcePosition) {
return SystemDefinitionNode.this;
}
return this.copy().pvtSetSourcePosition_(_aSourcePosition);
}
}